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
115 116 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 115 def after_submit_purchased! end |
#before_submit_purchased! ⇒ Object
A hook to extend
112 113 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 112 def before_submit_purchased! end |
#billing! ⇒ Object
Owner clicks on the Billing step. Next step is Checkout
90 91 92 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 90 def billing! ready! && save! end |
#build_submit_fees_and_order ⇒ Object
Should be indempotent.
77 78 79 80 81 82 83 84 85 86 87 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 77 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 |
# 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 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
96 97 98 99 100 101 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 96 def ready! without_current_step do build_submit_fees_and_order save! end end |
#submit! ⇒ Object
Draft -> Submitted requirements
119 120 121 122 123 124 125 126 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 119 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
104 105 106 107 108 109 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 104 def submit_purchased! return false if was_submitted? wizard_steps[:checkout] = Time.zone.now submit! end |