effective_orders 4.0.0beta16 → 4.0.0beta17

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bfed4c5207c463fed6c3d0adfe543cdf6d7179b0
4
- data.tar.gz: 34169145a782863e3714d19c623b023b8e93cd6c
3
+ metadata.gz: c31920616d5695fbd44ffee53ce1528e1e9f0826
4
+ data.tar.gz: 8aaa54b4c98ed47cf86a8502f7e697d0c4e3b1a1
5
5
  SHA512:
6
- metadata.gz: 4c6b21fb32445e76d6d8b4921d6f15923f8cd1c60c2aa969b605735d38ab3a95aed776ea3bc1c17cdcf95798a794ed0dfd7efabcc5662e13965f8c698ba30dfe
7
- data.tar.gz: f219625d20fda0dbc0f2b8d1b085f9dc1a04391cfdeb8753dd8b1947ca58cb3c91126a540947d0f33697b923195003796a78719436350d02223e278017ebd136
6
+ metadata.gz: e6d8e03922d776a594b302a0e5ffafcc7ffba9370d5bf8506af0e3411f2c39a073ec1731c0c6acc42459d295724d0d1b0a75cc0bb8f709c76e7fb11ecb2f2829
7
+ data.tar.gz: 88b80cc28b73baf51057c91c99d090c1d4fc8e4809632c35aa9132ab48edf8639ebe3faa303c6ec5b13d675b399c408c0fc71d383241c5c0e12a8d1610307bf4
data/README.md CHANGED
@@ -588,6 +588,31 @@ Create a Product with the name you want customers to see on their receipts
588
588
  Yearly and a Monthly per team
589
589
 
590
590
 
591
+ #### Callbacks
592
+
593
+ The event is the Stripe event JSON.
594
+
595
+ ```ruby
596
+ after_invoice_payment_succeeded do |event|
597
+ end
598
+
599
+ after_invoice_payment_failed do |event|
600
+ end
601
+
602
+ after_customer_subscription_created do |event|
603
+ end
604
+
605
+ after_customer_subscription_updated do |event|
606
+ end
607
+
608
+ after_customer_subscription_deleted do |event|
609
+ end
610
+
611
+ after_customer_updated do |event|
612
+ end
613
+ ```
614
+
615
+
591
616
  ### Admin Screen
592
617
 
593
618
  To use the Admin screen, please also install the effective_datatables gem:
@@ -13,6 +13,8 @@ module Effective
13
13
  protect_from_forgery except: [:stripe]
14
14
  skip_authorization_check if defined?(CanCan)
15
15
 
16
+ after_action :run_subscribable_buyer_callbacks!
17
+
16
18
  def stripe
17
19
  @event = (Stripe::Webhook.construct_event(request.body.read, request.env['HTTP_STRIPE_SIGNATURE'], EffectiveOrders.subscriptions[:webhook_secret]) rescue nil)
18
20
  (head(:bad_request) and return) unless @event
@@ -21,7 +23,7 @@ module Effective
21
23
  (head(:bad_request) and return) if (params[:livemode] == false && Rails.env.production?)
22
24
  end
23
25
 
24
- Rails.logger.info "[STRIPE] webhook received: #{@event.type}"
26
+ Rails.logger.info "[STRIPE] webhook received: #{@event.type} for #{customer || 'unknown customer'}" # Customer must be called here
25
27
 
26
28
  Effective::Customer.transaction do
27
29
  case @event.type
@@ -66,12 +68,30 @@ module Effective
66
68
  private
67
69
 
68
70
  def customer
69
- @customer ||= Effective::Customer.where(stripe_customer_id: @event.data.object.customer).first!
71
+ return unless @event.respond_to?(:data)
72
+
73
+ @customer ||= (
74
+ stripe_customer_id = @event.data.object.customer if @event.data.object.respond_to?(:customer)
75
+ stripe_customer_id = @event.data.object.id if @event.data.object.object == 'customer'
76
+
77
+ Effective::Customer.where(stripe_customer_id: stripe_customer_id || 'unknown').first!
78
+ )
70
79
  end
71
80
 
72
81
  def send_email(email, *mailer_args)
73
82
  Effective::OrdersMailer.public_send(email, *mailer_args).public_send(EffectiveOrders.mailer[:deliver_method])
74
83
  end
75
84
 
85
+ def run_subscribable_buyer_callbacks!
86
+ return if @event.blank? || @customer.blank?
87
+
88
+ name = ('after_' + @event.type.to_s.gsub('.', '_')).to_sym
89
+ buyer = @customer.user
90
+
91
+ buyer.public_send(name, @event) if buyer.respond_to?(name)
92
+
93
+ true
94
+ end
95
+
76
96
  end
77
97
  end
@@ -18,5 +18,32 @@ module ActsAsSubscribableBuyer
18
18
  end
19
19
  end
20
20
 
21
+ module ClassMethods
22
+ def after_invoice_payment_succeeded(&block)
23
+ send :define_method, :after_invoice_payment_succeeded do |event| self.instance_exec(event, &block) end
24
+ end
25
+
26
+ def after_invoice_payment_failed(&block)
27
+ send :define_method, :after_invoice_payment_failed do |event| self.instance_exec(event, &block) end
28
+ end
29
+
30
+ def after_customer_subscription_created(&block)
31
+ send :define_method, :after_customer_subscription_created do |event| self.instance_exec(event, &block) end
32
+ end
33
+
34
+ def after_customer_subscription_updated(&block)
35
+ send :define_method, :after_customer_subscription_updated do |event| self.instance_exec(event, &block) end
36
+ end
37
+
38
+ def after_customer_subscription_deleted(&block)
39
+ send :define_method, :after_customer_subscription_deleted do |event| self.instance_exec(event, &block) end
40
+ end
41
+
42
+ def after_customer_updated(&block)
43
+ send :define_method, :after_customer_updated do |event| self.instance_exec(event, &block) end
44
+ end
45
+
46
+ end
47
+
21
48
  end
22
49
 
@@ -1,3 +1,3 @@
1
1
  module EffectiveOrders
2
- VERSION = '4.0.0beta16'.freeze
2
+ VERSION = '4.0.0beta17'.freeze
3
3
  end
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: 4.0.0beta16
4
+ version: 4.0.0beta17
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: 2018-07-06 00:00:00.000000000 Z
11
+ date: 2018-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails