From 5ca16dbfa6dd422edd34959264b863a7964cc562 Mon Sep 17 00:00:00 2001 From: martinphee Date: Wed, 4 May 2016 07:56:46 -0500 Subject: [PATCH 01/11] Changed the tags to script tags instead of div's for the data. --- Gemfile | 2 +- app/helpers/react_on_rails_helper.rb | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index a671db35a..f6e3952dd 100644 --- a/Gemfile +++ b/Gemfile @@ -34,7 +34,7 @@ gem "web-console", "~> 2.0", group: :development gem "rspec-rails" gem "capybara" gem "capybara-screenshot" -gem "capybara-webkit" +gem "capybara-webkit", git: 'git@github.com:thoughtbot/capybara-webkit.git', branch: 'qt-4.8-fix' gem "chromedriver-helper" gem "launchy" gem "poltergeist" diff --git a/app/helpers/react_on_rails_helper.rb b/app/helpers/react_on_rails_helper.rb index 5c852abd2..e8b2e48d2 100644 --- a/app/helpers/react_on_rails_helper.rb +++ b/app/helpers/react_on_rails_helper.rb @@ -105,7 +105,7 @@ def react_component(component_name, raw_options = {}) # The reason is that React is smart about not doing extra work if the server rendering did its job. component_specification_tag = - content_tag(:div, + content_tag(:script, "", class: "js-react-on-rails-component", style: options.style, @@ -129,7 +129,7 @@ def react_component(component_name, raw_options = {}) # IMPORTANT: Ensure that we mark string as html_safe to avoid escaping. result = <<-HTML.html_safe -#{component_specification_tag} + #{component_specification_tag} #{rendered_output} #{options.replay_console ? console_script : ''} HTML @@ -235,7 +235,7 @@ def prepend_render_rails_context(render_value) @rendered_rails_context = true - rails_context_content = content_tag(:div, + rails_context_content = content_tag(:script, "", id: "js-react-on-rails-context", style: ReactOnRails.configuration.skip_display_none ? nil : "display:none", From d452721361b376b75957d62ea8a197b679a3aa79 Mon Sep 17 00:00:00 2001 From: martinphee Date: Wed, 4 May 2016 08:15:30 -0500 Subject: [PATCH 02/11] Moved that data into the script tag. --- app/helpers/react_on_rails_helper.rb | 26 +++++++++++--------------- node_package/src/clientStartup.js | 4 ++-- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/app/helpers/react_on_rails_helper.rb b/app/helpers/react_on_rails_helper.rb index e8b2e48d2..0dbb91ed8 100644 --- a/app/helpers/react_on_rails_helper.rb +++ b/app/helpers/react_on_rails_helper.rb @@ -104,15 +104,16 @@ def react_component(component_name, raw_options = {}) # Setup the page_loaded_js, which is the same regardless of prerendering or not! # The reason is that React is smart about not doing extra work if the server rendering did its job. + props = options.delete(:props) component_specification_tag = content_tag(:script, - "", + props, class: "js-react-on-rails-component", style: options.style, data: options.data) # Create the HTML rendering part - result = server_rendered_react_component_html(options.props, options.name, options.dom_id, + result = server_rendered_react_component_html(props, options.name, options.dom_id, prerender: options.prerender, trace: options.trace, raise_on_prerender_error: options.raise_on_prerender_error) @@ -134,7 +135,7 @@ def react_component(component_name, raw_options = {}) #{options.replay_console ? console_script : ''} HTML - prepend_render_rails_context(result) + add_render_rails_context(result) end # Separate initialization of store from react_component allows multiple react_component calls to @@ -157,7 +158,7 @@ def redux_store(store_name, props: {}, defer: false) @registered_stores ||= [] @registered_stores << redux_store_data result = render_redux_store_data(redux_store_data) - prepend_render_rails_context(result) + add_render_rails_context(result) end end @@ -225,22 +226,17 @@ def server_render_js(js_expression, options = {}) private - # prepend the rails_context if not yet applied - def prepend_render_rails_context(render_value) + # add the rails_context if not yet applied + def add_render_rails_context(render_value) return render_value if @rendered_rails_context - data = { - rails_context: rails_context(server_side: false) - } - @rendered_rails_context = true rails_context_content = content_tag(:script, - "", + rails_context(server_side: false), id: "js-react-on-rails-context", - style: ReactOnRails.configuration.skip_display_none ? nil : "display:none", - data: data) - "#{rails_context_content}\n#{render_value}".html_safe + style: ReactOnRails.configuration.skip_display_none ? nil : "display:none") + "#{render_value}\n#{rails_context_content}".html_safe end def render_redux_store_data(redux_store_data) @@ -249,7 +245,7 @@ def render_redux_store_data(redux_store_data) class: "js-react-on-rails-store", style: ReactOnRails.configuration.skip_display_none ? nil : "display:none", data: redux_store_data) - prepend_render_rails_context(result) + add_render_rails_context(result) end def next_react_component_index diff --git a/node_package/src/clientStartup.js b/node_package/src/clientStartup.js index c9bb8eb77..c5ce7050c 100644 --- a/node_package/src/clientStartup.js +++ b/node_package/src/clientStartup.js @@ -42,7 +42,7 @@ function turbolinksVersion5() { function initializeStore(el, railsContext) { const name = el.getAttribute('data-store-name'); - const props = JSON.parse(el.getAttribute('data-props')); + const props = JSON.parse(el.innerHTML); const storeGenerator = ReactOnRails.getStoreGenerator(name); const store = storeGenerator(props, railsContext); ReactOnRails.setStore(name, store); @@ -89,7 +89,7 @@ You should return a React.Component always for the client side entry point.`); function parseRailsContext() { const el = document.getElementById('js-react-on-rails-context'); if (el) { - return JSON.parse(el.getAttribute('data-rails-context')); + return JSON.parse(el.innerHTML); } else { return null; } From 6ca0030b1a430643b242b21213c86061068f08dc Mon Sep 17 00:00:00 2001 From: martinphee Date: Sat, 11 Jun 2016 10:53:47 -0500 Subject: [PATCH 03/11] Moved that data into the script tag. --- app/helpers/react_on_rails_helper.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/helpers/react_on_rails_helper.rb b/app/helpers/react_on_rails_helper.rb index ca6970db5..8d13ff52b 100644 --- a/app/helpers/react_on_rails_helper.rb +++ b/app/helpers/react_on_rails_helper.rb @@ -105,16 +105,15 @@ def react_component(component_name, raw_options = {}) # Setup the page_loaded_js, which is the same regardless of prerendering or not! # The reason is that React is smart about not doing extra work if the server rendering did its job. - props = options.delete(:props) component_specification_tag = content_tag(:script, - props, + options.props, class: "js-react-on-rails-component", style: options.style, data: options.data) # Create the HTML rendering part - result = server_rendered_react_component_html(props, options.name, options.dom_id, + result = server_rendered_react_component_html(options.props, options.name, options.dom_id, prerender: options.prerender, trace: options.trace, raise_on_prerender_error: options.raise_on_prerender_error) From 5ad21af975bef527ab945e714878130ea208024f Mon Sep 17 00:00:00 2001 From: martinphee Date: Tue, 14 Jun 2016 17:01:03 -0500 Subject: [PATCH 04/11] Updates to make the json into variables which are named after the dom nodes or the redux store names. 3 tests failing yet. --- Gemfile | 3 +- app/helpers/react_on_rails_helper.rb | 19 ++++-- lib/react_on_rails/react_component/options.rb | 1 - node_package/src/clientStartup.js | 6 +- react_on_rails.gemspec | 1 + spec/dummy/Gemfile.lock | 14 +++- .../helpers/react_on_rails_helper_spec.rb | 66 +++++++++---------- .../react_component/options_spec.rb | 1 - 8 files changed, 63 insertions(+), 48 deletions(-) diff --git a/Gemfile b/Gemfile index f6e3952dd..ff2f01157 100644 --- a/Gemfile +++ b/Gemfile @@ -34,8 +34,9 @@ gem "web-console", "~> 2.0", group: :development gem "rspec-rails" gem "capybara" gem "capybara-screenshot" -gem "capybara-webkit", git: 'git@github.com:thoughtbot/capybara-webkit.git', branch: 'qt-4.8-fix' +gem "capybara-webkit" gem "chromedriver-helper" gem "launchy" gem "poltergeist" gem "selenium-webdriver" +gem "yajl-ruby" diff --git a/app/helpers/react_on_rails_helper.rb b/app/helpers/react_on_rails_helper.rb index 44de7c2e5..d417e7dd7 100644 --- a/app/helpers/react_on_rails_helper.rb +++ b/app/helpers/react_on_rails_helper.rb @@ -5,6 +5,7 @@ # 2. Keep all #{some_var} fully to the left so that all indentation is done evenly in that var require "react_on_rails/prerender_error" require "addressable/uri" +require "yajl" module ReactOnRailsHelper # The env_javascript_include_tag and env_stylesheet_link_tag support the usage of a webpack @@ -103,10 +104,11 @@ def react_component(component_name, raw_options = {}) component_specification_tag = content_tag(:script, - options.props, class: "js-react-on-rails-component", style: options.style, - data: options.data) + data: options.data) do + "var #{options.dom_id.tr('-', '_')} = #{Yajl.dump(options.props.is_a?(String) ? JSON.parse(options.props) : options.props)};".html_safe + end # Create the HTML rendering part result = server_rendered_react_component_html(options.props, options.name, options.dom_id, @@ -229,18 +231,23 @@ def add_render_rails_context(render_value) @rendered_rails_context = true rails_context_content = content_tag(:script, - rails_context(server_side: false), id: "js-react-on-rails-context", - style: ReactOnRails.configuration.skip_display_none ? nil : "display:none") + style: ReactOnRails.configuration.skip_display_none ? nil : "display:none") do + "var #{'js-react-on-rails-context'.tr('-', '_')} = #{Yajl.dump(rails_context(server_side: false))};".html_safe + end "#{render_value}\n#{rails_context_content}".html_safe end def render_redux_store_data(redux_store_data) - result = content_tag(:div, + result = content_tag(:script, "", class: "js-react-on-rails-store", style: ReactOnRails.configuration.skip_display_none ? nil : "display:none", - data: redux_store_data) + data: redux_store_data) do + # redux_store_data + "var #{redux_store_data[:store_name].tr('-', '_')} = #{Yajl.dump(redux_store_data[:props])};".html_safe + end + add_render_rails_context(result) end diff --git a/lib/react_on_rails/react_component/options.rb b/lib/react_on_rails/react_component/options.rb index 54befc101..3ff8ee8e8 100644 --- a/lib/react_on_rails/react_component/options.rb +++ b/lib/react_on_rails/react_component/options.rb @@ -44,7 +44,6 @@ def raise_on_prerender_error def data { component_name: name, - props: props, trace: trace, dom_id: dom_id } diff --git a/node_package/src/clientStartup.js b/node_package/src/clientStartup.js index a11a6a854..0de2dfb05 100644 --- a/node_package/src/clientStartup.js +++ b/node_package/src/clientStartup.js @@ -42,7 +42,7 @@ function turbolinksVersion5() { function initializeStore(el, railsContext) { const name = el.getAttribute('data-store-name'); - const props = JSON.parse(el.innerHTML); + const props = eval(name.replace(/-/g, '_')); const storeGenerator = ReactOnRails.getStoreGenerator(name); const store = storeGenerator(props, railsContext); ReactOnRails.setStore(name, store); @@ -55,7 +55,7 @@ function initializeStore(el, railsContext) { function render(el, railsContext) { const name = el.getAttribute('data-component-name'); const domNodeId = el.getAttribute('data-dom-id'); - const props = JSON.parse(el.getAttribute('data-props')); + const props = eval(domNodeId.replace(/-/g, '_')); const trace = JSON.parse(el.getAttribute('data-trace')); try { @@ -89,7 +89,7 @@ You should return a React.Component always for the client side entry point.`); function parseRailsContext() { const el = document.getElementById('js-react-on-rails-context'); if (el) { - return JSON.parse(el.innerHTML); + return eval('js-react-on-rails-context'.replace(/-/g, '_')); } else { return null; } diff --git a/react_on_rails.gemspec b/react_on_rails.gemspec index f832019fc..6a17513d2 100644 --- a/react_on_rails.gemspec +++ b/react_on_rails.gemspec @@ -25,6 +25,7 @@ Gem::Specification.new do |s| s.add_dependency "rails", ">= 3.2" s.add_dependency "foreman" s.add_dependency "addressable" + s.add_dependency "yajl-ruby" s.add_development_dependency "bundler", "~> 1.10" s.add_development_dependency "rake", "~> 10.0" diff --git a/spec/dummy/Gemfile.lock b/spec/dummy/Gemfile.lock index 0a0f7a323..b13cf3766 100644 --- a/spec/dummy/Gemfile.lock +++ b/spec/dummy/Gemfile.lock @@ -1,6 +1,14 @@ PATH remote: ../.. specs: + react_on_rails (6.0.3) + addressable + connection_pool + execjs (~> 2.5) + foreman + rails (>= 3.2) + rainbow (~> 2.1) + yajl-ruby GEM remote: https://rubygems.org/ @@ -78,6 +86,7 @@ GEM execjs coffee-script-source (1.10.0) concurrent-ruby (1.0.2) + connection_pool (2.2.0) coveralls (0.8.13) json (~> 1.8) simplecov (~> 0.11.0) @@ -90,6 +99,8 @@ GEM erubis (2.7.0) execjs (2.6.0) ffi (1.9.10) + foreman (0.82.0) + thor (~> 0.19.1) generator_spec (0.9.3) activesupport (>= 3.0.0) railties (>= 3.0.0) @@ -266,6 +277,7 @@ GEM websocket-extensions (0.1.2) xpath (2.0.0) nokogiri (~> 1.3) + yajl-ruby (1.2.1) yard (0.8.7.6) PLATFORMS @@ -307,4 +319,4 @@ DEPENDENCIES web-console BUNDLED WITH - 1.12.3 + 1.12.5 diff --git a/spec/dummy/spec/helpers/react_on_rails_helper_spec.rb b/spec/dummy/spec/helpers/react_on_rails_helper_spec.rb index 4889fd0ea..30ed9b8e0 100644 --- a/spec/dummy/spec/helpers/react_on_rails_helper_spec.rb +++ b/spec/dummy/spec/helpers/react_on_rails_helper_spec.rb @@ -47,7 +47,7 @@ describe "#react_component" do before { allow(SecureRandom).to receive(:uuid).and_return(0, 1, 2, 3) } - subject { react_component("App", props: props) } + subject { react_component("App", props: props).squish } let(:props) do { name: "My Test Name" } @@ -59,26 +59,24 @@ let(:id) { "App-react-component-0" } - let(:react_definition_div) do - %().squish + data-dom-id="#{id}">var #{id.tr('-', '_')} = {"name":"My Test Name"};).squish end let(:react_definition_div_no_params) do - %().squish + data-dom-id="#{id}">var #{id.tr('-', '_')} = {};).squish end describe "API with component name only" do - subject { react_component("App") } + subject { react_component("App").squish } it { is_expected.to be_an_instance_of ActiveSupport::SafeBuffer } it { is_expected.to include react_component_div } it { is_expected.to include react_definition_div_no_params } @@ -87,48 +85,46 @@ it { expect(self).to respond_to :react_component } it { is_expected.to be_an_instance_of ActiveSupport::SafeBuffer } - it { is_expected.to start_with "\s*$} } + it { is_expected.to start_with "\s*$} } it { is_expected.to include react_component_div } - it { is_expected.to include react_definition_div } + it { is_expected.to include react_definition_script } context "with 'id' option" do subject { react_component("App", props: props, id: id) } - let(:id) { "shaka_div" } + let(:id) { "shaka_script" } it { is_expected.to include id } it { is_expected.not_to include react_component_div } - it { is_expected.to include react_definition_div } + it { is_expected.to include react_definition_script } end context "with skip_display_none option true" do before { ReactOnRails.configuration.skip_display_none = true } - let(:react_definition_div_skip_display_none_true) do - "
".squish + data-dom-id=\"#{id}\">var #{id.tr('-', '_')} = {\"name\":\"My Test Name\"};".squish end - it { is_expected.to include react_definition_div_skip_display_none_true } + it { is_expected.to include react_definition_script_skip_display_none_true } end context "with skip_display_none option false" do before { ReactOnRails.configuration.skip_display_none = false } - let(:react_definition_div_skip_display_none_false) do - "
".squish + data-dom-id=\"#{id}\">var #{id.tr('-', '_')} = {\"name\":\"My Test Name\"};".squish end - it { is_expected.to include react_definition_div_skip_display_none_false } + it { is_expected.to include react_definition_script_skip_display_none_false } end end @@ -139,35 +135,35 @@ { name: "My Test Name" } end - let(:react_store_div) do - %().squish + data-props="{"name":"My Test Name"}">var reduxStore = {"name":"My Test Name"};).squish end it { expect(self).to respond_to :redux_store } it { is_expected.to be_an_instance_of ActiveSupport::SafeBuffer } - it { is_expected.to start_with "" } - it { is_expected.to include react_store_div } + it { is_expected.to start_with "" } + it { is_expected.to include react_store_script } context "with skip_display_none option true" do before { ReactOnRails.configuration.skip_display_none = true } - let(:react_store_definition_div_skip_display_none_true) do - %(
).squish + data-props="{"name":"My Test Name"}">var reduxStore = {"name":"My Test Name"};).squish end - it { is_expected.to include react_store_definition_div_skip_display_none_true } + it { is_expected.to include react_store_definition_script_skip_display_none_true } end context "with skip_display_none option false" do before { ReactOnRails.configuration.skip_display_none = false } - it { is_expected.to include react_store_div } + it { is_expected.to include react_store_script } end end diff --git a/spec/react_on_rails/react_component/options_spec.rb b/spec/react_on_rails/react_component/options_spec.rb index f5311a46c..8628d3107 100644 --- a/spec/react_on_rails/react_component/options_spec.rb +++ b/spec/react_on_rails/react_component/options_spec.rb @@ -126,7 +126,6 @@ def the_attrs(name: "App", options: {}) attrs = the_attrs(name: "app", options: { trace: false, id: 2 }) expected_data = { component_name: "App", - props: {}, trace: false, dom_id: 2 } From ff0c968366dcdb9081e7f3730fd46fabf8e80b70 Mon Sep 17 00:00:00 2001 From: martinphee Date: Sat, 20 Aug 2016 08:22:18 -0500 Subject: [PATCH 05/11] Fixing some final test. There are two which are failing. Need to figure those out. --- node_package/src/RenderUtils.js | 4 ++-- node_package/src/buildConsoleReplay.js | 2 +- spec/dummy/db/schema.rb | 1 + spec/dummy/spec/requests/console_logging_spec.rb | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/node_package/src/RenderUtils.js b/node_package/src/RenderUtils.js index 14fbe7598..70c13b7a2 100644 --- a/node_package/src/RenderUtils.js +++ b/node_package/src/RenderUtils.js @@ -1,10 +1,10 @@ export default { - wrapInScriptTags(scriptBody) { + wrapInScriptTags(scriptId, scriptBody) { if (!scriptBody) { return ''; } - return `\n`; }, diff --git a/node_package/src/buildConsoleReplay.js b/node_package/src/buildConsoleReplay.js index 0aaad331b..4a805e6b7 100644 --- a/node_package/src/buildConsoleReplay.js +++ b/node_package/src/buildConsoleReplay.js @@ -27,5 +27,5 @@ export function consoleReplay() { } export default function buildConsoleReplay() { - return RenderUtils.wrapInScriptTags(consoleReplay()); + return RenderUtils.wrapInScriptTags('consoleReplayLog', consoleReplay()); } diff --git a/spec/dummy/db/schema.rb b/spec/dummy/db/schema.rb index 28ac66fd2..4dfbb1680 100644 --- a/spec/dummy/db/schema.rb +++ b/spec/dummy/db/schema.rb @@ -12,4 +12,5 @@ # It's strongly recommended that you check this file into your version control system. ActiveRecord::Schema.define(version: 0) do + end diff --git a/spec/dummy/spec/requests/console_logging_spec.rb b/spec/dummy/spec/requests/console_logging_spec.rb index 81d7232fd..dceae21dd 100644 --- a/spec/dummy/spec/requests/console_logging_spec.rb +++ b/spec/dummy/spec/requests/console_logging_spec.rb @@ -18,7 +18,7 @@ expected_lines = expected.split("\n") - script_node = html_nodes.css("script")[1] + script_node = html_nodes.css("#consoleReplayLog") expected_lines.each do |line| expect(script_node.inner_text).to include(line) From 7c892d764417d3925fc7b0b29738b664cfbbf2f5 Mon Sep 17 00:00:00 2001 From: martinphee Date: Sat, 20 Aug 2016 08:42:28 -0500 Subject: [PATCH 06/11] Fixing a couple more tests. --- spec/dummy/Gemfile.lock | 6 ++++-- spec/dummy/spec/requests/server_render_check_spec.rb | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/spec/dummy/Gemfile.lock b/spec/dummy/Gemfile.lock index 141093a0d..6e8179453 100644 --- a/spec/dummy/Gemfile.lock +++ b/spec/dummy/Gemfile.lock @@ -8,6 +8,7 @@ PATH foreman rails (>= 3.2) rainbow (~> 2.1) + yajl-ruby GEM remote: https://rubygems.org/ @@ -98,7 +99,7 @@ GEM erubis (2.7.0) execjs (2.7.0) ffi (1.9.10) - foreman (0.81.0) + foreman (0.82.0) thor (~> 0.19.1) generator_spec (0.9.3) activesupport (>= 3.0.0) @@ -278,6 +279,7 @@ GEM websocket-extensions (0.1.2) xpath (2.0.0) nokogiri (~> 1.3) + yajl-ruby (1.2.1) yard (0.8.7.6) PLATFORMS @@ -319,4 +321,4 @@ DEPENDENCIES web-console BUNDLED WITH - 1.12.3 + 1.12.5 diff --git a/spec/dummy/spec/requests/server_render_check_spec.rb b/spec/dummy/spec/requests/server_render_check_spec.rb index 57c533375..23c03e4b5 100644 --- a/spec/dummy/spec/requests/server_render_check_spec.rb +++ b/spec/dummy/spec/requests/server_render_check_spec.rb @@ -63,13 +63,13 @@ mail = DummyMailer.hello_email expect(mail.subject).to match "mail" expect(mail.body).to match "Mr. Mailing Server Side Rendering" - expect(mail.body).to match "inMailer":true" + expect(mail.body).to match "\"inMailer\":true" end it "sets inMailer properly" do get client_side_hello_world_path html_nodes = Nokogiri::HTML(response.body) - expect(html_nodes.css("div#js-react-on-rails-context").attr("data-rails-context").value) + expect(html_nodes.css("#js-react-on-rails-context").inner_text) .to match('inMailer\":false') end end From 0663cee676ad6a15dc89872481de4b11e9ffb4e8 Mon Sep 17 00:00:00 2001 From: martinphee Date: Sat, 20 Aug 2016 12:26:06 -0500 Subject: [PATCH 07/11] Fixing one more test. Can't run locally for some reason. --- node_package/tests/buildConsoleReplay.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node_package/tests/buildConsoleReplay.test.js b/node_package/tests/buildConsoleReplay.test.js index cf3639a48..0b304fb41 100644 --- a/node_package/tests/buildConsoleReplay.test.js +++ b/node_package/tests/buildConsoleReplay.test.js @@ -84,7 +84,7 @@ test('buildConsoleReplay wraps console replay in a script tag', (assert) => { // https://github.com/jscs-dev/node-jscs/issues/2137 // jscs:disable disallowSpacesInsideTemplateStringPlaceholders const expected = ` -`; From f81fb590110e9e65729530de6a35edcb682eabe1 Mon Sep 17 00:00:00 2001 From: martinphee Date: Sat, 20 Aug 2016 12:38:33 -0500 Subject: [PATCH 08/11] Made a mistake in the test --- node_package/tests/buildConsoleReplay.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node_package/tests/buildConsoleReplay.test.js b/node_package/tests/buildConsoleReplay.test.js index 0b304fb41..4fff0d44a 100644 --- a/node_package/tests/buildConsoleReplay.test.js +++ b/node_package/tests/buildConsoleReplay.test.js @@ -84,7 +84,7 @@ test('buildConsoleReplay wraps console replay in a script tag', (assert) => { // https://github.com/jscs-dev/node-jscs/issues/2137 // jscs:disable disallowSpacesInsideTemplateStringPlaceholders const expected = ` -`; From 64a7cedbf6c7eecada69f4c2231b7e70ab9f4809 Mon Sep 17 00:00:00 2001 From: martinphee Date: Sat, 20 Aug 2016 14:19:37 -0500 Subject: [PATCH 09/11] Fixing lint errors. --- app/helpers/react_on_rails_helper.rb | 4 +++- spec/dummy/spec/helpers/react_on_rails_helper_spec.rb | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/helpers/react_on_rails_helper.rb b/app/helpers/react_on_rails_helper.rb index bd2e535fe..10e7068f1 100644 --- a/app/helpers/react_on_rails_helper.rb +++ b/app/helpers/react_on_rails_helper.rb @@ -107,7 +107,9 @@ def react_component(component_name, raw_options = {}) class: "js-react-on-rails-component", style: options.style, data: options.data) do - "var #{options.dom_id.tr('-', '_')} = #{Yajl.dump(options.props.is_a?(String) ? JSON.parse(options.props) : options.props)};".html_safe + "var #{options.dom_id.tr('-', '_')} = #{Yajl.dump(options.props.is_a?(String) ? + JSON.parse(options.props) : + options.props)};".html_safe end # Create the HTML rendering part diff --git a/spec/dummy/spec/helpers/react_on_rails_helper_spec.rb b/spec/dummy/spec/helpers/react_on_rails_helper_spec.rb index 30ed9b8e0..fa79c486d 100644 --- a/spec/dummy/spec/helpers/react_on_rails_helper_spec.rb +++ b/spec/dummy/spec/helpers/react_on_rails_helper_spec.rb @@ -139,7 +139,8 @@ %().squish + data-props="{"name":"My Test Name"}">var reduxStore = {"name":"My Test Name"}; + ).squish end it { expect(self).to respond_to :redux_store } @@ -155,7 +156,8 @@ let(:react_store_definition_script_skip_display_none_true) do %().squish + data-props="{"name":"My Test Name"}">var reduxStore = {"name":"My Test Name"}; + ).squish end it { is_expected.to include react_store_definition_script_skip_display_none_true } From bebf37006b90c22f38fa5c77ade431985d803206 Mon Sep 17 00:00:00 2001 From: martinphee Date: Sat, 20 Aug 2016 14:42:12 -0500 Subject: [PATCH 10/11] Fixing lint errors. --- app/helpers/react_on_rails_helper.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/helpers/react_on_rails_helper.rb b/app/helpers/react_on_rails_helper.rb index 10e7068f1..7493c28d2 100644 --- a/app/helpers/react_on_rails_helper.rb +++ b/app/helpers/react_on_rails_helper.rb @@ -89,6 +89,7 @@ def env_stylesheet_link_tag(args = {}) # raise_on_prerender_error: Default to false. True will raise exception on server # if the JS code throws # Any other options are passed to the content tag, including the id. + # rubocop:disable Metrics/AbcSize def react_component(component_name, raw_options = {}) # Create the JavaScript and HTML to allow either client or server rendering of the # react_component. @@ -105,11 +106,10 @@ def react_component(component_name, raw_options = {}) component_specification_tag = content_tag(:script, class: "js-react-on-rails-component", - style: options.style, + style: nil, data: options.data) do - "var #{options.dom_id.tr('-', '_')} = #{Yajl.dump(options.props.is_a?(String) ? - JSON.parse(options.props) : - options.props)};".html_safe + props = Yajl.dump(options.props.is_a?(String) ? JSON.parse(options.props) : options.props) + "var #{options.dom_id.tr('-', '_')} = #{props};".html_safe end # Create the HTML rendering part @@ -234,7 +234,7 @@ def add_render_rails_context(render_value) rails_context_content = content_tag(:script, id: "js-react-on-rails-context", - style: ReactOnRails.configuration.skip_display_none ? nil : "display:none") do + style: nil) do "var #{'js-react-on-rails-context'.tr('-', '_')} = #{Yajl.dump(rails_context(server_side: false))};".html_safe end "#{render_value}\n#{rails_context_content}".html_safe @@ -244,7 +244,7 @@ def render_redux_store_data(redux_store_data) result = content_tag(:script, "", class: "js-react-on-rails-store", - style: ReactOnRails.configuration.skip_display_none ? nil : "display:none", + style: nil, data: redux_store_data) do # redux_store_data "var #{redux_store_data[:store_name].tr('-', '_')} = #{Yajl.dump(redux_store_data[:props])};".html_safe From afeea39ab744a6927bcb0c499663b6fb9b50b16f Mon Sep 17 00:00:00 2001 From: martinphee Date: Sat, 20 Aug 2016 14:42:51 -0500 Subject: [PATCH 11/11] Fixing lint errors. --- spec/dummy/db/schema.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/dummy/db/schema.rb b/spec/dummy/db/schema.rb index 4dfbb1680..28ac66fd2 100644 --- a/spec/dummy/db/schema.rb +++ b/spec/dummy/db/schema.rb @@ -12,5 +12,4 @@ # It's strongly recommended that you check this file into your version control system. ActiveRecord::Schema.define(version: 0) do - end