Class: React::Renderer
- Inherits:
-
Object
- Object
- React::Renderer
- Defined in:
- lib/react/renderer.rb
Defined Under Namespace
Classes: PrerenderError
Class Method Summary collapse
- .react_props(args = {}) ⇒ Object
- .render(component, args = {}) ⇒ Object
- .setup!(react_js, components_js, replay_console, args = {}) ⇒ Object
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! = {:size =>10, :timeout => 20} @@pool = ConnectionPool.new(.merge(args)) { self.new } end |
Instance Method Details
#context ⇒ Object
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 |