class SpreadBeaver::Runner

Constants

QUEUE_KEY

Public Class Methods

exec(module_name, props) click to toggle source
# File lib/spread_beaver/runner.rb, line 13
def self.exec module_name, props
  @@pool.with do |r|
    r.exec module_name, props
  end
end
queue(module_name, props) click to toggle source
# File lib/spread_beaver/runner.rb, line 19
def self.queue module_name, props
  if RequestStore.store[QUEUE_KEY].nil?
    RequestStore.store[QUEUE_KEY] = []
  end
  RequestStore.store[QUEUE_KEY].push module_name: module_name, props: props
end
setup!(bundle, opts={size: 10, timeout: 20}) click to toggle source
# File lib/spread_beaver/runner.rb, line 7
def self.setup! bundle, opts={size: 10, timeout: 20}
  @@bundle = bundle
  @@pool.shutdown{} if @@pool
  @@pool = ConnectionPool.new(opts) { self.new }
end

Public Instance Methods

exec(module_name, props) click to toggle source
# File lib/spread_beaver/runner.rb, line 26
def exec module_name, props
  js_code = "(function() {"
  js_code += initialize_script if !initialize_script.nil?
  if !RequestStore.store[self.class::QUEUE_KEY].nil?
    RequestStore.store[self.class::QUEUE_KEY].each do |store|
      str = exec_queued_module store[:module_name], store[:props]
      js_code += str if !str.nil?
    end
  end
  js_code += "return #{exec_module module_name, props}"
  js_code += "})()"
  context.eval(js_code).html_safe
end

Private Instance Methods

context() click to toggle source
# File lib/spread_beaver/runner.rb, line 42
    def context
      @context ||= ExecJS.compile <<-JS
        var global = {};
        #{@@bundle}
      JS
    end
exec_module(module_name, props) click to toggle source
# File lib/spread_beaver/runner.rb, line 59
def exec_module module_name, props
  raise "Override this."
end
exec_queued_module(module_name, props) click to toggle source
# File lib/spread_beaver/runner.rb, line 54
def exec_queued_module module_name, props
  #Override this.
  nil
end
initialize_script() click to toggle source
# File lib/spread_beaver/runner.rb, line 49
def initialize_script
  #Override this.
  nil
end
props_to_s(props) click to toggle source
# File lib/spread_beaver/runner.rb, line 63
def props_to_s props
  if props.is_a? String
    props
  else
    props.to_json
  end
end