pay 2.7.0 → 3.0.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of pay might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +35 -696
- data/app/controllers/pay/webhooks/braintree_controller.rb +10 -3
- data/app/controllers/pay/webhooks/paddle_controller.rb +7 -8
- data/app/controllers/pay/webhooks/stripe_controller.rb +6 -3
- data/app/jobs/pay/{email_sync_job.rb → customer_sync_job.rb} +3 -4
- data/app/models/pay/application_record.rb +1 -5
- data/app/models/pay/charge.rb +31 -18
- data/app/models/pay/customer.rb +87 -0
- data/app/models/pay/merchant.rb +19 -0
- data/app/models/pay/payment_method.rb +41 -0
- data/app/models/pay/subscription.rb +42 -30
- data/app/models/pay/webhook.rb +36 -0
- data/app/views/layouts/pay/application.html.erb +2 -3
- data/app/views/pay/payments/show.html.erb +109 -81
- data/app/views/pay/user_mailer/receipt.html.erb +2 -2
- data/app/views/pay/user_mailer/refund.html.erb +2 -2
- data/config/locales/en.yml +1 -1
- data/db/migrate/1_create_pay_tables.rb +72 -0
- data/lib/generators/active_record/billable_generator.rb +44 -0
- data/lib/generators/active_record/merchant_generator.rb +44 -0
- data/lib/generators/active_record/templates/billable_migration.rb +17 -0
- data/lib/generators/active_record/templates/merchant_migration.rb +12 -0
- data/lib/generators/pay/{pay_generator.rb → billable_generator.rb} +2 -3
- data/lib/generators/pay/merchant_generator.rb +17 -0
- data/lib/generators/pay/orm_helpers.rb +10 -6
- data/lib/pay/adapter.rb +9 -0
- data/lib/pay/attributes.rb +74 -0
- data/lib/pay/billable/sync_customer.rb +30 -0
- data/lib/pay/braintree/billable.rb +133 -110
- data/lib/pay/braintree/payment_method.rb +42 -0
- data/lib/pay/braintree/subscription.rb +9 -12
- data/lib/pay/braintree/webhooks/subscription_canceled.rb +1 -1
- data/lib/pay/braintree/webhooks/subscription_charged_successfully.rb +4 -4
- data/lib/pay/braintree/webhooks/subscription_charged_unsuccessfully.rb +1 -1
- data/lib/pay/braintree/webhooks/subscription_expired.rb +1 -1
- data/lib/pay/braintree/webhooks/subscription_trial_ended.rb +2 -2
- data/lib/pay/braintree/webhooks/subscription_went_active.rb +1 -1
- data/lib/pay/braintree/webhooks/subscription_went_past_due.rb +1 -1
- data/lib/pay/braintree.rb +3 -2
- data/lib/pay/engine.rb +6 -1
- data/lib/pay/env.rb +8 -0
- data/lib/pay/fake_processor/billable.rb +45 -21
- data/lib/pay/fake_processor/payment_method.rb +21 -0
- data/lib/pay/fake_processor/subscription.rb +11 -8
- data/lib/pay/fake_processor.rb +2 -1
- data/lib/pay/nano_id.rb +13 -0
- data/lib/pay/paddle/billable.rb +18 -48
- data/lib/pay/paddle/charge.rb +5 -5
- data/lib/pay/paddle/payment_method.rb +60 -0
- data/lib/pay/paddle/response.rb +0 -0
- data/lib/pay/paddle/subscription.rb +49 -8
- data/lib/pay/paddle/webhooks/subscription_cancelled.rb +6 -3
- data/lib/pay/paddle/webhooks/subscription_created.rb +1 -40
- data/lib/pay/paddle/webhooks/subscription_payment_refunded.rb +3 -3
- data/lib/pay/paddle/webhooks/subscription_payment_succeeded.rb +26 -28
- data/lib/pay/paddle/webhooks/subscription_updated.rb +2 -2
- data/lib/pay/paddle.rb +7 -3
- data/lib/pay/payment.rb +1 -1
- data/lib/pay/receipts.rb +35 -7
- data/lib/pay/stripe/billable.rb +80 -102
- data/lib/pay/stripe/charge.rb +59 -3
- data/lib/pay/stripe/merchant.rb +10 -10
- data/lib/pay/stripe/payment_method.rb +61 -0
- data/lib/pay/stripe/subscription.rb +70 -8
- data/lib/pay/stripe/webhooks/account_updated.rb +2 -3
- data/lib/pay/stripe/webhooks/charge_refunded.rb +2 -7
- data/lib/pay/stripe/webhooks/charge_succeeded.rb +2 -8
- data/lib/pay/stripe/webhooks/checkout_session_async_payment_succeeded.rb +15 -0
- data/lib/pay/stripe/webhooks/checkout_session_completed.rb +15 -0
- data/lib/pay/stripe/webhooks/customer_deleted.rb +7 -15
- data/lib/pay/stripe/webhooks/customer_updated.rb +10 -3
- data/lib/pay/stripe/webhooks/payment_action_required.rb +2 -2
- data/lib/pay/stripe/webhooks/payment_intent_succeeded.rb +6 -14
- data/lib/pay/stripe/webhooks/payment_method_attached.rb +15 -0
- data/lib/pay/stripe/webhooks/payment_method_detached.rb +12 -0
- data/lib/pay/stripe/webhooks/payment_method_updated.rb +10 -4
- data/lib/pay/stripe/webhooks/subscription_created.rb +1 -36
- data/lib/pay/stripe/webhooks/subscription_deleted.rb +2 -9
- data/lib/pay/stripe/webhooks/subscription_renewing.rb +14 -6
- data/lib/pay/stripe/webhooks/subscription_updated.rb +1 -29
- data/lib/pay/stripe.rb +12 -3
- data/lib/pay/version.rb +1 -1
- data/lib/pay/webhooks/delegator.rb +4 -0
- data/lib/pay/webhooks/process_job.rb +9 -0
- data/lib/pay/webhooks.rb +1 -0
- data/lib/pay.rb +7 -78
- data/lib/tasks/pay.rake +20 -0
- metadata +31 -39
- data/app/models/pay.rb +0 -5
- data/db/migrate/20170205020145_create_pay_subscriptions.rb +0 -17
- data/db/migrate/20170727235816_create_pay_charges.rb +0 -18
- data/db/migrate/20190816015720_add_status_to_pay_subscriptions.rb +0 -14
- data/db/migrate/20200603134434_add_data_to_pay_models.rb +0 -15
- data/db/migrate/20210309004259_add_data_to_pay_billable.rb +0 -19
- data/db/migrate/20210406215234_add_currency_to_pay_charges.rb +0 -5
- data/db/migrate/20210406215506_add_application_fee_to_pay_models.rb +0 -7
- data/lib/generators/active_record/pay_generator.rb +0 -58
- data/lib/generators/active_record/templates/migration.rb +0 -9
- data/lib/pay/billable/sync_email.rb +0 -40
- data/lib/pay/billable.rb +0 -172
@@ -4,12 +4,18 @@ module Pay
|
|
4
4
|
class PaymentMethodUpdated
|
5
5
|
def call(event)
|
6
6
|
object = event.data.object
|
7
|
-
billable = Pay.find_billable(processor: :stripe, processor_id: object.customer)
|
8
7
|
|
9
|
-
|
10
|
-
|
8
|
+
if object.customer
|
9
|
+
pay_customer = Pay::Customer.find_by(processor: :stripe, processor_id: object.customer)
|
11
10
|
|
12
|
-
|
11
|
+
# Couldn't find user, we can skip
|
12
|
+
return unless pay_customer.present?
|
13
|
+
|
14
|
+
Pay::Stripe::PaymentMethod.sync(object.id, stripe_account: event.try(:account))
|
15
|
+
else
|
16
|
+
# If customer was removed, we should delete the payment method if it exists
|
17
|
+
Pay::PaymentMethod.find_by_processor_and_id(:stripe, object.id)&.destroy
|
18
|
+
end
|
13
19
|
end
|
14
20
|
end
|
15
21
|
end
|
@@ -3,42 +3,7 @@ module Pay
|
|
3
3
|
module Webhooks
|
4
4
|
class SubscriptionCreated
|
5
5
|
def call(event)
|
6
|
-
object
|
7
|
-
|
8
|
-
# We may already have the subscription in the database, so we can update that record
|
9
|
-
subscription = Pay.subscription_model.find_by(processor: :stripe, processor_id: object.id)
|
10
|
-
|
11
|
-
# Create the subscription in the database if we don't have it already
|
12
|
-
if subscription.nil?
|
13
|
-
# The customer should already be in the database
|
14
|
-
owner = Pay.find_billable(processor: :stripe, processor_id: object.customer)
|
15
|
-
|
16
|
-
if owner.nil?
|
17
|
-
Rails.logger.error("[Pay] Unable to find Pay::Billable with processor: :stripe and processor_id: '#{object.customer}'. Searched these models: #{Pay.billable_models.join(", ")}")
|
18
|
-
return
|
19
|
-
end
|
20
|
-
|
21
|
-
subscription = Pay.subscription_model.new(name: Pay.default_product_name, owner: owner, processor: :stripe, processor_id: object.id)
|
22
|
-
end
|
23
|
-
|
24
|
-
subscription.application_fee_percent = object.application_fee_percent
|
25
|
-
subscription.processor_plan = object.plan.id
|
26
|
-
subscription.quantity = object.quantity
|
27
|
-
subscription.status = object.status
|
28
|
-
subscription.trial_ends_at = Time.at(object.trial_end) if object.trial_end.present?
|
29
|
-
|
30
|
-
# If user was on trial, their subscription ends at the end of the trial
|
31
|
-
subscription.ends_at = if object.cancel_at_period_end && subscription.on_trial?
|
32
|
-
subscription.trial_ends_at
|
33
|
-
|
34
|
-
# User wasn't on trial, so subscription ends at period end
|
35
|
-
elsif object.cancel_at_period_end
|
36
|
-
Time.at(object.current_period_end)
|
37
|
-
|
38
|
-
# Subscription isn't marked to cancel at period end
|
39
|
-
end
|
40
|
-
|
41
|
-
subscription.save!
|
6
|
+
Pay::Stripe::Subscription.sync(event.data.object.id, stripe_account: event.try(:account))
|
42
7
|
end
|
43
8
|
end
|
44
9
|
end
|
@@ -3,15 +3,8 @@ module Pay
|
|
3
3
|
module Webhooks
|
4
4
|
class SubscriptionDeleted
|
5
5
|
def call(event)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
# We couldn't find the subscription for some reason, maybe it's from another service
|
10
|
-
return if subscription.nil?
|
11
|
-
|
12
|
-
# User canceled subscriptions have an ends_at
|
13
|
-
# Automatically canceled subscriptions need this value set
|
14
|
-
subscription.update!(ends_at: Time.at(object.ended_at)) if subscription.ends_at.blank? && object.ended_at.present?
|
6
|
+
# Canceled subscriptions are still accessible via the API, so we can sync their details
|
7
|
+
Pay::Stripe::Subscription.sync(event.data.object.id, stripe_account: event.try(:account))
|
15
8
|
end
|
16
9
|
end
|
17
10
|
end
|
@@ -2,15 +2,23 @@ module Pay
|
|
2
2
|
module Stripe
|
3
3
|
module Webhooks
|
4
4
|
class SubscriptionRenewing
|
5
|
+
# Handles `invoice.upcoming` webhook from Stripe
|
6
|
+
# Occurs X number of days before a subscription is scheduled to create an invoice that is automatically charged—where X is determined by your subscriptions settings. Note: The received Invoice object will not have an invoice ID.
|
7
|
+
|
5
8
|
def call(event)
|
6
9
|
# Event is of type "invoice" see:
|
7
10
|
# https://stripe.com/docs/api/invoices/object
|
8
|
-
subscription = Pay.
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
subscription = Pay::Subscription.find_by_processor_and_id(:stripe, event.data.object.subscription)
|
12
|
+
return unless subscription
|
13
|
+
|
14
|
+
# Stripe subscription items all have the same interval
|
15
|
+
price = event.data.object.lines.data.first.price
|
16
|
+
return unless price.type == "recurring"
|
17
|
+
|
18
|
+
interval = price.recurring.interval
|
19
|
+
return unless interval == "year"
|
20
|
+
|
21
|
+
notify_user(subscription.customer.owner, subscription, Time.zone.at(event.data.object.next_payment_attempt))
|
14
22
|
end
|
15
23
|
|
16
24
|
def notify_user(billable, subscription, date)
|
@@ -3,35 +3,7 @@ module Pay
|
|
3
3
|
module Webhooks
|
4
4
|
class SubscriptionUpdated
|
5
5
|
def call(event)
|
6
|
-
|
7
|
-
subscription = Pay.subscription_model.find_by(processor: :stripe, processor_id: object.id)
|
8
|
-
|
9
|
-
return if subscription.nil?
|
10
|
-
|
11
|
-
# Delete any subscription attempts that have expired
|
12
|
-
if object.status == "incomplete_expired"
|
13
|
-
subscription.destroy
|
14
|
-
return
|
15
|
-
end
|
16
|
-
|
17
|
-
subscription.application_fee_percent = object.application_fee_percent
|
18
|
-
subscription.processor_plan = object.plan.id
|
19
|
-
subscription.quantity = object.quantity
|
20
|
-
subscription.status = object.status
|
21
|
-
subscription.trial_ends_at = Time.at(object.trial_end) if object.trial_end.present?
|
22
|
-
|
23
|
-
# If user was on trial, their subscription ends at the end of the trial
|
24
|
-
subscription.ends_at = if object.cancel_at_period_end && subscription.on_trial?
|
25
|
-
subscription.trial_ends_at
|
26
|
-
|
27
|
-
# User wasn't on trial, so subscription ends at period end
|
28
|
-
elsif object.cancel_at_period_end
|
29
|
-
Time.at(object.current_period_end)
|
30
|
-
|
31
|
-
# Subscription isn't marked to cancel at period end
|
32
|
-
end
|
33
|
-
|
34
|
-
subscription.save!
|
6
|
+
Pay::Stripe::Subscription.sync(event.data.object.id)
|
35
7
|
end
|
36
8
|
end
|
37
9
|
end
|
data/lib/pay/stripe.rb
CHANGED
@@ -2,18 +2,23 @@ module Pay
|
|
2
2
|
module Stripe
|
3
3
|
autoload :Billable, "pay/stripe/billable"
|
4
4
|
autoload :Charge, "pay/stripe/charge"
|
5
|
-
autoload :Subscription, "pay/stripe/subscription"
|
6
5
|
autoload :Error, "pay/stripe/error"
|
7
6
|
autoload :Merchant, "pay/stripe/merchant"
|
7
|
+
autoload :PaymentMethod, "pay/stripe/payment_method"
|
8
|
+
autoload :Subscription, "pay/stripe/subscription"
|
8
9
|
|
9
10
|
module Webhooks
|
10
11
|
autoload :AccountUpdated, "pay/stripe/webhooks/account_updated"
|
11
12
|
autoload :ChargeRefunded, "pay/stripe/webhooks/charge_refunded"
|
12
13
|
autoload :ChargeSucceeded, "pay/stripe/webhooks/charge_succeeded"
|
14
|
+
autoload :CheckoutSessionCompleted, "pay/stripe/webhooks/checkout_session_completed"
|
15
|
+
autoload :CheckoutSessionAsyncPaymentSucceeded, "pay/stripe/webhooks/checkout_session_async_payment_succeeded"
|
13
16
|
autoload :CustomerDeleted, "pay/stripe/webhooks/customer_deleted"
|
14
17
|
autoload :CustomerUpdated, "pay/stripe/webhooks/customer_updated"
|
15
18
|
autoload :PaymentActionRequired, "pay/stripe/webhooks/payment_action_required"
|
16
19
|
autoload :PaymentIntentSucceeded, "pay/stripe/webhooks/payment_intent_succeeded"
|
20
|
+
autoload :PaymentMethodAttached, "pay/stripe/webhooks/payment_method_attached"
|
21
|
+
autoload :PaymentMethodDetached, "pay/stripe/webhooks/payment_method_detached"
|
17
22
|
autoload :PaymentMethodUpdated, "pay/stripe/webhooks/payment_method_updated"
|
18
23
|
autoload :SubscriptionCreated, "pay/stripe/webhooks/subscription_created"
|
19
24
|
autoload :SubscriptionDeleted, "pay/stripe/webhooks/subscription_deleted"
|
@@ -79,13 +84,17 @@ module Pay
|
|
79
84
|
events.subscribe "stripe.customer.deleted", Pay::Stripe::Webhooks::CustomerDeleted.new
|
80
85
|
|
81
86
|
# If a customer's payment source was deleted in Stripe, we should update as well
|
82
|
-
events.subscribe "stripe.payment_method.attached", Pay::Stripe::Webhooks::
|
87
|
+
events.subscribe "stripe.payment_method.attached", Pay::Stripe::Webhooks::PaymentMethodAttached.new
|
83
88
|
events.subscribe "stripe.payment_method.updated", Pay::Stripe::Webhooks::PaymentMethodUpdated.new
|
84
89
|
events.subscribe "stripe.payment_method.card_automatically_updated", Pay::Stripe::Webhooks::PaymentMethodUpdated.new
|
85
|
-
events.subscribe "stripe.payment_method.detached", Pay::Stripe::Webhooks::
|
90
|
+
events.subscribe "stripe.payment_method.detached", Pay::Stripe::Webhooks::PaymentMethodDetached.new
|
86
91
|
|
87
92
|
# If an account is updated in stripe, we should update it as well
|
88
93
|
events.subscribe "stripe.account.updated", Pay::Stripe::Webhooks::AccountUpdated.new
|
94
|
+
|
95
|
+
# Handle subscriptions in Stripe Checkout Sessions
|
96
|
+
events.subscribe "stripe.checkout.session.completed", Pay::Stripe::Webhooks::CheckoutSessionCompleted.new
|
97
|
+
events.subscribe "stripe.checkout.session.async_payment_succeeded", Pay::Stripe::Webhooks::CheckoutSessionAsyncPaymentSucceeded.new
|
89
98
|
end
|
90
99
|
end
|
91
100
|
end
|
data/lib/pay/version.rb
CHANGED
@@ -35,6 +35,10 @@ module Pay
|
|
35
35
|
backend.instrument name_with_namespace(type), event
|
36
36
|
end
|
37
37
|
|
38
|
+
def listening?(type)
|
39
|
+
backend.notifier.listening? name_with_namespace(type)
|
40
|
+
end
|
41
|
+
|
38
42
|
# Strips down to event data only
|
39
43
|
class NotificationAdapter
|
40
44
|
def initialize(subscriber)
|
data/lib/pay/webhooks.rb
CHANGED
data/lib/pay.rb
CHANGED
@@ -4,9 +4,9 @@ require "pay/errors"
|
|
4
4
|
require "pay/adapter"
|
5
5
|
|
6
6
|
module Pay
|
7
|
-
autoload :
|
7
|
+
autoload :Attributes, "pay/attributes"
|
8
8
|
autoload :Env, "pay/env"
|
9
|
-
autoload :
|
9
|
+
autoload :NanoId, "pay/nano_id"
|
10
10
|
autoload :Payment, "pay/payment"
|
11
11
|
autoload :Receipts, "pay/receipts"
|
12
12
|
|
@@ -18,27 +18,15 @@ module Pay
|
|
18
18
|
|
19
19
|
autoload :Webhooks, "pay/webhooks"
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
mattr_accessor :braintree_gateway
|
21
|
+
module Billable
|
22
|
+
autoload :SyncCustomer, "pay/billable/sync_customer"
|
23
|
+
end
|
25
24
|
|
26
|
-
|
27
|
-
@@billable_table = @@billable_class.tableize
|
25
|
+
mattr_accessor :braintree_gateway
|
28
26
|
|
29
27
|
mattr_accessor :model_parent_class
|
30
28
|
@@model_parent_class = "ApplicationRecord"
|
31
29
|
|
32
|
-
mattr_accessor :chargeable_class
|
33
|
-
mattr_accessor :chargeable_table
|
34
|
-
@@chargeable_class = "Pay::Charge"
|
35
|
-
@@chargeable_table = "pay_charges"
|
36
|
-
|
37
|
-
mattr_accessor :subscription_class
|
38
|
-
mattr_accessor :subscription_table
|
39
|
-
@@subscription_class = "Pay::Subscription"
|
40
|
-
@@subscription_table = "pay_subscriptions"
|
41
|
-
|
42
30
|
# Business details for receipts
|
43
31
|
mattr_accessor :application_name
|
44
32
|
mattr_accessor :business_address
|
@@ -54,6 +42,7 @@ module Pay
|
|
54
42
|
|
55
43
|
mattr_accessor :default_product_name
|
56
44
|
@@default_product_name = "default"
|
45
|
+
|
57
46
|
mattr_accessor :default_plan_name
|
58
47
|
@@default_plan_name = "default"
|
59
48
|
|
@@ -64,66 +53,6 @@ module Pay
|
|
64
53
|
yield self
|
65
54
|
end
|
66
55
|
|
67
|
-
def self.billable_models
|
68
|
-
Pay::Billable.includers
|
69
|
-
end
|
70
|
-
|
71
|
-
def self.merchant_models
|
72
|
-
Pay::Merchant.includers
|
73
|
-
end
|
74
|
-
|
75
|
-
def self.find_merchant(account_key, account_value)
|
76
|
-
merchant_models.each do |model|
|
77
|
-
case Pay::Adapter.current_adapter
|
78
|
-
when "postgresql"
|
79
|
-
return model.find_by("pay_data @> ?", {account_key.to_sym => account_value}.to_json)
|
80
|
-
when "mysql2"
|
81
|
-
return model.find_by("JSON_CONTAINS(pay_data, ?)", {account_key.to_sym => account_value}.to_json)
|
82
|
-
when "sqlite3"
|
83
|
-
return model.find_by("json_extract(pay_data, ?) =?", "$.#{account_key}", account_value)
|
84
|
-
else
|
85
|
-
model.find_by(pay_data: {account_key.to_sym => account_value})
|
86
|
-
end
|
87
|
-
end
|
88
|
-
nil
|
89
|
-
end
|
90
|
-
|
91
|
-
def self.find_billable(processor:, processor_id:)
|
92
|
-
billable_models.each do |model|
|
93
|
-
if (record = model.find_by(processor: processor, processor_id: processor_id))
|
94
|
-
return record
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
nil
|
99
|
-
end
|
100
|
-
|
101
|
-
def self.user_model
|
102
|
-
ActiveSupport::Deprecation.warn("Pay.user_model is deprecated and will be removed in v3. Instead, use `Pay.billable_models` now to support more than one billable model.")
|
103
|
-
|
104
|
-
if Rails.application.config.cache_classes
|
105
|
-
@@user_model ||= billable_class.constantize
|
106
|
-
else
|
107
|
-
billable_class.constantize
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def self.charge_model
|
112
|
-
if Rails.application.config.cache_classes
|
113
|
-
@@charge_model ||= chargeable_class.constantize
|
114
|
-
else
|
115
|
-
chargeable_class.constantize
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
def self.subscription_model
|
120
|
-
if Rails.application.config.cache_classes
|
121
|
-
@@subscription_model ||= subscription_class.constantize
|
122
|
-
else
|
123
|
-
subscription_class.constantize
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
56
|
def self.receipts_supported?
|
128
57
|
charge_model.respond_to?(:receipt) &&
|
129
58
|
application_name.present? &&
|
data/lib/tasks/pay.rake
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
namespace :pay do
|
2
|
+
namespace :payment_methods do
|
3
|
+
desc "Sync default payment methods for Pay::Customers"
|
4
|
+
task sync_default: :environment do
|
5
|
+
Pay::Customer.find_each do |pay_customer|
|
6
|
+
puts "Syncing Pay::Customer ##{pay_customer.id}: #{pay_customer.processor.titleize} #{pay_customer.processor_id}"
|
7
|
+
case pay_customer.processor
|
8
|
+
when "braintree"
|
9
|
+
payment_method = pay_customer.customer.payment_methods.find(&:default?)
|
10
|
+
Pay::Braintree::PaymentMethod.sync(payment_method.token, object: payment_method) if payment_method
|
11
|
+
when "stripe"
|
12
|
+
payment_method_id = pay_customer.customer.invoice_settings.default_payment_method
|
13
|
+
Pay::Stripe::PaymentMethod.sync(payment_method_id) if payment_method_id
|
14
|
+
when "paddle"
|
15
|
+
Pay::Paddle::PaymentMethod.sync(pay_customer)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Charnes
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-
|
12
|
+
date: 2021-09-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -17,34 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: 6.0.0
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: minitest-rails
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - ">="
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: '6'
|
35
|
-
- - "<"
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: '7.0'
|
38
|
-
type: :development
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
requirements:
|
42
|
-
- - ">="
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version: '6'
|
45
|
-
- - "<"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '7.0'
|
27
|
+
version: 6.0.0
|
48
28
|
- !ruby/object:Gem::Dependency
|
49
29
|
name: mocha
|
50
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,13 +102,16 @@ files:
|
|
122
102
|
- app/controllers/pay/webhooks/stripe_controller.rb
|
123
103
|
- app/helpers/pay/application_helper.rb
|
124
104
|
- app/jobs/pay/application_job.rb
|
125
|
-
- app/jobs/pay/
|
105
|
+
- app/jobs/pay/customer_sync_job.rb
|
126
106
|
- app/mailers/pay/application_mailer.rb
|
127
107
|
- app/mailers/pay/user_mailer.rb
|
128
|
-
- app/models/pay.rb
|
129
108
|
- app/models/pay/application_record.rb
|
130
109
|
- app/models/pay/charge.rb
|
110
|
+
- app/models/pay/customer.rb
|
111
|
+
- app/models/pay/merchant.rb
|
112
|
+
- app/models/pay/payment_method.rb
|
131
113
|
- app/models/pay/subscription.rb
|
114
|
+
- app/models/pay/webhook.rb
|
132
115
|
- app/views/layouts/pay/application.html.erb
|
133
116
|
- app/views/pay/payments/show.html.erb
|
134
117
|
- app/views/pay/stripe/_checkout_button.html.erb
|
@@ -138,28 +121,26 @@ files:
|
|
138
121
|
- app/views/pay/user_mailer/subscription_renewing.html.erb
|
139
122
|
- config/locales/en.yml
|
140
123
|
- config/routes.rb
|
141
|
-
- db/migrate/
|
142
|
-
-
|
143
|
-
-
|
144
|
-
-
|
145
|
-
-
|
146
|
-
-
|
147
|
-
- db/migrate/20210406215506_add_application_fee_to_pay_models.rb
|
148
|
-
- lib/generators/active_record/pay_generator.rb
|
149
|
-
- lib/generators/active_record/templates/migration.rb
|
124
|
+
- db/migrate/1_create_pay_tables.rb
|
125
|
+
- lib/generators/active_record/billable_generator.rb
|
126
|
+
- lib/generators/active_record/merchant_generator.rb
|
127
|
+
- lib/generators/active_record/templates/billable_migration.rb
|
128
|
+
- lib/generators/active_record/templates/merchant_migration.rb
|
129
|
+
- lib/generators/pay/billable_generator.rb
|
150
130
|
- lib/generators/pay/email_views_generator.rb
|
131
|
+
- lib/generators/pay/merchant_generator.rb
|
151
132
|
- lib/generators/pay/orm_helpers.rb
|
152
|
-
- lib/generators/pay/pay_generator.rb
|
153
133
|
- lib/generators/pay/views_generator.rb
|
154
134
|
- lib/pay.rb
|
155
135
|
- lib/pay/adapter.rb
|
156
|
-
- lib/pay/
|
157
|
-
- lib/pay/billable/
|
136
|
+
- lib/pay/attributes.rb
|
137
|
+
- lib/pay/billable/sync_customer.rb
|
158
138
|
- lib/pay/braintree.rb
|
159
139
|
- lib/pay/braintree/authorization_error.rb
|
160
140
|
- lib/pay/braintree/billable.rb
|
161
141
|
- lib/pay/braintree/charge.rb
|
162
142
|
- lib/pay/braintree/error.rb
|
143
|
+
- lib/pay/braintree/payment_method.rb
|
163
144
|
- lib/pay/braintree/subscription.rb
|
164
145
|
- lib/pay/braintree/webhooks/subscription_canceled.rb
|
165
146
|
- lib/pay/braintree/webhooks/subscription_charged_successfully.rb
|
@@ -175,12 +156,16 @@ files:
|
|
175
156
|
- lib/pay/fake_processor/billable.rb
|
176
157
|
- lib/pay/fake_processor/charge.rb
|
177
158
|
- lib/pay/fake_processor/error.rb
|
159
|
+
- lib/pay/fake_processor/payment_method.rb
|
178
160
|
- lib/pay/fake_processor/subscription.rb
|
179
161
|
- lib/pay/merchant.rb
|
162
|
+
- lib/pay/nano_id.rb
|
180
163
|
- lib/pay/paddle.rb
|
181
164
|
- lib/pay/paddle/billable.rb
|
182
165
|
- lib/pay/paddle/charge.rb
|
183
166
|
- lib/pay/paddle/error.rb
|
167
|
+
- lib/pay/paddle/payment_method.rb
|
168
|
+
- lib/pay/paddle/response.rb
|
184
169
|
- lib/pay/paddle/subscription.rb
|
185
170
|
- lib/pay/paddle/webhooks/signature_verifier.rb
|
186
171
|
- lib/pay/paddle/webhooks/subscription_cancelled.rb
|
@@ -195,14 +180,19 @@ files:
|
|
195
180
|
- lib/pay/stripe/charge.rb
|
196
181
|
- lib/pay/stripe/error.rb
|
197
182
|
- lib/pay/stripe/merchant.rb
|
183
|
+
- lib/pay/stripe/payment_method.rb
|
198
184
|
- lib/pay/stripe/subscription.rb
|
199
185
|
- lib/pay/stripe/webhooks/account_updated.rb
|
200
186
|
- lib/pay/stripe/webhooks/charge_refunded.rb
|
201
187
|
- lib/pay/stripe/webhooks/charge_succeeded.rb
|
188
|
+
- lib/pay/stripe/webhooks/checkout_session_async_payment_succeeded.rb
|
189
|
+
- lib/pay/stripe/webhooks/checkout_session_completed.rb
|
202
190
|
- lib/pay/stripe/webhooks/customer_deleted.rb
|
203
191
|
- lib/pay/stripe/webhooks/customer_updated.rb
|
204
192
|
- lib/pay/stripe/webhooks/payment_action_required.rb
|
205
193
|
- lib/pay/stripe/webhooks/payment_intent_succeeded.rb
|
194
|
+
- lib/pay/stripe/webhooks/payment_method_attached.rb
|
195
|
+
- lib/pay/stripe/webhooks/payment_method_detached.rb
|
206
196
|
- lib/pay/stripe/webhooks/payment_method_updated.rb
|
207
197
|
- lib/pay/stripe/webhooks/subscription_created.rb
|
208
198
|
- lib/pay/stripe/webhooks/subscription_deleted.rb
|
@@ -211,6 +201,8 @@ files:
|
|
211
201
|
- lib/pay/version.rb
|
212
202
|
- lib/pay/webhooks.rb
|
213
203
|
- lib/pay/webhooks/delegator.rb
|
204
|
+
- lib/pay/webhooks/process_job.rb
|
205
|
+
- lib/tasks/pay.rake
|
214
206
|
homepage: https://github.com/pay-rails/pay
|
215
207
|
licenses:
|
216
208
|
- MIT
|
@@ -230,7 +222,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
230
222
|
- !ruby/object:Gem::Version
|
231
223
|
version: '0'
|
232
224
|
requirements: []
|
233
|
-
rubygems_version: 3.2.
|
225
|
+
rubygems_version: 3.2.22
|
234
226
|
signing_key:
|
235
227
|
specification_version: 4
|
236
228
|
summary: Payments engine for Ruby on Rails
|