Skip to content

Commit 01f451b

Browse files
committed
Add configurable mergeable orders finder class
Introduce `Spree::Config.mergeable_orders_finder_class` to allow stores to customize which orders are merged when a user logs in. By default, all incomplete orders from the same store are merged, but stores can implement custom logic (e.g., only merge orders from the last 7 days) by providing a custom finder class. Changes include: - Add `Spree::MergeableOrdersFinder` to centralize order selection logic and support custom strategies - Update `set_current_order` in `Spree::Core::ControllerHelpers::Order` to delegate order selection to the configured finder - Add `class_name_attribute :mergeable_orders_finder_class` to `Spree::AppConfiguration` with default `'Spree::MergeableOrdersFinder'` Issue #6366 Signed-off-by: Thukten Singye <[email protected]>
1 parent 839752f commit 01f451b

File tree

3 files changed

+23
-4
lines changed

3 files changed

+23
-4
lines changed

core/app/helpers/spree/core/controller_helpers/order.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,12 @@ def associate_user
4242
end
4343

4444
def set_current_order
45-
if spree_current_user && current_order
46-
spree_current_user.orders.by_store(current_store).incomplete.where('id != ?', current_order.id).find_each do |order|
47-
current_order.merge!(order, spree_current_user)
48-
end
45+
Spree::Config.mergeable_orders_finder_class.new(
46+
user: spree_current_user,
47+
store: current_store,
48+
current_order: current_order
49+
).call.find_each do |order|
50+
current_order.merge!(order, spree_current_user)
4951
end
5052
end
5153

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# frozen_string_literal: true
2+
3+
module Spree
4+
class MergeableOrdersFinder
5+
def initialize(user:, store:, current_order:)
6+
@user = user
7+
@store = store
8+
@current_order = current_order
9+
end
10+
11+
def call
12+
@user.orders.by_store(@store).incomplete.where.not(id: @current_order.id)
13+
end
14+
end
15+
end

core/lib/spree/app_configuration.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,8 @@ def default_pricing_options
409409
# as Spree::OrderMerger.
410410
class_name_attribute :order_merger_class, default: 'Spree::OrderMerger'
411411

412+
class_name_attribute :mergeable_orders_finder_class, default: 'Spree::MergeableOrdersFinder'
413+
412414
# Allows providing your own class for adding default payments to a user's
413415
# order from their "wallet".
414416
#

0 commit comments

Comments
 (0)