effective_orders 1.6.5 → 1.6.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/effective/carts_controller.rb +7 -7
  3. data/app/controllers/effective/orders_controller.rb +10 -6
  4. data/app/controllers/effective/subscriptions_controller.rb +2 -2
  5. data/app/helpers/effective_orders_helper.rb +19 -0
  6. data/app/mailers/effective/orders_mailer.rb +3 -2
  7. data/app/models/effective/cart.rb +3 -3
  8. data/app/views/admin/customers/index.html.haml +10 -5
  9. data/app/views/admin/order_items/index.html.haml +3 -2
  10. data/app/views/admin/orders/index.html.haml +3 -2
  11. data/app/views/effective/carts/_cart.html.haml +14 -10
  12. data/app/views/effective/orders/_checkout_step_1.html.haml +1 -1
  13. data/app/views/effective/orders/_checkout_step_2.html.haml +2 -2
  14. data/app/views/effective/orders/_order_items.html.haml +1 -1
  15. data/app/views/effective/orders/moneris/_form.html.haml +1 -1
  16. data/app/views/effective/orders/paypal/_form.html.haml +1 -1
  17. data/app/views/effective/orders/pretend/_form.html.haml +1 -1
  18. data/app/views/effective/orders/stripe/_form.html.haml +1 -1
  19. data/app/views/effective/orders_mailer/order_receipt_to_seller.html.haml +3 -3
  20. data/app/views/effective/subscriptions/new.html.haml +0 -1
  21. data/lib/effective_orders.rb +4 -0
  22. data/lib/effective_orders/version.rb +1 -1
  23. data/lib/generators/effective_orders/install_generator.rb +10 -0
  24. data/lib/generators/templates/effective_orders_mailer_preview.rb +61 -0
  25. data/spec/controllers/moneris_orders_controller_spec.rb +8 -8
  26. data/spec/controllers/orders_controller_spec.rb +4 -1
  27. data/spec/controllers/stripe_orders_controller_spec.rb +2 -2
  28. data/spec/controllers/webhooks_controller_spec.rb +7 -7
  29. data/spec/dummy/config/initializers/effective_orders.rb +1 -1
  30. data/spec/dummy/config/initializers/simple_form.rb +189 -0
  31. data/spec/dummy/log/test.log +23 -0
  32. data/spec/helpers/effective_orders_helper_spec.rb +2 -2
  33. data/spec/models/order_spec.rb +12 -12
  34. data/spec/spec_helper.rb +0 -1
  35. metadata +6 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b0cabc11a1540a88ee03c9f24f9cb94c92caa2fa
4
- data.tar.gz: fc21c6a4e480ed8f26ecdd573bc52bfd0158e50f
3
+ metadata.gz: 454888d9685c161b640cb1704d16ed37089a843b
4
+ data.tar.gz: e21c978af3d83dd4104a0b56929dc000f3daf8dc
5
5
  SHA512:
6
- metadata.gz: 13f4e0de53ff90ae3e16d4ec953bcd0906273aeee46f801fcc95c76ce619aeea414e52c6bd91a6ea158284dcb5bb4f7afdb1d7e49a7cde79ff13567f82072c76
7
- data.tar.gz: 34783651f411c842092b59469e8001258762e350de2f9c51ecd24a0a9535ab14b7663a52dd177f2c49968c00e1b9dbf7ddc6025b8399ad9e1626f5e49f5482bf
6
+ metadata.gz: b2bab5bcdf09101c8bd475e27c0db23e2cba18b52b4b8bc8247d20361eb5d8c5c0ae597a4eefeb1d5d1bda7d6143e55068914cedf42a967267e3bbcc0532f7c1
7
+ data.tar.gz: c8bf6d21f7f4e312c21a9693b246f8c81f5a525ab40c9d130c3398c3ac219141fb696e3b35366d77aacbe6acb794ce026e43f44de6a613d3dd33bb6585f78f8e
@@ -16,9 +16,9 @@ module Effective
16
16
  EffectiveOrders.authorized?(self, :destroy, @cart)
17
17
 
18
18
  if @cart.destroy
19
- flash[:success] = 'Successfully emptied cart'
19
+ flash[:success] = 'Successfully emptied cart.'
20
20
  else
21
- flash[:danger] = 'Unable to destroy cart'
21
+ flash[:danger] = 'Unable to destroy cart.'
22
22
  end
23
23
 
24
24
  request.referrer ? (redirect_to :back) : (redirect_to effective_orders.cart_path)
@@ -30,12 +30,12 @@ module Effective
30
30
  EffectiveOrders.authorized?(self, :update, current_cart)
31
31
 
32
32
  begin
33
- raise "please select a valid #{add_to_cart_params[:purchasable_type] || 'item' }" unless @purchasable
33
+ raise "Please select a valid #{add_to_cart_params[:purchasable_type] || 'item' }." unless @purchasable
34
34
 
35
35
  current_cart.add_to_cart(@purchasable, [add_to_cart_params[:quantity].to_i, 1].max)
36
- flash[:success] = 'Successfully added item to cart'
36
+ flash[:success] = 'Successfully added item to cart.'
37
37
  rescue EffectiveOrders::SoldOutException
38
- flash[:warning] = 'This item is sold out'
38
+ flash[:warning] = 'This item is sold out.'
39
39
  rescue => e
40
40
  flash[:danger] = 'Unable to add item to cart: ' + e.message
41
41
  end
@@ -49,9 +49,9 @@ module Effective
49
49
  EffectiveOrders.authorized?(self, :update, current_cart)
50
50
 
51
51
  if @cart_item.destroy
52
- flash[:success] = 'Successfully removed item from cart'
52
+ flash[:success] = 'Successfully removed item from cart.'
53
53
  else
54
- flash[:danger] = 'Unable to remove item from cart'
54
+ flash[:danger] = 'Unable to remove item from cart.'
55
55
  end
56
56
 
57
57
  request.referrer ? (redirect_to :back) : (redirect_to effective_orders.cart_path)
@@ -56,7 +56,7 @@ module Effective
56
56
  @order.save!
57
57
 
58
58
  if @order.total == 0 && EffectiveOrders.allow_free_orders
59
- order_purchased('zero-dollar order')
59
+ order_purchased('automatic purchase of free order.')
60
60
  else
61
61
  redirect_to(effective_orders.order_path(@order))
62
62
  end
@@ -64,7 +64,7 @@ module Effective
64
64
  return
65
65
  rescue => e
66
66
  Rails.logger.info e.message
67
- flash.now[:danger] = "An error has ocurred. Please try again. Message: #{e.message}"
67
+ flash.now[:danger] = "An error has occurred: #{e.message}. Please try again."
68
68
  raise ActiveRecord::Rollback
69
69
  end
70
70
  end
@@ -118,7 +118,7 @@ module Effective
118
118
  if @order.send_order_receipt_to_buyer!
119
119
  flash[:success] = "Successfully resent order receipt to #{@order.user.email}"
120
120
  else
121
- flash[:danger] = "Unable to send order receipt"
121
+ flash[:danger] = "Unable to send order receipt."
122
122
  end
123
123
 
124
124
  redirect_to(:back) rescue effective_orders.order_path(@order)
@@ -145,11 +145,15 @@ module Effective
145
145
  @order.purchase!(details)
146
146
  current_cart.try(:destroy)
147
147
 
148
- flash[:success] = "Successfully purchased order"
148
+ if EffectiveOrders.mailer[:send_order_receipt_to_buyer]
149
+ flash[:success] = "Payment successful! Please check your email for a receipt."
150
+ else
151
+ flash[:success] = "Payment successful!"
152
+ end
149
153
 
150
154
  redirect_to (redirect_url.presence || effective_orders.order_purchased_path(':id')).gsub(':id', @order.to_param.to_s)
151
155
  rescue => e
152
- flash[:danger] = "Unable to process your order. Your card has not been charged. Your Cart items have been restored. Please try again. Error Message: #{e.message}"
156
+ flash[:danger] = "An error occurred while processing your payment: #{e.message}. Please try again."
153
157
  redirect_to (declined_redirect_url.presence || effective_orders.cart_path).gsub(':id', @order.to_param.to_s)
154
158
  end
155
159
  end
@@ -157,7 +161,7 @@ module Effective
157
161
  def order_declined(details = nil, redirect_url = nil)
158
162
  @order.decline!(details) rescue nil
159
163
 
160
- flash[:danger] = "Unable to purchase order. Your credit card was declined by the payment processor. Your cart items have been restored. Please try again."
164
+ flash[:danger] = "Payment was unsuccessful. Your credit card was declined by the payment processor. Please try again."
161
165
 
162
166
  redirect_to (redirect_url.presence || effective_orders.order_declined_path(@order)).gsub(':id', @order.id.to_s)
163
167
  end
@@ -40,7 +40,7 @@ module Effective
40
40
  EffectiveOrders.authorized?(self, :create, @subscription)
41
41
 
42
42
  if @subscription.update_attributes(subscription_params) && (current_cart.find(@subscription).present? || current_cart.add(@subscription))
43
- flash[:success] = "Successfully added subscription to cart"
43
+ flash[:success] = "Successfully added subscription to cart."
44
44
  redirect_to effective_orders.new_order_path
45
45
  else
46
46
  purchased_plans = @customer.subscriptions.purchased.map(&:stripe_plan_id)
@@ -75,7 +75,7 @@ module Effective
75
75
 
76
76
  EffectiveOrders.authorized?(self, :show, @subscription)
77
77
 
78
- @invoices = @customer.stripe_customer.invoices.all.select do |invoice|
78
+ @invoices = @customer.stripe_customer.invoices.all.select do |invoice|
79
79
  invoice.lines.any? { |line| line.id == @stripe_subscription.id }
80
80
  end
81
81
 
@@ -27,6 +27,25 @@ module EffectiveOrdersHelper
27
27
  end
28
28
  end
29
29
 
30
+ def order_checkout_label(processor = nil)
31
+ return 'Checkout' if (EffectiveOrders.single_payment_processor? && processor != :pretend)
32
+
33
+ case processor
34
+ when :free
35
+ 'Checkout'
36
+ when :moneris
37
+ 'Checkout with Moneris'
38
+ when :paypal
39
+ 'Checkout with PayPal'
40
+ when :pretend # The logic for this is in orders/views/_checkout_step_2.html.haml
41
+ EffectiveOrders.allow_pretend_purchase_in_production ? 'Purchase Order' : 'Purchase Order (development only)'
42
+ when :stripe
43
+ 'Checkout with Stripe'
44
+ else
45
+ 'Checkout'
46
+ end
47
+ end
48
+
30
49
  # This is called on the My Sales Page and is intended to be overridden in the app if needed
31
50
  def acts_as_purchasable_path(purchasable, action = :show)
32
51
  polymorphic_path(purchasable)
@@ -18,8 +18,9 @@ module Effective
18
18
  @order = order
19
19
  @user = seller.user
20
20
  @order_items = order_items
21
+ @subject = receipt_to_seller_subject(order, order_items, seller.user)
21
22
 
22
- mail(:to => @user.email, :subject => receipt_to_seller_subject(order, order_items, seller.user))
23
+ mail(:to => @user.email, :subject => @subject)
23
24
  end
24
25
 
25
26
  private
@@ -51,7 +52,7 @@ module Effective
51
52
  string_or_callable = self.instance_exec(order, order_items, seller, &string_or_callable)
52
53
  end
53
54
 
54
- prefix_subject(string_or_callable.presence || "#{order_items.count} of your products #{order_items.count > 1 ? 'have' : 'has'} been purchased")
55
+ prefix_subject(string_or_callable.presence || "#{order_items.length} of your products #{order_items.length > 1 ? 'have' : 'has'} been purchased")
55
56
  end
56
57
 
57
58
  def prefix_subject(text)
@@ -51,15 +51,15 @@ module Effective
51
51
  end
52
52
 
53
53
  def subtotal
54
- cart_items.map(&:subtotal).sum
54
+ cart_items.map { |ci| ci.subtotal }.sum
55
55
  end
56
56
 
57
57
  def tax
58
- cart_items.map(&:tax).sum
58
+ cart_items.map { |ci| ci.tax }.sum
59
59
  end
60
60
 
61
61
  def total
62
- cart_items.map(&:total).sum
62
+ cart_items.map { |ci| ci.total }.sum
63
63
  end
64
64
  end
65
65
  end
@@ -2,9 +2,14 @@
2
2
 
3
3
  %p.text-right= link_to 'Stripe Dashboard: Customers', 'https://manage.stripe.com/customers', :class => 'btn btn-primary'
4
4
 
5
- = render_datatable @datatable do
6
- %p There are no customers
7
-
8
- - if @datatable.present?
9
- %p.text-right= link_to 'Stripe Dashboard: Customers', 'https://manage.stripe.com/customers', :class => 'btn btn-primary'
5
+ - if @datatable.nil?
6
+ %p
7
+ Please install
8
+ = link_to 'effective_datatables', 'https://github.com/code-and-effect/effective_datatables'
9
+ to see this page.
10
+ - elsif @datatable.present?
11
+ = render_datatable @datatable
12
+ - else
13
+ %p There are no customers present
10
14
 
15
+ %p.text-right= link_to 'Stripe Dashboard: Customers', 'https://manage.stripe.com/customers', :class => 'btn btn-primary'
@@ -5,6 +5,7 @@
5
5
  Please install
6
6
  = link_to 'effective_datatables', 'https://github.com/code-and-effect/effective_datatables'
7
7
  to see this page.
8
+ - elsif @datatable.present?
9
+ = render_datatable @datatable
8
10
  - else
9
- = render_datatable @datatable do
10
- %p There are no order items
11
+ %p There are no order items present
@@ -5,6 +5,7 @@
5
5
  Please install
6
6
  = link_to 'effective_datatables', 'https://github.com/code-and-effect/effective_datatables'
7
7
  to see this page.
8
+ - elsif @datatable.present?
9
+ = render_datatable @datatable
8
10
  - else
9
- = render_datatable @datatable do
10
- %p There are no orders
11
+ %p There are no orders present
@@ -2,7 +2,7 @@
2
2
  %table.table
3
3
  %thead
4
4
  %tr
5
- %th.quantity Quantity
5
+ %th.quantity Qty
6
6
  %th.item Item
7
7
  %th.price Price
8
8
  %tbody
@@ -15,19 +15,23 @@
15
15
  = ' - '
16
16
  = link_to_remove_from_cart(item)
17
17
  %td.price
18
- = price_to_currency(item.subtotal)
18
+ = price_to_currency(item.price)
19
19
  - if cart.empty?
20
20
  %tr
21
21
  %td.quantity
22
22
  %td.item There are no items in your shopping cart
23
23
  %td.price
24
24
  %tfoot
25
+ - if cart.tax > 0
26
+ %tr
27
+ %th.quantity
28
+ %th.subtotal Subtotal
29
+ %td.price.subtotal-price= price_to_currency(cart.subtotal)
30
+ %tr
31
+ %th.quantity
32
+ %th.tax Tax
33
+ %td.price.tax-price= price_to_currency(cart.tax)
25
34
  %tr
26
- %th{:colspan => 2} Subtotal
27
- %td.price= price_to_currency(cart.subtotal)
28
- %tr
29
- %th{:colspan => 2} Tax
30
- %td.price= price_to_currency(cart.tax)
31
- %tr
32
- %th{:colspan => 2} Total Due
33
- %td.price= price_to_currency(cart.total)
35
+ %th.quantity
36
+ %th.total Total Due
37
+ %td.price.total-price= price_to_currency(cart.total)
@@ -38,6 +38,6 @@
38
38
 
39
39
  .text-right
40
40
  - if order.total == 0 && EffectiveOrders.allow_free_orders
41
- = f.submit 'Checkout', :class => 'btn btn-primary pull-right', :rel => :nofollow, :data => {'disable_with' => 'Processing...' }
41
+ = f.submit order_checkout_label(:free), :class => 'btn btn-primary pull-right', :rel => :nofollow, :data => {'disable_with' => 'Processing...' }
42
42
  - else
43
43
  = f.submit 'Save and Continue', :class => 'btn btn-primary pull-right', :rel => :nofollow, :data => {'disable_with' => 'Saving...' }
@@ -2,10 +2,10 @@
2
2
 
3
3
  .effective-order.effective-order-purchase-actions
4
4
  - if (Rails.env.production? == false && EffectiveOrders.allow_pretend_purchase_in_development)
5
- = render :partial => '/effective/orders/pretend/form', locals: {label: 'Purchase Order (development only)', order: order, purchased_redirect_url: purchased_redirect_url, declined_redirect_url: declined_redirect_url}
5
+ = render :partial => '/effective/orders/pretend/form', locals: {order: order, purchased_redirect_url: purchased_redirect_url, declined_redirect_url: declined_redirect_url}
6
6
 
7
7
  - if (Rails.env.production? == true && EffectiveOrders.allow_pretend_purchase_in_production)
8
- = render :partial => '/effective/orders/pretend/form', locals: {label: 'Purchase Order', order: order, purchased_redirect_url: purchased_redirect_url, declined_redirect_url: declined_redirect_url}
8
+ = render :partial => '/effective/orders/pretend/form', locals: {order: order, purchased_redirect_url: purchased_redirect_url, declined_redirect_url: declined_redirect_url}
9
9
 
10
10
  - if EffectiveOrders.moneris_enabled
11
11
  = render :partial => '/effective/orders/moneris/form', locals: {order: order, purchased_redirect_url: purchased_redirect_url, declined_redirect_url: declined_redirect_url}
@@ -25,7 +25,7 @@
25
25
  = link_to 'download', item.purchased_download_url
26
26
  - else
27
27
  = '-'
28
- %td.price= price_to_currency(item.subtotal)
28
+ %td.price= price_to_currency(item.price)
29
29
 
30
30
  %tfoot
31
31
  - if order.tax > 0
@@ -44,4 +44,4 @@
44
44
  = hidden_field_tag(:ship_postal_code, address.postal_code)
45
45
  = hidden_field_tag(:ship_country, address.country)
46
46
 
47
- = submit_tag 'Pay with Moneris', :class => 'btn btn-primary', :data => {'disable_with' => 'Continuing...' }
47
+ = submit_tag order_checkout_label(:moneris), :class => 'btn btn-primary', :data => {'disable_with' => 'Continuing...' }
@@ -2,4 +2,4 @@
2
2
  = hidden_field_tag :cmd, '_s-xclick'
3
3
  = hidden_field_tag :encrypted, paypal_encrypted_payload(order)
4
4
 
5
- = submit_tag 'Pay with PayPal', :class => 'btn btn-primary', :data => {'disable_with' => 'Continuing...' }
5
+ = submit_tag order_checkout_label(:paypal), :class => 'btn btn-primary', :data => {'disable_with' => 'Continuing...' }
@@ -1,2 +1,2 @@
1
1
  = form_tag(effective_orders.pretend_purchase_path(order, :purchased_redirect_url => purchased_redirect_url, :declined_redirect_url => declined_redirect_url), method: :post) do
2
- = submit_tag label, :class => 'btn btn-primary', :data => {'disable_with' => 'Continuing...' }
2
+ = submit_tag order_checkout_label(:pretend), :class => 'btn btn-primary', :data => {'disable_with' => 'Continuing...' }
@@ -4,4 +4,4 @@
4
4
  = simple_form_for(@stripe_charge || Effective::StripeCharge.new(order), (EffectiveOrders.simple_form_options || {}).merge(:url => effective_orders.stripe_charges_path)) do |f|
5
5
  = f.input :effective_order_id, :as => :hidden
6
6
  = f.input :token, :as => :hidden
7
- = f.submit 'Pay with Stripe', :class => 'stripe-button', :data => {'disable_with' => 'Continuing...' }
7
+ = f.submit order_checkout_label(:stripe), :class => 'stripe-button', :data => {'disable_with' => 'Continuing...' }
@@ -21,10 +21,10 @@
21
21
  %tfoot
22
22
  %tr
23
23
  %th Subtotal
24
- %td= price_to_currency(@order_items.sum(&:subtotal))
24
+ %td= price_to_currency(@order_items.map { |oi| oi.subtotal }.sum)
25
25
  %tr
26
26
  %th Tax
27
- %td= price_to_currency(@order_items.sum(&:tax))
27
+ %td= price_to_currency(@order_items.map { |oi| oi.tax }.sum)
28
28
  %tr
29
29
  %th Total
30
- %td= price_to_currency(@order_items.sum(&:total))
30
+ %td= price_to_currency(@order_items.map { |oi| oi.total }.sum)
@@ -7,4 +7,3 @@
7
7
  = f.submit 'Add to Cart', :class => 'btn btn-primary'
8
8
  - else
9
9
  %p No available Subscriptions
10
- %p= link_to 'Home', root_url
@@ -96,6 +96,10 @@ module EffectiveOrders
96
96
  use_active_admin && defined?(ActiveAdmin)
97
97
  end
98
98
 
99
+ def self.single_payment_processor?
100
+ [moneris_enabled, paypal_enabled, stripe_enabled].select { |enabled| enabled }.length == 1
101
+ end
102
+
99
103
  class SoldOutException < Exception; end
100
104
  class AlreadyPurchasedException < Exception; end
101
105
  class AlreadyDeclinedException < Exception; end
@@ -1,3 +1,3 @@
1
1
  module EffectiveOrders
2
- VERSION = '1.6.5'.freeze
2
+ VERSION = '1.6.6'.freeze
3
3
  end
@@ -19,6 +19,16 @@ module EffectiveOrders
19
19
  template "effective_orders.rb", "config/initializers/effective_orders.rb"
20
20
  end
21
21
 
22
+ def copy_mailer_preview
23
+ mailer_preview_path = (Rails.application.config.action_mailer.preview_path rescue nil)
24
+
25
+ if mailer_preview_path.present?
26
+ template 'effective_orders_mailer_preview.rb', File.join(mailer_preview_path, 'effective_orders_mailer_preview.rb')
27
+ else
28
+ puts "couldn't find action_mailer.preview_path. Skipping effective_orders_mailer_preview."
29
+ end
30
+ end
31
+
22
32
  def create_migration_file
23
33
  @orders_table_name = ':' + EffectiveOrders.orders_table_name.to_s
24
34
  @order_items_table_name = ':' + EffectiveOrders.order_items_table_name.to_s
@@ -0,0 +1,61 @@
1
+ # In Rails 4.1 and above, visit:
2
+ # http://localhost:3000/rails/mailers
3
+ # to see a preview of the following 3 emails:
4
+
5
+ class EffectiveOrdersMailerPreview < ActionMailer::Preview
6
+ def order_receipt_to_buyer
7
+ Effective::OrdersMailer.order_receipt_to_buyer(build_preview_order)
8
+ end
9
+
10
+ def order_receipt_to_admin
11
+ Effective::OrdersMailer.order_receipt_to_admin(build_preview_order)
12
+ end
13
+
14
+ # This email is only sent to sellers having sold items via StripeConnect
15
+ def order_receipt_to_seller
16
+ order = build_preview_order
17
+ Effective::OrdersMailer.order_receipt_to_seller(order, preview_customer, order.order_items)
18
+ end
19
+
20
+ protected
21
+
22
+ def build_preview_order
23
+ order = Effective::Order.new()
24
+ order.user = preview_user
25
+ preview_order_items.each { |atts| order.order_items.build(atts) }
26
+ order
27
+ end
28
+
29
+ private
30
+
31
+ # We're building Effective::OrderItems directly rather than creating acts_as_purchasable objects
32
+ # so that this mailer will not have to guess at your app's acts_as_purchasable objects
33
+ def preview_order_items
34
+ tax_rate = (EffectiveOrders.tax_rate_method.call(Object.new()) rescue -1)
35
+ tax_rate = 0.05 if tax_rate < 0.0
36
+
37
+ [
38
+ {title: 'Item One', quantity: 2, price: 999, tax_exempt: false, tax_rate: tax_rate},
39
+ {title: 'Item Two', quantity: 1, price: 25000, tax_exempt: false, tax_rate: tax_rate},
40
+ {title: 'Item Three', quantity: 1, price: 8999, tax_exempt: false, tax_rate: tax_rate},
41
+ {title: 'Item Four', quantity: 1, price: 100000, tax_exempt: false, tax_rate: tax_rate}
42
+ ]
43
+ end
44
+
45
+ def preview_user
46
+ User.new(email: 'buyer@example.com').tap do |user|
47
+ user.name = 'Valued Customer' if user.respond_to?(:name=)
48
+ user.full_name = 'Valued Customer' if user.respond_to?(:full_name=)
49
+
50
+ if user.respond_to?(:first_name=) && user.respond_to?(:last_name=)
51
+ user.first_name = 'Valued'
52
+ user.last_name = 'Customer'
53
+ end
54
+ end
55
+ end
56
+
57
+ def preview_customer
58
+ Effective::Customer.new(user: preview_user)
59
+ end
60
+
61
+ end
@@ -30,7 +30,7 @@ describe Effective::OrdersController, type: :controller do
30
30
 
31
31
  describe 'moneris_postback' do
32
32
  before do
33
- subject.stub(:send_moneris_verify_request).and_return('') # Dont actually make Moneris requests
33
+ allow(subject).to receive(:send_moneris_verify_request).and_return('') # Don't actually make Moneris requests
34
34
  sign_in order.user
35
35
  end
36
36
 
@@ -72,7 +72,7 @@ describe Effective::OrdersController, type: :controller do
72
72
 
73
73
  describe 'transaction verification step' do
74
74
  it 'marks the order as purchased when response code is valid' do
75
- subject.stub(:parse_moneris_response).and_return({:response_code => 1}) # success
75
+ allow(subject).to receive(:parse_moneris_response).and_return({:response_code => 1}) # success
76
76
 
77
77
  post :moneris_postback, moneris_params
78
78
 
@@ -81,7 +81,7 @@ describe Effective::OrdersController, type: :controller do
81
81
  end
82
82
 
83
83
  it 'marks order declined when response_code = null' do
84
- subject.stub(:parse_moneris_response).and_return({:response_code => 'null'}) # failure
84
+ allow(subject).to receive(:parse_moneris_response).and_return({:response_code => 'null'}) # failure
85
85
 
86
86
  post :moneris_postback, moneris_params
87
87
 
@@ -91,7 +91,7 @@ describe Effective::OrdersController, type: :controller do
91
91
  end
92
92
 
93
93
  it 'marks order declined when response_code blank' do
94
- subject.stub(:parse_moneris_response).and_return({}) # failure
94
+ allow(subject).to receive(:parse_moneris_response).and_return({}) # failure
95
95
 
96
96
  post :moneris_postback, moneris_params
97
97
 
@@ -101,14 +101,14 @@ describe Effective::OrdersController, type: :controller do
101
101
  end
102
102
 
103
103
  it 'marks order declined when response_code = 0' do
104
- subject.stub(:parse_moneris_response).and_return({:response_code => 0}) # failure
104
+ allow(subject).to receive(:parse_moneris_response).and_return({:response_code => 0}) # failure
105
105
  post :moneris_postback, moneris_params
106
106
  response.should redirect_to "/orders/#{order.to_param}/declined"
107
107
  assigns(:order).purchased?.should eq false
108
108
  end
109
109
 
110
110
  it 'marks order declined when response_code = 50' do
111
- subject.stub(:parse_moneris_response).and_return({:response_code => 50}) # failure
111
+ allow(subject).to receive(:parse_moneris_response).and_return({:response_code => 50}) # failure
112
112
  post :moneris_postback, moneris_params
113
113
  response.should redirect_to "/orders/#{order.to_param}/declined"
114
114
  assigns(:order).purchased?.should eq false
@@ -117,13 +117,13 @@ describe Effective::OrdersController, type: :controller do
117
117
 
118
118
  describe 'redirect urls' do
119
119
  it 'redirects to the purchased_redirect_url on purchase' do
120
- subject.stub(:parse_moneris_response).and_return({:response_code => 1}) # success
120
+ allow(subject).to receive(:parse_moneris_response).and_return({:response_code => 1}) # success
121
121
  post :moneris_postback, moneris_params.tap { |x| x[:rvar_purchased_redirect_url] = '/something' }
122
122
  response.should redirect_to '/something'
123
123
  end
124
124
 
125
125
  it 'redirects to the declined_redirect_url on decline' do
126
- subject.stub(:parse_moneris_response).and_return({:response_code => 'null'}) # nope
126
+ allow(subject).to receive(:parse_moneris_response).and_return({:response_code => 'null'}) # failure
127
127
  post :moneris_postback, moneris_params.tap { |x| x[:rvar_declined_redirect_url] = '/something' }
128
128
  response.should redirect_to '/something'
129
129
  end
@@ -52,7 +52,10 @@ describe Effective::OrdersController, type: :controller do
52
52
 
53
53
  it 'redirects if order total is less than minimum charge' do
54
54
  sign_in cart.user
55
- Effective::CartItem.any_instance.stub(:price).and_return(10)
55
+
56
+ cart.cart_items.each do |cart_item|
57
+ cart_item.purchasable.update_column(:price, 10)
58
+ end
56
59
 
57
60
  get :new
58
61
 
@@ -29,7 +29,7 @@ describe Effective::OrdersController, type: :controller do
29
29
  end
30
30
 
31
31
  it 'renders the :create action on validation failure' do
32
- subject.should_not_receive(:process_stripe_charge)
32
+ expect(subject).not_to receive(:process_stripe_charge)
33
33
 
34
34
  post :stripe_charge, stripe_charge_params.tap { |x| x[:effective_stripe_charge]['token'] = nil }
35
35
 
@@ -58,7 +58,7 @@ describe Effective::OrdersController, type: :controller do
58
58
  end
59
59
 
60
60
  it 'calls process_stripe_charge when the stripe_charge form object is valid' do
61
- subject.should_receive(:process_stripe_charge)
61
+ expect(subject).to receive(:process_stripe_charge)
62
62
  post :stripe_charge, stripe_charge_params
63
63
  end
64
64
 
@@ -15,7 +15,7 @@ describe Effective::WebhooksController, type: :controller do
15
15
  let(:event) { StripeMock.mock_webhook_event('customer.subscription.created') }
16
16
 
17
17
  it 'retrieves the real event from Stripe based on passed ID' do
18
- Stripe::Event.should_receive(:retrieve).with(event_hash[:id])
18
+ expect(Stripe::Event).to receive(:retrieve) { event_hash[:id] }
19
19
  post :stripe, event_hash
20
20
  response.code.should eq '200'
21
21
  end
@@ -96,7 +96,7 @@ describe Effective::WebhooksController, type: :controller do
96
96
  end
97
97
 
98
98
  it 'should invoke subscription_deleted_callback' do
99
- controller.should_receive(:subscription_deleted_callback).with(kind_of(Stripe::Event)).once
99
+ expect(controller).to receive(:subscription_deleted_callback)
100
100
  post :stripe, event_hash
101
101
  end
102
102
  end
@@ -107,7 +107,7 @@ describe Effective::WebhooksController, type: :controller do
107
107
  end
108
108
 
109
109
  it 'should not invoke subscription_deleted_callback' do
110
- controller.should_not_receive(:subscription_deleted_callback)
110
+ expect(controller).not_to receive(:subscription_deleted_callback)
111
111
  post :stripe, event_hash
112
112
  end
113
113
  end
@@ -124,7 +124,7 @@ describe Effective::WebhooksController, type: :controller do
124
124
  let(:subscription_mock) { double('subscription', status: 'active', start: 1383672652) }
125
125
  let(:subscriptions) { double('subscriptions', retrieve: subscription_mock) }
126
126
 
127
- before { Stripe::Customer.should_receive(:retrieve).and_return(double('customer', subscriptions: subscriptions)) }
127
+ before { allow(Stripe::Customer).to receive(:retrieve).and_return(double('customer', subscriptions: subscriptions)) }
128
128
 
129
129
  it 'assigns the existing customer, if exists' do
130
130
  post :stripe, event_hash
@@ -144,7 +144,7 @@ describe Effective::WebhooksController, type: :controller do
144
144
  before { Stripe::Customer.should_receive(:retrieve).and_return(double('customer', subscriptions: subscriptions)) }
145
145
 
146
146
  it 'should not invoke subscription_renewed_callback' do
147
- controller.should_not_receive(:subscription_renewed_callback)
147
+ expect(controller).not_to receive(:subscription_renewed_callback)
148
148
  post :stripe, event_hash
149
149
  end
150
150
  end
@@ -154,7 +154,7 @@ describe Effective::WebhooksController, type: :controller do
154
154
  let(:event) { StripeMock.mock_webhook_event('invoice.payment_succeeded.without_renewals') }
155
155
 
156
156
  it 'should not invoke subscription_renewed_callback' do
157
- controller.should_not_receive(:subscription_renewed_callback)
157
+ expect(controller).not_to receive(:subscription_renewed_callback)
158
158
  post :stripe, event_hash
159
159
  end
160
160
  end
@@ -162,7 +162,7 @@ describe Effective::WebhooksController, type: :controller do
162
162
 
163
163
  context 'when customer does not exist' do
164
164
  it 'should not invoke subscription_renewed_callback' do
165
- controller.should_not_receive(:subscription_renewed_callback)
165
+ expect(controller).not_to receive(:subscription_renewed_callback)
166
166
  post :stripe, event_hash
167
167
  end
168
168
  end
@@ -37,7 +37,7 @@ EffectiveOrders.setup do |config|
37
37
  config.obfuscate_order_ids = true
38
38
 
39
39
  # Silence the price deprecation warnings
40
- config.silence_deprecation_warnings = false
40
+ config.silence_deprecation_warnings = true
41
41
 
42
42
  # Require these addresses when creating a new Order. Works with effective_addresses gem
43
43
  config.require_billing_address = true
@@ -0,0 +1,189 @@
1
+ # Use this setup block to configure all options available in SimpleForm.
2
+ SimpleForm.setup do |config|
3
+ config.error_notification_class = 'alert alert-danger'
4
+ config.button_class = 'btn btn-primary'
5
+ config.boolean_label_class = nil
6
+
7
+ config.boolean_style = :nested
8
+ config.browser_validations = true
9
+
10
+ config.default_form_class = ''
11
+ config.default_wrapper = :vertical_form
12
+
13
+ config.wrapper_mappings = {
14
+ :boolean => :vertical_boolean,
15
+ :check_boxes => :vertical_radio_and_checkboxes,
16
+ :radio_buttons => :vertical_radio_and_checkboxes,
17
+
18
+ :horizontal_form => {
19
+ :boolean => :horizontal_boolean,
20
+ :check_boxes => :horizontal_radio_and_checkboxes,
21
+ :radio_buttons => :horizontal_radio_and_checkboxes
22
+ }
23
+ }
24
+
25
+
26
+ config.wrappers :vertical_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
27
+ b.use :html5
28
+ b.use :placeholder
29
+ b.optional :maxlength
30
+ b.optional :pattern
31
+ b.optional :min_max
32
+ b.optional :readonly
33
+ b.use :label, class: 'control-label'
34
+
35
+ b.use :input, class: 'form-control'
36
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
37
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
38
+ end
39
+
40
+ config.wrappers :vertical_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
41
+ b.use :html5
42
+ b.use :placeholder
43
+ b.optional :maxlength
44
+ b.optional :readonly
45
+ b.use :label, class: 'control-label'
46
+
47
+ b.use :input
48
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
49
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
50
+ end
51
+
52
+ config.wrappers :vertical_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
53
+ b.use :html5
54
+ b.optional :readonly
55
+
56
+ b.wrapper tag: 'div', class: 'checkbox' do |ba|
57
+ ba.use :label_input
58
+ end
59
+
60
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
61
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
62
+ end
63
+
64
+ config.wrappers :vertical_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
65
+ b.use :html5
66
+ b.optional :readonly
67
+ b.use :label_input, :class => 'control-label'
68
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
69
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
70
+ end
71
+
72
+ config.wrappers :vertical_inline_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
73
+ b.use :html5
74
+ b.optional :readonly
75
+
76
+ b.use :label, class: 'control-label'
77
+
78
+ b.wrapper tag: 'div', class: 'inline-radio-or-checkboxes' do |ba|
79
+ ba.use :input
80
+ end
81
+
82
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
83
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
84
+ end
85
+
86
+ config.wrappers :horizontal_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
87
+ b.use :html5
88
+ b.use :placeholder
89
+ b.optional :maxlength
90
+ b.optional :pattern
91
+ b.optional :min_max
92
+ b.optional :readonly
93
+ b.use :label, class: 'col-sm-3 control-label'
94
+
95
+ b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
96
+ ba.use :input, class: 'form-control'
97
+ ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
98
+ ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
99
+ end
100
+ end
101
+
102
+ config.wrappers :form_3columns, tag: 'div', class: 'col-sm-4' do |b|
103
+ b.use :html5
104
+ b.use :placeholder
105
+ b.optional :maxlength
106
+ b.optional :pattern
107
+ b.optional :min_max
108
+ b.optional :readonly
109
+
110
+ b.wrapper tag: 'div', class: 'form-group', error_class: 'has-error' do |ba|
111
+ ba.use :label
112
+ ba.use :input, class: 'form-control'
113
+ ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
114
+ ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
115
+ end
116
+ end
117
+
118
+ config.wrappers :horizontal_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
119
+ b.use :html5
120
+ b.use :placeholder
121
+ b.optional :maxlength
122
+ b.optional :readonly
123
+ b.use :label, class: 'col-sm-3 control-label'
124
+
125
+ b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
126
+ ba.use :input
127
+ ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
128
+ ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
129
+ end
130
+ end
131
+
132
+ config.wrappers :horizontal_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
133
+ b.use :html5
134
+ b.optional :readonly
135
+
136
+ b.wrapper tag: 'div', class: 'col-sm-offset-3 col-sm-9' do |wr|
137
+ wr.wrapper tag: 'div', class: 'checkbox' do |ba|
138
+ ba.use :label_input, class: 'col-sm-9'
139
+ end
140
+
141
+ wr.use :error, wrap_with: { tag: 'span', class: 'help-block' }
142
+ wr.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
143
+ end
144
+ end
145
+
146
+ config.wrappers :horizontal_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
147
+ b.use :html5
148
+ b.optional :readonly
149
+
150
+ b.use :label, class: 'col-sm-3 control-label'
151
+
152
+ b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
153
+ ba.use :input
154
+ ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
155
+ ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
156
+ end
157
+ end
158
+
159
+ config.wrappers :horizontal_inline_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
160
+ b.use :html5
161
+ b.optional :readonly
162
+
163
+ b.use :label, class: 'col-sm-3 control-label'
164
+
165
+ b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
166
+ ba.wrapper tag: 'div', :class => 'inline-radio-or-checkboxes' do |bb|
167
+ bb.use :input
168
+ end
169
+
170
+ ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
171
+ ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
172
+ end
173
+ end
174
+
175
+ config.wrappers :inline_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
176
+ b.use :html5
177
+ b.use :placeholder
178
+ b.optional :maxlength
179
+ b.optional :pattern
180
+ b.optional :min_max
181
+ b.optional :readonly
182
+ b.use :label, class: 'sr-only'
183
+
184
+ b.use :input, class: 'form-control'
185
+ b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
186
+ b.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
187
+ end
188
+
189
+ end
@@ -182,3 +182,26 @@
182
182
   (0.2ms) SELECT MAX("orders"."id") FROM "orders"
183
183
   (0.2ms) SELECT MAX("orders"."id") FROM "orders"
184
184
   (0.3ms) SELECT MAX("orders"."id") FROM "orders"
185
+  (0.2ms) SELECT MAX("orders"."id") FROM "orders"
186
+  (0.2ms) SELECT MAX("orders"."id") FROM "orders"
187
+  (0.2ms) SELECT MAX("orders"."id") FROM "orders"
188
+  (0.2ms) SELECT MAX("orders"."id") FROM "orders"
189
+  (0.2ms) SELECT MAX("orders"."id") FROM "orders"
190
+  (0.2ms) SELECT MAX("orders"."id") FROM "orders"
191
+  (0.2ms) SELECT MAX("orders"."id") FROM "orders"
192
+  (0.2ms) SELECT MAX("orders"."id") FROM "orders"
193
+  (0.3ms) SELECT MAX("orders"."id") FROM "orders"
194
+  (0.2ms) SELECT MAX("orders"."id") FROM "orders"
195
+  (0.2ms) SELECT MAX("orders"."id") FROM "orders"
196
+  (0.2ms) SELECT MAX("orders"."id") FROM "orders"
197
+  (0.2ms) SELECT MAX("orders"."id") FROM "orders"
198
+  (0.2ms) SELECT MAX("orders"."id") FROM "orders"
199
+  (0.2ms) SELECT MAX("orders"."id") FROM "orders"
200
+  (0.2ms) SELECT MAX("orders"."id") FROM "orders"
201
+  (0.3ms) SELECT MAX("orders"."id") FROM "orders"
202
+  (0.2ms) SELECT MAX("orders"."id") FROM "orders"
203
+  (0.3ms) SELECT MAX("orders"."id") FROM "orders"
204
+  (0.3ms) SELECT MAX("orders"."id") FROM "orders"
205
+  (0.2ms) SELECT MAX("orders"."id") FROM "orders"
206
+  (0.3ms) SELECT MAX("orders"."id") FROM "orders"
207
+  (0.4ms) SELECT MAX("orders"."id") FROM "orders"
@@ -11,11 +11,11 @@ describe EffectiveOrdersHelper, :type => :helper do
11
11
  end
12
12
 
13
13
  it 'raises an error when passed a decimal' do
14
- expect { price_to_currency(10.00) }.to raise_exception
14
+ expect { price_to_currency(10.00) }.to raise_exception(Exception)
15
15
  end
16
16
 
17
17
  it 'raises an error when passed nil' do
18
- expect { price_to_currency(nil) }.to raise_exception
18
+ expect { price_to_currency(nil) }.to raise_exception(Exception)
19
19
  end
20
20
  end
21
21
  end
@@ -58,21 +58,21 @@ describe Effective::Order do
58
58
 
59
59
  describe 'minimum zero math' do
60
60
  it 'has a minimum order total of 0' do
61
- order.order_items.each { |order_item| order_item.stub(:total).and_return(-1000) }
61
+ order.order_items.each { |order_item| allow(order_item).to receive(:total).and_return(-1000) }
62
62
 
63
63
  order.order_items.collect(&:total).sum.should eq -3000
64
64
  order.total.should eq 0
65
65
  end
66
66
 
67
67
  it 'has no minimum subtotal' do
68
- order.order_items.each { |order_item| order_item.stub(:subtotal).and_return(-1000) }
68
+ order.order_items.each { |order_item| allow(order_item).to receive(:subtotal).and_return(-1000) }
69
69
 
70
70
  order.order_items.collect(&:subtotal).sum.should eq -3000
71
71
  order.subtotal.should eq -3000
72
72
  end
73
73
 
74
74
  it 'has a minimum order tax of 0.00' do
75
- order.order_items.each { |order_item| order_item.stub(:tax).and_return(-1000) }
75
+ order.order_items.each { |order_item| allow(order_item).to receive(:tax).and_return(-1000) }
76
76
 
77
77
  order.order_items.collect(&:tax).sum.should eq -3000
78
78
  order.tax.should eq 0
@@ -112,21 +112,21 @@ describe Effective::Order do
112
112
  end
113
113
 
114
114
  it 'should be invalid when user is invalid' do
115
- order.user.stub(:valid?).and_return(false)
115
+ allow(order.user).to receive(:valid?).and_return(false)
116
116
  order.valid?.should eq false
117
117
 
118
118
  order.errors[:user].present?.should eq true
119
119
  end
120
120
 
121
121
  it 'should be invalid when an order_item is invalid' do
122
- order.order_items.first.stub(:valid?).and_return(false)
122
+ allow(order.order_items.first).to receive(:valid?).and_return(false)
123
123
  order.valid?.should eq false
124
124
 
125
125
  order.errors[:order_items].present?.should eq true
126
126
  end
127
127
 
128
128
  it 'should be invalid when less than the minimum charge' do
129
- order.stub(:total).and_return(49)
129
+ allow(order).to receive(:total).and_return(49)
130
130
 
131
131
  order.valid?.should eq false
132
132
 
@@ -135,15 +135,15 @@ describe Effective::Order do
135
135
  end
136
136
 
137
137
  it 'should be valid when >= minimum charge' do
138
- order.stub(:total).and_return(50)
138
+ allow(order).to receive(:total).and_return(50)
139
139
  order.valid?.should eq true
140
140
 
141
- order.stub(:total).and_return(51)
141
+ allow(order).to receive(:total).and_return(51)
142
142
  order.valid?.should eq true
143
143
  end
144
144
 
145
145
  it 'should be valid for a free order' do
146
- order.order_items.each { |order_item| order_item.stub(:total).and_return(0) }
146
+ order.order_items.each { |order_item| allow(order_item).to receive(:total).and_return(0) }
147
147
 
148
148
  order.valid?.should eq true
149
149
  order.errors[:total].present?.should eq false
@@ -203,12 +203,12 @@ describe Effective::Order do
203
203
  end
204
204
 
205
205
  it 'should return false when the Order is invalid' do
206
- order.stub(:valid?).and_return(false)
207
- expect { order.purchase!('by a test') }.to raise_exception
206
+ allow(order).to receive(:valid?).and_return(false)
207
+ expect { order.purchase!('by a test') }.to raise_exception(Exception)
208
208
  end
209
209
 
210
210
  it 'should return true when the Order is invalid and :validate => false is passed' do
211
- order.stub(:valid?).and_return(false)
211
+ allow(order).to receive(:valid?).and_return(false)
212
212
  order.purchase!('by a test', :validate => false).should eq true
213
213
  end
214
214
 
data/spec/spec_helper.rb CHANGED
@@ -3,7 +3,6 @@ ENV["RAILS_ENV"] ||= 'test'
3
3
  require File.expand_path("../dummy/config/environment", __FILE__)
4
4
 
5
5
  require 'rspec/rails'
6
- require 'rspec/autorun'
7
6
  require 'factory_girl_rails'
8
7
  require 'stripe_mock'
9
8
  require 'pry'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_orders
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.5
4
+ version: 1.6.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-27 00:00:00.000000000 Z
11
+ date: 2015-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -392,6 +392,7 @@ files:
392
392
  - lib/generators/effective_orders/upgrade_price_column_generator.rb
393
393
  - lib/generators/templates/README
394
394
  - lib/generators/templates/effective_orders.rb
395
+ - lib/generators/templates/effective_orders_mailer_preview.rb
395
396
  - spec/controllers/carts_controller_spec.rb
396
397
  - spec/controllers/moneris_orders_controller_spec.rb
397
398
  - spec/controllers/orders_controller_spec.rb
@@ -427,6 +428,7 @@ files:
427
428
  - spec/dummy/config/initializers/inflections.rb
428
429
  - spec/dummy/config/initializers/mime_types.rb
429
430
  - spec/dummy/config/initializers/session_store.rb
431
+ - spec/dummy/config/initializers/simple_form.rb
430
432
  - spec/dummy/config/initializers/wrap_parameters.rb
431
433
  - spec/dummy/config/locales/en.yml
432
434
  - spec/dummy/config/routes.rb
@@ -469,7 +471,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
469
471
  version: '0'
470
472
  requirements: []
471
473
  rubyforge_project:
472
- rubygems_version: 2.4.3
474
+ rubygems_version: 2.5.0
473
475
  signing_key:
474
476
  specification_version: 4
475
477
  summary: Quickly build an online store with carts, orders, automatic email receipts
@@ -507,6 +509,7 @@ test_files:
507
509
  - spec/dummy/config/initializers/inflections.rb
508
510
  - spec/dummy/config/initializers/mime_types.rb
509
511
  - spec/dummy/config/initializers/session_store.rb
512
+ - spec/dummy/config/initializers/simple_form.rb
510
513
  - spec/dummy/config/initializers/wrap_parameters.rb
511
514
  - spec/dummy/config/locales/en.yml
512
515
  - spec/dummy/config/routes.rb