effective_orders 4.6.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
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