usage_credits 0.4.0 → 1.0.0

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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +72 -0
  3. data/README.md +246 -13
  4. data/lib/generators/usage_credits/install_generator.rb +9 -1
  5. data/lib/generators/usage_credits/templates/create_usage_credits_tables.rb.erb +65 -21
  6. data/lib/generators/usage_credits/templates/upgrade_usage_credits_to_wallets_core.rb.erb +602 -0
  7. data/lib/generators/usage_credits/upgrade_generator.rb +47 -0
  8. data/lib/usage_credits/callbacks.rb +9 -54
  9. data/lib/usage_credits/configuration.rb +43 -13
  10. data/lib/usage_credits/core_ext/numeric.rb +12 -16
  11. data/lib/usage_credits/cost/base.rb +1 -6
  12. data/lib/usage_credits/cost/compound.rb +3 -2
  13. data/lib/usage_credits/cost/fixed.rb +1 -2
  14. data/lib/usage_credits/cost/variable.rb +23 -8
  15. data/lib/usage_credits/engine.rb +8 -12
  16. data/lib/usage_credits/helpers/credit_calculator.rb +18 -0
  17. data/lib/usage_credits/helpers/credits_helper.rb +9 -11
  18. data/lib/usage_credits/helpers/period_parser.rb +31 -9
  19. data/lib/usage_credits/helpers/processor_metadata.rb +46 -0
  20. data/lib/usage_credits/jobs/fulfillment_job.rb +1 -1
  21. data/lib/usage_credits/models/allocation.rb +15 -20
  22. data/lib/usage_credits/models/concerns/has_wallet.rb +50 -27
  23. data/lib/usage_credits/models/concerns/pay_charge_extension.rb +184 -139
  24. data/lib/usage_credits/models/concerns/pay_subscription_extension.rb +490 -174
  25. data/lib/usage_credits/models/credit_pack.rb +34 -13
  26. data/lib/usage_credits/models/credit_subscription_plan.rb +36 -15
  27. data/lib/usage_credits/models/fulfillment.rb +23 -48
  28. data/lib/usage_credits/models/operation.rb +36 -28
  29. data/lib/usage_credits/models/transaction.rb +55 -152
  30. data/lib/usage_credits/models/transfer.rb +37 -0
  31. data/lib/usage_credits/models/wallet.rb +219 -314
  32. data/lib/usage_credits/railtie.rb +4 -13
  33. data/lib/usage_credits/services/fulfillment_service.rb +146 -22
  34. data/lib/usage_credits/subscription_terms.rb +131 -0
  35. data/lib/usage_credits/version.rb +1 -1
  36. data/lib/usage_credits.rb +16 -3
  37. metadata +33 -20
  38. data/.rubocop.yml +0 -8
  39. data/.simplecov +0 -48
  40. data/AGENTS.md +0 -5
  41. data/Appraisals +0 -43
  42. data/CLAUDE.md +0 -5
  43. data/Rakefile +0 -32
  44. data/gemfiles/pay_10.0.gemfile +0 -41
  45. data/gemfiles/pay_11.0.gemfile +0 -41
  46. data/gemfiles/pay_8.3.gemfile +0 -41
  47. data/gemfiles/pay_9.0.gemfile +0 -41
  48. data/gemfiles/rails_7.2.gemfile +0 -41
  49. data/gemfiles/rails_8.1.gemfile +0 -41
data/CLAUDE.md DELETED
@@ -1,5 +0,0 @@
1
- # CLAUDE.md
2
-
3
- This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
-
5
- Please go ahead and read the full context for this project at `.cursor/rules/0-overview.mdc` and `.cursor/rules/1-quality.mdc` now. Also read the README for a good overview of the project.
data/Rakefile DELETED
@@ -1,32 +0,0 @@
1
- begin
2
- require "bundler/setup"
3
- rescue LoadError
4
- puts "You must `gem install bundler` and `bundle install` to run rake tasks"
5
- end
6
-
7
- require "bundler/gem_tasks"
8
-
9
- require "rdoc/task"
10
-
11
- RDoc::Task.new(:rdoc) do |rdoc|
12
- rdoc.rdoc_dir = "rdoc"
13
- rdoc.title = "Pay"
14
- rdoc.options << "--line-numbers"
15
- rdoc.rdoc_files.include("README.md")
16
- rdoc.rdoc_files.include("lib/**/*.rb")
17
- end
18
-
19
- APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
20
- load "rails/tasks/engine.rake"
21
-
22
- load "rails/tasks/statistics.rake"
23
-
24
- require "rake/testtask"
25
-
26
- Rake::TestTask.new(:test) do |t|
27
- t.libs << "test"
28
- t.pattern = "test/**/*_test.rb"
29
- t.verbose = false
30
- end
31
-
32
- task default: :test
@@ -1,41 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "rake", "~> 13.0"
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
40
-
41
- gemspec path: "../"
@@ -1,41 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "rake", "~> 13.0"
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
40
-
41
- gemspec path: "../"
@@ -1,41 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "rake", "~> 13.0"
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
40
-
41
- gemspec path: "../"
@@ -1,41 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "rake", "~> 13.0"
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
40
-
41
- gemspec path: "../"
@@ -1,41 +0,0 @@
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: "../"
@@ -1,41 +0,0 @@
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: "../"