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
121 122 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 121 def after_submit_purchased! end |
#before_submit_purchased! ⇒ Object
A hook to extend
118 119 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 118 def before_submit_purchased! end |
#billing! ⇒ Object
Owner clicks on the Billing step. Next step is Checkout
96 97 98 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 96 def billing! ready! && save! end |
#build_submit_fees_and_order ⇒ Object
Should be indempotent.
83 84 85 86 87 88 89 90 91 92 93 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 83 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 76 77 78 79 80 |
# 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? } # Make sure all Fees are valid fees.each do |fee| raise('expected a valid fee') unless fee.valid? end # 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
102 103 104 105 106 107 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 102 def ready! without_current_step do build_submit_fees_and_order save! end end |
#submit! ⇒ Object
Draft -> Submitted requirements
125 126 127 128 129 130 131 132 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 125 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
110 111 112 113 114 115 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 110 def submit_purchased! return false if was_submitted? wizard_steps[:checkout] = Time.zone.now submit! end |