From 5f3eb50abfa07b1e8072e394a63ebf25fa172313 Mon Sep 17 00:00:00 2001 From: Marc Anguera Insa Date: Thu, 23 Jan 2025 00:17:15 +0100 Subject: [PATCH 1/3] Having a @request variable defined in user's controller could be problematic --- lib/invisible_captcha/view_helpers.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/invisible_captcha/view_helpers.rb b/lib/invisible_captcha/view_helpers.rb index a980846..bbd7981 100644 --- a/lib/invisible_captcha/view_helpers.rb +++ b/lib/invisible_captcha/view_helpers.rb @@ -18,7 +18,7 @@ def invisible_captcha(honeypot = nil, scope = nil, options = {}) end if InvisibleCaptcha.spinner_enabled && @captcha_ocurrences == 1 - session[:invisible_captcha_spinner] = InvisibleCaptcha.encode("#{session[:invisible_captcha_timestamp]}-#{current_request.remote_ip}") + session[:invisible_captcha_spinner] = InvisibleCaptcha.encode("#{session[:invisible_captcha_timestamp]}-#{request.remote_ip}") end build_invisible_captcha(honeypot, scope, options) @@ -32,10 +32,6 @@ def invisible_captcha_styles private - def current_request - @request ||= request - end - def build_invisible_captcha(honeypot = nil, scope = nil, options = {}) if honeypot.is_a?(Hash) options = honeypot From 12e4aa33d80e0075dc5f3834268bf1ec1a5652b1 Mon Sep 17 00:00:00 2001 From: Marc Anguera Insa Date: Thu, 23 Jan 2025 21:00:17 +0100 Subject: [PATCH 2/3] workaround for concurrent-ruby issue with Rails 7.0 --- Appraisals | 4 ++++ gemfiles/rails_5.2.gemfile | 1 + gemfiles/rails_6.0.gemfile | 1 + gemfiles/rails_6.1.gemfile | 1 + gemfiles/rails_7.0.gemfile | 1 + gemfiles/rails_7.1.gemfile | 1 + 6 files changed, 9 insertions(+) diff --git a/Appraisals b/Appraisals index f144c54..8dfaf31 100644 --- a/Appraisals +++ b/Appraisals @@ -7,5 +7,9 @@ ).each do |version| appraise "rails-#{version}" do gem "rails", "~> #{version}.0" + + # NOTE: concurrent-ruby gem no longer loads the logger gem since v1.3.5. + # More info: https://github.com/rails/rails/pull/54264 + gem "concurrent-ruby", "< 1.3.5" end end diff --git a/gemfiles/rails_5.2.gemfile b/gemfiles/rails_5.2.gemfile index 5a706dc..d4793f2 100644 --- a/gemfiles/rails_5.2.gemfile +++ b/gemfiles/rails_5.2.gemfile @@ -3,5 +3,6 @@ source "https://rubygems.org" gem "rails", "~> 5.2.0" +gem "concurrent-ruby", "< 1.3.5" gemspec path: "../" diff --git a/gemfiles/rails_6.0.gemfile b/gemfiles/rails_6.0.gemfile index 15b9b27..dd7fab9 100644 --- a/gemfiles/rails_6.0.gemfile +++ b/gemfiles/rails_6.0.gemfile @@ -3,5 +3,6 @@ source "https://rubygems.org" gem "rails", "~> 6.0.0" +gem "concurrent-ruby", "< 1.3.5" gemspec path: "../" diff --git a/gemfiles/rails_6.1.gemfile b/gemfiles/rails_6.1.gemfile index dd95a47..b2a8bf8 100644 --- a/gemfiles/rails_6.1.gemfile +++ b/gemfiles/rails_6.1.gemfile @@ -3,5 +3,6 @@ source "https://rubygems.org" gem "rails", "~> 6.1.0" +gem "concurrent-ruby", "< 1.3.5" gemspec path: "../" diff --git a/gemfiles/rails_7.0.gemfile b/gemfiles/rails_7.0.gemfile index 9af0ae3..2b93f9b 100644 --- a/gemfiles/rails_7.0.gemfile +++ b/gemfiles/rails_7.0.gemfile @@ -3,5 +3,6 @@ source "https://rubygems.org" gem "rails", "~> 7.0.0" +gem "concurrent-ruby", "< 1.3.5" gemspec path: "../" diff --git a/gemfiles/rails_7.1.gemfile b/gemfiles/rails_7.1.gemfile index 35a0ba3..304e881 100644 --- a/gemfiles/rails_7.1.gemfile +++ b/gemfiles/rails_7.1.gemfile @@ -3,5 +3,6 @@ source "https://rubygems.org" gem "rails", "~> 7.1.0" +gem "concurrent-ruby", "< 1.3.5" gemspec path: "../" From 54c9656c6cbff6268ce637f9287d558b6acf783c Mon Sep 17 00:00:00 2001 From: Marc Anguera Insa Date: Tue, 28 Jan 2025 10:42:05 +0100 Subject: [PATCH 3/3] mock request object for Rails < v7 --- spec/view_helpers_spec.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spec/view_helpers_spec.rb b/spec/view_helpers_spec.rb index e6a2771..278bdb3 100644 --- a/spec/view_helpers_spec.rb +++ b/spec/view_helpers_spec.rb @@ -8,6 +8,11 @@ # to test content_for and provide @view_flow = ActionView::OutputFlow.new + # mock request object for Rails < 7.0 + if Rails.version < '7.0' + allow(request).to receive(:remote_ip).and_return('0.0.0.0') + end + InvisibleCaptcha.init! end