pricing_plans 0.1.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 (48) hide show
  1. checksums.yaml +7 -0
  2. data/.claude/settings.local.json +16 -0
  3. data/.rubocop.yml +137 -0
  4. data/CHANGELOG.md +83 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +241 -0
  7. data/Rakefile +15 -0
  8. data/docs/01-define-pricing-plans.md +372 -0
  9. data/docs/02-controller-helpers.md +223 -0
  10. data/docs/03-model-helpers.md +318 -0
  11. data/docs/04-views.md +121 -0
  12. data/docs/05-semantic-pricing.md +159 -0
  13. data/docs/06-gem-compatibility.md +99 -0
  14. data/docs/images/pricing_plans_ruby_rails_gem_pricing_table.jpg +0 -0
  15. data/docs/images/pricing_plans_ruby_rails_gem_usage_alert_upgrade.jpg +0 -0
  16. data/docs/images/pricing_plans_ruby_rails_gem_usage_meter.jpg +0 -0
  17. data/docs/images/product_creation_blocked.jpg +0 -0
  18. data/lib/generators/pricing_plans/install/install_generator.rb +42 -0
  19. data/lib/generators/pricing_plans/install/templates/create_pricing_plans_tables.rb.erb +91 -0
  20. data/lib/generators/pricing_plans/install/templates/initializer.rb +100 -0
  21. data/lib/pricing_plans/association_limit_registry.rb +45 -0
  22. data/lib/pricing_plans/configuration.rb +189 -0
  23. data/lib/pricing_plans/controller_guards.rb +574 -0
  24. data/lib/pricing_plans/controller_rescues.rb +115 -0
  25. data/lib/pricing_plans/dsl.rb +44 -0
  26. data/lib/pricing_plans/engine.rb +69 -0
  27. data/lib/pricing_plans/grace_manager.rb +227 -0
  28. data/lib/pricing_plans/integer_refinements.rb +48 -0
  29. data/lib/pricing_plans/job_guards.rb +24 -0
  30. data/lib/pricing_plans/limit_checker.rb +157 -0
  31. data/lib/pricing_plans/limitable.rb +286 -0
  32. data/lib/pricing_plans/models/assignment.rb +55 -0
  33. data/lib/pricing_plans/models/enforcement_state.rb +45 -0
  34. data/lib/pricing_plans/models/usage.rb +51 -0
  35. data/lib/pricing_plans/overage_reporter.rb +77 -0
  36. data/lib/pricing_plans/pay_support.rb +85 -0
  37. data/lib/pricing_plans/period_calculator.rb +183 -0
  38. data/lib/pricing_plans/plan.rb +653 -0
  39. data/lib/pricing_plans/plan_owner.rb +287 -0
  40. data/lib/pricing_plans/plan_resolver.rb +85 -0
  41. data/lib/pricing_plans/price_components.rb +16 -0
  42. data/lib/pricing_plans/registry.rb +182 -0
  43. data/lib/pricing_plans/result.rb +109 -0
  44. data/lib/pricing_plans/version.rb +5 -0
  45. data/lib/pricing_plans/view_helpers.rb +58 -0
  46. data/lib/pricing_plans.rb +645 -0
  47. data/sig/pricing_plans.rbs +4 -0
  48. metadata +236 -0
@@ -0,0 +1,4 @@
1
+ module PricingPlans
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
metadata ADDED
@@ -0,0 +1,236 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pricing_plans
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - rameerez
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 2025-08-19 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: activerecord
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '7.1'
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: 7.1.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '7.1'
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: 7.1.0
32
+ - !ruby/object:Gem::Dependency
33
+ name: activesupport
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - "~>"
37
+ - !ruby/object:Gem::Version
38
+ version: '7.1'
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: 7.1.0
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '7.1'
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: 7.1.0
52
+ - !ruby/object:Gem::Dependency
53
+ name: bundler
54
+ requirement: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - "~>"
57
+ - !ruby/object:Gem::Version
58
+ version: '2.0'
59
+ type: :development
60
+ prerelease: false
61
+ version_requirements: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - "~>"
64
+ - !ruby/object:Gem::Version
65
+ version: '2.0'
66
+ - !ruby/object:Gem::Dependency
67
+ name: rake
68
+ requirement: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - "~>"
71
+ - !ruby/object:Gem::Version
72
+ version: '13.0'
73
+ type: :development
74
+ prerelease: false
75
+ version_requirements: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '13.0'
80
+ - !ruby/object:Gem::Dependency
81
+ name: minitest
82
+ requirement: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - "~>"
85
+ - !ruby/object:Gem::Version
86
+ version: '5.0'
87
+ type: :development
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: '5.0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: sqlite3
96
+ requirement: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: '2.1'
101
+ type: :development
102
+ prerelease: false
103
+ version_requirements: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: '2.1'
108
+ - !ruby/object:Gem::Dependency
109
+ name: rubocop
110
+ requirement: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: '1.0'
115
+ type: :development
116
+ prerelease: false
117
+ version_requirements: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - "~>"
120
+ - !ruby/object:Gem::Version
121
+ version: '1.0'
122
+ - !ruby/object:Gem::Dependency
123
+ name: rubocop-minitest
124
+ requirement: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - "~>"
127
+ - !ruby/object:Gem::Version
128
+ version: '0.35'
129
+ type: :development
130
+ prerelease: false
131
+ version_requirements: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - "~>"
134
+ - !ruby/object:Gem::Version
135
+ version: '0.35'
136
+ - !ruby/object:Gem::Dependency
137
+ name: rubocop-performance
138
+ requirement: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - "~>"
141
+ - !ruby/object:Gem::Version
142
+ version: '1.0'
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '1.0'
150
+ description: Define and enforce pricing plan limits in your Rails SaaS (entitlements,
151
+ quotas, feature gating). pricing_plans acts as your single source of truth for pricing
152
+ plans. Define a pricing catalog with feature gating, persistent caps, per‑period
153
+ allowances, grace periods, and get view/controller/model helpers. Seamless Stripe/Pay
154
+ ergonomics and UI‑agnostic helpers to build pricing tables, plan usage meters, plan
155
+ limit alerts, upgrade prompts, and more.
156
+ email:
157
+ - rubygems@rameerez.com
158
+ executables: []
159
+ extensions: []
160
+ extra_rdoc_files: []
161
+ files:
162
+ - ".claude/settings.local.json"
163
+ - ".rubocop.yml"
164
+ - CHANGELOG.md
165
+ - LICENSE.txt
166
+ - README.md
167
+ - Rakefile
168
+ - docs/01-define-pricing-plans.md
169
+ - docs/02-controller-helpers.md
170
+ - docs/03-model-helpers.md
171
+ - docs/04-views.md
172
+ - docs/05-semantic-pricing.md
173
+ - docs/06-gem-compatibility.md
174
+ - docs/images/pricing_plans_ruby_rails_gem_pricing_table.jpg
175
+ - docs/images/pricing_plans_ruby_rails_gem_usage_alert_upgrade.jpg
176
+ - docs/images/pricing_plans_ruby_rails_gem_usage_meter.jpg
177
+ - docs/images/product_creation_blocked.jpg
178
+ - lib/generators/pricing_plans/install/install_generator.rb
179
+ - lib/generators/pricing_plans/install/templates/create_pricing_plans_tables.rb.erb
180
+ - lib/generators/pricing_plans/install/templates/initializer.rb
181
+ - lib/pricing_plans.rb
182
+ - lib/pricing_plans/association_limit_registry.rb
183
+ - lib/pricing_plans/configuration.rb
184
+ - lib/pricing_plans/controller_guards.rb
185
+ - lib/pricing_plans/controller_rescues.rb
186
+ - lib/pricing_plans/dsl.rb
187
+ - lib/pricing_plans/engine.rb
188
+ - lib/pricing_plans/grace_manager.rb
189
+ - lib/pricing_plans/integer_refinements.rb
190
+ - lib/pricing_plans/job_guards.rb
191
+ - lib/pricing_plans/limit_checker.rb
192
+ - lib/pricing_plans/limitable.rb
193
+ - lib/pricing_plans/models/assignment.rb
194
+ - lib/pricing_plans/models/enforcement_state.rb
195
+ - lib/pricing_plans/models/usage.rb
196
+ - lib/pricing_plans/overage_reporter.rb
197
+ - lib/pricing_plans/pay_support.rb
198
+ - lib/pricing_plans/period_calculator.rb
199
+ - lib/pricing_plans/plan.rb
200
+ - lib/pricing_plans/plan_owner.rb
201
+ - lib/pricing_plans/plan_resolver.rb
202
+ - lib/pricing_plans/price_components.rb
203
+ - lib/pricing_plans/registry.rb
204
+ - lib/pricing_plans/result.rb
205
+ - lib/pricing_plans/version.rb
206
+ - lib/pricing_plans/view_helpers.rb
207
+ - sig/pricing_plans.rbs
208
+ homepage: https://github.com/rameerez/pricing_plans
209
+ licenses:
210
+ - MIT
211
+ metadata:
212
+ homepage_uri: https://github.com/rameerez/pricing_plans
213
+ source_code_uri: https://github.com/rameerez/pricing_plans
214
+ changelog_uri: https://github.com/rameerez/pricing_plans/blob/main/CHANGELOG.md
215
+ bug_tracker_uri: https://github.com/rameerez/pricing_plans/issues
216
+ documentation_uri: https://github.com/rameerez/pricing_plans#readme
217
+ rubygems_mfa_required: 'true'
218
+ rdoc_options: []
219
+ require_paths:
220
+ - lib
221
+ required_ruby_version: !ruby/object:Gem::Requirement
222
+ requirements:
223
+ - - ">="
224
+ - !ruby/object:Gem::Version
225
+ version: 3.2.0
226
+ required_rubygems_version: !ruby/object:Gem::Requirement
227
+ requirements:
228
+ - - ">="
229
+ - !ruby/object:Gem::Version
230
+ version: '0'
231
+ requirements: []
232
+ rubygems_version: 3.6.2
233
+ specification_version: 4
234
+ summary: Define and enforce pricing plan limits (entitlements, quotas, feature gating)
235
+ in your Rails SaaS
236
+ test_files: []