From 9f0acb0e089c8a2499f60be33e56048eec075f83 Mon Sep 17 00:00:00 2001 From: Vipul A M Date: Sun, 19 Oct 2014 18:43:09 +0530 Subject: [PATCH 1/2] - Rearrange `React::Renderer` methods and move non-public methods to private - Make use of `default_pool_options` hash, instead of hard-coding magic numbers when initializing `ConnectionPool` --- lib/react/renderer.rb | 53 +++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/lib/react/renderer.rb b/lib/react/renderer.rb index a8909f943..05f5bb131 100644 --- a/lib/react/renderer.rb +++ b/lib/react/renderer.rb @@ -18,7 +18,8 @@ def self.setup!(react_js, components_js, args={}) @@components_js = components_js @@pool.shutdown{} if @@pool reset_combined_js! - @@pool = ConnectionPool.new(:size => args[:size]||10, :timeout => args[:timeout]||20) { self.new } + default_pool_options = {:size =>10, :timeout => 20} + @@pool = ConnectionPool.new(default_pool_options.merge(args)) { self.new } end def self.render(component, args={}) @@ -27,6 +28,33 @@ def self.render(component, args={}) end end + def self.react_props(args={}) + if args.is_a? String + args + else + args.to_json + end + end + + def context + @context ||= ExecJS.compile(self.class.combined_js) + end + + def render(component, args={}) + react_props = React::Renderer.react_props(args) + jscode = <<-JS + function() { + return React.renderToString(React.createElement(#{component}, #{react_props})); + }() + JS + context.eval(jscode).html_safe + rescue ExecJS::ProgramError => e + raise PrerenderError.new(component, react_props, e) + end + + + private + def self.setup_combined_js <<-CODE var global = global || this; @@ -54,28 +82,5 @@ def self.combined_js @@combined_js end - def self.react_props(args={}) - if args.is_a? String - args - else - args.to_json - end - end - - def context - @context ||= ExecJS.compile(self.class.combined_js) - end - - def render(component, args={}) - react_props = React::Renderer.react_props(args) - jscode = <<-JS - function() { - return React.renderToString(React.createElement(#{component}, #{react_props})); - }() - JS - context.eval(jscode).html_safe - rescue ExecJS::ProgramError => e - raise PrerenderError.new(component, react_props, e) - end end end From dbecefa1e4db877e92362af621757b737f44e19a Mon Sep 17 00:00:00 2001 From: Vipul A M Date: Sun, 19 Oct 2014 18:44:07 +0530 Subject: [PATCH 2/2] - Use hash.except! instead of manually deleting hash options. - No need to explicitly check if options[:prerender]'s value is true --- lib/react/rails/view_helper.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/react/rails/view_helper.rb b/lib/react/rails/view_helper.rb index 23e0cac66..5abb55e7a 100644 --- a/lib/react/rails/view_helper.rb +++ b/lib/react/rails/view_helper.rb @@ -8,7 +8,7 @@ module ViewHelper # def react_component(name, args = {}, options = {}, &block) options = {:tag => options} if options.is_a?(Symbol) - block = Proc.new{concat React::Renderer.render(name, args)} if options[:prerender] == true + block = Proc.new{concat React::Renderer.render(name, args)} if options[:prerender] html_options = options.reverse_merge(:data => {}) html_options[:data].tap do |data| @@ -18,7 +18,7 @@ def react_component(name, args = {}, options = {}, &block) html_tag = html_options[:tag] || :div # remove internally used properties so they aren't rendered to DOM - [:tag, :prerender].each{|prop| html_options.delete(prop)} + html_options.except!(:tag, :prerender) content_tag(html_tag, '', html_options, &block) end