Class: Cart::ConflictResolver
- Inherits:
-
Object
- Object
- Cart::ConflictResolver
- Defined in:
- app/services/cart/conflict_resolver.rb
Overview
Service to handle cart conflicts when a user logs in with items in their guest cart
and also has items in their existing account cart
Constant Summary collapse
- STRATEGIES =
%i[use_account replace_with_guest merge].freeze
Instance Attribute Summary collapse
-
#account_cart ⇒ Object
readonly
Returns the value of attribute account_cart.
-
#conflict_detected ⇒ Object
readonly
Returns the value of attribute conflict_detected.
-
#guest_cart ⇒ Object
readonly
Returns the value of attribute guest_cart.
Instance Method Summary collapse
-
#conflict? ⇒ Boolean
Check if there's a conflict (both carts have items).
-
#conflict_summary ⇒ Object
Get summary of both carts for display.
-
#initialize(account_cart:, guest_cart:) ⇒ ConflictResolver
constructor
A new instance of ConflictResolver.
-
#resolve(strategy:) ⇒ Object
Resolve the conflict based on user's chosen strategy.
Constructor Details
#initialize(account_cart:, guest_cart:) ⇒ ConflictResolver
Returns a new instance of ConflictResolver.
11 12 13 14 15 |
# File 'app/services/cart/conflict_resolver.rb', line 11 def initialize(account_cart:, guest_cart:) @account_cart = account_cart @guest_cart = guest_cart @conflict_detected = detect_conflict end |
Instance Attribute Details
#account_cart ⇒ Object (readonly)
Returns the value of attribute account_cart.
9 10 11 |
# File 'app/services/cart/conflict_resolver.rb', line 9 def account_cart @account_cart end |
#conflict_detected ⇒ Object (readonly)
Returns the value of attribute conflict_detected.
9 10 11 |
# File 'app/services/cart/conflict_resolver.rb', line 9 def conflict_detected @conflict_detected end |
#guest_cart ⇒ Object (readonly)
Returns the value of attribute guest_cart.
9 10 11 |
# File 'app/services/cart/conflict_resolver.rb', line 9 def guest_cart @guest_cart end |
Instance Method Details
#conflict? ⇒ Boolean
Check if there's a conflict (both carts have items)
18 19 20 |
# File 'app/services/cart/conflict_resolver.rb', line 18 def conflict? @conflict_detected end |
#conflict_summary ⇒ Object
Get summary of both carts for display
23 24 25 26 27 28 29 30 |
# File 'app/services/cart/conflict_resolver.rb', line 23 def conflict_summary return nil unless conflict? { account_cart: cart_summary(account_cart), guest_cart: cart_summary(guest_cart) } end |
#resolve(strategy:) ⇒ Object
Resolve the conflict based on user's chosen strategy
33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'app/services/cart/conflict_resolver.rb', line 33 def resolve(strategy:) strategy = strategy.to_sym raise ArgumentError, "Invalid strategy: #{strategy}" unless STRATEGIES.include?(strategy) case strategy when :use_account use_account_cart when :replace_with_guest replace_with_guest_cart when :merge merge_carts end end |