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
125 126 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 125 def after_submit_purchased! end |
#before_submit_purchased! ⇒ Object
A hook to extend
122 123 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 122 def before_submit_purchased! end |
#billing! ⇒ Object
Owner clicks on the Billing step. Next step is Checkout
100 101 102 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 100 def billing! ready! && save! end |
#build_submit_fees_and_order ⇒ Object
Should be indempotent.
85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 85 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('expected an Effective::Order') unless order.kind_of?(Effective::Order) raise('already has purchased submit order') if order.purchased? raise('unable to proceed with a voided submit order') if order.try(:voided?) 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 81 82 |
# 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 but #{fee.id} had errors #{fee.errors.inspect}") 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? # This will update all order items to match the prices from their order.try(:update_purchasable_attributes) # 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
106 107 108 109 110 111 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 106 def ready! without_current_step do build_submit_fees_and_order save! end end |
#submit! ⇒ Object
Draft -> Submitted requirements
129 130 131 132 133 134 135 136 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 129 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
114 115 116 117 118 119 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 114 def submit_purchased! return false if was_submitted? wizard_steps[:checkout] = Time.zone.now submit! end |