Module: ActsAsPurchasableWizard
- Extended by:
- ActiveSupport::Concern
- Defined in:
- app/models/concerns/acts_as_purchasable_wizard.rb
Overview
ActsAsPurchasableWizard
Defined Under Namespace
Modules: Base, ClassMethods
Instance Method Summary collapse
- #after_submit_purchased! ⇒ Object
-
#before_submit_purchased! ⇒ Object
A hook to extend.
-
#billing! ⇒ Object
Owner clicks on the Billing step.
-
#build_submit_fees_and_order ⇒ Object
Should be indempotent.
- #find_or_build_submit_fees ⇒ Object
- #find_or_build_submit_order ⇒ Object
-
#ready! ⇒ Object
Ready to check out This is called by the “ready_checkout” before_action in wizard_controller/before_actions.rb.
-
#submit! ⇒ Object
Draft -> Submitted requirements.
-
#submit_fees ⇒ Object
All Fees and Orders.
- #submit_order ⇒ Object
-
#submit_purchased! ⇒ Object
Called automatically via after_purchase hook above.
Instance Method Details
#after_submit_purchased! ⇒ Object
116 117 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 116 def after_submit_purchased! end |
#before_submit_purchased! ⇒ Object
A hook to extend
113 114 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 113 def before_submit_purchased! end |
#billing! ⇒ Object
Owner clicks on the Billing step. Next step is Checkout
91 92 93 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 91 def billing! ready! && save! end |
#build_submit_fees_and_order ⇒ Object
Should be indempotent.
78 79 80 81 82 83 84 85 86 87 88 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 78 def build_submit_fees_and_order return false if was_submitted? fees = find_or_build_submit_fees() raise('already has purchased submit fees') if fees.any?(&:purchased?) order = find_or_build_submit_order() raise('already has purchased submit order') if order.purchased? true end |
#find_or_build_submit_fees ⇒ Object
46 47 48 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 46 def find_or_build_submit_fees submit_fees end |
#find_or_build_submit_order ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 50 def find_or_build_submit_order order = submit_order || orders.build(user: owner) # This is polymorphic user, might be an organization fees = submit_fees().reject { |fee| fee.marked_for_destruction? } # A membership could go from individual to organization order.user = owner # Adds fees, but does not overwrite any existing price. fees.each do |fee| order.add(fee) unless order.purchasables.include?(fee) end order.order_items.each do |order_item| fee = fees.find { |fee| fee == order_item.purchasable } order.remove(order_item) unless fee.present? end # From Billing Step order.billing_address = owner.billing_address if owner.try(:billing_address).present? # Important to add/remove anything # This will update the prices, but the purchasables must be persisted order.save! order end |
#ready! ⇒ Object
Ready to check out This is called by the “ready_checkout” before_action in wizard_controller/before_actions.rb
97 98 99 100 101 102 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 97 def ready! without_current_step do build_submit_fees_and_order save! end end |
#submit! ⇒ Object
Draft -> Submitted requirements
120 121 122 123 124 125 126 127 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 120 def submit! raise('already submitted') if was_submitted? raise('expected a purchased order') unless submit_order&.purchased? wizard_steps[:checkout] ||= Time.zone.now wizard_steps[:submitted] = Time.zone.now submitted! end |
#submit_fees ⇒ Object
All Fees and Orders
38 39 40 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 38 def submit_fees raise('to be implemented by caller') end |
#submit_order ⇒ Object
42 43 44 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 42 def submit_order orders.first end |
#submit_purchased! ⇒ Object
Called automatically via after_purchase hook above
105 106 107 108 109 110 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 105 def submit_purchased! return false if was_submitted? wizard_steps[:checkout] = Time.zone.now submit! end |