From 1adf94093efa1724fcfbfcc87c0c704ef6370ab8 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 7 Jan 2026 15:34:24 +1100 Subject: [PATCH 1/8] Merge related initializer code The division came likely from Spree times. --- config/application.rb | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/config/application.rb b/config/application.rb index 5071eab71b..a91177cc49 100644 --- a/config/application.rb +++ b/config/application.rb @@ -79,7 +79,9 @@ module Openfoodnetwork initializer "spree.register.payment_methods" do |app| Rails.application.reloader.to_prepare do app.config.spree.payment_methods = [ - Spree::PaymentMethod::Check + Spree::PaymentMethod::Check, + Spree::Gateway::StripeSCA, + Spree::Gateway::PayPalExpress, ] end end @@ -131,14 +133,6 @@ module Openfoodnetwork end end - # Register Spree payment methods - initializer "spree.gateway.payment_methods", :after => "spree.register.payment_methods" do |app| - Rails.application.reloader.to_prepare do - app.config.spree.payment_methods << Spree::Gateway::StripeSCA - app.config.spree.payment_methods << Spree::Gateway::PayPalExpress - end - end - initializer "ofn.reports" do |app| module ::Reporting; end Rails.application.reloader.to_prepare do From a1bdfa0a20107e58a9971b3014b97f382494c1f9 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 7 Jan 2026 16:57:22 +1100 Subject: [PATCH 2/8] Move list of payment methods to where it is used --- .../spree/admin/payment_methods_controller.rb | 2 +- app/models/spree/payment_method.rb | 6 +++++- config/application.rb | 10 ---------- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/app/controllers/spree/admin/payment_methods_controller.rb b/app/controllers/spree/admin/payment_methods_controller.rb index 97f77420fd..4e74e11247 100644 --- a/app/controllers/spree/admin/payment_methods_controller.rb +++ b/app/controllers/spree/admin/payment_methods_controller.rb @@ -117,7 +117,7 @@ module Spree end def validate_payment_method_provider - valid_payment_methods = Rails.application.config.spree.payment_methods.map(&:to_s) + valid_payment_methods = Spree::PaymentMethod.providers.map(&:to_s) return if valid_payment_methods.include?(params[:payment_method][:type]) flash[:error] = Spree.t(:invalid_payment_provider) diff --git a/app/models/spree/payment_method.rb b/app/models/spree/payment_method.rb index b66d8d239b..d8c63d9746 100644 --- a/app/models/spree/payment_method.rb +++ b/app/models/spree/payment_method.rb @@ -53,7 +53,11 @@ module Spree } def self.providers - Rails.application.config.spree.payment_methods + [ + Spree::PaymentMethod::Check, + Spree::Gateway::StripeSCA, + Spree::Gateway::PayPalExpress, + ] end def configured? diff --git a/config/application.rb b/config/application.rb index a91177cc49..37961e5757 100644 --- a/config/application.rb +++ b/config/application.rb @@ -76,16 +76,6 @@ module Openfoodnetwork end end - initializer "spree.register.payment_methods" do |app| - Rails.application.reloader.to_prepare do - app.config.spree.payment_methods = [ - Spree::PaymentMethod::Check, - Spree::Gateway::StripeSCA, - Spree::Gateway::PayPalExpress, - ] - end - end - initializer "spree.mail.settings" do |_app| Rails.application.reloader.to_prepare do Spree::Core::MailSettings.init From a957df1205b64d64da231fbe68778a9506e51f5c Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 7 Jan 2026 17:11:55 +1100 Subject: [PATCH 3/8] Use I18n API for readability --- app/models/spree/payment_method.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/spree/payment_method.rb b/app/models/spree/payment_method.rb index d8c63d9746..f12d8efafc 100644 --- a/app/models/spree/payment_method.rb +++ b/app/models/spree/payment_method.rb @@ -122,8 +122,8 @@ module Spree end def self.clean_name - i18n_key = "spree.admin.payment_methods.providers.#{name.demodulize.downcase}" - I18n.t(i18n_key) + scope = "spree.admin.payment_methods.providers" + I18n.t(name.demodulize.downcase, scope:) end private From 41a8d06326ba223e4457e9b7c78634638fd42015 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 7 Jan 2026 17:34:25 +1100 Subject: [PATCH 4/8] Remove duplicate definition of payment providers --- app/controllers/spree/admin/payment_methods_controller.rb | 4 ++-- app/models/spree/payment_method.rb | 8 -------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/app/controllers/spree/admin/payment_methods_controller.rb b/app/controllers/spree/admin/payment_methods_controller.rb index 4e74e11247..069b0ad1cc 100644 --- a/app/controllers/spree/admin/payment_methods_controller.rb +++ b/app/controllers/spree/admin/payment_methods_controller.rb @@ -117,7 +117,7 @@ module Spree end def validate_payment_method_provider - valid_payment_methods = Spree::PaymentMethod.providers.map(&:to_s) + valid_payment_methods = PAYMENT_METHODS.keys return if valid_payment_methods.include?(params[:payment_method][:type]) flash[:error] = Spree.t(:invalid_payment_provider) @@ -133,7 +133,7 @@ module Spree end def load_providers - providers = Gateway.providers.sort_by(&:name) + providers = PAYMENT_METHODS.values.sort_by(&:name) unless show_stripe? providers.reject! { |provider| stripe_provider?(provider) } diff --git a/app/models/spree/payment_method.rb b/app/models/spree/payment_method.rb index f12d8efafc..fbd379e6b6 100644 --- a/app/models/spree/payment_method.rb +++ b/app/models/spree/payment_method.rb @@ -52,14 +52,6 @@ module Spree .where(environment: [Rails.env, "", nil]) } - def self.providers - [ - Spree::PaymentMethod::Check, - Spree::Gateway::StripeSCA, - Spree::Gateway::PayPalExpress, - ] - end - def configured? !stripe? || stripe_configured? end From cb7a4b67ce5894c66f801803e8bc4a75374d5d6c Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 9 Jan 2026 14:33:39 +1100 Subject: [PATCH 5/8] Replace custom lookup with default Rails feature Rails renders an error when you try to supply an invalid value. Our code is safe without an allow-list and the UX doesn't allow you to select an invalid value. --- .../spree/admin/payment_methods_controller.rb | 2 +- .../spree/admin/payment_methods_controller_spec.rb | 11 ----------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/app/controllers/spree/admin/payment_methods_controller.rb b/app/controllers/spree/admin/payment_methods_controller.rb index 069b0ad1cc..08c0e600b6 100644 --- a/app/controllers/spree/admin/payment_methods_controller.rb +++ b/app/controllers/spree/admin/payment_methods_controller.rb @@ -95,7 +95,7 @@ module Spree @payment_method = PaymentMethod.find(params[:pm_id]) end else - @payment_method = PAYMENT_METHODS.fetch(params[:provider_type], PaymentMethod).new + @payment_method = PaymentMethod.new(type: params[:provider_type]) end render partial: 'provider_settings' diff --git a/spec/controllers/spree/admin/payment_methods_controller_spec.rb b/spec/controllers/spree/admin/payment_methods_controller_spec.rb index 7827705283..398389bf24 100644 --- a/spec/controllers/spree/admin/payment_methods_controller_spec.rb +++ b/spec/controllers/spree/admin/payment_methods_controller_spec.rb @@ -296,17 +296,6 @@ RSpec.describe Spree::Admin::PaymentMethodsController do expect(assigns(:payment_method)).to be_a_new Spree::Gateway::PayPalExpress expect(response).to render_template partial: '_provider_settings' end - - context "with a non valid payment method" do - it "renders provider settings with a new generic payment method" do - spree_get :show_provider_preferences, - pm_id: "", - provider_type: "Spree::Gateway::Hacked" - - expect(assigns(:payment_method)).to be_a_new Spree::PaymentMethod - expect(response).to render_template partial: '_provider_settings' - end - end end end end From 93f2af7e7d074905eacbc8a71511f94ae6f57a75 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 9 Jan 2026 14:36:56 +1100 Subject: [PATCH 6/8] Lazy load payment method classes This avoids any class reloading issues in dev, simplifies most of the code path and opens up for refactoring. The only reason we still load the class is to call `clean_name` on it for the translation key. We can probably do better. --- .../spree/admin/payment_methods_controller.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/spree/admin/payment_methods_controller.rb b/app/controllers/spree/admin/payment_methods_controller.rb index 08c0e600b6..296db04548 100644 --- a/app/controllers/spree/admin/payment_methods_controller.rb +++ b/app/controllers/spree/admin/payment_methods_controller.rb @@ -14,7 +14,7 @@ module Spree Spree::PaymentMethod::Check Spree::Gateway::PayPalExpress Spree::Gateway::StripeSCA - }.index_with(&:constantize).freeze + }.freeze def create force_environment @@ -117,7 +117,7 @@ module Spree end def validate_payment_method_provider - valid_payment_methods = PAYMENT_METHODS.keys + valid_payment_methods = PAYMENT_METHODS return if valid_payment_methods.include?(params[:payment_method][:type]) flash[:error] = Spree.t(:invalid_payment_provider) @@ -133,13 +133,13 @@ module Spree end def load_providers - providers = PAYMENT_METHODS.values.sort_by(&:name) + providers = PAYMENT_METHODS.sort unless show_stripe? providers.reject! { |provider| stripe_provider?(provider) } end - providers + providers.map(&:constantize) end # Show Stripe as an option if enabled, or if the @@ -165,7 +165,7 @@ module Spree end def stripe_provider?(provider) - provider.name.ends_with?("StripeSCA") + provider.ends_with?("StripeSCA") end def base_params From 2e08c9c44e0baf29702b7e7ce5408f82cfe7d58f Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 9 Jan 2026 15:44:14 +1100 Subject: [PATCH 7/8] Simplify with defined order of payment methods --- app/controllers/spree/admin/payment_methods_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/spree/admin/payment_methods_controller.rb b/app/controllers/spree/admin/payment_methods_controller.rb index 296db04548..93b5bc08cf 100644 --- a/app/controllers/spree/admin/payment_methods_controller.rb +++ b/app/controllers/spree/admin/payment_methods_controller.rb @@ -11,9 +11,9 @@ module Spree respond_to :html PAYMENT_METHODS = %w{ - Spree::PaymentMethod::Check Spree::Gateway::PayPalExpress Spree::Gateway::StripeSCA + Spree::PaymentMethod::Check }.freeze def create @@ -133,7 +133,7 @@ module Spree end def load_providers - providers = PAYMENT_METHODS.sort + providers = PAYMENT_METHODS.dup unless show_stripe? providers.reject! { |provider| stripe_provider?(provider) } From f3c60148c14c662c778e0e3d8f96ee831495c050 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 9 Jan 2026 15:53:03 +1100 Subject: [PATCH 8/8] Simplify filtering of Stripe --- app/controllers/spree/admin/payment_methods_controller.rb | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/app/controllers/spree/admin/payment_methods_controller.rb b/app/controllers/spree/admin/payment_methods_controller.rb index 93b5bc08cf..6584dd87ce 100644 --- a/app/controllers/spree/admin/payment_methods_controller.rb +++ b/app/controllers/spree/admin/payment_methods_controller.rb @@ -135,9 +135,7 @@ module Spree def load_providers providers = PAYMENT_METHODS.dup - unless show_stripe? - providers.reject! { |provider| stripe_provider?(provider) } - end + providers.delete("Spree::Gateway::StripeSCA") unless show_stripe? providers.map(&:constantize) end @@ -164,10 +162,6 @@ module Spree @payment_method.try(:type) == "Spree::Gateway::StripeSCA" end - def stripe_provider?(provider) - provider.ends_with?("StripeSCA") - end - def base_params @base_params ||= PermittedAttributes::PaymentMethod.new(params[:payment_method]). call.to_h.with_indifferent_access