effective_orders 1.8.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +150 -60
  4. data/Rakefile +0 -3
  5. data/active_admin/effective_orders.rb +14 -9
  6. data/app/assets/javascripts/effective_orders.js +2 -0
  7. data/app/assets/javascripts/effective_orders/{stripe_charges.js.coffee → providers/stripe_charges.js.coffee} +1 -1
  8. data/app/assets/javascripts/effective_orders/{stripe_subscriptions.js.coffee → providers/stripe_subscriptions.js.coffee} +1 -1
  9. data/app/assets/stylesheets/effective_orders/_order.scss +9 -3
  10. data/app/controllers/admin/orders_controller.rb +87 -3
  11. data/app/controllers/concerns/acts_as_active_admin_controller.rb +2 -1
  12. data/app/controllers/effective/carts_controller.rb +4 -2
  13. data/app/controllers/effective/orders_controller.rb +101 -60
  14. data/app/controllers/effective/providers/app_checkout.rb +10 -2
  15. data/app/controllers/effective/providers/ccbill.rb +34 -0
  16. data/app/controllers/effective/providers/cheque.rb +30 -0
  17. data/app/controllers/effective/providers/moneris.rb +7 -7
  18. data/app/controllers/effective/providers/paypal.rb +7 -5
  19. data/app/controllers/effective/providers/pretend.rb +22 -0
  20. data/app/controllers/effective/providers/stripe.rb +26 -24
  21. data/app/controllers/effective/webhooks_controller.rb +1 -1
  22. data/app/helpers/effective_carts_helper.rb +59 -29
  23. data/app/helpers/effective_ccbill_helper.rb +25 -0
  24. data/app/helpers/effective_orders_helper.rb +50 -41
  25. data/app/helpers/effective_paypal_helper.rb +11 -11
  26. data/app/mailers/effective/orders_mailer.rb +95 -20
  27. data/app/models/concerns/acts_as_purchasable.rb +14 -22
  28. data/app/models/effective/cart.rb +9 -15
  29. data/app/models/effective/cart_item.rb +15 -13
  30. data/app/models/effective/customer.rb +9 -9
  31. data/app/models/effective/datatables/order_items.rb +14 -8
  32. data/app/models/effective/datatables/orders.rb +56 -69
  33. data/app/models/effective/order.rb +250 -139
  34. data/app/models/effective/order_item.rb +23 -16
  35. data/app/models/effective/product.rb +23 -0
  36. data/app/models/effective/providers/ccbill_postback.rb +85 -0
  37. data/app/models/effective/{stripe_charge.rb → providers/stripe_charge.rb} +1 -1
  38. data/app/models/effective/subscription.rb +16 -12
  39. data/app/models/effective/tax_rate_calculator.rb +45 -0
  40. data/app/views/admin/customers/index.html.haml +2 -5
  41. data/app/views/admin/order_items/index.html.haml +2 -5
  42. data/app/views/admin/orders/_actions.html.haml +2 -0
  43. data/app/views/admin/orders/_form.html.haml +28 -0
  44. data/app/views/admin/orders/_order_item_fields.html.haml +9 -0
  45. data/app/views/admin/orders/index.html.haml +9 -5
  46. data/app/views/admin/orders/new.html.haml +3 -0
  47. data/app/views/effective/carts/_cart.html.haml +3 -12
  48. data/app/views/effective/carts/_cart_actions.html.haml +4 -0
  49. data/app/views/effective/carts/show.html.haml +10 -12
  50. data/app/views/effective/orders/_checkout_step1.html.haml +46 -0
  51. data/app/views/effective/orders/_checkout_step2.html.haml +33 -0
  52. data/app/views/effective/orders/_order.html.haml +2 -0
  53. data/app/views/effective/orders/_order_actions.html.haml +10 -5
  54. data/app/views/effective/orders/_order_footer.html.haml +1 -0
  55. data/app/views/effective/orders/_order_items.html.haml +11 -9
  56. data/app/views/effective/orders/_order_note.html.haml +8 -0
  57. data/app/views/effective/orders/_order_note_fields.html.haml +5 -0
  58. data/app/views/effective/orders/_order_shipping.html.haml +4 -4
  59. data/app/views/effective/orders/_order_user_fields.html.haml +1 -0
  60. data/app/views/effective/orders/_orders_table.html.haml +27 -0
  61. data/app/views/effective/orders/ccbill/_form.html.haml +24 -0
  62. data/app/views/effective/orders/checkout_step1.html.haml +3 -0
  63. data/app/views/effective/orders/checkout_step2.html.haml +3 -0
  64. data/app/views/effective/orders/cheque/_form.html.haml +2 -0
  65. data/app/views/effective/orders/cheque/pay_by_cheque.html.haml +9 -0
  66. data/app/views/effective/orders/declined.html.haml +4 -2
  67. data/app/views/effective/orders/my_purchases.html.haml +1 -1
  68. data/app/views/effective/orders/my_sales.html.haml +1 -1
  69. data/app/views/effective/orders/purchased.html.haml +3 -2
  70. data/app/views/effective/orders/show.html.haml +1 -1
  71. data/app/views/effective/orders/stripe/_form.html.haml +5 -5
  72. data/app/views/effective/orders_mailer/order_error.html.haml +11 -0
  73. data/app/views/effective/orders_mailer/payment_request_to_buyer.html.haml +13 -0
  74. data/app/views/effective/orders_mailer/pending_order_invoice_to_buyer.html.haml +13 -0
  75. data/app/views/layouts/effective_orders_mailer_layout.html.haml +7 -7
  76. data/config/routes.rb +39 -24
  77. data/db/migrate/01_create_effective_orders.rb.erb +20 -1
  78. data/db/upgrade/03_upgrade_effective_orders_from1x.rb.erb +95 -0
  79. data/lib/effective_orders.rb +67 -9
  80. data/lib/effective_orders/app_checkout_service.rb +1 -2
  81. data/lib/effective_orders/engine.rb +46 -14
  82. data/lib/effective_orders/version.rb +1 -1
  83. data/lib/generators/effective_orders/install_generator.rb +1 -0
  84. data/lib/generators/effective_orders/upgrade_from03x_generator.rb +1 -0
  85. data/lib/generators/effective_orders/upgrade_from1x_generator.rb +31 -0
  86. data/lib/generators/templates/effective_orders.rb +131 -66
  87. data/lib/generators/templates/effective_orders_mailer_preview.rb +28 -13
  88. data/spec/controllers/admin/orders_controller_spec.rb +242 -0
  89. data/spec/controllers/ccbill_orders_controller_spec.rb +103 -0
  90. data/spec/controllers/moneris_orders_controller_spec.rb +23 -23
  91. data/spec/controllers/orders_controller_spec.rb +167 -79
  92. data/spec/controllers/stripe_orders_controller_spec.rb +7 -7
  93. data/spec/dummy/app/models/product.rb +0 -8
  94. data/spec/dummy/app/models/product_with_float_price.rb +0 -8
  95. data/spec/dummy/app/models/user.rb +2 -19
  96. data/spec/dummy/config/application.rb +2 -1
  97. data/spec/dummy/config/environments/test.rb +1 -0
  98. data/spec/dummy/config/initializers/effective_orders.rb +109 -64
  99. data/spec/dummy/db/schema.rb +15 -2
  100. data/spec/dummy/db/test.sqlite3 +0 -0
  101. data/spec/dummy/log/test.log +0 -258
  102. data/spec/models/acts_as_purchasable_spec.rb +8 -6
  103. data/spec/models/factories_spec.rb +7 -1
  104. data/spec/models/order_item_spec.rb +1 -1
  105. data/spec/models/order_spec.rb +165 -46
  106. data/spec/models/stripe_charge_spec.rb +5 -5
  107. data/spec/spec_helper.rb +2 -0
  108. data/spec/support/factories.rb +49 -33
  109. metadata +47 -64
  110. data/app/views/effective/orders/_checkout_step_1.html.haml +0 -43
  111. data/app/views/effective/orders/_checkout_step_2.html.haml +0 -25
  112. data/app/views/effective/orders/_my_purchases.html.haml +0 -17
  113. data/app/views/effective/orders/checkout.html.haml +0 -3
  114. data/app/views/effective/orders/new.html.haml +0 -4
  115. data/spec/dummy/log/development.log +0 -82
@@ -5,8 +5,19 @@ class CreateEffectiveOrders < ActiveRecord::Migration
5
5
  t.string :purchase_state
6
6
  t.datetime :purchased_at
7
7
 
8
+ t.text :note
9
+
8
10
  t.text :payment
9
11
 
12
+ t.string :payment_provider
13
+ t.string :payment_card
14
+
15
+ t.decimal :tax_rate, :precision => 6, :scale => 3
16
+
17
+ t.integer :subtotal
18
+ t.integer :tax
19
+ t.integer :total
20
+
10
21
  t.timestamps
11
22
  end
12
23
 
@@ -23,7 +34,6 @@ class CreateEffectiveOrders < ActiveRecord::Migration
23
34
  t.integer :quantity
24
35
  t.integer :price, :default => 0
25
36
  t.boolean :tax_exempt
26
- t.decimal :tax_rate, :precision => 5, :scale => 3, :default => 0.0
27
37
 
28
38
  t.timestamps
29
39
  end
@@ -78,6 +88,14 @@ class CreateEffectiveOrders < ActiveRecord::Migration
78
88
 
79
89
  add_index <%= @subscriptions_table_name %>, :customer_id
80
90
  add_index <%= @subscriptions_table_name %>, :stripe_subscription_id
91
+
92
+ create_table <%= @products_table_name %> do |t|
93
+ t.string :title
94
+ t.integer :price, :default => 0
95
+ t.boolean :tax_exempt, :default => false
96
+
97
+ t.timestamps
98
+ end
81
99
  end
82
100
 
83
101
  def self.down
@@ -87,5 +105,6 @@ class CreateEffectiveOrders < ActiveRecord::Migration
87
105
  drop_table <%= @cart_items_table_name %>
88
106
  drop_table <%= @customers_table_name %>
89
107
  drop_table <%= @subscriptions_table_name %>
108
+ drop_table <%= @products_table_name %>
90
109
  end
91
110
  end
@@ -0,0 +1,95 @@
1
+ class UpgradeEffectiveOrdersFrom1x < ActiveRecord::Migration
2
+ def self.up
3
+ create_table <%= @products_table_name %> do |t|
4
+ t.string :title
5
+ t.integer :price, :default => 0
6
+ t.boolean :tax_exempt, :default => false
7
+
8
+ t.timestamps
9
+ end
10
+
11
+ add_column <%= @orders_table_name %>, :note, :text
12
+ add_column <%= @orders_table_name %>, :payment_provider, :string
13
+ add_column <%= @orders_table_name %>, :payment_card, :string
14
+
15
+ add_column <%= @orders_table_name %>, :tax_rate, :decimal, :precision => 6, :scale => 3
16
+ add_column <%= @orders_table_name %>, :subtotal, :integer
17
+ add_column <%= @orders_table_name %>, :tax, :integer
18
+ add_column <%= @orders_table_name %>, :total, :integer
19
+
20
+ puts 'Resaving all Effective::Order objects to assign new database column values.'
21
+
22
+ Effective::Order.reset_column_information
23
+
24
+ Effective::Order.find_each do |order|
25
+ order.tax_rate = ((order.order_items.first.try(:tax_rate) || 0.0) * 100.0)
26
+ update_payment_provider_and_card(order)
27
+ order.save(validate: false)
28
+ print '.'
29
+ end
30
+ print "\n" if Effective::Order.any?
31
+
32
+ remove_column <%= @order_items_table_name %>, :tax_rate
33
+
34
+ puts 'Done'
35
+ end
36
+
37
+ def self.down
38
+ add_column <%= @order_items_table_name %>, :tax_rate, :decimal, :precision => 5, :scale => 3
39
+ Effective::OrderItem.reset_column_information
40
+ Effective::OrderItem.find_each { |order_item| order_item.update_column(:tax_rate, (order_item.try(:order).tax_rate || 0.0) / 100.0) }
41
+
42
+ remove_column <%= @orders_table_name %>, :note
43
+ remove_column <%= @orders_table_name %>, :payment_provider
44
+ remove_column <%= @orders_table_name %>, :payment_card
45
+
46
+ remove_column <%= @orders_table_name %>, :tax_rate
47
+ remove_column <%= @orders_table_name %>, :subtotal
48
+ remove_column <%= @orders_table_name %>, :tax
49
+ remove_column <%= @orders_table_name %>, :total
50
+ end
51
+
52
+ def update_payment_provider_and_card(order)
53
+ return unless order.payment.present?
54
+
55
+ payment = HashWithIndifferentAccess.new(order.payment)
56
+ charge = HashWithIndifferentAccess.new(payment[:charge])
57
+
58
+ # Try to figure out the payment provider
59
+ provider =
60
+ if payment[:response_code] && payment[:transactionKey]
61
+ 'moneris'
62
+ elsif charge[:id] && charge[:customer] && charge[:application_fee].present?
63
+ 'stripe_connect'
64
+ elsif charge[:id] && charge[:customer]
65
+ 'stripe'
66
+ elsif payment[:payer_email]
67
+ 'paypal'
68
+ elsif (payment[:details] || '').include?('free')
69
+ 'free'
70
+ else
71
+ 'admin'
72
+ end
73
+
74
+ card =
75
+ case provider
76
+ when 'moneris'
77
+ payment[:card]
78
+ when 'stripe_connect'
79
+ (charge['card']['brand'] rescue nil)
80
+ when 'stripe'
81
+ (charge['card']['brand'] rescue nil)
82
+ when 'paypal'
83
+ payment[:payment_type]
84
+ when 'free'
85
+ 'none'
86
+ when 'admin'
87
+ 'none'
88
+ end
89
+
90
+ order.payment_provider = provider.presence || 'admin'
91
+ order.payment_card = card.presence || 'unknown'
92
+ end
93
+
94
+
95
+ end
@@ -1,8 +1,6 @@
1
1
  require 'haml-rails'
2
- require 'migrant'
3
2
  require 'simple_form'
4
3
  require 'effective_addresses'
5
- require 'effective_obfuscation'
6
4
  require 'effective_orders/engine'
7
5
  require 'effective_orders/version'
8
6
  require 'effective_orders/app_checkout_service'
@@ -10,6 +8,7 @@ require 'effective_orders/app_checkout_service'
10
8
  module EffectiveOrders
11
9
  PURCHASED = 'purchased'
12
10
  DECLINED = 'declined'
11
+ PENDING = 'pending'
13
12
 
14
13
  # The following are all valid config keys
15
14
  mattr_accessor :orders_table_name
@@ -18,12 +17,18 @@ module EffectiveOrders
18
17
  mattr_accessor :cart_items_table_name
19
18
  mattr_accessor :customers_table_name
20
19
  mattr_accessor :subscriptions_table_name
20
+ mattr_accessor :products_table_name
21
21
 
22
22
  mattr_accessor :authorization_method
23
- mattr_accessor :tax_rate_method
23
+
24
+ mattr_accessor :skip_mount_engine
25
+ mattr_accessor :orders_collection_scope
26
+
27
+ mattr_accessor :order_tax_rate_method
24
28
 
25
29
  mattr_accessor :layout
26
30
  mattr_accessor :simple_form_options
31
+ mattr_accessor :admin_simple_form_options
27
32
 
28
33
  mattr_accessor :use_active_admin
29
34
  mattr_accessor :active_admin_namespace
@@ -42,20 +47,25 @@ module EffectiveOrders
42
47
  mattr_accessor :collect_user_fields
43
48
  mattr_accessor :skip_user_validation
44
49
 
50
+ mattr_accessor :collect_note
51
+ mattr_accessor :collect_note_required
52
+ mattr_accessor :collect_note_message
53
+
45
54
  mattr_accessor :minimum_charge
46
55
  mattr_accessor :allow_free_orders
56
+ mattr_accessor :show_order_history_button
47
57
 
58
+ mattr_accessor :cheque_enabled
48
59
  mattr_accessor :paypal_enabled
49
60
  mattr_accessor :moneris_enabled
61
+ mattr_accessor :ccbill_enabled
50
62
  mattr_accessor :app_checkout_enabled
51
63
 
52
- mattr_accessor :show_order_history_button
53
-
54
- # application fee is required if stripe_connect_enabled is true
55
64
  mattr_accessor :stripe_enabled
56
-
57
65
  mattr_accessor :stripe_subscriptions_enabled
58
66
  mattr_accessor :stripe_connect_enabled
67
+
68
+ # application fee is required if stripe_connect_enabled is true
59
69
  mattr_accessor :stripe_connect_application_fee_method
60
70
 
61
71
  # These are hashes of configs
@@ -63,12 +73,24 @@ module EffectiveOrders
63
73
  mattr_accessor :paypal
64
74
  mattr_accessor :moneris
65
75
  mattr_accessor :stripe
76
+ mattr_accessor :ccbill
66
77
  mattr_accessor :app_checkout
78
+ mattr_accessor :cheque
67
79
 
68
80
  mattr_accessor :deliver_method
69
81
 
70
82
  def self.setup
71
83
  yield self
84
+
85
+ if EffectiveOrders.stripe_enabled
86
+ begin
87
+ require 'stripe'
88
+ rescue Exception
89
+ raise "unable to load stripe. Plese add gem 'stripe' to your Gemfile and then 'bundle install'"
90
+ end
91
+
92
+ ::Stripe.api_key = stripe[:secret_key]
93
+ end
72
94
  end
73
95
 
74
96
  def self.authorized?(controller, action, resource)
@@ -91,12 +113,48 @@ module EffectiveOrders
91
113
  use_active_admin && defined?(ActiveAdmin)
92
114
  end
93
115
 
116
+ def self.permitted_params
117
+ [
118
+ :note, :save_billing_address, :save_shipping_address, :shipping_address_same_as_billing,
119
+ billing_address: [:full_name, :address1, :address2, :city, :country_code, :state_code, :postal_code],
120
+ shipping_address: [:full_name, :address1, :address2, :city, :country_code, :state_code, :postal_code],
121
+ user_attributes: (EffectiveOrders.collect_user_fields || []),
122
+ order_items_attributes: [:stripe_coupon_id, :class, :id]
123
+ ]
124
+ end
125
+
94
126
  def self.single_payment_processor?
95
- [moneris_enabled, paypal_enabled, stripe_enabled, app_checkout_enabled].select { |enabled| enabled }.length == 1
127
+ [
128
+ moneris_enabled,
129
+ paypal_enabled,
130
+ stripe_enabled,
131
+ cheque_enabled,
132
+ ccbill_enabled,
133
+ app_checkout_enabled
134
+ ].select { |enabled| enabled }.length == 1
135
+ end
136
+
137
+ # The Effective::Order.payment_provider value must be in this collection
138
+ def self.payment_providers
139
+ @payment_providers ||= [
140
+ 'admin',
141
+ ('app_checkout' if app_checkout_enabled),
142
+ ('ccbill' if ccbill_enabled),
143
+ ('cheque' if cheque_enabled),
144
+ ('free' if allow_free_orders),
145
+ ('moneris' if moneris_enabled),
146
+ ('paypal' if paypal_enabled),
147
+ ('pretend' if (allow_pretend_purchase_in_production && Rails.env.production?) || (allow_pretend_purchase_in_development && !Rails.env.production?)),
148
+ ('stripe' if stripe_enabled),
149
+ ('stripe_connect' if stripe_connect_enabled)
150
+ ].compact
151
+ end
152
+
153
+ def self.tax_rate_method=(*args)
154
+ raise 'EffectiveOrders.tax_rate_method has been removed and renamed to EffectiveOrders.order_tax_rate_method. Its expected value is now different too. Return 5.25 for 5.25% tax. Please refer to the readme for more info.'
96
155
  end
97
156
 
98
157
  class SoldOutException < Exception; end
99
158
  class AlreadyPurchasedException < Exception; end
100
- class AlreadyDeclinedException < Exception; end
101
159
 
102
160
  end
@@ -1,7 +1,6 @@
1
1
  module EffectiveOrders
2
2
  class AppCheckoutService
3
- def self.call(options = {})
4
- order = options[:order]
3
+ def self.call(order:)
5
4
  new(order).tap(&:call)
6
5
  end
7
6
 
@@ -11,6 +11,7 @@ module EffectiveOrders
11
11
  helper EffectiveCartsHelper
12
12
  helper EffectivePaypalHelper if EffectiveOrders.paypal_enabled
13
13
  helper EffectiveStripeHelper if EffectiveOrders.stripe_enabled
14
+ helper EffectiveCcbillHelper if EffectiveOrders.ccbill_enabled
14
15
  end
15
16
  end
16
17
 
@@ -28,31 +29,28 @@ module EffectiveOrders
28
29
  end
29
30
 
30
31
  # Set up our default configuration options.
31
- initializer "effective_orders.defaults", :before => :load_config_initializers do |app|
32
+ initializer "effective_orders.defaults", before: :load_config_initializers do |app|
32
33
  eval File.read("#{config.root}/lib/generators/templates/effective_orders.rb")
34
+ end
33
35
 
34
- EffectiveOrders.mailer[:deliver_method] = case
35
- when Rails.gem_version >= Gem::Version.new('4.2')
36
- :deliver_now
37
- else
38
- :deliver
39
- end
36
+ # Set up mail delivering config option
37
+ initializer "effective_orders.mailer", after: :load_config_initializers do |app|
38
+ deliver_method = Rails.gem_version >= Gem::Version.new('4.2') ? :deliver_now : :deliver
39
+ EffectiveOrders.mailer[:deliver_method] ||= deliver_method
40
40
  end
41
41
 
42
42
  # Set up our Stripe API Key
43
- initializer "effective_orders.stripe_api_key", :after => :load_config_initializers do |app|
43
+ initializer "effective_orders.stripe_api_key", after: :load_config_initializers do |app|
44
44
  if EffectiveOrders.stripe_enabled
45
45
  begin
46
46
  require 'stripe'
47
47
  rescue Exception
48
48
  raise "unable to load stripe. Plese add gem 'stripe' to your Gemfile and then 'bundle install'"
49
49
  end
50
-
51
- ::Stripe.api_key = EffectiveOrders.stripe[:secret_key]
52
50
  end
53
51
  end
54
52
 
55
- initializer 'effective_orders.moneris_config_validation', :after => :load_config_initializers do
53
+ initializer 'effective_orders.moneris_config_validation', after: :load_config_initializers do
56
54
  if EffectiveOrders.moneris_enabled
57
55
  unless EffectiveOrders.moneris.is_a?(Hash)
58
56
  raise ArgumentError, "expected EffectiveOrders.moneris to be a Hash but it is a #{EffectiveOrders.moneris.class}"
@@ -63,7 +61,7 @@ module EffectiveOrders
63
61
  end
64
62
  end
65
63
 
66
- initializer 'effective_orders.paypal_config_validation', :after => :load_config_initializers do
64
+ initializer 'effective_orders.paypal_config_validation', after: :load_config_initializers do
67
65
  if EffectiveOrders.paypal_enabled
68
66
  unless EffectiveOrders.paypal.is_a?(Hash)
69
67
  raise ArgumentError, "expected EffectiveOrders.paypal to be a Hash but it is a #{EffectiveOrders.paypal.class}"
@@ -74,7 +72,7 @@ module EffectiveOrders
74
72
  end
75
73
  end
76
74
 
77
- initializer 'effective_orders.stripe_config_validation', :after => :load_config_initializers do
75
+ initializer 'effective_orders.stripe_config_validation', after: :load_config_initializers do
78
76
  if EffectiveOrders.stripe_enabled
79
77
  unless EffectiveOrders.stripe.is_a?(Hash)
80
78
  raise ArgumentError, "expected EffectiveOrders.stripe to be a Hash but it is a #{EffectiveOrders.stripe.class}"
@@ -90,7 +88,23 @@ module EffectiveOrders
90
88
  end
91
89
  end
92
90
 
93
- initializer 'effective_orders.app_checkout_config_validation', :after => :load_config_initializers do
91
+ initializer 'effective_orders.ccbill_config_validation', after: :load_config_initializers do
92
+ if EffectiveOrders.ccbill_enabled
93
+ unless EffectiveOrders.ccbill.is_a?(Hash)
94
+ raise ArgumentError, "expected EffectiveOrders.ccbill to be a Hash but it is a #{EffectiveOrders.ccbill.class}"
95
+ end
96
+ EffectiveOrders.ccbill[:form_period] ||= 365
97
+
98
+ missing = EffectiveOrders.stripe.select {|_config, value| value.blank? }
99
+ required = [:client_accnum, :client_subacc, :form_name, :currency_code, :dynamic_pricing_salt]
100
+
101
+ # perform an intersection operation between missing and required configs
102
+ missing_required = missing.keys & required
103
+ raise "Missing effective_orders Stripe configuration values: #{missing_required.join(', ')}" if missing_required.present?
104
+ end
105
+ end
106
+
107
+ initializer 'effective_orders.app_checkout_config_validation', after: :load_config_initializers do
94
108
  if EffectiveOrders.app_checkout_enabled
95
109
  unless EffectiveOrders.app_checkout.is_a?(Hash)
96
110
  raise ArgumentError, "expected EffectiveOrders.app_checkout to be a Hash but it is a #{EffectiveOrders.app_checkout.class}"
@@ -106,6 +120,24 @@ module EffectiveOrders
106
120
  end
107
121
  end
108
122
 
123
+ initializer 'effective_orders.cheque_config_validation', after: :load_config_initializers do
124
+ if EffectiveOrders.cheque_enabled
125
+ unless EffectiveOrders.cheque.is_a?(Hash)
126
+ raise ArgumentError, "expected EffectiveOrders.cheque to be a Hash but it is a #{EffectiveOrders.cheque.class}"
127
+ end
128
+ end
129
+ end
130
+
131
+ initializer 'effective_orders.obfuscate_order_ids_validation' do
132
+ if EffectiveOrders.obfuscate_order_ids
133
+ begin
134
+ require 'effective_obfuscation'
135
+ rescue Exception
136
+ raise "unable to load effective_obfuscation. Plese add gem 'effective_obfuscation' to your Gemfile and then 'bundle install'"
137
+ end
138
+ end
139
+ end
140
+
109
141
  # Use ActiveAdmin (optional)
110
142
  initializer 'effective_orders.active_admin' do
111
143
  if EffectiveOrders.use_active_admin?
@@ -1,3 +1,3 @@
1
1
  module EffectiveOrders
2
- VERSION = '1.8.1'.freeze
2
+ VERSION = '2.0.0'.freeze
3
3
  end
@@ -36,6 +36,7 @@ module EffectiveOrders
36
36
  @cart_items_table_name = ':' + EffectiveOrders.cart_items_table_name.to_s
37
37
  @customers_table_name = ':' + EffectiveOrders.customers_table_name.to_s
38
38
  @subscriptions_table_name = ':' + EffectiveOrders.subscriptions_table_name.to_s
39
+ @products_table_name = ':' + EffectiveOrders.products_table_name.to_s
39
40
 
40
41
  migration_template '../../../db/migrate/01_create_effective_orders.rb.erb', 'db/migrate/create_effective_orders.rb'
41
42
  end
@@ -22,6 +22,7 @@ module EffectiveOrders
22
22
  @cart_items_table_name = ':' + EffectiveOrders.cart_items_table_name.to_s
23
23
  @customers_table_name = ':' + EffectiveOrders.customers_table_name.to_s
24
24
  @subscriptions_table_name = ':' + EffectiveOrders.subscriptions_table_name.to_s
25
+ @products_table_name = ':' + EffectiveOrders.products_table_name.to_s
25
26
 
26
27
  migration_template '../../../db/upgrade/02_upgrade_effective_orders_from03x.rb.erb', 'db/migrate/upgrade_effective_orders_from03x.rb'
27
28
  end
@@ -0,0 +1,31 @@
1
+ module EffectiveOrders
2
+ module Generators
3
+ class UpgradeFrom1xGenerator < Rails::Generators::Base
4
+ include Rails::Generators::Migration
5
+
6
+ desc 'Upgrade effective_orders from the 1.x branch'
7
+
8
+ source_root File.expand_path('../../templates', __FILE__)
9
+
10
+ def self.next_migration_number(dirname)
11
+ ActiveRecord::Migration.new.next_migration_number(1) #=> “20160114171807"
12
+ end
13
+
14
+ def create_migration_file
15
+ @orders_table_name = ':' + EffectiveOrders.orders_table_name.to_s
16
+ @order_items_table_name = ':' + EffectiveOrders.order_items_table_name.to_s
17
+ @carts_table_name = ':' + EffectiveOrders.carts_table_name.to_s
18
+ @cart_items_table_name = ':' + EffectiveOrders.cart_items_table_name.to_s
19
+ @customers_table_name = ':' + EffectiveOrders.customers_table_name.to_s
20
+ @subscriptions_table_name = ':' + EffectiveOrders.subscriptions_table_name.to_s
21
+ @products_table_name = ':' + EffectiveOrders.products_table_name.to_s
22
+
23
+ migration_template '../../../db/upgrade/03_upgrade_effective_orders_from1x.rb.erb', 'db/migrate/upgrade_effective_orders_from1x.rb'
24
+ end
25
+
26
+ def show_readme
27
+ readme 'README' if behavior == :invoke
28
+ end
29
+ end
30
+ end
31
+ end