Skip to content

Commit f4b17da

Browse files
committed
Add documentation for mergeable orders finder
Introduce YARD documentation for `Spree::MergeableOrdersFinder` and the `mergeable_orders_finder_class` configuration attribute to clarify how order merging behavior can be customized. This patch adds: - Detailed YARD docs explaining the purpose and behavior of `MergeableOrdersFinder` - Documentation for the `mergeable_orders_finder_class` Signed-off-by: Thukten Singye <[email protected]>
1 parent d22e9be commit f4b17da

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

core/app/models/spree/mergeable_orders_finder.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,41 @@
11
# frozen_string_literal: true
22

33
module Spree
4+
# Finds orders to merge when a user logs in.
5+
#
6+
# Configurable via {Spree::Config#mergeable_orders_finder_class}.
7+
# Default behavior finds all incomplete orders from the same store.
8+
#
9+
# @example Custom finder for recent orders only
10+
# class RecentOrdersFinder
11+
# def initialize(user:, store:, current_order:)
12+
# @user = user
13+
# @store = store
14+
# @current_order = current_order
15+
# end
16+
#
17+
# def call
18+
# @user.orders.by_store(@store).incomplete
19+
# .where.not(id: @current_order.id)
20+
# .where('created_at > ?', 7.days.ago)
21+
# end
22+
# end
23+
#
24+
# Spree::Config.mergeable_orders_finder_class = RecentOrdersFinder
425
class MergeableOrdersFinder
26+
# @param user [Spree::User] the user whose orders to find
27+
# @param store [Spree::Store] the current store
28+
# @param current_order [Spree::Order] the current session order
529
def initialize(user:, store:, current_order:)
630
@user = user
731
@store = store
832
@current_order = current_order
933
end
1034

35+
# Returns orders that should be merged into the current order
36+
#
37+
# @return [ActiveRecord::Relation<Spree::Order>] incomplete orders from the
38+
# same store
1139
def call
1240
@user.orders.by_store(@store).incomplete.where.not(id: @current_order.id)
1341
end

core/lib/spree/app_configuration.rb

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

412+
# Allows providing your own class for selecting which orders to merge.
413+
#
414+
# @!attribute [rw] mergeable_orders_finder_class
415+
# @return [Class] a class with the same public interfaces as
416+
# Spree::MergeableOrdersFinder.
412417
class_name_attribute :mergeable_orders_finder_class, default: 'Spree::MergeableOrdersFinder'
413418

414419
# Allows providing your own class for adding default payments to a user's

0 commit comments

Comments
 (0)