clavis 0.7.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.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/.actrc +4 -0
  3. data/.cursor/rules/ruby-gem.mdc +49 -0
  4. data/.gemignore +6 -0
  5. data/.rspec +3 -0
  6. data/.rubocop.yml +88 -0
  7. data/.vscode/settings.json +22 -0
  8. data/CHANGELOG.md +127 -0
  9. data/CODE_OF_CONDUCT.md +3 -0
  10. data/LICENSE.txt +21 -0
  11. data/README.md +838 -0
  12. data/Rakefile +341 -0
  13. data/UPGRADE.md +57 -0
  14. data/app/assets/stylesheets/clavis.css +133 -0
  15. data/app/controllers/clavis/auth_controller.rb +133 -0
  16. data/config/database.yml +16 -0
  17. data/config/routes.rb +49 -0
  18. data/docs/SECURITY.md +340 -0
  19. data/docs/TESTING.md +78 -0
  20. data/docs/integration.md +272 -0
  21. data/error_handling.md +355 -0
  22. data/file_structure.md +221 -0
  23. data/gemfiles/rails_80.gemfile +17 -0
  24. data/gemfiles/rails_80.gemfile.lock +286 -0
  25. data/implementation_plan.md +523 -0
  26. data/lib/clavis/configuration.rb +196 -0
  27. data/lib/clavis/controllers/concerns/authentication.rb +232 -0
  28. data/lib/clavis/controllers/concerns/session_management.rb +117 -0
  29. data/lib/clavis/engine.rb +191 -0
  30. data/lib/clavis/errors.rb +205 -0
  31. data/lib/clavis/logging.rb +116 -0
  32. data/lib/clavis/models/concerns/oauth_authenticatable.rb +169 -0
  33. data/lib/clavis/oauth_identity.rb +174 -0
  34. data/lib/clavis/providers/apple.rb +135 -0
  35. data/lib/clavis/providers/base.rb +432 -0
  36. data/lib/clavis/providers/custom_provider_example.rb +57 -0
  37. data/lib/clavis/providers/facebook.rb +84 -0
  38. data/lib/clavis/providers/generic.rb +63 -0
  39. data/lib/clavis/providers/github.rb +87 -0
  40. data/lib/clavis/providers/google.rb +98 -0
  41. data/lib/clavis/providers/microsoft.rb +57 -0
  42. data/lib/clavis/security/csrf_protection.rb +79 -0
  43. data/lib/clavis/security/https_enforcer.rb +90 -0
  44. data/lib/clavis/security/input_validator.rb +192 -0
  45. data/lib/clavis/security/parameter_filter.rb +64 -0
  46. data/lib/clavis/security/rate_limiter.rb +109 -0
  47. data/lib/clavis/security/redirect_uri_validator.rb +124 -0
  48. data/lib/clavis/security/session_manager.rb +220 -0
  49. data/lib/clavis/security/token_storage.rb +114 -0
  50. data/lib/clavis/user_info_normalizer.rb +74 -0
  51. data/lib/clavis/utils/nonce_store.rb +14 -0
  52. data/lib/clavis/utils/secure_token.rb +17 -0
  53. data/lib/clavis/utils/state_store.rb +18 -0
  54. data/lib/clavis/version.rb +6 -0
  55. data/lib/clavis/view_helpers.rb +260 -0
  56. data/lib/clavis.rb +132 -0
  57. data/lib/generators/clavis/controller/controller_generator.rb +48 -0
  58. data/lib/generators/clavis/controller/templates/controller.rb.tt +137 -0
  59. data/lib/generators/clavis/controller/templates/views/login.html.erb.tt +145 -0
  60. data/lib/generators/clavis/install_generator.rb +182 -0
  61. data/lib/generators/clavis/templates/add_oauth_to_users.rb +28 -0
  62. data/lib/generators/clavis/templates/clavis.css +133 -0
  63. data/lib/generators/clavis/templates/initializer.rb +47 -0
  64. data/lib/generators/clavis/templates/initializer.rb.tt +76 -0
  65. data/lib/generators/clavis/templates/migration.rb +18 -0
  66. data/lib/generators/clavis/templates/migration.rb.tt +16 -0
  67. data/lib/generators/clavis/user_method/user_method_generator.rb +219 -0
  68. data/lib/tasks/provider_verification.rake +77 -0
  69. data/llms.md +487 -0
  70. data/log/development.log +20 -0
  71. data/log/test.log +0 -0
  72. data/sig/clavis.rbs +4 -0
  73. data/testing_plan.md +710 -0
  74. metadata +258 -0
data/file_structure.md ADDED
@@ -0,0 +1,221 @@
1
+ # Clavis - Proposed File Structure
2
+
3
+ ```
4
+ clavis/
5
+ ├── .github/ # GitHub workflows and templates
6
+ ├── bin/ # Executable files
7
+ │ ├── console # Interactive console for development
8
+ │ └── setup # Setup script for development
9
+ ├── lib/ # Main code directory
10
+ │ ├── clavis.rb # Main entry point
11
+ │ ├── clavis/ # Core library files
12
+ │ │ ├── version.rb # Version information
13
+ │ │ ├── configuration.rb # Configuration management
14
+ │ │ ├── errors.rb # Custom error classes
15
+ │ │ ├── engine.rb # Rails engine definition
16
+ │ │ ├── railtie.rb # Rails integration
17
+ │ │ ├── utils/ # Utility modules
18
+ │ │ │ ├── secure_token.rb # Token generation utilities
19
+ │ │ │ ├── uri_helper.rb # URI manipulation utilities
20
+ │ │ │ └── http_client.rb # Faraday wrapper
21
+ │ │ ├── models/ # Model-related code
22
+ │ │ │ └── concerns/ # Model concerns
23
+ │ │ │ └── oauth_authenticatable.rb # User model concern
24
+ │ │ ├── controllers/ # Controller-related code
25
+ │ │ │ └── concerns/ # Controller concerns
26
+ │ │ │ └── authentication.rb # Authentication controller concern
27
+ │ │ ├── providers/ # Provider implementations
28
+ │ │ │ ├── base.rb # Abstract provider base class
29
+ │ │ │ ├── google.rb # Google provider implementation
30
+ │ │ │ ├── github.rb # GitHub provider implementation
31
+ │ │ │ ├── apple.rb # Apple provider implementation
32
+ │ │ │ ├── facebook.rb # Facebook provider implementation
33
+ │ │ │ └── microsoft.rb # Microsoft provider implementation
34
+ │ │ ├── view_helpers.rb # View helper methods
35
+ │ │ └── auth_hash.rb # Auth hash standardization
36
+ │ ├── generators/ # Generator classes
37
+ │ │ └── clavis/ # Namespace for generators
38
+ │ │ ├── install_generator.rb # Main installation generator
39
+ │ │ ├── controllers_generator.rb # Controller generator
40
+ │ │ ├── views_generator.rb # Views generator
41
+ │ │ └── templates/ # Templates for generators
42
+ │ │ ├── initializer.rb # Initializer template
43
+ │ │ ├── migration.rb # Migration template
44
+ │ │ ├── auth_controller.rb # Controller template
45
+ │ │ ├── sessions_controller.rb # Example sessions controller
46
+ │ │ └── views/ # View templates
47
+ │ │ ├── auth/ # Auth controller views
48
+ │ │ └── providers/ # Provider-specific partials
49
+ │ │ └── _button.html.erb # Button template
50
+ │ └── assets/ # Asset files
51
+ │ ├── images/ # Image assets
52
+ │ │ └── clavis/ # Namespace for images
53
+ │ │ └── providers/ # Provider logos
54
+ │ │ ├── google.svg # Google logo
55
+ │ │ ├── github.svg # GitHub logo
56
+ │ │ └── ... # Other provider logos
57
+ │ └── stylesheets/ # CSS/SCSS files
58
+ │ └── clavis/ # Namespace for stylesheets
59
+ │ ├── buttons.css # Button styles
60
+ │ └── providers.css # Provider-specific styles
61
+ ├── spec/ # RSpec tests
62
+ │ ├── clavis_spec.rb # Main spec file
63
+ │ ├── spec_helper.rb # Spec configuration
64
+ │ ├── configuration_spec.rb # Configuration tests
65
+ │ ├── providers/ # Provider tests
66
+ │ │ ├── base_spec.rb # Base provider tests
67
+ │ │ ├── google_spec.rb # Google provider tests
68
+ │ │ └── ... # Other provider tests
69
+ │ ├── controllers/ # Controller tests
70
+ │ │ └── concerns/ # Controller concern tests
71
+ │ │ └── authentication_spec.rb # Authentication concern tests
72
+ │ ├── models/ # Model tests
73
+ │ │ └── concerns/ # Model concern tests
74
+ │ │ └── oauth_authenticatable_spec.rb # User concern tests
75
+ │ ├── view_helpers_spec.rb # View helper tests
76
+ │ ├── generators/ # Generator tests
77
+ │ │ └── install_generator_spec.rb # Install generator tests
78
+ │ ├── integration/ # Integration tests
79
+ │ │ ├── authorization_flow_spec.rb # Authorization flow tests
80
+ │ │ └── token_exchange_spec.rb # Token exchange tests
81
+ │ └── fixtures/ # Test fixtures
82
+ │ └── auth_responses/ # Sample auth responses
83
+ │ ├── google.json # Google auth response
84
+ │ └── ... # Other provider responses
85
+ ├── .gitignore # Git ignore file
86
+ ├── .rspec # RSpec configuration
87
+ ├── .rubocop.yml # RuboCop configuration
88
+ ├── Gemfile # Gem dependencies
89
+ ├── LICENSE.txt # License file
90
+ ├── README.md # README file
91
+ ├── CHANGELOG.md # Changelog
92
+ ├── Rakefile # Rake tasks
93
+ └── clavis.gemspec # Gem specification
94
+ ```
95
+
96
+ ## Architecture Overview
97
+
98
+ The Clavis gem follows a modular, object-oriented architecture with clear separation of concerns:
99
+
100
+ ### Core Components
101
+
102
+ 1. **Configuration**
103
+ - Centralized configuration system
104
+ - Provider settings management
105
+ - Default option handling
106
+
107
+ 2. **Provider System**
108
+ - Abstract base class with common logic
109
+ - Individual provider implementations that extend the base
110
+ - Provider-specific quirks isolated to their respective classes
111
+
112
+ 3. **Authentication Flow**
113
+ - Clean separation between authorization and token exchange
114
+ - Standardized auth hash format across providers
115
+ - Secure token handling and validation
116
+
117
+ 4. **Rails Integration**
118
+ - Rails engine for routes and assets
119
+ - Controller concerns for authentication logic
120
+ - Model concerns for user management
121
+ - View helpers for UI components
122
+
123
+ ### Design Principles
124
+
125
+ 1. **Single Responsibility Principle**
126
+ - Each class has a singular, well-defined purpose
127
+ - Concerns are used to share behavior across classes
128
+
129
+ 2. **Open/Closed Principle**
130
+ - Core architecture is open for extension but closed for modification
131
+ - New providers can be added without changing existing code
132
+
133
+ 3. **Dependency Inversion**
134
+ - High-level modules don't depend on low-level implementations
135
+ - All components depend on abstractions
136
+
137
+ 4. **Composition Over Inheritance**
138
+ - Limit inheritance chains to where they make sense (providers)
139
+ - Use composition and concerns for shared functionality
140
+
141
+ 5. **Convention Over Configuration**
142
+ - Follow Rails conventions where appropriate
143
+ - Sensible defaults with clear override mechanisms
144
+
145
+ ## Key Class Relationships
146
+
147
+ ```
148
+ Configuration ─┐
149
+
150
+ Provider::Base ┼─── Provider::Google
151
+ │ Provider::GitHub
152
+ │ Provider::Apple
153
+ │ ...
154
+
155
+ Controllers::Concerns::Authentication ───┐
156
+ ├─── ApplicationController
157
+ Models::Concerns::OauthAuthenticatable ──┘
158
+ ```
159
+
160
+ ## Module Structure
161
+
162
+ ```ruby
163
+ module Clavis
164
+ # Core functionality
165
+ class Configuration
166
+ end
167
+
168
+ class Error < StandardError
169
+ end
170
+
171
+ # Provider handling
172
+ module Providers
173
+ class Base
174
+ end
175
+
176
+ class Google < Base
177
+ end
178
+
179
+ # Other providers...
180
+ end
181
+
182
+ # Rails integration
183
+ module Controllers
184
+ module Concerns
185
+ module Authentication
186
+ end
187
+ end
188
+ end
189
+
190
+ module Models
191
+ module Concerns
192
+ module OauthAuthenticatable
193
+ end
194
+ end
195
+ end
196
+
197
+ module ViewHelpers
198
+ end
199
+
200
+ # Rails engine
201
+ class Engine < ::Rails::Engine
202
+ end
203
+ end
204
+ ```
205
+
206
+ ## Testing Strategy
207
+
208
+ 1. **Unit Tests**
209
+ - Individual components tested in isolation
210
+ - Mocked dependencies
211
+ - Focus on correctness of logic
212
+
213
+ 2. **Integration Tests**
214
+ - End-to-end flows
215
+ - Provider interactions (with stubbed HTTP)
216
+ - Rails integration
217
+
218
+ 3. **Security Tests**
219
+ - Token validation
220
+ - CSRF protection
221
+ - State parameter security
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gemspec path: ".."
6
+
7
+ gem "bcrypt"
8
+ gem "debug"
9
+ gem "puma"
10
+ gem "rails", "~> 8.0.0"
11
+ gem "sqlite3", "~> 2.1"
12
+
13
+ group :development, :test do
14
+ gem "generator_spec"
15
+ gem "ostruct"
16
+ gem "rspec-rails"
17
+ end
@@ -0,0 +1,286 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ clavis (0.5.0)
5
+ bigdecimal
6
+ faraday (~> 2.7)
7
+ jwt (~> 2.7)
8
+ mutex_m
9
+ rails (~> 8.0)
10
+
11
+ GEM
12
+ remote: https://rubygems.org/
13
+ specs:
14
+ actioncable (8.0.2)
15
+ actionpack (= 8.0.2)
16
+ activesupport (= 8.0.2)
17
+ nio4r (~> 2.0)
18
+ websocket-driver (>= 0.6.1)
19
+ zeitwerk (~> 2.6)
20
+ actionmailbox (8.0.2)
21
+ actionpack (= 8.0.2)
22
+ activejob (= 8.0.2)
23
+ activerecord (= 8.0.2)
24
+ activestorage (= 8.0.2)
25
+ activesupport (= 8.0.2)
26
+ mail (>= 2.8.0)
27
+ actionmailer (8.0.2)
28
+ actionpack (= 8.0.2)
29
+ actionview (= 8.0.2)
30
+ activejob (= 8.0.2)
31
+ activesupport (= 8.0.2)
32
+ mail (>= 2.8.0)
33
+ rails-dom-testing (~> 2.2)
34
+ actionpack (8.0.2)
35
+ actionview (= 8.0.2)
36
+ activesupport (= 8.0.2)
37
+ nokogiri (>= 1.8.5)
38
+ rack (>= 2.2.4)
39
+ rack-session (>= 1.0.1)
40
+ rack-test (>= 0.6.3)
41
+ rails-dom-testing (~> 2.2)
42
+ rails-html-sanitizer (~> 1.6)
43
+ useragent (~> 0.16)
44
+ actiontext (8.0.2)
45
+ actionpack (= 8.0.2)
46
+ activerecord (= 8.0.2)
47
+ activestorage (= 8.0.2)
48
+ activesupport (= 8.0.2)
49
+ globalid (>= 0.6.0)
50
+ nokogiri (>= 1.8.5)
51
+ actionview (8.0.2)
52
+ activesupport (= 8.0.2)
53
+ builder (~> 3.1)
54
+ erubi (~> 1.11)
55
+ rails-dom-testing (~> 2.2)
56
+ rails-html-sanitizer (~> 1.6)
57
+ activejob (8.0.2)
58
+ activesupport (= 8.0.2)
59
+ globalid (>= 0.3.6)
60
+ activemodel (8.0.2)
61
+ activesupport (= 8.0.2)
62
+ activerecord (8.0.2)
63
+ activemodel (= 8.0.2)
64
+ activesupport (= 8.0.2)
65
+ timeout (>= 0.4.0)
66
+ activestorage (8.0.2)
67
+ actionpack (= 8.0.2)
68
+ activejob (= 8.0.2)
69
+ activerecord (= 8.0.2)
70
+ activesupport (= 8.0.2)
71
+ marcel (~> 1.0)
72
+ activesupport (8.0.2)
73
+ base64
74
+ benchmark (>= 0.3)
75
+ bigdecimal
76
+ concurrent-ruby (~> 1.0, >= 1.3.1)
77
+ connection_pool (>= 2.2.5)
78
+ drb
79
+ i18n (>= 1.6, < 2)
80
+ logger (>= 1.4.2)
81
+ minitest (>= 5.1)
82
+ securerandom (>= 0.3)
83
+ tzinfo (~> 2.0, >= 2.0.5)
84
+ uri (>= 0.13.1)
85
+ addressable (2.8.7)
86
+ public_suffix (>= 2.0.2, < 7.0)
87
+ base64 (0.2.0)
88
+ benchmark (0.4.0)
89
+ bigdecimal (3.1.9)
90
+ builder (3.3.0)
91
+ capybara (3.40.0)
92
+ addressable
93
+ matrix
94
+ mini_mime (>= 0.1.3)
95
+ nokogiri (~> 1.11)
96
+ rack (>= 1.6.0)
97
+ rack-test (>= 0.6.3)
98
+ regexp_parser (>= 1.5, < 3.0)
99
+ xpath (~> 3.2)
100
+ concurrent-ruby (1.3.5)
101
+ connection_pool (2.5.0)
102
+ crass (1.0.6)
103
+ date (3.4.1)
104
+ debug (1.10.0)
105
+ irb (~> 1.10)
106
+ reline (>= 0.3.8)
107
+ diff-lcs (1.6.0)
108
+ drb (2.2.1)
109
+ erubi (1.13.1)
110
+ faraday (2.12.2)
111
+ faraday-net_http (>= 2.0, < 3.5)
112
+ json
113
+ logger
114
+ faraday-net_http (3.4.0)
115
+ net-http (>= 0.5.0)
116
+ generator_spec (0.10.0)
117
+ activesupport (>= 3.0.0)
118
+ railties (>= 3.0.0)
119
+ globalid (1.2.1)
120
+ activesupport (>= 6.1)
121
+ hashie (5.0.0)
122
+ i18n (1.14.7)
123
+ concurrent-ruby (~> 1.0)
124
+ io-console (0.8.0)
125
+ irb (1.15.1)
126
+ pp (>= 0.6.0)
127
+ rdoc (>= 4.0.0)
128
+ reline (>= 0.4.2)
129
+ json (2.10.2)
130
+ jwt (2.10.1)
131
+ base64
132
+ logger (1.6.6)
133
+ loofah (2.24.0)
134
+ crass (~> 1.0.2)
135
+ nokogiri (>= 1.12.0)
136
+ mail (2.8.1)
137
+ mini_mime (>= 0.1.1)
138
+ net-imap
139
+ net-pop
140
+ net-smtp
141
+ marcel (1.0.4)
142
+ matrix (0.4.2)
143
+ mini_mime (1.1.5)
144
+ mini_portile2 (2.8.8)
145
+ minitest (5.25.5)
146
+ mutex_m (0.3.0)
147
+ net-http (0.6.0)
148
+ uri
149
+ net-imap (0.5.6)
150
+ date
151
+ net-protocol
152
+ net-pop (0.1.2)
153
+ net-protocol
154
+ net-protocol (0.2.2)
155
+ timeout
156
+ net-smtp (0.5.1)
157
+ net-protocol
158
+ nio4r (2.7.4)
159
+ nokogiri (1.18.4)
160
+ mini_portile2 (~> 2.8.2)
161
+ racc (~> 1.4)
162
+ nokogiri (1.18.4-arm64-darwin)
163
+ racc (~> 1.4)
164
+ omniauth (2.1.3)
165
+ hashie (>= 3.4.6)
166
+ rack (>= 2.2.3)
167
+ rack-protection
168
+ ostruct (0.6.1)
169
+ pp (0.6.2)
170
+ prettyprint
171
+ prettyprint (0.2.0)
172
+ psych (5.2.3)
173
+ date
174
+ stringio
175
+ public_suffix (6.0.1)
176
+ puma (6.6.0)
177
+ nio4r (~> 2.0)
178
+ racc (1.8.1)
179
+ rack (3.1.12)
180
+ rack-protection (4.1.1)
181
+ base64 (>= 0.1.0)
182
+ logger (>= 1.6.0)
183
+ rack (>= 3.0.0, < 4)
184
+ rack-session (2.1.0)
185
+ base64 (>= 0.1.0)
186
+ rack (>= 3.0.0)
187
+ rack-test (2.2.0)
188
+ rack (>= 1.3)
189
+ rackup (2.2.1)
190
+ rack (>= 3)
191
+ rails (8.0.2)
192
+ actioncable (= 8.0.2)
193
+ actionmailbox (= 8.0.2)
194
+ actionmailer (= 8.0.2)
195
+ actionpack (= 8.0.2)
196
+ actiontext (= 8.0.2)
197
+ actionview (= 8.0.2)
198
+ activejob (= 8.0.2)
199
+ activemodel (= 8.0.2)
200
+ activerecord (= 8.0.2)
201
+ activestorage (= 8.0.2)
202
+ activesupport (= 8.0.2)
203
+ bundler (>= 1.15.0)
204
+ railties (= 8.0.2)
205
+ rails-dom-testing (2.2.0)
206
+ activesupport (>= 5.0.0)
207
+ minitest
208
+ nokogiri (>= 1.6)
209
+ rails-html-sanitizer (1.6.2)
210
+ loofah (~> 2.21)
211
+ nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
212
+ railties (8.0.2)
213
+ actionpack (= 8.0.2)
214
+ activesupport (= 8.0.2)
215
+ irb (~> 1.13)
216
+ rackup (>= 1.0.0)
217
+ rake (>= 12.2)
218
+ thor (~> 1.0, >= 1.2.2)
219
+ zeitwerk (~> 2.6)
220
+ rake (13.2.1)
221
+ rdoc (6.12.0)
222
+ psych (>= 4.0.0)
223
+ regexp_parser (2.10.0)
224
+ reline (0.6.0)
225
+ io-console (~> 0.5)
226
+ rspec (3.13.0)
227
+ rspec-core (~> 3.13.0)
228
+ rspec-expectations (~> 3.13.0)
229
+ rspec-mocks (~> 3.13.0)
230
+ rspec-core (3.13.3)
231
+ rspec-support (~> 3.13.0)
232
+ rspec-expectations (3.13.3)
233
+ diff-lcs (>= 1.2.0, < 2.0)
234
+ rspec-support (~> 3.13.0)
235
+ rspec-mocks (3.13.2)
236
+ diff-lcs (>= 1.2.0, < 2.0)
237
+ rspec-support (~> 3.13.0)
238
+ rspec-rails (7.1.1)
239
+ actionpack (>= 7.0)
240
+ activesupport (>= 7.0)
241
+ railties (>= 7.0)
242
+ rspec-core (~> 3.13)
243
+ rspec-expectations (~> 3.13)
244
+ rspec-mocks (~> 3.13)
245
+ rspec-support (~> 3.13)
246
+ rspec-support (3.13.2)
247
+ securerandom (0.4.1)
248
+ sqlite3 (2.6.0)
249
+ mini_portile2 (~> 2.8.0)
250
+ sqlite3 (2.6.0-arm64-darwin)
251
+ stringio (3.1.5)
252
+ thor (1.3.2)
253
+ timeout (0.4.3)
254
+ tzinfo (2.0.6)
255
+ concurrent-ruby (~> 1.0)
256
+ uri (1.0.3)
257
+ useragent (0.16.11)
258
+ websocket-driver (0.7.7)
259
+ base64
260
+ websocket-extensions (>= 0.1.0)
261
+ websocket-extensions (0.1.5)
262
+ xpath (3.2.0)
263
+ nokogiri (~> 1.8)
264
+ zeitwerk (2.7.2)
265
+
266
+ PLATFORMS
267
+ arm64-darwin-24
268
+ ruby
269
+
270
+ DEPENDENCIES
271
+ bigdecimal
272
+ capybara
273
+ clavis!
274
+ debug
275
+ generator_spec
276
+ mutex_m
277
+ omniauth (~> 2.0)
278
+ ostruct
279
+ puma
280
+ rails (~> 8.0.0)
281
+ rspec (~> 3.0)
282
+ rspec-rails
283
+ sqlite3 (~> 2.1)
284
+
285
+ BUNDLED WITH
286
+ 2.6.6