pay 6.3.0 → 6.3.2
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 +4 -4
- data/app/controllers/pay/payments_controller.rb +10 -1
- data/app/models/pay/customer.rb +1 -3
- data/app/models/pay/subscription.rb +5 -4
- data/app/views/pay/payments/show.html.erb +2 -2
- data/lib/pay/env.rb +8 -0
- data/lib/pay/fake_processor/billable.rb +5 -2
- data/lib/pay/stripe/subscription.rb +1 -0
- data/lib/pay/version.rb +1 -1
- data/lib/pay.rb +6 -5
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5edf40fbd4c73316121bba2d278819cac41f0f4bb6000bc8d216d000fcac59ff
|
4
|
+
data.tar.gz: b93a89d4c256ac814bc133f7b2b5071220187006623eeff76000c3a829780577
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e81185537e0d87f658fbf8a27b4e44f7d9942bef953a61ac8f94de2e005bd81625e43970a355fac38c27133f65e08f31067b4d5c62de7fe25bb05b1457d26538
|
7
|
+
data.tar.gz: 673fc7acfe41d96f3ef829279f89e4c9c831f6637ea57cd927acf40206fc1f42bd75b645ceb4b2a9b27cf29a91057c577b0c144408e739baa9d9bdea1c462d9c
|
@@ -2,9 +2,18 @@ module Pay
|
|
2
2
|
class PaymentsController < ApplicationController
|
3
3
|
layout "pay/application"
|
4
4
|
|
5
|
+
before_action :set_redirect_to
|
6
|
+
|
5
7
|
def show
|
6
|
-
@redirect_to = params[:back].presence || root_path
|
7
8
|
@payment = Payment.from_id(params[:id])
|
8
9
|
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
# Ensure the back parameter is a valid path
|
14
|
+
# This safely handles XSS or external redirects
|
15
|
+
def set_redirect_to
|
16
|
+
@redirect_to = URI.parse(params[:back].to_s).path || root_path
|
17
|
+
end
|
9
18
|
end
|
10
19
|
end
|
data/app/models/pay/customer.rb
CHANGED
@@ -13,8 +13,6 @@ module Pay
|
|
13
13
|
validates :processor, presence: true
|
14
14
|
validates :processor_id, allow_blank: true, uniqueness: {scope: :processor, case_sensitive: true}
|
15
15
|
|
16
|
-
attribute :plan, :string
|
17
|
-
attribute :quantity, :integer
|
18
16
|
attribute :payment_method_token, :string
|
19
17
|
|
20
18
|
# Account(s) for marketplace payments
|
@@ -96,7 +94,7 @@ module Pay
|
|
96
94
|
# Attempts to pay all past_due subscription invoices to bring them back to active state
|
97
95
|
# Pass in `statuses: []` if you would like to only include specific subscription statuses
|
98
96
|
def retry_past_due_subscriptions!(status: [:past_due])
|
99
|
-
subscriptions.where(status: Array.wrap(status)).each(&:
|
97
|
+
subscriptions.where(status: Array.wrap(status)).each(&:pay_open_invoices)
|
100
98
|
end
|
101
99
|
end
|
102
100
|
end
|
@@ -83,12 +83,13 @@ module Pay
|
|
83
83
|
trial_ends_at?
|
84
84
|
end
|
85
85
|
|
86
|
+
# Does not include the last second of the trial
|
86
87
|
def on_trial?
|
87
|
-
trial_ends_at? && trial_ends_at
|
88
|
+
trial_ends_at? && trial_ends_at > Time.current
|
88
89
|
end
|
89
90
|
|
90
91
|
def trial_ended?
|
91
|
-
trial_ends_at? && trial_ends_at
|
92
|
+
trial_ends_at? && trial_ends_at <= Time.current
|
92
93
|
end
|
93
94
|
|
94
95
|
def canceled?
|
@@ -100,11 +101,11 @@ module Pay
|
|
100
101
|
end
|
101
102
|
|
102
103
|
def ended?
|
103
|
-
ends_at? && Time.current
|
104
|
+
ends_at? && ends_at <= Time.current
|
104
105
|
end
|
105
106
|
|
106
107
|
def on_grace_period?
|
107
|
-
(ends_at? && Time.current
|
108
|
+
(ends_at? && ends_at > Time.current) ||
|
108
109
|
((status == "paused" || pause_behavior == "void") && will_pause?)
|
109
110
|
end
|
110
111
|
|
@@ -54,7 +54,7 @@
|
|
54
54
|
</div>
|
55
55
|
<% end %>
|
56
56
|
|
57
|
-
<%= link_to
|
57
|
+
<%= sanitize link_to(t("pay.back"), @redirect_to, class: "inline-block w-full px-4 py-3 bg-gray-100 hover:bg-gray-200 text-center text-gray-600 rounded-lg") %>
|
58
58
|
</div>
|
59
59
|
|
60
60
|
<p class="text-center text-gray-500 text-sm">
|
@@ -66,7 +66,7 @@
|
|
66
66
|
<script type="module">
|
67
67
|
window.stripe = Stripe('<%= Pay::Stripe.public_key %>');
|
68
68
|
|
69
|
-
import { Application, Controller } from 'https://
|
69
|
+
import { Application, Controller } from 'https://unpkg.com/@hotwired/stimulus'
|
70
70
|
const application = Application.start()
|
71
71
|
|
72
72
|
application.register('payment-intent', class extends Controller {
|
data/lib/pay/env.rb
CHANGED
@@ -11,6 +11,14 @@ module Pay
|
|
11
11
|
# 1. Check environment variable
|
12
12
|
# 2. Check environment scoped credentials, then secrets
|
13
13
|
# 3. Check unscoped credentials, then secrets
|
14
|
+
#
|
15
|
+
# For example, find_value_by_name("stripe", "private_key") will check the following in order until it finds a value:
|
16
|
+
#
|
17
|
+
# ENV["STRIPE_PRIVATE_KEY"]
|
18
|
+
# Rails.application.credentials.dig(:production, :stripe, :private_key)
|
19
|
+
# Rails.application.secrets.dig(:production, :stripe, :private_key)
|
20
|
+
# Rails.application.credentials.dig(:stripe, :private_key)
|
21
|
+
# Rails.application.secrets.dig(:stripe, :private_key)
|
14
22
|
def find_value_by_name(scope, name)
|
15
23
|
ENV["#{scope.upcase}_#{name.upcase}"] ||
|
16
24
|
credentials&.dig(env, scope, name) ||
|
@@ -19,8 +19,9 @@ module Pay
|
|
19
19
|
pay_customer
|
20
20
|
end
|
21
21
|
|
22
|
-
def update_customer!
|
23
|
-
#
|
22
|
+
def update_customer!(**attributes)
|
23
|
+
# return customer to fake an update
|
24
|
+
customer
|
24
25
|
end
|
25
26
|
|
26
27
|
def charge(amount, options = {})
|
@@ -56,6 +57,8 @@ module Pay
|
|
56
57
|
attributes[:trial_ends_at] = trial_period_days.to_i.days.from_now
|
57
58
|
end
|
58
59
|
|
60
|
+
attributes.delete(:promotion_code)
|
61
|
+
|
59
62
|
pay_customer.subscriptions.create!(attributes)
|
60
63
|
end
|
61
64
|
|
@@ -315,6 +315,7 @@ module Pay
|
|
315
315
|
raise Pay::Stripe::Error, e
|
316
316
|
end
|
317
317
|
|
318
|
+
# Looks up open invoices for a subscription and attempts to pay them
|
318
319
|
def pay_open_invoices
|
319
320
|
::Stripe::Invoice.list({subscription: processor_id, status: :open}, stripe_options).auto_paging_each do |invoice|
|
320
321
|
retry_failed_payment(payment_intent_id: invoice.payment_intent)
|
data/lib/pay/version.rb
CHANGED
data/lib/pay.rb
CHANGED
@@ -3,7 +3,8 @@ require "pay/engine"
|
|
3
3
|
require "pay/errors"
|
4
4
|
require "pay/adapter"
|
5
5
|
|
6
|
-
require "
|
6
|
+
require "action_mailer"
|
7
|
+
require "active_support"
|
7
8
|
|
8
9
|
module Pay
|
9
10
|
autoload :Attributes, "pay/attributes"
|
@@ -38,7 +39,7 @@ module Pay
|
|
38
39
|
mattr_accessor :support_email
|
39
40
|
|
40
41
|
def self.support_email=(value)
|
41
|
-
@@support_email = value.is_a?(Mail::Address) ? value : Mail::Address.new(value)
|
42
|
+
@@support_email = value.is_a?(::Mail::Address) ? value : ::Mail::Address.new(value)
|
42
43
|
end
|
43
44
|
|
44
45
|
mattr_accessor :automount_routes
|
@@ -95,10 +96,10 @@ module Pay
|
|
95
96
|
# Should return String or Array of email recipients
|
96
97
|
mattr_accessor :mail_to
|
97
98
|
@@mail_to = -> {
|
98
|
-
if ActionMailer::Base.respond_to?(:email_address_with_name)
|
99
|
-
ActionMailer::Base.email_address_with_name(params[:pay_customer].email, params[:pay_customer].customer_name)
|
99
|
+
if ::ActionMailer::Base.respond_to?(:email_address_with_name)
|
100
|
+
::ActionMailer::Base.email_address_with_name(params[:pay_customer].email, params[:pay_customer].customer_name)
|
100
101
|
else
|
101
|
-
Mail::Address.new.tap do |builder|
|
102
|
+
::Mail::Address.new.tap do |builder|
|
102
103
|
builder.address = params[:pay_customer].email
|
103
104
|
builder.display_name = params[:pay_customer].customer_name.presence
|
104
105
|
end.to_s
|
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: 6.3.
|
4
|
+
version: 6.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Charnes
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2023-
|
13
|
+
date: 2023-04-19 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -168,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
168
|
- !ruby/object:Gem::Version
|
169
169
|
version: '0'
|
170
170
|
requirements: []
|
171
|
-
rubygems_version: 3.4.
|
171
|
+
rubygems_version: 3.4.12
|
172
172
|
signing_key:
|
173
173
|
specification_version: 4
|
174
174
|
summary: Payments engine for Ruby on Rails
|