From 785ebaca5a30cb72d82980fb10e45a588e3770b9 Mon Sep 17 00:00:00 2001 From: Joseph Tibbertsma Date: Mon, 5 Dec 2016 19:39:06 -0800 Subject: [PATCH] react_component should work outside of views (#636) The rails_context method previously assumed that the controller and request view helper methods were present. This commit checks that these methods are present before they're called. Resolves: #634 --- app/helpers/react_on_rails_helper.rb | 4 ++-- .../helpers/react_on_rails_helper_spec.rb | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/helpers/react_on_rails_helper.rb b/app/helpers/react_on_rails_helper.rb index 3465fa9d9b..f694a135b2 100644 --- a/app/helpers/react_on_rails_helper.rb +++ b/app/helpers/react_on_rails_helper.rb @@ -350,7 +350,7 @@ def rails_context(server_side:) i18nLocale: I18n.locale, i18nDefaultLocale: I18n.default_locale } - if request.present? + if defined?(request) && request.present? # Check for encoding of the request's original_url and try to force-encoding the # URLs as UTF-8. This situation can occur in browsers that do not encode the # entire URL as UTF-8 already, mostly on the Windows platform (IE11 and lower). @@ -402,7 +402,7 @@ def send_tag_method(tag_method_name, args) end def in_mailer? - return false unless controller.present? + return false unless defined?(controller) return false unless defined?(ActionMailer::Base) controller.is_a?(ActionMailer::Base) 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 4889fd0ea3..455106d6c2 100644 --- a/spec/dummy/spec/helpers/react_on_rails_helper_spec.rb +++ b/spec/dummy/spec/helpers/react_on_rails_helper_spec.rb @@ -183,4 +183,23 @@ it { is_expected.to be_an_instance_of ActiveSupport::SafeBuffer } it { is_expected.to eq hello_world } end + + describe "#rails_context" do + before do + @rendering_extension = ReactOnRails.configuration.rendering_extension + ReactOnRails.configuration.rendering_extension = nil + end + + it "should not throw an error if not in a view" do + class PlainClass + include ReactOnRailsHelper + end + + ob = PlainClass.new + expect { ob.send(:rails_context, server_side: true) }.to_not raise_error + expect { ob.send(:rails_context, server_side: false) }.to_not raise_error + end + + after { ReactOnRails.configuration.rendering_extension = @rendering_extension } + end end