pay 6.2.1 → 6.2.2
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/app/models/pay/subscription.rb +15 -3
- data/lib/pay/braintree/subscription.rb +11 -20
- data/lib/pay/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 10e2efeb851c80d2bb81878942929c95411fa43a781bfdfee41f3d9b99da61b4
|
4
|
+
data.tar.gz: 7080610378fd2efa259611084f41160143186ef06fb1c9d997e7d1cee72eb74d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4d3032094987e54cf1834619b96064cf77335f03b2e45555de4eb059cee0c6b1e0783abb6077621fe138301dd5fe29b415a3cd4e829c63bf55493208275e0025
|
7
|
+
data.tar.gz: 6331154cae0f9f1c99a63b57c92e0b82e9197247ead694e9854a081eea19a2ff2859eef07d839b10b1d7204c00e42694ffce25e3f4f54f1e984e9f333dadc96e
|
@@ -11,7 +11,7 @@ module Pay
|
|
11
11
|
scope :on_trial, -> { where.not(trial_ends_at: nil).where("#{table_name}.trial_ends_at > ?", Time.current) }
|
12
12
|
scope :cancelled, -> { where.not(ends_at: nil) }
|
13
13
|
scope :on_grace_period, -> { cancelled.where("#{table_name}.ends_at > ?", Time.current) }
|
14
|
-
scope :active, -> { where(status: ["trialing", "active"], ends_at: nil).pause_not_started.or(on_grace_period).or(on_trial) }
|
14
|
+
scope :active, -> { where(status: ["trialing", "active", "canceled"], ends_at: nil).pause_not_started.or(on_grace_period).or(on_trial) }
|
15
15
|
scope :paused, -> { where(status: "paused").or(where("pause_starts_at <= ?", Time.current)) }
|
16
16
|
scope :pause_not_started, -> { where("pause_starts_at IS NULL OR pause_starts_at > ?", Time.current) }
|
17
17
|
scope :active_or_paused, -> { active.or(paused) }
|
@@ -98,6 +98,10 @@ module Pay
|
|
98
98
|
canceled?
|
99
99
|
end
|
100
100
|
|
101
|
+
def ended?
|
102
|
+
ends_at? && Time.current.after?(ends_at)
|
103
|
+
end
|
104
|
+
|
101
105
|
def on_grace_period?
|
102
106
|
(ends_at? && Time.current < ends_at) ||
|
103
107
|
((status == "paused" || pause_behavior == "void") && will_pause?)
|
@@ -108,11 +112,19 @@ module Pay
|
|
108
112
|
end
|
109
113
|
|
110
114
|
def pause_active?
|
111
|
-
|
115
|
+
if status == "paused" # Paddle
|
116
|
+
true
|
117
|
+
elsif pause_behavior == "void"
|
118
|
+
pause_starts_at.nil? || Time.current.after?(pause_starts_at)
|
119
|
+
end
|
112
120
|
end
|
113
121
|
|
122
|
+
# If you cancel during a trial, you should still retain access until the end of the trial
|
123
|
+
# Otherwise a subscription is active unless it has ended or is currently paused
|
124
|
+
# Check the subscription status so we don't accidentally consider "incomplete", "past_due", or other statuses as active
|
114
125
|
def active?
|
115
|
-
["trialing", "active"].include?(status) &&
|
126
|
+
["trialing", "active", "canceled"].include?(status) &&
|
127
|
+
(!(canceled? || paused?) || on_trial? || on_grace_period?)
|
116
128
|
end
|
117
129
|
|
118
130
|
def past_due?
|
@@ -37,10 +37,13 @@ module Pay
|
|
37
37
|
trial_ends_at: (object.created_at + object.trial_duration.send(object.trial_duration_unit) if object.trial_period)
|
38
38
|
}
|
39
39
|
|
40
|
-
#
|
41
|
-
# On trial, paid through date is nil, so fallback to updated_at
|
40
|
+
# Canceled subscriptions should have access through the paid_through_date or updated_at
|
42
41
|
if object.status == "Canceled"
|
43
|
-
attributes[:ends_at] = object.
|
42
|
+
attributes[:ends_at] = object.updated_at
|
43
|
+
|
44
|
+
# Set grace period for subscriptions that are marked to be canceled
|
45
|
+
elsif object.status == "Active" && object.number_of_billing_cycles
|
46
|
+
attributes[:ends_at] = object.paid_through_date.end_of_day
|
44
47
|
end
|
45
48
|
|
46
49
|
pay_subscription = pay_customer.subscriptions.find_by(processor_id: object.id)
|
@@ -71,29 +74,21 @@ module Pay
|
|
71
74
|
end
|
72
75
|
|
73
76
|
def cancel(**options)
|
74
|
-
|
75
|
-
|
76
|
-
if on_trial?
|
77
|
-
gateway.subscription.cancel(processor_subscription.id)
|
78
|
-
pay_subscription.update(status: :canceled, ends_at: trial_ends_at)
|
77
|
+
result = if on_trial?
|
78
|
+
gateway.subscription.cancel(processor_id)
|
79
79
|
else
|
80
80
|
gateway.subscription.update(subscription.id, {
|
81
81
|
number_of_billing_cycles: subscription.current_billing_cycle
|
82
82
|
})
|
83
|
-
pay_subscription.update(status: :canceled, ends_at: subscription.billing_period_end_date.to_date)
|
84
83
|
end
|
84
|
+
pay_subscription.sync!(object: result.subscription)
|
85
85
|
rescue ::Braintree::BraintreeError => e
|
86
86
|
raise Pay::Braintree::Error, e
|
87
87
|
end
|
88
88
|
|
89
89
|
def cancel_now!(**options)
|
90
|
-
gateway.subscription.cancel(
|
91
|
-
|
92
|
-
pay_subscription.update!(
|
93
|
-
status: :canceled,
|
94
|
-
trial_ends_at: (ends_at if pay_subscription.trial_ends_at?),
|
95
|
-
ends_at: ends_at
|
96
|
-
)
|
90
|
+
result = gateway.subscription.cancel(processor_id)
|
91
|
+
pay_subscription.sync!(object: result.subscription)
|
97
92
|
rescue ::Braintree::BraintreeError => e
|
98
93
|
raise Pay::Braintree::Error, e
|
99
94
|
end
|
@@ -102,10 +97,6 @@ module Pay
|
|
102
97
|
raise NotImplementedError, "Braintree does not support setting quantity on subscriptions"
|
103
98
|
end
|
104
99
|
|
105
|
-
def on_grace_period?
|
106
|
-
canceled? && Time.current < ends_at
|
107
|
-
end
|
108
|
-
|
109
100
|
def paused?
|
110
101
|
false
|
111
102
|
end
|
data/lib/pay/version.rb
CHANGED
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.2.
|
4
|
+
version: 6.2.2
|
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: 2023-01-
|
12
|
+
date: 2023-01-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|