Class: Spree::PromotionHandler::Cart
- Inherits:
-
Object
- Object
- Spree::PromotionHandler::Cart
- Defined in:
- app/models/spree/promotion_handler/cart.rb
Overview
Decides which promotion should be activated given the current order context
By activated it doesn’t necessarily mean that the order will have a discount for every activated promotion. It means that the discount will be created and might eventually become eligible. The intention here is to reduce overhead. e.g. a promotion that requires item A to be eligible shouldn’t be eligible unless item A is added to the order.
It can be used as a wrapper for custom handlers as well. Different applications might have completely different requirements to make the promotions system accurate and performant. Here they can plug custom handler to activate promos as they wish once an item is added to cart
Instance Attribute Summary collapse
-
#error ⇒ Object
Returns the value of attribute error.
-
#line_item ⇒ Object
readonly
Returns the value of attribute line_item.
-
#order ⇒ Object
readonly
Returns the value of attribute order.
-
#success ⇒ Object
Returns the value of attribute success.
Instance Method Summary collapse
- #activate ⇒ Object
-
#initialize(order, line_item = nil) ⇒ Cart
constructor
A new instance of Cart.
Constructor Details
#initialize(order, line_item = nil) ⇒ Cart
Returns a new instance of Cart.
21 22 23 |
# File 'app/models/spree/promotion_handler/cart.rb', line 21 def initialize(order, line_item = nil) @order, @line_item = order, line_item end |
Instance Attribute Details
#error ⇒ Object
Returns the value of attribute error.
19 20 21 |
# File 'app/models/spree/promotion_handler/cart.rb', line 19 def error @error end |
#line_item ⇒ Object (readonly)
Returns the value of attribute line_item.
18 19 20 |
# File 'app/models/spree/promotion_handler/cart.rb', line 18 def line_item @line_item end |
#order ⇒ Object (readonly)
Returns the value of attribute order.
18 19 20 |
# File 'app/models/spree/promotion_handler/cart.rb', line 18 def order @order end |
#success ⇒ Object
Returns the value of attribute success.
19 20 21 |
# File 'app/models/spree/promotion_handler/cart.rb', line 19 def success @success end |
Instance Method Details
#activate ⇒ Object
25 26 27 28 29 30 31 |
# File 'app/models/spree/promotion_handler/cart.rb', line 25 def activate promotions.each do |promotion| if (line_item && promotion.eligible?(line_item, promotion_code: promotion_code(promotion))) || promotion.eligible?(order, promotion_code: promotion_code(promotion)) promotion.activate(line_item: line_item, order: order, promotion_code: promotion_code(promotion)) end end end |