rbacan 0.1.2 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1bed6419a2ee45db7cedf0d6d11bba4b0259f38fc4316233f800fbf1fb452d87
4
- data.tar.gz: b597bb84f6ed5c38b715c3e172a715513d6150d7738b89ce052a23bae6605b44
3
+ metadata.gz: 2630f72887158aefbf75a65ce46ba0737f33c8bae124dd0a1df0ff5fc8593119
4
+ data.tar.gz: 79b900d3f3364ac4c3a2992af568758bd215b03c375d2eddb55561decbb7273b
5
5
  SHA512:
6
- metadata.gz: f9a6656415e6fc5cf803df441e4a9bc87dde63ac0ea71fbea9160c03fecc0c0aaca2f3b198ed93078f84f60d6bbdc883a9f7fbd9cac82f51aa0e5cc078ccb7a2
7
- data.tar.gz: '03393a91233e130ce19efce5b0ec30124be0a46d31b81a5ecf0abd06c3355abf74e9a04a433012692aa711705479f8e7bf2d04172f83358fda08e0fbd43af5ce'
6
+ metadata.gz: 38232503a68a16c6a1b045e8a0dc9988c1a75bc992ecd5156991b35727993b85b496cb907f84c25c4a91758191290cd58f096c740a3a8ea2110b603d2b7d84e3
7
+ data.tar.gz: ebb7c23f339156e260f00b57995d7c0de754163f6c8c680064bd67867a1347f16c090bbe97c787c9ab98988b8b76ae8c75fc2d3622b830b362ab0f35c8f649d7
data/CHANGELOG.md ADDED
@@ -0,0 +1,50 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [0.2.0] - 2026-03-31
6
+
7
+ ### Added
8
+
9
+ - `Rbacan::Authorization` controller concern with `authorize!` and `authorize_role!` methods
10
+ - `Rbacan::NotAuthorized` exception class with readable messages (includes the missing permission or role name)
11
+ - `Rbacan::ViewHelpers` — `authorized?(permission) { }` block helper, auto-included into ActionView
12
+ - `Rbacan::RouteConstraint` — restrict route namespaces by role or permission via Warden/session
13
+ - `has_role?(role)` — check if a user has a specific role
14
+ - `has_any_role?(*roles)` — check if a user has at least one of the listed roles
15
+ - `can_all?(*permissions)` — check if a user has every listed permission (single query)
16
+ - `User.with_role(role)` scope — query all users with a given role
17
+ - `User.with_permission(permission)` scope — query all users who have a given permission via any role
18
+ - `unauthorized_handler` config option (`:raise`, `:redirect`, or a callable lambda/proc)
19
+ - `unauthorized_redirect_path` config option used when `unauthorized_handler` is `:redirect`
20
+ - DB-level unique indexes on `roles.name` and `permissions.name`
21
+ - Composite unique indexes on `role_permissions (role_id, permission_id)` and `user_roles (user_id, role_id)`
22
+ - Full RSpec test suite (29 examples) with in-memory SQLite setup and transaction rollback isolation
23
+
24
+ ### Fixed
25
+
26
+ - `assign_role` was using `find_or_initialize_by` and never persisting the new `UserRole` record — fixed to `find_or_create_by`
27
+ - `Rbacan` module methods (`create_role`, `create_permission`, `assign_permission_to_role`) were calling `.create` on a String class name, raising `NoMethodError` — fixed with `.constantize`
28
+ - `remove_role` was hardcoding `user_id:` in a raw `where` clause — now uses the scoped `user_roles` association
29
+ - `can?` was issuing two queries (one to find the permission, one to check the join) — collapsed into a single `EXISTS` query
30
+ - `RolesAndPermissions` seed methods used `create` which would raise on re-runs — changed to `find_or_create_by`
31
+ - Seed file template referenced an undefined local variable `role_name` — fixed with commented examples
32
+ - Migration files were locked to `ActiveRecord::Migration[5.2]` — now use `current_version` dynamically
33
+
34
+ ### Changed
35
+
36
+ - `rails >= 4.2` dependency bumped to `>= 5.2` (required for `Migration.current_version`)
37
+ - `rake ~> 10.0` dev dependency bumped to `~> 13.0` (Rake 10 is incompatible with Ruby 3+)
38
+ - Initializer template updated to document all available configuration options
39
+ - README fully rewritten to cover all features
40
+
41
+ ---
42
+
43
+ ## [0.1.4] - (initial release)
44
+
45
+ - Role and permission models with migrations
46
+ - `assign_role` / `remove_role` on user
47
+ - `can?(permission)` permission check
48
+ - `rails generate rbacan:install` generator
49
+ - `Rbacan::RolesAndPermissions` seed helpers
50
+ - Configurable `permittable_class`
data/Gemfile.lock CHANGED
@@ -1,147 +1,319 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rbacan (0.1.2)
5
- rails (>= 4.2)
4
+ rbacan (0.2.0)
5
+ rails (>= 5.2)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- actioncable (5.2.3)
11
- actionpack (= 5.2.3)
10
+ action_text-trix (2.1.18)
11
+ railties
12
+ actioncable (8.1.3)
13
+ actionpack (= 8.1.3)
14
+ activesupport (= 8.1.3)
12
15
  nio4r (~> 2.0)
13
16
  websocket-driver (>= 0.6.1)
14
- actionmailer (5.2.3)
15
- actionpack (= 5.2.3)
16
- actionview (= 5.2.3)
17
- activejob (= 5.2.3)
18
- mail (~> 2.5, >= 2.5.4)
19
- rails-dom-testing (~> 2.0)
20
- actionpack (5.2.3)
21
- actionview (= 5.2.3)
22
- activesupport (= 5.2.3)
23
- rack (~> 2.0)
17
+ zeitwerk (~> 2.6)
18
+ actionmailbox (8.1.3)
19
+ actionpack (= 8.1.3)
20
+ activejob (= 8.1.3)
21
+ activerecord (= 8.1.3)
22
+ activestorage (= 8.1.3)
23
+ activesupport (= 8.1.3)
24
+ mail (>= 2.8.0)
25
+ actionmailer (8.1.3)
26
+ actionpack (= 8.1.3)
27
+ actionview (= 8.1.3)
28
+ activejob (= 8.1.3)
29
+ activesupport (= 8.1.3)
30
+ mail (>= 2.8.0)
31
+ rails-dom-testing (~> 2.2)
32
+ actionpack (8.1.3)
33
+ actionview (= 8.1.3)
34
+ activesupport (= 8.1.3)
35
+ nokogiri (>= 1.8.5)
36
+ rack (>= 2.2.4)
37
+ rack-session (>= 1.0.1)
24
38
  rack-test (>= 0.6.3)
25
- rails-dom-testing (~> 2.0)
26
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
27
- actionview (5.2.3)
28
- activesupport (= 5.2.3)
39
+ rails-dom-testing (~> 2.2)
40
+ rails-html-sanitizer (~> 1.6)
41
+ useragent (~> 0.16)
42
+ actiontext (8.1.3)
43
+ action_text-trix (~> 2.1.15)
44
+ actionpack (= 8.1.3)
45
+ activerecord (= 8.1.3)
46
+ activestorage (= 8.1.3)
47
+ activesupport (= 8.1.3)
48
+ globalid (>= 0.6.0)
49
+ nokogiri (>= 1.8.5)
50
+ actionview (8.1.3)
51
+ activesupport (= 8.1.3)
29
52
  builder (~> 3.1)
30
- erubi (~> 1.4)
31
- rails-dom-testing (~> 2.0)
32
- rails-html-sanitizer (~> 1.0, >= 1.0.3)
33
- activejob (5.2.3)
34
- activesupport (= 5.2.3)
53
+ erubi (~> 1.11)
54
+ rails-dom-testing (~> 2.2)
55
+ rails-html-sanitizer (~> 1.6)
56
+ activejob (8.1.3)
57
+ activesupport (= 8.1.3)
35
58
  globalid (>= 0.3.6)
36
- activemodel (5.2.3)
37
- activesupport (= 5.2.3)
38
- activerecord (5.2.3)
39
- activemodel (= 5.2.3)
40
- activesupport (= 5.2.3)
41
- arel (>= 9.0)
42
- activestorage (5.2.3)
43
- actionpack (= 5.2.3)
44
- activerecord (= 5.2.3)
45
- marcel (~> 0.3.1)
46
- activesupport (5.2.3)
47
- concurrent-ruby (~> 1.0, >= 1.0.2)
48
- i18n (>= 0.7, < 2)
49
- minitest (~> 5.1)
50
- tzinfo (~> 1.1)
51
- arel (9.0.0)
52
- builder (3.2.3)
53
- concurrent-ruby (1.1.5)
54
- crass (1.0.4)
55
- diff-lcs (1.3)
56
- erubi (1.8.0)
57
- generator_spec (0.9.4)
59
+ activemodel (8.1.3)
60
+ activesupport (= 8.1.3)
61
+ activerecord (8.1.3)
62
+ activemodel (= 8.1.3)
63
+ activesupport (= 8.1.3)
64
+ timeout (>= 0.4.0)
65
+ activestorage (8.1.3)
66
+ actionpack (= 8.1.3)
67
+ activejob (= 8.1.3)
68
+ activerecord (= 8.1.3)
69
+ activesupport (= 8.1.3)
70
+ marcel (~> 1.0)
71
+ activesupport (8.1.3)
72
+ base64
73
+ bigdecimal
74
+ concurrent-ruby (~> 1.0, >= 1.3.1)
75
+ connection_pool (>= 2.2.5)
76
+ drb
77
+ i18n (>= 1.6, < 2)
78
+ json
79
+ logger (>= 1.4.2)
80
+ minitest (>= 5.1)
81
+ securerandom (>= 0.3)
82
+ tzinfo (~> 2.0, >= 2.0.5)
83
+ uri (>= 0.13.1)
84
+ base64 (0.3.0)
85
+ bigdecimal (4.1.0)
86
+ builder (3.3.0)
87
+ concurrent-ruby (1.3.6)
88
+ connection_pool (3.0.2)
89
+ crass (1.0.6)
90
+ date (3.5.1)
91
+ diff-lcs (1.6.2)
92
+ drb (2.2.3)
93
+ erb (6.0.2)
94
+ erubi (1.13.1)
95
+ generator_spec (0.9.5)
58
96
  activesupport (>= 3.0.0)
59
97
  railties (>= 3.0.0)
60
- globalid (0.4.2)
61
- activesupport (>= 4.2.0)
62
- i18n (1.6.0)
98
+ globalid (1.3.0)
99
+ activesupport (>= 6.1)
100
+ i18n (1.14.8)
63
101
  concurrent-ruby (~> 1.0)
64
- loofah (2.2.3)
102
+ io-console (0.8.2)
103
+ irb (1.17.0)
104
+ pp (>= 0.6.0)
105
+ prism (>= 1.3.0)
106
+ rdoc (>= 4.0.0)
107
+ reline (>= 0.4.2)
108
+ json (2.19.3)
109
+ logger (1.7.0)
110
+ loofah (2.25.1)
65
111
  crass (~> 1.0.2)
66
- nokogiri (>= 1.5.9)
67
- mail (2.7.1)
112
+ nokogiri (>= 1.12.0)
113
+ mail (2.9.0)
114
+ logger
68
115
  mini_mime (>= 0.1.1)
69
- marcel (0.3.3)
70
- mimemagic (~> 0.3.2)
71
- method_source (0.9.2)
72
- mimemagic (0.3.3)
73
- mini_mime (1.0.2)
74
- mini_portile2 (2.4.0)
75
- minitest (5.11.3)
76
- nio4r (2.5.1)
77
- nokogiri (1.10.4)
78
- mini_portile2 (~> 2.4.0)
79
- rack (2.0.7)
80
- rack-test (1.1.0)
81
- rack (>= 1.0, < 3)
82
- rails (5.2.3)
83
- actioncable (= 5.2.3)
84
- actionmailer (= 5.2.3)
85
- actionpack (= 5.2.3)
86
- actionview (= 5.2.3)
87
- activejob (= 5.2.3)
88
- activemodel (= 5.2.3)
89
- activerecord (= 5.2.3)
90
- activestorage (= 5.2.3)
91
- activesupport (= 5.2.3)
92
- bundler (>= 1.3.0)
93
- railties (= 5.2.3)
94
- sprockets-rails (>= 2.0.0)
95
- rails-dom-testing (2.0.3)
96
- activesupport (>= 4.2.0)
116
+ net-imap
117
+ net-pop
118
+ net-smtp
119
+ marcel (1.1.0)
120
+ mini_mime (1.1.5)
121
+ mini_portile2 (2.8.9)
122
+ minitest (6.0.2)
123
+ drb (~> 2.0)
124
+ prism (~> 1.5)
125
+ net-imap (0.6.3)
126
+ date
127
+ net-protocol
128
+ net-pop (0.1.2)
129
+ net-protocol
130
+ net-protocol (0.2.2)
131
+ timeout
132
+ net-smtp (0.5.1)
133
+ net-protocol
134
+ nio4r (2.7.5)
135
+ nokogiri (1.19.2)
136
+ mini_portile2 (~> 2.8.2)
137
+ racc (~> 1.4)
138
+ nokogiri (1.19.2-x86_64-linux-gnu)
139
+ racc (~> 1.4)
140
+ pp (0.6.3)
141
+ prettyprint
142
+ prettyprint (0.2.0)
143
+ prism (1.9.0)
144
+ psych (5.3.1)
145
+ date
146
+ stringio
147
+ racc (1.8.1)
148
+ rack (3.2.5)
149
+ rack-session (2.1.1)
150
+ base64 (>= 0.1.0)
151
+ rack (>= 3.0.0)
152
+ rack-test (2.2.0)
153
+ rack (>= 1.3)
154
+ rackup (2.3.1)
155
+ rack (>= 3)
156
+ rails (8.1.3)
157
+ actioncable (= 8.1.3)
158
+ actionmailbox (= 8.1.3)
159
+ actionmailer (= 8.1.3)
160
+ actionpack (= 8.1.3)
161
+ actiontext (= 8.1.3)
162
+ actionview (= 8.1.3)
163
+ activejob (= 8.1.3)
164
+ activemodel (= 8.1.3)
165
+ activerecord (= 8.1.3)
166
+ activestorage (= 8.1.3)
167
+ activesupport (= 8.1.3)
168
+ bundler (>= 1.15.0)
169
+ railties (= 8.1.3)
170
+ rails-dom-testing (2.3.0)
171
+ activesupport (>= 5.0.0)
172
+ minitest
97
173
  nokogiri (>= 1.6)
98
- rails-html-sanitizer (1.2.0)
99
- loofah (~> 2.2, >= 2.2.2)
100
- railties (5.2.3)
101
- actionpack (= 5.2.3)
102
- activesupport (= 5.2.3)
103
- method_source
104
- rake (>= 0.8.7)
105
- thor (>= 0.19.0, < 2.0)
106
- rake (10.5.0)
107
- rspec (3.8.0)
108
- rspec-core (~> 3.8.0)
109
- rspec-expectations (~> 3.8.0)
110
- rspec-mocks (~> 3.8.0)
111
- rspec-core (3.8.2)
112
- rspec-support (~> 3.8.0)
113
- rspec-expectations (3.8.4)
174
+ rails-html-sanitizer (1.7.0)
175
+ loofah (~> 2.25)
176
+ 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)
177
+ railties (8.1.3)
178
+ actionpack (= 8.1.3)
179
+ activesupport (= 8.1.3)
180
+ irb (~> 1.13)
181
+ rackup (>= 1.0.0)
182
+ rake (>= 12.2)
183
+ thor (~> 1.0, >= 1.2.2)
184
+ tsort (>= 0.2)
185
+ zeitwerk (~> 2.6)
186
+ rake (13.3.1)
187
+ rdoc (7.2.0)
188
+ erb
189
+ psych (>= 4.0.0)
190
+ tsort
191
+ reline (0.6.3)
192
+ io-console (~> 0.5)
193
+ rspec (3.13.2)
194
+ rspec-core (~> 3.13.0)
195
+ rspec-expectations (~> 3.13.0)
196
+ rspec-mocks (~> 3.13.0)
197
+ rspec-core (3.13.6)
198
+ rspec-support (~> 3.13.0)
199
+ rspec-expectations (3.13.5)
114
200
  diff-lcs (>= 1.2.0, < 2.0)
115
- rspec-support (~> 3.8.0)
116
- rspec-mocks (3.8.1)
201
+ rspec-support (~> 3.13.0)
202
+ rspec-mocks (3.13.8)
117
203
  diff-lcs (>= 1.2.0, < 2.0)
118
- rspec-support (~> 3.8.0)
119
- rspec-support (3.8.2)
120
- sprockets (3.7.2)
204
+ rspec-support (~> 3.13.0)
205
+ rspec-support (3.13.7)
206
+ securerandom (0.4.1)
207
+ sqlite3 (2.9.2)
208
+ mini_portile2 (~> 2.8.0)
209
+ sqlite3 (2.9.2-x86_64-linux-gnu)
210
+ stringio (3.2.0)
211
+ thor (1.5.0)
212
+ timeout (0.6.1)
213
+ tsort (0.2.0)
214
+ tzinfo (2.0.6)
121
215
  concurrent-ruby (~> 1.0)
122
- rack (> 1, < 3)
123
- sprockets-rails (3.2.1)
124
- actionpack (>= 4.0)
125
- activesupport (>= 4.0)
126
- sprockets (>= 3.0.0)
127
- thor (0.20.3)
128
- thread_safe (0.3.6)
129
- tzinfo (1.2.5)
130
- thread_safe (~> 0.1)
131
- websocket-driver (0.7.1)
216
+ uri (1.1.1)
217
+ useragent (0.16.11)
218
+ websocket-driver (0.8.0)
219
+ base64
132
220
  websocket-extensions (>= 0.1.0)
133
- websocket-extensions (0.1.4)
221
+ websocket-extensions (0.1.5)
222
+ zeitwerk (2.7.5)
134
223
 
135
224
  PLATFORMS
136
225
  ruby
226
+ x86_64-linux
137
227
 
138
228
  DEPENDENCIES
139
- bundler (~> 2.0)
229
+ activerecord (>= 5.2)
230
+ bundler (>= 2.0)
140
231
  generator_spec (~> 0.9.4)
141
- railties (~> 5.2, >= 5.2.3)
142
- rake (~> 10.0)
232
+ railties (>= 5.2)
233
+ rake (~> 13.0)
143
234
  rbacan!
144
235
  rspec (~> 3.0)
236
+ sqlite3 (>= 1.4)
237
+
238
+ CHECKSUMS
239
+ action_text-trix (2.1.18) sha256=3fdb83f8bff4145d098be283cdd47ac41caf5110bfa6df4695ed7127d7fb3642
240
+ actioncable (8.1.3) sha256=e5bc7f75e44e6a22de29c4f43176927c3a9ce4824464b74ed18d8226e75a80f0
241
+ actionmailbox (8.1.3) sha256=df7da474eaa0e70df4ed5a6fef66eb3b3b0f2dbf7f14518deee8d77f1b4aae59
242
+ actionmailer (8.1.3) sha256=831f724891bb70d0aaa4d76581a6321124b6a752cb655c9346aae5479318448d
243
+ actionpack (8.1.3) sha256=af998cae4d47c5d581a2cc363b5c77eb718b7c4b45748d81b1887b25621c29a3
244
+ actiontext (8.1.3) sha256=d291019c00e1ea9e6463011fa214f6081a56d7b9a1d224e7d3f6384c1dafc7d2
245
+ actionview (8.1.3) sha256=1347c88c7f3edb38100c5ce0e9fb5e62d7755f3edc1b61cce2eb0b2c6ea2fd5d
246
+ activejob (8.1.3) sha256=a149b1766aa8204c3c3da7309e4becd40fcd5529c348cffbf6c9b16b565fe8d3
247
+ activemodel (8.1.3) sha256=90c05cbe4cef3649b8f79f13016191ea94c4525ce4a5c0fb7ef909c4b91c8219
248
+ activerecord (8.1.3) sha256=8003be7b2466ba0a2a670e603eeb0a61dd66058fccecfc49901e775260ac70ab
249
+ activestorage (8.1.3) sha256=0564ce9309143951a67615e1bb4e090ee54b8befed417133cae614479b46384d
250
+ activesupport (8.1.3) sha256=21a5e0dfbd4c3ddd9e1317ec6a4d782fa226e7867dc70b0743acda81a1dca20e
251
+ base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b
252
+ bigdecimal (4.1.0) sha256=6dc07767aa3dc456ccd48e7ae70a07b474e9afd7c5bc576f80bd6da5c8dd6cae
253
+ builder (3.3.0) sha256=497918d2f9dca528fdca4b88d84e4ef4387256d984b8154e9d5d3fe5a9c8835f
254
+ concurrent-ruby (1.3.6) sha256=6b56837e1e7e5292f9864f34b69c5a2cbc75c0cf5338f1ce9903d10fa762d5ab
255
+ connection_pool (3.0.2) sha256=33fff5ba71a12d2aa26cb72b1db8bba2a1a01823559fb01d29eb74c286e62e0a
256
+ crass (1.0.6) sha256=dc516022a56e7b3b156099abc81b6d2b08ea1ed12676ac7a5657617f012bd45d
257
+ date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
258
+ diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
259
+ drb (2.2.3) sha256=0b00d6fdb50995fe4a45dea13663493c841112e4068656854646f418fda13373
260
+ erb (6.0.2) sha256=9fe6264d44f79422c87490a1558479bd0e7dad4dd0e317656e67ea3077b5242b
261
+ erubi (1.13.1) sha256=a082103b0885dbc5ecf1172fede897f9ebdb745a4b97a5e8dc63953db1ee4ad9
262
+ generator_spec (0.9.5) sha256=eb14b6ec4f2f8ba36c81f0ddb28f63291654697a5f94064aad6767f82d469619
263
+ globalid (1.3.0) sha256=05c639ad6eb4594522a0b07983022f04aa7254626ab69445a0e493aa3786ff11
264
+ i18n (1.14.8) sha256=285778639134865c5e0f6269e0b818256017e8cde89993fdfcbfb64d088824a5
265
+ io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
266
+ irb (1.17.0) sha256=168c4ddb93d8a361a045c41d92b2952c7a118fa73f23fe14e55609eb7a863aae
267
+ json (2.19.3) sha256=289b0bb53052a1fa8c34ab33cc750b659ba14a5c45f3fcf4b18762dc67c78646
268
+ logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
269
+ loofah (2.25.1) sha256=d436c73dbd0c1147b16c4a41db097942d217303e1f7728704b37e4df9f6d2e04
270
+ mail (2.9.0) sha256=6fa6673ecd71c60c2d996260f9ee3dd387d4673b8169b502134659ece6d34941
271
+ marcel (1.1.0) sha256=fdcfcfa33cc52e93c4308d40e4090a5d4ea279e160a7f6af988260fa970e0bee
272
+ mini_mime (1.1.5) sha256=8681b7e2e4215f2a159f9400b5816d85e9d8c6c6b491e96a12797e798f8bccef
273
+ mini_portile2 (2.8.9) sha256=0cd7c7f824e010c072e33f68bc02d85a00aeb6fce05bb4819c03dfd3c140c289
274
+ minitest (6.0.2) sha256=db6e57956f6ecc6134683b4c87467d6dd792323c7f0eea7b93f66bd284adbc3d
275
+ net-imap (0.6.3) sha256=9bab75f876596d09ee7bf911a291da478e0cd6badc54dfb82874855ccc82f2ad
276
+ net-pop (0.1.2) sha256=848b4e982013c15b2f0382792268763b748cce91c9e91e36b0f27ed26420dff3
277
+ net-protocol (0.2.2) sha256=aa73e0cba6a125369de9837b8d8ef82a61849360eba0521900e2c3713aa162a8
278
+ net-smtp (0.5.1) sha256=ed96a0af63c524fceb4b29b0d352195c30d82dd916a42f03c62a3a70e5b70736
279
+ nio4r (2.7.5) sha256=6c90168e48fb5f8e768419c93abb94ba2b892a1d0602cb06eef16d8b7df1dca1
280
+ nokogiri (1.19.2) sha256=38fdd8b59db3d5ea9e7dfb14702e882b9bf819198d5bf976f17ebce12c481756
281
+ nokogiri (1.19.2-x86_64-linux-gnu) sha256=fa8feca882b73e871a9845f3817a72e9734c8e974bdc4fbad6e4bc6e8076b94f
282
+ pp (0.6.3) sha256=2951d514450b93ccfeb1df7d021cae0da16e0a7f95ee1e2273719669d0ab9df6
283
+ prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
284
+ prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
285
+ psych (5.3.1) sha256=eb7a57cef10c9d70173ff74e739d843ac3b2c019a003de48447b2963d81b1974
286
+ racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
287
+ rack (3.2.5) sha256=4cbd0974c0b79f7a139b4812004a62e4c60b145cba76422e288ee670601ed6d3
288
+ rack-session (2.1.1) sha256=0b6dc07dea7e4b583f58a48e8b806d4c9f1c6c9214ebc202ec94562cbea2e4e9
289
+ rack-test (2.2.0) sha256=005a36692c306ac0b4a9350355ee080fd09ddef1148a5f8b2ac636c720f5c463
290
+ rackup (2.3.1) sha256=6c79c26753778e90983761d677a48937ee3192b3ffef6bc963c0950f94688868
291
+ rails (8.1.3) sha256=6d017ba5348c98fc909753a8169b21d44de14d2a0b92d140d1a966834c3c9cd3
292
+ rails-dom-testing (2.3.0) sha256=8acc7953a7b911ca44588bf08737bc16719f431a1cc3091a292bca7317925c1d
293
+ rails-html-sanitizer (1.7.0) sha256=28b145cceaf9cc214a9874feaa183c3acba036c9592b19886e0e45efc62b1e89
294
+ railties (8.1.3) sha256=913eb0e0cb520aac687ffd74916bd726d48fa21f47833c6292576ef6a286de22
295
+ rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c
296
+ rbacan (0.2.0)
297
+ rdoc (7.2.0) sha256=8650f76cd4009c3b54955eb5d7e3a075c60a57276766ebf36f9085e8c9f23192
298
+ reline (0.6.3) sha256=1198b04973565b36ec0f11542ab3f5cfeeec34823f4e54cebde90968092b1835
299
+ rspec (3.13.2) sha256=206284a08ad798e61f86d7ca3e376718d52c0bc944626b2349266f239f820587
300
+ rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d
301
+ rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836
302
+ rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47
303
+ rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c
304
+ securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1
305
+ sqlite3 (2.9.2) sha256=86814150714b6b06a328d083f46408e7a4a83b5f0a9673ed934ee3a1cb7a73b1
306
+ sqlite3 (2.9.2-x86_64-linux-gnu) sha256=dce83ffcb7e72f9f7aeb6e5404f15d277a45332fe18ccce8a8b3ed51e8d23aee
307
+ stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
308
+ thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
309
+ timeout (0.6.1) sha256=78f57368a7e7bbadec56971f78a3f5ecbcfb59b7fcbb0a3ed6ddc08a5094accb
310
+ tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
311
+ tzinfo (2.0.6) sha256=8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b
312
+ uri (1.1.1) sha256=379fa58d27ffb1387eaada68c749d1426738bd0f654d812fcc07e7568f5c57c6
313
+ useragent (0.16.11) sha256=700e6413ad4bb954bb63547fa098dddf7b0ebe75b40cc6f93b8d54255b173844
314
+ websocket-driver (0.8.0) sha256=ed0dba4b943c22f17f9a734817e808bc84cdce6a7e22045f5315aa57676d4962
315
+ websocket-extensions (0.1.5) sha256=1c6ba63092cda343eb53fc657110c71c754c56484aad42578495227d717a8241
316
+ zeitwerk (2.7.5) sha256=d8da92128c09ea6ec62c949011b00ed4a20242b255293dd66bf41545398f73dd
145
317
 
146
318
  BUNDLED WITH
147
- 2.0.2
319
+ 4.0.9