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.

Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +35 -696
  3. data/app/controllers/pay/webhooks/braintree_controller.rb +10 -3
  4. data/app/controllers/pay/webhooks/paddle_controller.rb +7 -8
  5. data/app/controllers/pay/webhooks/stripe_controller.rb +6 -3
  6. data/app/jobs/pay/{email_sync_job.rb → customer_sync_job.rb} +3 -4
  7. data/app/models/pay/application_record.rb +1 -5
  8. data/app/models/pay/charge.rb +31 -18
  9. data/app/models/pay/customer.rb +87 -0
  10. data/app/models/pay/merchant.rb +19 -0
  11. data/app/models/pay/payment_method.rb +41 -0
  12. data/app/models/pay/subscription.rb +42 -30
  13. data/app/models/pay/webhook.rb +36 -0
  14. data/app/views/layouts/pay/application.html.erb +2 -3
  15. data/app/views/pay/payments/show.html.erb +109 -81
  16. data/app/views/pay/user_mailer/receipt.html.erb +2 -2
  17. data/app/views/pay/user_mailer/refund.html.erb +2 -2
  18. data/config/locales/en.yml +1 -1
  19. data/db/migrate/1_create_pay_tables.rb +72 -0
  20. data/lib/generators/active_record/billable_generator.rb +44 -0
  21. data/lib/generators/active_record/merchant_generator.rb +44 -0
  22. data/lib/generators/active_record/templates/billable_migration.rb +17 -0
  23. data/lib/generators/active_record/templates/merchant_migration.rb +12 -0
  24. data/lib/generators/pay/{pay_generator.rb → billable_generator.rb} +2 -3
  25. data/lib/generators/pay/merchant_generator.rb +17 -0
  26. data/lib/generators/pay/orm_helpers.rb +10 -6
  27. data/lib/pay/adapter.rb +9 -0
  28. data/lib/pay/attributes.rb +74 -0
  29. data/lib/pay/billable/sync_customer.rb +30 -0
  30. data/lib/pay/braintree/billable.rb +133 -110
  31. data/lib/pay/braintree/payment_method.rb +42 -0
  32. data/lib/pay/braintree/subscription.rb +9 -12
  33. data/lib/pay/braintree/webhooks/subscription_canceled.rb +1 -1
  34. data/lib/pay/braintree/webhooks/subscription_charged_successfully.rb +4 -4
  35. data/lib/pay/braintree/webhooks/subscription_charged_unsuccessfully.rb +1 -1
  36. data/lib/pay/braintree/webhooks/subscription_expired.rb +1 -1
  37. data/lib/pay/braintree/webhooks/subscription_trial_ended.rb +2 -2
  38. data/lib/pay/braintree/webhooks/subscription_went_active.rb +1 -1
  39. data/lib/pay/braintree/webhooks/subscription_went_past_due.rb +1 -1
  40. data/lib/pay/braintree.rb +3 -2
  41. data/lib/pay/engine.rb +6 -1
  42. data/lib/pay/env.rb +8 -0
  43. data/lib/pay/fake_processor/billable.rb +45 -21
  44. data/lib/pay/fake_processor/payment_method.rb +21 -0
  45. data/lib/pay/fake_processor/subscription.rb +11 -8
  46. data/lib/pay/fake_processor.rb +2 -1
  47. data/lib/pay/nano_id.rb +13 -0
  48. data/lib/pay/paddle/billable.rb +18 -48
  49. data/lib/pay/paddle/charge.rb +5 -5
  50. data/lib/pay/paddle/payment_method.rb +60 -0
  51. data/lib/pay/paddle/response.rb +0 -0
  52. data/lib/pay/paddle/subscription.rb +49 -8
  53. data/lib/pay/paddle/webhooks/subscription_cancelled.rb +6 -3
  54. data/lib/pay/paddle/webhooks/subscription_created.rb +1 -40
  55. data/lib/pay/paddle/webhooks/subscription_payment_refunded.rb +3 -3
  56. data/lib/pay/paddle/webhooks/subscription_payment_succeeded.rb +26 -28
  57. data/lib/pay/paddle/webhooks/subscription_updated.rb +2 -2
  58. data/lib/pay/paddle.rb +7 -3
  59. data/lib/pay/payment.rb +1 -1
  60. data/lib/pay/receipts.rb +35 -7
  61. data/lib/pay/stripe/billable.rb +80 -102
  62. data/lib/pay/stripe/charge.rb +59 -3
  63. data/lib/pay/stripe/merchant.rb +10 -10
  64. data/lib/pay/stripe/payment_method.rb +61 -0
  65. data/lib/pay/stripe/subscription.rb +70 -8
  66. data/lib/pay/stripe/webhooks/account_updated.rb +2 -3
  67. data/lib/pay/stripe/webhooks/charge_refunded.rb +2 -7
  68. data/lib/pay/stripe/webhooks/charge_succeeded.rb +2 -8
  69. data/lib/pay/stripe/webhooks/checkout_session_async_payment_succeeded.rb +15 -0
  70. data/lib/pay/stripe/webhooks/checkout_session_completed.rb +15 -0
  71. data/lib/pay/stripe/webhooks/customer_deleted.rb +7 -15
  72. data/lib/pay/stripe/webhooks/customer_updated.rb +10 -3
  73. data/lib/pay/stripe/webhooks/payment_action_required.rb +2 -2
  74. data/lib/pay/stripe/webhooks/payment_intent_succeeded.rb +6 -14
  75. data/lib/pay/stripe/webhooks/payment_method_attached.rb +15 -0
  76. data/lib/pay/stripe/webhooks/payment_method_detached.rb +12 -0
  77. data/lib/pay/stripe/webhooks/payment_method_updated.rb +10 -4
  78. data/lib/pay/stripe/webhooks/subscription_created.rb +1 -36
  79. data/lib/pay/stripe/webhooks/subscription_deleted.rb +2 -9
  80. data/lib/pay/stripe/webhooks/subscription_renewing.rb +14 -6
  81. data/lib/pay/stripe/webhooks/subscription_updated.rb +1 -29
  82. data/lib/pay/stripe.rb +12 -3
  83. data/lib/pay/version.rb +1 -1
  84. data/lib/pay/webhooks/delegator.rb +4 -0
  85. data/lib/pay/webhooks/process_job.rb +9 -0
  86. data/lib/pay/webhooks.rb +1 -0
  87. data/lib/pay.rb +7 -78
  88. data/lib/tasks/pay.rake +20 -0
  89. metadata +31 -39
  90. data/app/models/pay.rb +0 -5
  91. data/db/migrate/20170205020145_create_pay_subscriptions.rb +0 -17
  92. data/db/migrate/20170727235816_create_pay_charges.rb +0 -18
  93. data/db/migrate/20190816015720_add_status_to_pay_subscriptions.rb +0 -14
  94. data/db/migrate/20200603134434_add_data_to_pay_models.rb +0 -15
  95. data/db/migrate/20210309004259_add_data_to_pay_billable.rb +0 -19
  96. data/db/migrate/20210406215234_add_currency_to_pay_charges.rb +0 -5
  97. data/db/migrate/20210406215506_add_application_fee_to_pay_models.rb +0 -7
  98. data/lib/generators/active_record/pay_generator.rb +0 -58
  99. data/lib/generators/active_record/templates/migration.rb +0 -9
  100. data/lib/pay/billable/sync_email.rb +0 -40
  101. data/lib/pay/billable.rb +0 -172
@@ -0,0 +1,12 @@
1
+ module Pay
2
+ module Stripe
3
+ module Webhooks
4
+ class PaymentMethodDetached
5
+ def call(event)
6
+ object = event.data.object
7
+ Pay::PaymentMethod.find_by_processor_and_id(:stripe, object.id)&.destroy
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -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
- # Couldn't find user, we can skip
10
- return unless billable.present?
8
+ if object.customer
9
+ pay_customer = Pay::Customer.find_by(processor: :stripe, processor_id: object.customer)
11
10
 
12
- Pay::Stripe::Billable.new(billable).sync_card_from_stripe
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 = event.data.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
- object = event.data.object
7
- subscription = Pay.subscription_model.find_by(processor: :stripe, processor_id: object.id)
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.subscription_model.find_by(
9
- processor: :stripe,
10
- processor_id: event.data.object.subscription
11
- )
12
- date = Time.zone.at(event.data.object.next_payment_attempt)
13
- notify_user(subscription.owner, subscription, date) if subscription.present?
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
- object = event.data.object
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::PaymentMethodUpdated.new
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::PaymentMethodUpdated.new
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
@@ -1,3 +1,3 @@
1
1
  module Pay
2
- VERSION = "2.7.0"
2
+ VERSION = "3.0.1"
3
3
  end
@@ -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)
@@ -0,0 +1,9 @@
1
+ module Pay
2
+ module Webhooks
3
+ class ProcessJob < ApplicationJob
4
+ def perform(pay_webhook)
5
+ pay_webhook.process!
6
+ end
7
+ end
8
+ end
9
+ end
data/lib/pay/webhooks.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  module Pay
2
2
  module Webhooks
3
3
  autoload :Delegator, "pay/webhooks/delegator"
4
+ autoload :ProcessJob, "pay/webhooks/process_job"
4
5
 
5
6
  class << self
6
7
  delegate :configure, :instrument, to: :delegator
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 :Billable, "pay/billable"
7
+ autoload :Attributes, "pay/attributes"
8
8
  autoload :Env, "pay/env"
9
- autoload :Merchant, "pay/merchant"
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
- # Define who owns the subscription
22
- mattr_accessor :billable_class
23
- mattr_accessor :billable_table
24
- mattr_accessor :braintree_gateway
21
+ module Billable
22
+ autoload :SyncCustomer, "pay/billable/sync_customer"
23
+ end
25
24
 
26
- @@billable_class = "User"
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? &&
@@ -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: 2.7.0
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-05-19 00:00:00.000000000 Z
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: '4.2'
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: '4.2'
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/email_sync_job.rb
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/20170205020145_create_pay_subscriptions.rb
142
- - db/migrate/20170727235816_create_pay_charges.rb
143
- - db/migrate/20190816015720_add_status_to_pay_subscriptions.rb
144
- - db/migrate/20200603134434_add_data_to_pay_models.rb
145
- - db/migrate/20210309004259_add_data_to_pay_billable.rb
146
- - db/migrate/20210406215234_add_currency_to_pay_charges.rb
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/billable.rb
157
- - lib/pay/billable/sync_email.rb
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.15
225
+ rubygems_version: 3.2.22
234
226
  signing_key:
235
227
  specification_version: 4
236
228
  summary: Payments engine for Ruby on Rails