Class: Spree::PromotionAction
- Defined in:
- app/models/spree/promotion_action.rb
Overview
Base class for all types of promotion action.
PromotionActions perform the necessary tasks when a promotion is activated by an event and determined to be eligible.
Direct Known Subclasses
Spree::Promotion::Actions::CreateAdjustment, Spree::Promotion::Actions::CreateItemAdjustments, Spree::Promotion::Actions::FreeShipping
Instance Method Summary collapse
-
#perform(_options = {}) ⇒ Object
Updates the state of the order or performs some other action depending on the subclass options will contain the payload from the event that activated the promotion.
-
#remove_from(order) ⇒ void
Removes the action from an order.
- #to_partial_path ⇒ Object
Methods inherited from Base
display_includes, #initialize_preference_defaults, page, preference
Methods included from Spree::Preferences::Preferable
#default_preferences, #defined_preferences, #get_preference, #has_preference!, #has_preference?, #preference_default, #preference_type, #set_preference
Instance Method Details
#perform(_options = {}) ⇒ Object
This method should be overriden in subclassses.
Updates the state of the order or performs some other action depending on the subclass options will contain the payload from the event that activated the promotion. This will include the key :user which allows user based actions to be performed in addition to actions on the order
19 20 21 |
# File 'app/models/spree/promotion_action.rb', line 19 def perform( = {}) raise 'perform should be implemented in a sub-class of PromotionAction' end |
#remove_from(order) ⇒ void
This method should be overriden in subclassses.
This method returns an undefined value.
Removes the action from an order
29 30 31 32 33 34 35 36 37 38 |
# File 'app/models/spree/promotion_action.rb', line 29 def remove_from(order) Spree::Deprecation.warn("#{self.class.name.inspect} does not define #remove_from. The default behavior may be incorrect and will be removed in a future version of Solidus.", caller) [order, *order.line_items, *order.shipments].each do |item| item.adjustments.each do |adjustment| if adjustment.source == self item.adjustments.destroy(adjustment) end end end end |
#to_partial_path ⇒ Object
40 41 42 |
# File 'app/models/spree/promotion_action.rb', line 40 def to_partial_path "spree/admin/promotions/actions/#{model_name.element}" end |