usage_credits 0.2.0 → 0.2.1
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/Appraisals +22 -4
- data/CHANGELOG.md +4 -0
- data/README.md +5 -2
- data/gemfiles/pay_10.0.gemfile +34 -22
- data/gemfiles/pay_11.0.gemfile +34 -22
- data/gemfiles/pay_8.3.gemfile +34 -22
- data/gemfiles/pay_9.0.gemfile +34 -22
- data/gemfiles/rails_7.2.gemfile +41 -0
- data/gemfiles/rails_8.1.gemfile +41 -0
- data/lib/usage_credits/models/credit_pack.rb +51 -4
- data/lib/usage_credits/version.rb +1 -1
- metadata +4 -100
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 42e2dcff2633bf14d2390d436ab14f724fb1142bc6de5adf2b410ab36e13b785
|
|
4
|
+
data.tar.gz: fef29f9815fa2cb241ed30c342083f98003a607b9b6c95dfd1d86ed1df7a5753
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 59be8e233c0a004cc6ab205a5f80aa2c17ce38d64df2b7bd99f2521ab9a185779c309ca376b5ceee684420c27d1fe3111907aa5c26c52f3c96c2dba50187895f
|
|
7
|
+
data.tar.gz: 22cdd9089c33e9d50ecf598442d6aff6acd4924662542951e81eebbc3657d6300b8c66a746290aae6339b922d2ef7ef83caa097113aa3876a19cb3265c4ee0c4
|
data/Appraisals
CHANGED
|
@@ -1,25 +1,43 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# Test
|
|
3
|
+
# Test minimum supported Rails version (with latest Pay)
|
|
4
|
+
appraise "rails-7.2" do
|
|
5
|
+
gem "rails", "~> 7.2.0"
|
|
6
|
+
gem "pay", "~> 11.0"
|
|
7
|
+
gem "stripe", "~> 18.0"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Test latest Rails version (with latest Pay) - this is the default/main Gemfile anyway
|
|
11
|
+
appraise "rails-8.1" do
|
|
12
|
+
gem "rails", "~> 8.1.0"
|
|
13
|
+
gem "pay", "~> 11.0"
|
|
14
|
+
gem "stripe", "~> 18.0"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Test minimum supported Pay version (with latest Rails)
|
|
4
18
|
appraise "pay-8.3" do
|
|
5
19
|
gem "pay", "~> 8.3.0"
|
|
6
20
|
gem "stripe", "~> 13.0"
|
|
21
|
+
gem "rails", "~> 8.1.0"
|
|
7
22
|
end
|
|
8
23
|
|
|
9
|
-
# Test
|
|
24
|
+
# Test Pay 9.0 (popular stable version with latest Rails)
|
|
10
25
|
appraise "pay-9.0" do
|
|
11
26
|
gem "pay", "~> 9.0.0"
|
|
12
27
|
gem "stripe", "~> 13.0"
|
|
28
|
+
gem "rails", "~> 8.1.0"
|
|
13
29
|
end
|
|
14
30
|
|
|
15
|
-
# Test
|
|
31
|
+
# Test Pay 10.0 (with latest Rails)
|
|
16
32
|
appraise "pay-10.0" do
|
|
17
33
|
gem "pay", "~> 10.0.0"
|
|
18
34
|
gem "stripe", "~> 15.0"
|
|
35
|
+
gem "rails", "~> 8.1.0"
|
|
19
36
|
end
|
|
20
37
|
|
|
21
|
-
# Test
|
|
38
|
+
# Test latest Pay version (with latest Rails)
|
|
22
39
|
appraise "pay-11.0" do
|
|
23
40
|
gem "pay", "~> 11.0"
|
|
24
41
|
gem "stripe", "~> 18.0"
|
|
42
|
+
gem "rails", "~> 8.1.0"
|
|
25
43
|
end
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
## [0.2.1] - 2026-01-15
|
|
2
|
+
|
|
3
|
+
- Add custom `create_checkout_session` options (like `success_url`) to credit pack purchases by @yshmarov in https://github.com/rameerez/usage_credits/pull/5
|
|
4
|
+
|
|
1
5
|
## [0.2.0] - 2025-12-29
|
|
2
6
|
|
|
3
7
|
- Add Claude Code GitHub Workflow by @rameerez in https://github.com/rameerez/usage_credits/pull/14
|
data/README.md
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
# 💳✨ `usage_credits` - Add usage-based credits to your Rails app
|
|
2
2
|
|
|
3
|
-
[](https://badge.fury.io/rb/usage_credits) [](https://github.com/rameerez/usage_credits/actions)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
> [!TIP]
|
|
6
|
+
> **🚀 Ship your next Rails app 10x faster!** I've built **[RailsFast](https://railsfast.com)**, a production-ready Rails boilerplate template that comes with everything you need to launch a software business in days, not weeks.
|
|
7
|
+
|
|
8
|
+
`usage_credits` allows your users to have in-app credits / tokens they can use to perform operations.
|
|
6
9
|
|
|
7
10
|
✨ Perfect for SaaS, AI apps, games, and API products that want to implement usage-based pricing.
|
|
8
11
|
|
data/gemfiles/pay_10.0.gemfile
CHANGED
|
@@ -2,28 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
source "https://rubygems.org"
|
|
4
4
|
|
|
5
|
-
gem "
|
|
6
|
-
gem "mocha"
|
|
7
|
-
gem "simplecov", require: false
|
|
8
|
-
gem "standard"
|
|
9
|
-
gem "vcr"
|
|
10
|
-
gem "webmock"
|
|
11
|
-
gem "braintree", ">= 2.92.0"
|
|
12
|
-
gem "lemonsqueezy", "~> 1.0"
|
|
13
|
-
gem "paddle", "~> 2.6"
|
|
14
|
-
gem "stripe", "~> 15.0"
|
|
15
|
-
gem "prawn"
|
|
16
|
-
gem "receipts"
|
|
17
|
-
gem "sqlite3"
|
|
18
|
-
gem "pg"
|
|
19
|
-
gem "bootsnap", require: false
|
|
20
|
-
gem "puma"
|
|
21
|
-
gem "web-console", group: :development
|
|
22
|
-
gem "importmap-rails"
|
|
23
|
-
gem "sprockets-rails"
|
|
24
|
-
gem "stimulus-rails"
|
|
25
|
-
gem "turbo-rails"
|
|
26
|
-
gem "rdoc", ">= 7.0"
|
|
5
|
+
gem "rake", "~> 13.0"
|
|
27
6
|
gem "pay", "~> 10.0.0"
|
|
7
|
+
gem "stripe", "~> 15.0"
|
|
8
|
+
gem "rails", "~> 8.1.0"
|
|
9
|
+
|
|
10
|
+
group :development do
|
|
11
|
+
gem "appraisal"
|
|
12
|
+
gem "web-console"
|
|
13
|
+
gem "standard"
|
|
14
|
+
gem "rubocop", "~> 1.0"
|
|
15
|
+
gem "rubocop-minitest", "~> 0.35"
|
|
16
|
+
gem "rubocop-performance", "~> 1.0"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
group :test do
|
|
20
|
+
gem "minitest", "~> 5.0"
|
|
21
|
+
gem "mocha"
|
|
22
|
+
gem "simplecov", require: false
|
|
23
|
+
gem "vcr"
|
|
24
|
+
gem "webmock"
|
|
25
|
+
gem "braintree", ">= 2.92.0"
|
|
26
|
+
gem "lemonsqueezy", "~> 1.0"
|
|
27
|
+
gem "paddle", "~> 2.6"
|
|
28
|
+
gem "prawn"
|
|
29
|
+
gem "receipts"
|
|
30
|
+
gem "sqlite3"
|
|
31
|
+
gem "pg"
|
|
32
|
+
gem "bootsnap", require: false
|
|
33
|
+
gem "puma"
|
|
34
|
+
gem "importmap-rails"
|
|
35
|
+
gem "sprockets-rails"
|
|
36
|
+
gem "stimulus-rails"
|
|
37
|
+
gem "turbo-rails"
|
|
38
|
+
gem "rdoc", ">= 7.0"
|
|
39
|
+
end
|
|
28
40
|
|
|
29
41
|
gemspec path: "../"
|
data/gemfiles/pay_11.0.gemfile
CHANGED
|
@@ -2,28 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
source "https://rubygems.org"
|
|
4
4
|
|
|
5
|
-
gem "
|
|
6
|
-
gem "mocha"
|
|
7
|
-
gem "simplecov", require: false
|
|
8
|
-
gem "standard"
|
|
9
|
-
gem "vcr"
|
|
10
|
-
gem "webmock"
|
|
11
|
-
gem "braintree", ">= 2.92.0"
|
|
12
|
-
gem "lemonsqueezy", "~> 1.0"
|
|
13
|
-
gem "paddle", "~> 2.6"
|
|
14
|
-
gem "stripe", "~> 18.0"
|
|
15
|
-
gem "prawn"
|
|
16
|
-
gem "receipts"
|
|
17
|
-
gem "sqlite3"
|
|
18
|
-
gem "pg"
|
|
19
|
-
gem "bootsnap", require: false
|
|
20
|
-
gem "puma"
|
|
21
|
-
gem "web-console", group: :development
|
|
22
|
-
gem "importmap-rails"
|
|
23
|
-
gem "sprockets-rails"
|
|
24
|
-
gem "stimulus-rails"
|
|
25
|
-
gem "turbo-rails"
|
|
26
|
-
gem "rdoc", ">= 7.0"
|
|
5
|
+
gem "rake", "~> 13.0"
|
|
27
6
|
gem "pay", "~> 11.0"
|
|
7
|
+
gem "stripe", "~> 18.0"
|
|
8
|
+
gem "rails", "~> 8.1.0"
|
|
9
|
+
|
|
10
|
+
group :development do
|
|
11
|
+
gem "appraisal"
|
|
12
|
+
gem "web-console"
|
|
13
|
+
gem "standard"
|
|
14
|
+
gem "rubocop", "~> 1.0"
|
|
15
|
+
gem "rubocop-minitest", "~> 0.35"
|
|
16
|
+
gem "rubocop-performance", "~> 1.0"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
group :test do
|
|
20
|
+
gem "minitest", "~> 5.0"
|
|
21
|
+
gem "mocha"
|
|
22
|
+
gem "simplecov", require: false
|
|
23
|
+
gem "vcr"
|
|
24
|
+
gem "webmock"
|
|
25
|
+
gem "braintree", ">= 2.92.0"
|
|
26
|
+
gem "lemonsqueezy", "~> 1.0"
|
|
27
|
+
gem "paddle", "~> 2.6"
|
|
28
|
+
gem "prawn"
|
|
29
|
+
gem "receipts"
|
|
30
|
+
gem "sqlite3"
|
|
31
|
+
gem "pg"
|
|
32
|
+
gem "bootsnap", require: false
|
|
33
|
+
gem "puma"
|
|
34
|
+
gem "importmap-rails"
|
|
35
|
+
gem "sprockets-rails"
|
|
36
|
+
gem "stimulus-rails"
|
|
37
|
+
gem "turbo-rails"
|
|
38
|
+
gem "rdoc", ">= 7.0"
|
|
39
|
+
end
|
|
28
40
|
|
|
29
41
|
gemspec path: "../"
|
data/gemfiles/pay_8.3.gemfile
CHANGED
|
@@ -2,28 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
source "https://rubygems.org"
|
|
4
4
|
|
|
5
|
-
gem "
|
|
6
|
-
gem "mocha"
|
|
7
|
-
gem "simplecov", require: false
|
|
8
|
-
gem "standard"
|
|
9
|
-
gem "vcr"
|
|
10
|
-
gem "webmock"
|
|
11
|
-
gem "braintree", ">= 2.92.0"
|
|
12
|
-
gem "lemonsqueezy", "~> 1.0"
|
|
13
|
-
gem "paddle", "~> 2.6"
|
|
14
|
-
gem "stripe", "~> 13.0"
|
|
15
|
-
gem "prawn"
|
|
16
|
-
gem "receipts"
|
|
17
|
-
gem "sqlite3"
|
|
18
|
-
gem "pg"
|
|
19
|
-
gem "bootsnap", require: false
|
|
20
|
-
gem "puma"
|
|
21
|
-
gem "web-console", group: :development
|
|
22
|
-
gem "importmap-rails"
|
|
23
|
-
gem "sprockets-rails"
|
|
24
|
-
gem "stimulus-rails"
|
|
25
|
-
gem "turbo-rails"
|
|
26
|
-
gem "rdoc", ">= 7.0"
|
|
5
|
+
gem "rake", "~> 13.0"
|
|
27
6
|
gem "pay", "~> 8.3.0"
|
|
7
|
+
gem "stripe", "~> 13.0"
|
|
8
|
+
gem "rails", "~> 8.1.0"
|
|
9
|
+
|
|
10
|
+
group :development do
|
|
11
|
+
gem "appraisal"
|
|
12
|
+
gem "web-console"
|
|
13
|
+
gem "standard"
|
|
14
|
+
gem "rubocop", "~> 1.0"
|
|
15
|
+
gem "rubocop-minitest", "~> 0.35"
|
|
16
|
+
gem "rubocop-performance", "~> 1.0"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
group :test do
|
|
20
|
+
gem "minitest", "~> 5.0"
|
|
21
|
+
gem "mocha"
|
|
22
|
+
gem "simplecov", require: false
|
|
23
|
+
gem "vcr"
|
|
24
|
+
gem "webmock"
|
|
25
|
+
gem "braintree", ">= 2.92.0"
|
|
26
|
+
gem "lemonsqueezy", "~> 1.0"
|
|
27
|
+
gem "paddle", "~> 2.6"
|
|
28
|
+
gem "prawn"
|
|
29
|
+
gem "receipts"
|
|
30
|
+
gem "sqlite3"
|
|
31
|
+
gem "pg"
|
|
32
|
+
gem "bootsnap", require: false
|
|
33
|
+
gem "puma"
|
|
34
|
+
gem "importmap-rails"
|
|
35
|
+
gem "sprockets-rails"
|
|
36
|
+
gem "stimulus-rails"
|
|
37
|
+
gem "turbo-rails"
|
|
38
|
+
gem "rdoc", ">= 7.0"
|
|
39
|
+
end
|
|
28
40
|
|
|
29
41
|
gemspec path: "../"
|
data/gemfiles/pay_9.0.gemfile
CHANGED
|
@@ -2,28 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
source "https://rubygems.org"
|
|
4
4
|
|
|
5
|
-
gem "
|
|
6
|
-
gem "mocha"
|
|
7
|
-
gem "simplecov", require: false
|
|
8
|
-
gem "standard"
|
|
9
|
-
gem "vcr"
|
|
10
|
-
gem "webmock"
|
|
11
|
-
gem "braintree", ">= 2.92.0"
|
|
12
|
-
gem "lemonsqueezy", "~> 1.0"
|
|
13
|
-
gem "paddle", "~> 2.6"
|
|
14
|
-
gem "stripe", "~> 13.0"
|
|
15
|
-
gem "prawn"
|
|
16
|
-
gem "receipts"
|
|
17
|
-
gem "sqlite3"
|
|
18
|
-
gem "pg"
|
|
19
|
-
gem "bootsnap", require: false
|
|
20
|
-
gem "puma"
|
|
21
|
-
gem "web-console", group: :development
|
|
22
|
-
gem "importmap-rails"
|
|
23
|
-
gem "sprockets-rails"
|
|
24
|
-
gem "stimulus-rails"
|
|
25
|
-
gem "turbo-rails"
|
|
26
|
-
gem "rdoc", ">= 7.0"
|
|
5
|
+
gem "rake", "~> 13.0"
|
|
27
6
|
gem "pay", "~> 9.0.0"
|
|
7
|
+
gem "stripe", "~> 13.0"
|
|
8
|
+
gem "rails", "~> 8.1.0"
|
|
9
|
+
|
|
10
|
+
group :development do
|
|
11
|
+
gem "appraisal"
|
|
12
|
+
gem "web-console"
|
|
13
|
+
gem "standard"
|
|
14
|
+
gem "rubocop", "~> 1.0"
|
|
15
|
+
gem "rubocop-minitest", "~> 0.35"
|
|
16
|
+
gem "rubocop-performance", "~> 1.0"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
group :test do
|
|
20
|
+
gem "minitest", "~> 5.0"
|
|
21
|
+
gem "mocha"
|
|
22
|
+
gem "simplecov", require: false
|
|
23
|
+
gem "vcr"
|
|
24
|
+
gem "webmock"
|
|
25
|
+
gem "braintree", ">= 2.92.0"
|
|
26
|
+
gem "lemonsqueezy", "~> 1.0"
|
|
27
|
+
gem "paddle", "~> 2.6"
|
|
28
|
+
gem "prawn"
|
|
29
|
+
gem "receipts"
|
|
30
|
+
gem "sqlite3"
|
|
31
|
+
gem "pg"
|
|
32
|
+
gem "bootsnap", require: false
|
|
33
|
+
gem "puma"
|
|
34
|
+
gem "importmap-rails"
|
|
35
|
+
gem "sprockets-rails"
|
|
36
|
+
gem "stimulus-rails"
|
|
37
|
+
gem "turbo-rails"
|
|
38
|
+
gem "rdoc", ">= 7.0"
|
|
39
|
+
end
|
|
28
40
|
|
|
29
41
|
gemspec path: "../"
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# This file was generated by Appraisal
|
|
2
|
+
|
|
3
|
+
source "https://rubygems.org"
|
|
4
|
+
|
|
5
|
+
gem "rake", "~> 13.0"
|
|
6
|
+
gem "rails", "~> 7.2.0"
|
|
7
|
+
gem "pay", "~> 11.0"
|
|
8
|
+
gem "stripe", "~> 18.0"
|
|
9
|
+
|
|
10
|
+
group :development do
|
|
11
|
+
gem "appraisal"
|
|
12
|
+
gem "web-console"
|
|
13
|
+
gem "standard"
|
|
14
|
+
gem "rubocop", "~> 1.0"
|
|
15
|
+
gem "rubocop-minitest", "~> 0.35"
|
|
16
|
+
gem "rubocop-performance", "~> 1.0"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
group :test do
|
|
20
|
+
gem "minitest", "~> 5.0"
|
|
21
|
+
gem "mocha"
|
|
22
|
+
gem "simplecov", require: false
|
|
23
|
+
gem "vcr"
|
|
24
|
+
gem "webmock"
|
|
25
|
+
gem "braintree", ">= 2.92.0"
|
|
26
|
+
gem "lemonsqueezy", "~> 1.0"
|
|
27
|
+
gem "paddle", "~> 2.6"
|
|
28
|
+
gem "prawn"
|
|
29
|
+
gem "receipts"
|
|
30
|
+
gem "sqlite3"
|
|
31
|
+
gem "pg"
|
|
32
|
+
gem "bootsnap", require: false
|
|
33
|
+
gem "puma"
|
|
34
|
+
gem "importmap-rails"
|
|
35
|
+
gem "sprockets-rails"
|
|
36
|
+
gem "stimulus-rails"
|
|
37
|
+
gem "turbo-rails"
|
|
38
|
+
gem "rdoc", ">= 7.0"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
gemspec path: "../"
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# This file was generated by Appraisal
|
|
2
|
+
|
|
3
|
+
source "https://rubygems.org"
|
|
4
|
+
|
|
5
|
+
gem "rake", "~> 13.0"
|
|
6
|
+
gem "rails", "~> 8.1.0"
|
|
7
|
+
gem "pay", "~> 11.0"
|
|
8
|
+
gem "stripe", "~> 18.0"
|
|
9
|
+
|
|
10
|
+
group :development do
|
|
11
|
+
gem "appraisal"
|
|
12
|
+
gem "web-console"
|
|
13
|
+
gem "standard"
|
|
14
|
+
gem "rubocop", "~> 1.0"
|
|
15
|
+
gem "rubocop-minitest", "~> 0.35"
|
|
16
|
+
gem "rubocop-performance", "~> 1.0"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
group :test do
|
|
20
|
+
gem "minitest", "~> 5.0"
|
|
21
|
+
gem "mocha"
|
|
22
|
+
gem "simplecov", require: false
|
|
23
|
+
gem "vcr"
|
|
24
|
+
gem "webmock"
|
|
25
|
+
gem "braintree", ">= 2.92.0"
|
|
26
|
+
gem "lemonsqueezy", "~> 1.0"
|
|
27
|
+
gem "paddle", "~> 2.6"
|
|
28
|
+
gem "prawn"
|
|
29
|
+
gem "receipts"
|
|
30
|
+
gem "sqlite3"
|
|
31
|
+
gem "pg"
|
|
32
|
+
gem "bootsnap", require: false
|
|
33
|
+
gem "puma"
|
|
34
|
+
gem "importmap-rails"
|
|
35
|
+
gem "sprockets-rails"
|
|
36
|
+
gem "stimulus-rails"
|
|
37
|
+
gem "turbo-rails"
|
|
38
|
+
gem "rdoc", ">= 7.0"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
gemspec path: "../"
|
|
@@ -123,10 +123,56 @@ module UsageCredits
|
|
|
123
123
|
# Payment Integration
|
|
124
124
|
# =========================================
|
|
125
125
|
|
|
126
|
-
# Create a Stripe Checkout session for this pack
|
|
127
|
-
|
|
126
|
+
# Create a Stripe Checkout session for this pack.
|
|
127
|
+
#
|
|
128
|
+
# Accepts optional checkout options that are passed through to the payment processor.
|
|
129
|
+
# Common options include:
|
|
130
|
+
# - success_url: URL to redirect after successful payment
|
|
131
|
+
# - cancel_url: URL to redirect if customer cancels
|
|
132
|
+
# - allow_promotion_codes: Enable promotion code input (true/false)
|
|
133
|
+
# - locale: Checkout page locale (e.g., "en", "es", "fr")
|
|
134
|
+
# - customer_email: Pre-fill the customer's email
|
|
135
|
+
#
|
|
136
|
+
# Note: The following parameters are protected and cannot be overridden:
|
|
137
|
+
# - mode: Always "payment" for credit packs
|
|
138
|
+
# - line_items: Always the configured credit pack
|
|
139
|
+
#
|
|
140
|
+
# Custom metadata passed in options will be merged with (not replace) the
|
|
141
|
+
# base pack metadata required for credit fulfillment.
|
|
142
|
+
#
|
|
143
|
+
# @param user [Object] A user with a payment processor (via Pay gem)
|
|
144
|
+
# @param options [Hash] Additional checkout options passed to the payment processor
|
|
145
|
+
# @return [Object] The checkout session object
|
|
146
|
+
#
|
|
147
|
+
# @example Basic usage
|
|
148
|
+
# pack.create_checkout_session(current_user)
|
|
149
|
+
#
|
|
150
|
+
# @example With custom options
|
|
151
|
+
# pack.create_checkout_session(current_user,
|
|
152
|
+
# success_url: credits_url,
|
|
153
|
+
# cancel_url: pricing_url,
|
|
154
|
+
# allow_promotion_codes: true
|
|
155
|
+
# )
|
|
156
|
+
#
|
|
157
|
+
def create_checkout_session(user, **options)
|
|
128
158
|
raise ArgumentError, "User must have a payment processor" unless user.respond_to?(:payment_processor) && user.payment_processor
|
|
129
159
|
|
|
160
|
+
# Merge custom metadata with base_metadata (base_metadata takes precedence for critical fields)
|
|
161
|
+
custom_metadata = options.delete(:metadata) || {}
|
|
162
|
+
merged_metadata = custom_metadata.merge(base_metadata)
|
|
163
|
+
|
|
164
|
+
# Handle payment_intent_data specially to preserve metadata
|
|
165
|
+
# We dup to avoid mutating the caller's original hash
|
|
166
|
+
custom_payment_intent_data = (options.delete(:payment_intent_data) || {}).dup
|
|
167
|
+
custom_pi_metadata = custom_payment_intent_data.delete(:metadata) || {}
|
|
168
|
+
merged_payment_intent_data = custom_payment_intent_data.merge(
|
|
169
|
+
metadata: custom_pi_metadata.merge(base_metadata)
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
# Remove protected parameters that could break credit fulfillment
|
|
173
|
+
options.delete(:mode)
|
|
174
|
+
options.delete(:line_items)
|
|
175
|
+
|
|
130
176
|
user.payment_processor.checkout(
|
|
131
177
|
mode: "payment",
|
|
132
178
|
line_items: [{
|
|
@@ -140,8 +186,9 @@ module UsageCredits
|
|
|
140
186
|
},
|
|
141
187
|
quantity: 1
|
|
142
188
|
}],
|
|
143
|
-
payment_intent_data:
|
|
144
|
-
metadata:
|
|
189
|
+
payment_intent_data: merged_payment_intent_data,
|
|
190
|
+
metadata: merged_metadata,
|
|
191
|
+
**options
|
|
145
192
|
)
|
|
146
193
|
end
|
|
147
194
|
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: usage_credits
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- rameerez
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date:
|
|
10
|
+
date: 2026-01-15 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: pay
|
|
@@ -43,104 +43,6 @@ dependencies:
|
|
|
43
43
|
- - ">="
|
|
44
44
|
- !ruby/object:Gem::Version
|
|
45
45
|
version: '6.1'
|
|
46
|
-
- !ruby/object:Gem::Dependency
|
|
47
|
-
name: bundler
|
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
|
49
|
-
requirements:
|
|
50
|
-
- - "~>"
|
|
51
|
-
- !ruby/object:Gem::Version
|
|
52
|
-
version: '2.0'
|
|
53
|
-
type: :development
|
|
54
|
-
prerelease: false
|
|
55
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
56
|
-
requirements:
|
|
57
|
-
- - "~>"
|
|
58
|
-
- !ruby/object:Gem::Version
|
|
59
|
-
version: '2.0'
|
|
60
|
-
- !ruby/object:Gem::Dependency
|
|
61
|
-
name: rake
|
|
62
|
-
requirement: !ruby/object:Gem::Requirement
|
|
63
|
-
requirements:
|
|
64
|
-
- - "~>"
|
|
65
|
-
- !ruby/object:Gem::Version
|
|
66
|
-
version: '13.0'
|
|
67
|
-
type: :development
|
|
68
|
-
prerelease: false
|
|
69
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
70
|
-
requirements:
|
|
71
|
-
- - "~>"
|
|
72
|
-
- !ruby/object:Gem::Version
|
|
73
|
-
version: '13.0'
|
|
74
|
-
- !ruby/object:Gem::Dependency
|
|
75
|
-
name: minitest
|
|
76
|
-
requirement: !ruby/object:Gem::Requirement
|
|
77
|
-
requirements:
|
|
78
|
-
- - "~>"
|
|
79
|
-
- !ruby/object:Gem::Version
|
|
80
|
-
version: '5.0'
|
|
81
|
-
type: :development
|
|
82
|
-
prerelease: false
|
|
83
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
84
|
-
requirements:
|
|
85
|
-
- - "~>"
|
|
86
|
-
- !ruby/object:Gem::Version
|
|
87
|
-
version: '5.0'
|
|
88
|
-
- !ruby/object:Gem::Dependency
|
|
89
|
-
name: sqlite3
|
|
90
|
-
requirement: !ruby/object:Gem::Requirement
|
|
91
|
-
requirements:
|
|
92
|
-
- - "~>"
|
|
93
|
-
- !ruby/object:Gem::Version
|
|
94
|
-
version: '2.1'
|
|
95
|
-
type: :development
|
|
96
|
-
prerelease: false
|
|
97
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
98
|
-
requirements:
|
|
99
|
-
- - "~>"
|
|
100
|
-
- !ruby/object:Gem::Version
|
|
101
|
-
version: '2.1'
|
|
102
|
-
- !ruby/object:Gem::Dependency
|
|
103
|
-
name: rubocop
|
|
104
|
-
requirement: !ruby/object:Gem::Requirement
|
|
105
|
-
requirements:
|
|
106
|
-
- - "~>"
|
|
107
|
-
- !ruby/object:Gem::Version
|
|
108
|
-
version: '1.0'
|
|
109
|
-
type: :development
|
|
110
|
-
prerelease: false
|
|
111
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
112
|
-
requirements:
|
|
113
|
-
- - "~>"
|
|
114
|
-
- !ruby/object:Gem::Version
|
|
115
|
-
version: '1.0'
|
|
116
|
-
- !ruby/object:Gem::Dependency
|
|
117
|
-
name: rubocop-minitest
|
|
118
|
-
requirement: !ruby/object:Gem::Requirement
|
|
119
|
-
requirements:
|
|
120
|
-
- - "~>"
|
|
121
|
-
- !ruby/object:Gem::Version
|
|
122
|
-
version: '0.35'
|
|
123
|
-
type: :development
|
|
124
|
-
prerelease: false
|
|
125
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
126
|
-
requirements:
|
|
127
|
-
- - "~>"
|
|
128
|
-
- !ruby/object:Gem::Version
|
|
129
|
-
version: '0.35'
|
|
130
|
-
- !ruby/object:Gem::Dependency
|
|
131
|
-
name: rubocop-performance
|
|
132
|
-
requirement: !ruby/object:Gem::Requirement
|
|
133
|
-
requirements:
|
|
134
|
-
- - "~>"
|
|
135
|
-
- !ruby/object:Gem::Version
|
|
136
|
-
version: '1.0'
|
|
137
|
-
type: :development
|
|
138
|
-
prerelease: false
|
|
139
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
140
|
-
requirements:
|
|
141
|
-
- - "~>"
|
|
142
|
-
- !ruby/object:Gem::Version
|
|
143
|
-
version: '1.0'
|
|
144
46
|
description: Add a usage-based credit system to your Rails app, easily. Let users
|
|
145
47
|
buy and spend credits on usage-based actions. Refill Stripe subscriptions with credits,
|
|
146
48
|
sell one-time booster credit packs, implement PAYG (pay-as-you-go) billing, award
|
|
@@ -166,6 +68,8 @@ files:
|
|
|
166
68
|
- gemfiles/pay_11.0.gemfile
|
|
167
69
|
- gemfiles/pay_8.3.gemfile
|
|
168
70
|
- gemfiles/pay_9.0.gemfile
|
|
71
|
+
- gemfiles/rails_7.2.gemfile
|
|
72
|
+
- gemfiles/rails_8.1.gemfile
|
|
169
73
|
- lib/generators/usage_credits/install_generator.rb
|
|
170
74
|
- lib/generators/usage_credits/templates/create_usage_credits_tables.rb.erb
|
|
171
75
|
- lib/generators/usage_credits/templates/initializer.rb
|