Current section
Files
Jump to
Current section
Files
lib/elixir_v8.ex
defmodule ElixirV8 do
use Application
def start(_type, _args) do
ElixirV8.Supervisor.start_link()
end
def stop(_state) do
:ok
end
def start do
:application.start(__MODULE__)
end
def stop do
:application.stop(__MODULE__)
end
def create_pool(pool_name, size) do
ElixirV8.Supervisor.create_pool(pool_name, size, [])
end
def create_pool(pool_name, size, args) do
ElixirV8.Supervisor.create_pool(pool_name, size, args)
end
def delete_pool(pool_name) do
ElixirV8.Supervisor.delete_pool(pool_name)
end
def eval(pool_name, source) do
eval(pool_name, source, timeout())
end
def eval(pool_name, source, timeout) do
:poolboy.transaction(pool_name, fn(vm) ->
ElixirV8.VM.eval(vm, source, timeout)
end)
end
def eval_function(pool_name, source, args) do
eval_function(pool_name, source, args, timeout())
end
def eval_function(pool_name, source, args, timeout) do
f = fn(worker) ->
js_args = case JSX.encode(args) do
{ :ok, data } -> data
{ :error, _ } -> []
end
js_function = "(function(){ var data = arguments[0]; " <> source <> "}).apply(null, " <> js_args <> ");"
ElixirV8.VM.eval(worker, js_function, timeout)
end
:poolboy.transaction(pool_name, f)
end
defp timeout do
5000
end
end