Class: React::Renderer

Inherits:
Object
  • Object
show all
Defined in:
lib/react/renderer.rb

Defined Under Namespace

Classes: PrerenderError

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.react_props(args = {}) ⇒ Object



33
34
35
36
37
38
39
# File 'lib/react/renderer.rb', line 33

def self.react_props(args={})
  if args.is_a? String
    args
  else
    args.to_json
  end
end

.render(component, args = {}) ⇒ Object



27
28
29
30
31
# File 'lib/react/renderer.rb', line 27

def self.render(component, args={})
  @@pool.with do |renderer|
    renderer.render(component, args)
  end
end

.setup!(react_js, components_js, replay_console, args = {}) ⇒ Object



16
17
18
19
20
21
22
23
24
25
# File 'lib/react/renderer.rb', line 16

def self.setup!(react_js, components_js, replay_console, args={})
  args.assert_valid_keys(:size, :timeout)
  @@react_js = react_js
  @@components_js = components_js
  @@replay_console = replay_console
  @@pool.shutdown{} if @@pool
  reset_combined_js!
  default_pool_options = {:size =>10, :timeout => 20}
  @@pool = ConnectionPool.new(default_pool_options.merge(args)) { self.new }
end

Instance Method Details

#contextObject



41
42
43
# File 'lib/react/renderer.rb', line 41

def context
  @context ||= ExecJS.compile(self.class.combined_js)
end

#render(component, args = {}) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/react/renderer.rb', line 45

def render(component, args={})
  react_props = React::Renderer.react_props(args)
  jscode = <<-JS
    (function () {
      var result = React.renderToString(React.createElement(#{component}, #{react_props}));
      #{@@replay_console ? React::Console.replay_as_script_js : ''}
      return result;
    })()
  JS
  context.eval(jscode).html_safe
rescue ExecJS::ProgramError => e
  raise PrerenderError.new(component, react_props, e)
end