effective_orders 4.6.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +11 -86
  4. data/app/controllers/admin/customers_controller.rb +5 -16
  5. data/app/controllers/admin/order_items_controller.rb +6 -9
  6. data/app/controllers/admin/orders_controller.rb +17 -81
  7. data/app/controllers/effective/carts_controller.rb +10 -6
  8. data/app/controllers/effective/customers_controller.rb +4 -2
  9. data/app/controllers/effective/orders_controller.rb +27 -23
  10. data/app/controllers/effective/providers/cheque.rb +3 -1
  11. data/app/controllers/effective/providers/free.rb +3 -1
  12. data/app/controllers/effective/providers/mark_as_paid.rb +4 -2
  13. data/app/controllers/effective/providers/moneris.rb +3 -1
  14. data/app/controllers/effective/providers/paypal.rb +3 -2
  15. data/app/controllers/effective/providers/phone.rb +3 -1
  16. data/app/controllers/effective/providers/pretend.rb +3 -1
  17. data/app/controllers/effective/providers/refund.rb +3 -1
  18. data/app/controllers/effective/providers/stripe.rb +3 -1
  19. data/app/controllers/effective/subscripter_controller.rb +4 -2
  20. data/app/controllers/effective/webhooks_controller.rb +12 -3
  21. data/app/datatables/admin/effective_customers_datatable.rb +7 -3
  22. data/app/datatables/admin/effective_orders_datatable.rb +2 -2
  23. data/app/datatables/effective_orders_datatable.rb +1 -1
  24. data/app/mailers/effective/orders_mailer.rb +131 -96
  25. data/app/models/concerns/acts_as_purchasable.rb +0 -11
  26. data/app/models/concerns/acts_as_subscribable.rb +0 -6
  27. data/app/models/effective/cart.rb +7 -5
  28. data/app/models/effective/cart_item.rb +7 -4
  29. data/app/models/effective/customer.rb +7 -6
  30. data/app/models/effective/order.rb +51 -38
  31. data/app/models/effective/order_item.rb +10 -8
  32. data/app/models/effective/product.rb +9 -6
  33. data/app/models/effective/subscription.rb +13 -12
  34. data/app/views/admin/orders/_form.html.haml +5 -9
  35. data/app/views/admin/orders/_order_item_fields.html.haml +8 -12
  36. data/app/views/effective/orders/_checkout_step2.html.haml +1 -2
  37. data/app/views/effective/orders/_order_actions.html.haml +1 -1
  38. data/config/effective_orders.rb +8 -32
  39. data/config/routes.rb +16 -17
  40. data/db/migrate/01_create_effective_orders.rb.erb +4 -0
  41. data/lib/effective_orders.rb +34 -76
  42. data/lib/effective_orders/engine.rb +0 -7
  43. data/lib/effective_orders/version.rb +1 -1
  44. data/lib/generators/templates/effective_orders_mailer_preview.rb +13 -13
  45. data/lib/tasks/effective_orders_tasks.rake +2 -2
  46. metadata +1 -2
  47. data/app/models/effective/access_denied.rb +0 -17
@@ -4,9 +4,11 @@ module Effective
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  def cheque
7
+ raise('cheque provider is not available') unless EffectiveOrders.cheque?
8
+
7
9
  @order ||= Order.find(params[:id])
8
10
 
9
- EffectiveOrders.authorize!(self, :update, @order)
11
+ EffectiveResources.authorize!(self, :update, @order)
10
12
 
11
13
  flash[:success] = EffectiveOrders.cheque[:success]
12
14
 
@@ -4,9 +4,11 @@ module Effective
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  def free
7
+ raise('free provider is not available') unless EffectiveOrders.free?
8
+
7
9
  @order ||= Order.find(params[:id])
8
10
 
9
- EffectiveOrders.authorize!(self, :update, @order)
11
+ EffectiveResources.authorize!(self, :update, @order)
10
12
 
11
13
  unless @order.free?
12
14
  flash[:danger] = 'Unable to process free order with a non-zero total'
@@ -4,10 +4,12 @@ module Effective
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  def mark_as_paid
7
+ raise('mark_as_paid provider is not available') unless EffectiveOrders.mark_as_paid?
8
+
7
9
  @order ||= Order.find(params[:id])
8
10
 
9
- EffectiveOrders.authorize!(self, :update, @order)
10
- EffectiveOrders.authorize!(self, :admin, :effective_orders)
11
+ EffectiveResources.authorize!(self, :update, @order)
12
+ EffectiveResources.authorize!(self, :admin, :effective_orders)
11
13
 
12
14
  @order.assign_attributes(mark_as_paid_params.except(:payment, :payment_provider, :payment_card))
13
15
 
@@ -10,9 +10,11 @@ module Effective
10
10
  end
11
11
 
12
12
  def moneris_postback
13
+ raise('moneris provider is not available') unless EffectiveOrders.moneris?
14
+
13
15
  @order ||= Effective::Order.find(params[:response_order_id])
14
16
 
15
- (EffectiveOrders.authorize!(self, :update, @order) rescue false)
17
+ (EffectiveResources.authorize!(self, :update, @order) rescue false)
16
18
 
17
19
  # Delete the Purchased and Declined Redirect URLs
18
20
  purchased_url = params.delete(:rvar_purchased_url)
@@ -10,9 +10,11 @@ module Effective
10
10
  # TODO: Make paypal postback work with admin checkout workflow
11
11
 
12
12
  def paypal_postback
13
+ raise('paypal provider is not available') unless EffectiveOrders.paypal?
14
+
13
15
  @order ||= Effective::Order.where(id: (params[:invoice].to_i rescue 0)).first
14
16
 
15
- (EffectiveOrders.authorize!(self, :update, @order) rescue false)
17
+ (EffectiveResources.authorize!(self, :update, @order) rescue false)
16
18
 
17
19
  if @order.present?
18
20
  if @order.purchased?
@@ -27,7 +29,6 @@ module Effective
27
29
  head(:ok)
28
30
  end
29
31
 
30
-
31
32
  end
32
33
  end
33
34
  end
@@ -4,9 +4,11 @@ module Effective
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  def phone
7
+ raise('phone provider is not available') unless EffectiveOrders.phone?
8
+
7
9
  @order ||= Order.find(params[:id])
8
10
 
9
- EffectiveOrders.authorize!(self, :update, @order)
11
+ EffectiveResources.authorize!(self, :update, @order)
10
12
 
11
13
  flash[:success] = EffectiveOrders.phone[:success]
12
14
 
@@ -4,9 +4,11 @@ module Effective
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  def pretend
7
+ raise('pretend provider is not available') unless EffectiveOrders.pretend?
8
+
7
9
  @order ||= Order.find(params[:id])
8
10
 
9
- EffectiveOrders.authorize!(self, :update, @order)
11
+ EffectiveResources.authorize!(self, :update, @order)
10
12
 
11
13
  order_purchased(
12
14
  payment: 'for pretend',
@@ -4,9 +4,11 @@ module Effective
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  def refund
7
+ raise('refund provider is not available') unless EffectiveOrders.refund?
8
+
7
9
  @order ||= Order.find(params[:id])
8
10
 
9
- EffectiveOrders.authorize!(self, :update, @order)
11
+ EffectiveResources.authorize!(self, :update, @order)
10
12
 
11
13
  unless @order.refund?
12
14
  flash[:danger] = 'Unable to process refund order with a positive total'
@@ -4,10 +4,12 @@ module Effective
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  def stripe
7
+ raise('stripe provider is not available') unless EffectiveOrders.stripe?
8
+
7
9
  @order = Order.find(params[:id])
8
10
  @customer = Effective::Customer.for_user(@order.user)
9
11
 
10
- EffectiveOrders.authorize!(self, :update, @order)
12
+ EffectiveResources.authorize!(self, :update, @order)
11
13
 
12
14
  payment = validate_stripe_payment(stripe_params[:payment_intent_id])
13
15
 
@@ -1,9 +1,11 @@
1
1
  module Effective
2
2
  class SubscripterController < ApplicationController
3
- layout (EffectiveOrders.layout.kind_of?(Hash) ? EffectiveOrders.layout[:subscriptions] : EffectiveOrders.layout)
4
-
5
3
  include Effective::CrudController
6
4
 
5
+ if (config = EffectiveOrders.layout)
6
+ layout(config.kind_of?(Hash) ? (config[:subscriptions] || config[:application]) : config)
7
+ end
8
+
7
9
  submit :save, 'Save', redirect: :back, success: -> { 'Successfully updated plan.' }
8
10
 
9
11
  def resource
@@ -89,9 +89,18 @@ module Effective
89
89
  end
90
90
  end
91
91
 
92
- def send_email(email, *mailer_args)
93
- Effective::OrdersMailer.public_send(email, *mailer_args).public_send(EffectiveOrders.mailer[:deliver_method])
94
- Effective::OrdersMailer.public_send(:subscription_event_to_admin, email.to_s, *mailer_args).public_send(EffectiveOrders.mailer[:deliver_method])
92
+ def send_email(email, *args)
93
+ raise('expected args to be an Array') unless args.kind_of?(Array)
94
+
95
+ if defined?(Tenant)
96
+ tenant = Tenant.current || raise('expected a current tenant')
97
+ args << { tenant: tenant }
98
+ end
99
+
100
+ deliver_method = EffectiveOrders.mailer[:deliver_method] || EffectiveResources.deliver_method
101
+
102
+ EffectiveOrders.mailer_klass.send(email, *args).send(deliver_method)
103
+ EffectiveOrders.mailer_klass.send(:subscription_event_to_admin, email.to_s, *args).send(deliver_method)
95
104
  end
96
105
 
97
106
  def run_subscribable_buyer_callbacks!
@@ -2,8 +2,12 @@ class Admin::EffectiveCustomersDatatable < Effective::Datatable
2
2
  datatable do
3
3
 
4
4
  col :id, visible: false
5
- col :user
6
- col 'user.email'
5
+
6
+ col :user, search: :string
7
+
8
+ col :email do |customer|
9
+ customer.user.email
10
+ end
7
11
 
8
12
  if EffectiveOrders.stripe?
9
13
  col :stripe_customer_id
@@ -17,6 +21,6 @@ class Admin::EffectiveCustomersDatatable < Effective::Datatable
17
21
  end
18
22
 
19
23
  collection do
20
- Effective::Customer.joins(:user).all
24
+ Effective::Customer.includes(:user).all
21
25
  end
22
26
  end
@@ -40,7 +40,7 @@ class Admin::EffectiveOrdersDatatable < Effective::Datatable
40
40
  end
41
41
 
42
42
  if attributes[:user_id].blank?
43
- col :user
43
+ col :user, search: :string
44
44
  col :billing_name, visible: false
45
45
  col :email, visible: false
46
46
  end
@@ -102,7 +102,7 @@ class Admin::EffectiveOrdersDatatable < Effective::Datatable
102
102
  end
103
103
 
104
104
  def user
105
- @user ||= User.find(attributes[:user_id])
105
+ @user ||= current_user.class.find(attributes[:user_id])
106
106
  end
107
107
 
108
108
  end
@@ -79,7 +79,7 @@ class EffectiveOrdersDatatable < Effective::Datatable
79
79
  end
80
80
 
81
81
  def user
82
- @user ||= User.find(attributes[:user_id])
82
+ @user ||= current_user.class.find(attributes[:user_id])
83
83
  end
84
84
 
85
85
  end
@@ -1,183 +1,218 @@
1
1
  module Effective
2
2
  class OrdersMailer < ActionMailer::Base
3
- default from: EffectiveOrders.mailer[:default_from]
3
+ default from: -> { EffectiveOrders.mailer[:default_from] }
4
+ layout -> { EffectiveOrders.mailer[:layout].presence || 'effective_orders_mailer_layout' }
4
5
 
5
6
  helper EffectiveOrdersHelper
6
- layout EffectiveOrders.mailer[:layout].presence || 'effective_orders_mailer_layout'
7
7
 
8
- def order_receipt_to_admin(order_param)
9
- return true unless EffectiveOrders.mailer[:send_order_receipt_to_admin]
8
+ def order_receipt_to_admin(order_param, atts = {})
9
+ around_mail_action(:order_receipt_to_admin, order_param, atts) do
10
+ return true unless EffectiveOrders.mailer[:send_order_receipt_to_admin]
10
11
 
11
- @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
12
- @user = @order.user
12
+ @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
13
+ @user = @order.user
13
14
 
14
- @subject = subject_for(@order, :order_receipt_to_admin, "Order Receipt: ##{@order.to_param}")
15
+ @subject = subject_for(@order, :order_receipt_to_admin, "Order Receipt: ##{@order.to_param}")
15
16
 
16
- mail(to: EffectiveOrders.mailer[:admin_email], from: EffectiveOrders.mailer[:default_from], subject: @subject)
17
+ mail(to: EffectiveOrders.mailer[:admin_email], subject: @subject)
18
+ end
17
19
  end
18
20
 
19
- def order_receipt_to_buyer(order_param) # Buyer
20
- return true unless EffectiveOrders.mailer[:send_order_receipt_to_buyer]
21
+ def order_receipt_to_buyer(order_param, atts = {}) # Buyer
22
+ around_mail_action(:order_receipt_to_buyer, order_param, atts) do
23
+ return true unless EffectiveOrders.mailer[:send_order_receipt_to_buyer]
21
24
 
22
- @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
23
- @user = @order.user
25
+ @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
26
+ @user = @order.user
24
27
 
25
- @subject = subject_for(@order, :order_receipt_to_buyer, "Order Receipt: ##{@order.to_param}")
28
+ @subject = subject_for(@order, :order_receipt_to_buyer, "Order Receipt: ##{@order.to_param}")
26
29
 
27
- mail(to: @order.email, cc: @order.cc, subject: @subject)
30
+ mail(to: @order.email, cc: @order.cc, subject: @subject)
31
+ end
28
32
  end
29
33
 
30
34
  # This is sent when an admin creates a new order or /admin/orders/new
31
35
  # Or when Pay by Cheque or Pay by Phone (deferred payments)
32
36
  # Or uses the order action Send Payment Request
33
- def payment_request_to_buyer(order_param)
34
- return true unless EffectiveOrders.mailer[:send_payment_request_to_buyer]
37
+ def payment_request_to_buyer(order_param, atts = {})
38
+ around_mail_action(:payment_request_to_buyer, order_param, atts) do
39
+ return true unless EffectiveOrders.mailer[:send_payment_request_to_buyer]
35
40
 
36
- @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
37
- @user = @order.user
41
+ @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
42
+ @user = @order.user
38
43
 
39
- @subject = subject_for(@order, :payment_request_to_buyer, "Request for Payment: Invoice ##{@order.to_param}")
44
+ @subject = subject_for(@order, :payment_request_to_buyer, "Request for Payment: Invoice ##{@order.to_param}")
40
45
 
41
- mail(to: @order.email, cc: @order.cc, subject: @subject)
46
+ mail(to: @order.email, cc: @order.cc, subject: @subject)
47
+ end
42
48
  end
43
49
 
50
+
44
51
  # This is sent when someone chooses to Pay by Cheque
45
- def pending_order_invoice_to_buyer(order_param)
46
- return true unless EffectiveOrders.mailer[:send_pending_order_invoice_to_buyer]
52
+ def pending_order_invoice_to_buyer(order_param, atts = {})
53
+ around_mail_action(:pending_order_invoice_to_buyer, order_param, atts) do
54
+ return true unless EffectiveOrders.mailer[:send_pending_order_invoice_to_buyer]
47
55
 
48
- @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
49
- @user = @order.user
56
+ @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
57
+ @user = @order.user
50
58
 
51
- @subject = subject_for(@order, :pending_order_invoice_to_buyer, "Pending Order: ##{@order.to_param}")
59
+ @subject = subject_for(@order, :pending_order_invoice_to_buyer, "Pending Order: ##{@order.to_param}")
52
60
 
53
- mail(to: @order.email, cc: @order.cc, subject: @subject)
61
+ mail(to: @order.email, cc: @order.cc, subject: @subject)
62
+ end
54
63
  end
55
64
 
56
65
  # This is sent to admin when someone Accepts Refund
57
- def refund_notification_to_admin(order_param)
58
- @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
59
- @user = @order.user
66
+ def refund_notification_to_admin(order_param, atts = {})
67
+ around_mail_action(:refund_notification_to_admin, order_param, atts) do
68
+ @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
69
+ @user = @order.user
60
70
 
61
- @subject = subject_for(@order, :refund_notification_to_admin, "New Refund: ##{@order.to_param}")
71
+ @subject = subject_for(@order, :refund_notification_to_admin, "New Refund: ##{@order.to_param}")
62
72
 
63
- mail(to: EffectiveOrders.mailer[:admin_email], subject: @subject)
73
+ mail(to: EffectiveOrders.mailer[:admin_email], subject: @subject)
74
+ end
64
75
  end
65
76
 
66
77
  # Sent by the invoice.payment_succeeded webhook event
67
- def subscription_payment_succeeded(customer_param)
68
- return true unless EffectiveOrders.mailer[:send_subscription_payment_succeeded]
78
+ def subscription_payment_succeeded(customer_param, atts = {})
79
+ around_mail_action(:subscription_payment_succeeded, customer_param, atts) do
80
+ return true unless EffectiveOrders.mailer[:send_subscription_payment_succeeded]
69
81
 
70
- @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
71
- @subscriptions = @customer.subscriptions
72
- @user = @customer.user
82
+ @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
83
+ @subscriptions = @customer.subscriptions
84
+ @user = @customer.user
73
85
 
74
- @subject = subject_for(@customer, :subscription_payment_succeeded, 'Thank you for your payment')
86
+ @subject = subject_for(@customer, :subscription_payment_succeeded, 'Thank you for your payment')
75
87
 
76
- mail(to: @customer.user.email, subject: @subject)
88
+ mail(to: @customer.user.email, subject: @subject)
89
+ end
77
90
  end
78
91
 
79
92
  # Sent by the invoice.payment_failed webhook event
80
- def subscription_payment_failed(customer_param)
81
- return true unless EffectiveOrders.mailer[:send_subscription_payment_failed]
93
+ def subscription_payment_failed(customer_param, atts = {})
94
+ around_mail_action(:subscription_payment_failed, customer_param, atts) do
95
+ return true unless EffectiveOrders.mailer[:send_subscription_payment_failed]
82
96
 
83
- @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
84
- @subscriptions = @customer.subscriptions
85
- @user = @customer.user
97
+ @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
98
+ @subscriptions = @customer.subscriptions
99
+ @user = @customer.user
86
100
 
87
- @subject = subject_for(@customer, :subscription_payment_failed, 'Payment failed - please update your card details')
101
+ @subject = subject_for(@customer, :subscription_payment_failed, 'Payment failed - please update your card details')
88
102
 
89
- mail(to: @customer.user.email, subject: @subject)
103
+ mail(to: @customer.user.email, subject: @subject)
104
+ end
90
105
  end
91
106
 
92
107
  # Sent by the customer.subscription.created webhook event
93
- def subscription_created(customer_param)
94
- return true unless EffectiveOrders.mailer[:send_subscription_created]
108
+ def subscription_created(customer_param, atts = {})
109
+ around_mail_action(:subscription_created, customer_param, atts) do
110
+ return true unless EffectiveOrders.mailer[:send_subscription_created]
95
111
 
96
- @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
97
- @subscriptions = @customer.subscriptions
98
- @user = @customer.user
112
+ @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
113
+ @subscriptions = @customer.subscriptions
114
+ @user = @customer.user
99
115
 
100
- @subject = subject_for(@customer, :subscription_created, 'New Subscription')
116
+ @subject = subject_for(@customer, :subscription_created, 'New Subscription')
101
117
 
102
- mail(to: @customer.user.email, subject: @subject)
118
+ mail(to: @customer.user.email, subject: @subject)
119
+ end
103
120
  end
104
121
 
105
122
  # Sent by the customer.subscription.updated webhook event
106
- def subscription_updated(customer_param)
107
- return true unless EffectiveOrders.mailer[:send_subscription_updated]
123
+ def subscription_updated(customer_param, atts = {})
124
+ around_mail_action(:subscription_updated, customer_param, atts) do
125
+ return true unless EffectiveOrders.mailer[:send_subscription_updated]
108
126
 
109
- @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
110
- @subscriptions = @customer.subscriptions
111
- @user = @customer.user
127
+ @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
128
+ @subscriptions = @customer.subscriptions
129
+ @user = @customer.user
112
130
 
113
- @subject = subject_for(@customer, :subscription_updated, 'Subscription Changed')
131
+ @subject = subject_for(@customer, :subscription_updated, 'Subscription Changed')
114
132
 
115
- mail(to: @customer.user.email, subject: @subject)
133
+ mail(to: @customer.user.email, subject: @subject)
134
+ end
116
135
  end
117
136
 
118
137
  # Sent by the invoice.payment_failed webhook event
119
- def subscription_canceled(customer_param)
120
- return true unless EffectiveOrders.mailer[:send_subscription_canceled]
138
+ def subscription_canceled(customer_param, atts = {})
139
+ around_mail_action(:subscription_canceled, customer_param, atts) do
140
+ return true unless EffectiveOrders.mailer[:send_subscription_canceled]
121
141
 
122
- @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
123
- @subscriptions = @customer.subscriptions
124
- @user = @customer.user
142
+ @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
143
+ @subscriptions = @customer.subscriptions
144
+ @user = @customer.user
125
145
 
126
- @subject = subject_for(@customer, :subscription_canceled, 'Subscription canceled')
146
+ @subject = subject_for(@customer, :subscription_canceled, 'Subscription canceled')
127
147
 
128
- mail(to: @customer.user.email, subject: @subject)
148
+ mail(to: @customer.user.email, subject: @subject)
149
+ end
129
150
  end
130
151
 
131
152
  # Sent by the effective_orders:notify_trial_users rake task.
132
- def subscription_trialing(subscribable)
133
- return true unless EffectiveOrders.mailer[:send_subscription_trialing]
153
+ def subscription_trialing(subscribable, atts = {})
154
+ around_mail_action(:subscription_trialing, subscribable, atts) do
155
+ return true unless EffectiveOrders.mailer[:send_subscription_trialing]
134
156
 
135
- @subscribable = subscribable
136
- @user = @subscribable.subscribable_buyer
157
+ @subscribable = subscribable
158
+ @user = @subscribable.subscribable_buyer
137
159
 
138
- @subject = subject_for(@customer, :subscription_trialing, 'Trial is active')
160
+ @subject = subject_for(@customer, :subscription_trialing, 'Trial is active')
139
161
 
140
- mail(to: @subscribable.subscribable_buyer.email, subject: @subject)
162
+ mail(to: @subscribable.subscribable_buyer.email, subject: @subject)
163
+ end
141
164
  end
142
165
 
143
166
  # Sent by the effective_orders:notify_trial_users rake task.
144
- def subscription_trial_expired(subscribable)
145
- return true unless EffectiveOrders.mailer[:send_subscription_trial_expired]
167
+ def subscription_trial_expired(subscribable, atts = {})
168
+ around_mail_action(:subscription_trial_expired, subscribable, atts) do
169
+ return true unless EffectiveOrders.mailer[:send_subscription_trial_expired]
146
170
 
147
- @subscribable = subscribable
148
- @user = @subscribable.subscribable_buyer
171
+ @subscribable = subscribable
172
+ @user = @subscribable.subscribable_buyer
149
173
 
150
- @subject = subject_for(@customer, :subscription_trial_expired, 'Trial expired')
174
+ @subject = subject_for(@customer, :subscription_trial_expired, 'Trial expired')
151
175
 
152
- mail(to: @subscribable.subscribable_buyer.email, subject: @subject)
176
+ mail(to: @subscribable.subscribable_buyer.email, subject: @subject)
177
+ end
153
178
  end
154
179
 
155
- def subscription_event_to_admin(event, customer_param)
156
- return true unless EffectiveOrders.mailer[:send_subscription_event_to_admin]
180
+ def subscription_event_to_admin(event, customer_param, atts = {})
181
+ around_mail_action(:subscription_event_to_admin, event, atts) do
182
+ return true unless EffectiveOrders.mailer[:send_subscription_event_to_admin]
157
183
 
158
- @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
159
- @subscriptions = @customer.subscriptions
160
- @user = @customer.user
161
- @event = event.to_s
184
+ @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
185
+ @subscriptions = @customer.subscriptions
186
+ @user = @customer.user
187
+ @event = event.to_s
162
188
 
163
- @subject = subject_for(@customer, :subscription_event_to_admin, "Subscription event - @event - @customer").gsub('@event', @event.to_s).gsub('@customer', @customer.to_s)
189
+ @subject = subject_for(@customer, :subscription_event_to_admin, "Subscription event - @event - @customer").gsub('@event', @event.to_s).gsub('@customer', @customer.to_s)
164
190
 
165
- mail(to: EffectiveOrders.mailer[:admin_email], subject: @subject)
191
+ mail(to: EffectiveOrders.mailer[:admin_email], subject: @subject)
192
+ end
166
193
  end
167
194
 
168
195
  def order_error(order: nil, error: nil, to: nil, from: nil, subject: nil, template: 'order_error')
169
- @order = (order.kind_of?(Effective::Order) ? order : Effective::Order.find(order))
170
- @error = error.to_s
196
+ around_mail_action(:order_error, order, {error: error, to: to, from: from, subject: subject, template: template}) do
197
+ @order = (order.kind_of?(Effective::Order) ? order : Effective::Order.find(order))
198
+ @error = error.to_s
199
+
200
+ @subject = subject_for(@order, :error, "An error occurred with order: ##{@order.try(:to_param)}")
201
+
202
+ mail(
203
+ to: (to || EffectiveOrders.mailer[:admin_email]),
204
+ from: (from || EffectiveOrders.mailer[:default_from]),
205
+ subject: (subject || @subject)
206
+ ) do |format|
207
+ format.html { render(template) }
208
+ end
209
+ end
210
+ end
171
211
 
172
- @subject = subject_for(@order, :error, "An error occurred with order: ##{@order.try(:to_param)}")
212
+ protected
173
213
 
174
- mail(
175
- to: (to || EffectiveOrders.mailer[:admin_email]),
176
- from: (from || EffectiveOrders.mailer[:default_from]),
177
- subject: (subject || @subject)
178
- ) do |format|
179
- format.html { render(template) }
180
- end
214
+ def around_mail_action(name, param, atts = {}, &block)
215
+ yield
181
216
  end
182
217
 
183
218
  private