Module: EffectiveOrders
- Includes:
- EffectiveGem
- Defined in:
- lib/effective_orders.rb,
lib/effective_orders/engine.rb,
lib/effective_orders/version.rb,
lib/generators/effective_orders/install_generator.rb
Defined Under Namespace
Modules: Generators Classes: AlreadyPurchasedException, Engine, SoldOutException
Constant Summary collapse
- PENDING =
Order states
'pending'
- CONFIRMED =
New orders are created in a pending state
'confirmed'
- DEFERRED =
Once the order has passed checkout step 1
'deferred'
- PURCHASED =
Deferred providers. Cheque or Phone was selected.
'purchased'
- DECLINED =
Purchased by provider
'declined'
- ABANDONED =
Declined by provider
'abandoned'
- STATES =
Not set by this gem. Can be set outside it.
{ PENDING => PENDING, CONFIRMED => CONFIRMED, DEFERRED => DEFERRED, PURCHASED => PURCHASED, DECLINED => DECLINED, ABANDONED => ABANDONED }
- ACTIVE =
Subscription statuses (as per stripe)
'active'
- PAST_DUE =
'past_due'
- TRIALING =
'trialing'
- CANCELED =
'canceled'
- STATUSES =
{ ACTIVE => ACTIVE, PAST_DUE => PAST_DUE, CANCELED => CANCELED, TRIALING => TRIALING }
- VERSION =
'5.2.4'.freeze
Class Method Summary collapse
- .can_skip_checkout_step1? ⇒ Boolean
- .cheque? ⇒ Boolean
- .config_keys ⇒ Object
- .deferred? ⇒ Boolean
- .deferred_providers ⇒ Object
- .free? ⇒ Boolean
- .mailer_klass ⇒ Object
- .mark_as_paid? ⇒ Boolean
- .moneris? ⇒ Boolean
- .moneris_checkout? ⇒ Boolean
- .moneris_checkout_script_url ⇒ Object
- .moneris_request_url ⇒ Object
-
.payment_providers ⇒ Object
The Effective::Order.payment_provider value must be in this collection.
- .paypal? ⇒ Boolean
- .permitted_params ⇒ Object
- .phone? ⇒ Boolean
- .pretend? ⇒ Boolean
- .refund? ⇒ Boolean
- .single_payment_processor? ⇒ Boolean
- .stripe? ⇒ Boolean
- .stripe_plans ⇒ Object
- .stripe_plans_collection ⇒ Object
- .subscriptions? ⇒ Boolean
- .trial? ⇒ Boolean
Class Method Details
.can_skip_checkout_step1? ⇒ Boolean
144 145 146 147 148 149 150 |
# File 'lib/effective_orders.rb', line 144 def self.can_skip_checkout_step1? return false if require_billing_address return false if require_shipping_address return false if collect_note return false if terms_and_conditions true end |
.cheque? ⇒ Boolean
61 62 63 |
# File 'lib/effective_orders.rb', line 61 def self.cheque? cheque.kind_of?(Hash) end |
.config_keys ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/effective_orders.rb', line 32 def self.config_keys [ :orders_table_name, :order_items_table_name, :carts_table_name, :cart_items_table_name, :customers_table_name, :subscriptions_table_name, :products_table_name, :layout, :mailer_class_name, :mailer, :orders_collection_scope, :order_tax_rate_method, :obfuscate_order_ids, :use_effective_qb_sync, :billing_address, :shipping_address, :collect_note, :collect_note_required, :collect_note_message, :terms_and_conditions, :terms_and_conditions_label, :minimum_charge, # Features :free_enabled, :mark_as_paid_enabled, :pretend_enabled, :pretend_message, # Payment processors. false or Hash :cheque, :moneris, :moneris_checkout, :paypal, :phone, :refund, :stripe, :subscriptions, :trial ] end |
.deferred? ⇒ Boolean
69 70 71 |
# File 'lib/effective_orders.rb', line 69 def self.deferred? deferred_providers.present? end |
.deferred_providers ⇒ Object
135 136 137 |
# File 'lib/effective_orders.rb', line 135 def self.deferred_providers [('cheque' if cheque?), ('phone' if phone?)].compact end |
.free? ⇒ Boolean
65 66 67 |
# File 'lib/effective_orders.rb', line 65 def self.free? free_enabled == true end |
.mailer_klass ⇒ Object
139 140 141 142 |
# File 'lib/effective_orders.rb', line 139 def self.mailer_klass name = mailer_class_name.presence || 'Effective::OrdersMailer' name.safe_constantize || raise("unable to constantize mailer class. check config.mailer_class_name") end |
.mark_as_paid? ⇒ Boolean
73 74 75 |
# File 'lib/effective_orders.rb', line 73 def self.mark_as_paid? mark_as_paid_enabled == true end |
.moneris? ⇒ Boolean
77 78 79 |
# File 'lib/effective_orders.rb', line 77 def self.moneris? moneris.kind_of?(Hash) end |
.moneris_checkout? ⇒ Boolean
81 82 83 |
# File 'lib/effective_orders.rb', line 81 def self.moneris_checkout? moneris_checkout.kind_of?(Hash) end |
.moneris_checkout_script_url ⇒ Object
214 215 216 217 218 219 220 |
# File 'lib/effective_orders.rb', line 214 def self.moneris_checkout_script_url case EffectiveOrders.moneris_checkout.fetch(:environment) when 'prod' then 'https://gateway.moneris.com/chkt/js/chkt_v1.00.js' when 'qa' then 'https://gatewayt.moneris.com/chkt/js/chkt_v1.00.js' else raise('unexpected EffectiveOrders.moneris_checkout :environment key. Please check your config/initializers/effective_orders.rb file') end end |
.moneris_request_url ⇒ Object
222 223 224 225 226 227 228 |
# File 'lib/effective_orders.rb', line 222 def self.moneris_request_url case EffectiveOrders.moneris_checkout.fetch(:environment) when 'prod' then 'https://gateway.moneris.com/chkt/request/request.php' when 'qa' then 'https://gatewayt.moneris.com/chkt/request/request.php' else raise('unexpected EffectiveOrders.moneris_checkout :environment key. Please check your config/initializers/effective_orders.rb file') end end |
.payment_providers ⇒ Object
The Effective::Order.payment_provider value must be in this collection
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/effective_orders.rb', line 118 def self.payment_providers [ ('cheque' if cheque?), ('credit card' if mark_as_paid?), ('free' if free?), ('moneris' if moneris?), ('moneris_checkout' if moneris_checkout?), ('paypal' if paypal?), ('phone' if phone?), ('pretend' if pretend?), ('refund' if refund?), ('stripe' if stripe?), ('other' if mark_as_paid?), 'none' ].compact end |
.paypal? ⇒ Boolean
85 86 87 |
# File 'lib/effective_orders.rb', line 85 def self.paypal? paypal.kind_of?(Hash) end |
.permitted_params ⇒ Object
52 53 54 55 56 57 58 59 |
# File 'lib/effective_orders.rb', line 52 def self.permitted_params @permitted_params ||= [ :cc, :note, :terms_and_conditions, :confirmed_checkout, billing_address: EffectiveAddresses.permitted_params, shipping_address: EffectiveAddresses.permitted_params, subscripter: [:stripe_plan_id, :stripe_token] ] end |
.phone? ⇒ Boolean
89 90 91 |
# File 'lib/effective_orders.rb', line 89 def self.phone? phone.kind_of?(Hash) end |
.pretend? ⇒ Boolean
93 94 95 |
# File 'lib/effective_orders.rb', line 93 def self.pretend? pretend_enabled == true end |
.refund? ⇒ Boolean
97 98 99 |
# File 'lib/effective_orders.rb', line 97 def self.refund? refund.kind_of?(Hash) end |
.single_payment_processor? ⇒ Boolean
113 114 115 |
# File 'lib/effective_orders.rb', line 113 def self.single_payment_processor? [moneris?, moneris_checkout?, paypal?, stripe?].select { |enabled| enabled }.length == 1 end |
.stripe? ⇒ Boolean
101 102 103 |
# File 'lib/effective_orders.rb', line 101 def self.stripe? stripe.kind_of?(Hash) end |
.stripe_plans ⇒ Object
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/effective_orders.rb', line 152 def self.stripe_plans return [] unless (stripe? && subscriptions?) @stripe_plans ||= ( Rails.logger.info '[STRIPE] index plans' plans = begin Stripe::Plan.respond_to?(:all) ? Stripe::Plan.all : Stripe::Plan.list rescue => e raise e if Rails.env.production? Rails.logger.info "[STRIPE ERROR]: #{e.}" Rails.logger.info "[STRIPE ERROR]: effective_orders continuing with empty stripe plans. This would fail loudly in Rails.env.production." [] end plans = plans.map do |plan| description = ("$#{'%0.2f' % (plan.amount / 100.0)}" + ' ' + plan.currency.upcase + '/' + plan.interval.to_s) { id: plan.id, product_id: plan.product, name: plan.nickname || description, description: description, amount: plan.amount, currency: plan.currency, interval: plan.interval, interval_count: plan.interval_count, trial_period_days: (plan.trial_period_days if plan.respond_to?(:trial_period_days)) } end.sort do |x, y| val ||= (x[:interval] <=> y[:interval]) val = nil if val == 0 val ||= (x[:amount] <=> y[:amount]) val = nil if val == 0 val ||= (x[:name] <=> y[:name]) val = nil if val == 0 val || (x[:id] <=> y[:id]) end # Calculate savings for any yearly per user plans, based on their matching monthly plans plans.select { |plan| plan[:interval] == 'year' }.each do |yearly| monthly_name = yearly[:name].downcase.gsub('year', 'month') monthly = plans.find { |plan| plan[:interval] == 'month' && plan[:name].downcase == monthly_name } next unless monthly savings = (monthly[:amount].to_i * 12) - yearly[:amount].to_i next unless savings > 0 yearly[:savings] = savings end plans ) end |
.stripe_plans_collection ⇒ Object
210 211 212 |
# File 'lib/effective_orders.rb', line 210 def self.stripe_plans_collection stripe_plans.map { |plan| [plan[:name], plan[:id]] } end |
.subscriptions? ⇒ Boolean
105 106 107 |
# File 'lib/effective_orders.rb', line 105 def self.subscriptions? subscriptions.kind_of?(Hash) end |
.trial? ⇒ Boolean
109 110 111 |
# File 'lib/effective_orders.rb', line 109 def self.trial? trial.kind_of?(Hash) end |