pundit 2.3.0 → 2.3.2

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.
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "simplecov"
4
- SimpleCov.start do
5
- add_filter "/spec/"
3
+ if ENV["COVERAGE"]
4
+ require "simplecov"
5
+ SimpleCov.start do
6
+ add_filter "/spec/"
7
+ end
6
8
  end
7
9
 
8
10
  require "pundit"
@@ -16,13 +18,56 @@ require "active_support/core_ext"
16
18
  require "active_model/naming"
17
19
  require "action_controller/metal/strong_parameters"
18
20
 
19
- class PostPolicy < Struct.new(:user, :post)
20
- class Scope < Struct.new(:user, :scope)
21
+ module InstanceTracking
22
+ module ClassMethods
23
+ def instances
24
+ @instances || 0
25
+ end
26
+
27
+ attr_writer :instances
28
+ end
29
+
30
+ def self.prepended(other)
31
+ other.extend(ClassMethods)
32
+ end
33
+
34
+ def initialize(*args, **kwargs, &block)
35
+ self.class.instances += 1
36
+ super(*args, **kwargs, &block)
37
+ end
38
+ end
39
+
40
+ class BasePolicy
41
+ prepend InstanceTracking
42
+
43
+ class BaseScope
44
+ prepend InstanceTracking
45
+
46
+ def initialize(user, scope)
47
+ @user = user
48
+ @scope = scope
49
+ end
50
+
51
+ attr_reader :user, :scope
52
+ end
53
+
54
+ def initialize(user, record)
55
+ @user = user
56
+ @record = record
57
+ end
58
+
59
+ attr_reader :user, :record
60
+ end
61
+
62
+ class PostPolicy < BasePolicy
63
+ class Scope < BaseScope
21
64
  def resolve
22
65
  scope.published
23
66
  end
24
67
  end
25
68
 
69
+ alias post record
70
+
26
71
  def update?
27
72
  post.user == user
28
73
  end
@@ -48,7 +93,13 @@ class PostPolicy < Struct.new(:user, :post)
48
93
  end
49
94
  end
50
95
 
51
- class Post < Struct.new(:user)
96
+ class Post
97
+ def initialize(user = nil)
98
+ @user = user
99
+ end
100
+
101
+ attr_reader :user
102
+
52
103
  def self.published
53
104
  :published
54
105
  end
@@ -67,7 +118,7 @@ class Post < Struct.new(:user)
67
118
  end
68
119
 
69
120
  module Customer
70
- class Post < Post
121
+ class Post < ::Post
71
122
  def model_name
72
123
  OpenStruct.new(param_key: "customer_post")
73
124
  end
@@ -90,16 +141,18 @@ class CommentScope
90
141
  end
91
142
  end
92
143
 
93
- class CommentPolicy < Struct.new(:user, :comment)
94
- class Scope < Struct.new(:user, :scope)
144
+ class CommentPolicy < BasePolicy
145
+ class Scope < BaseScope
95
146
  def resolve
96
147
  CommentScope.new(scope)
97
148
  end
98
149
  end
150
+
151
+ alias comment record
99
152
  end
100
153
 
101
- class PublicationPolicy < Struct.new(:user, :publication)
102
- class Scope < Struct.new(:user, :scope)
154
+ class PublicationPolicy < BasePolicy
155
+ class Scope < BaseScope
103
156
  def resolve
104
157
  scope.published
105
158
  end
@@ -130,7 +183,9 @@ end
130
183
 
131
184
  class Article; end
132
185
 
133
- class BlogPolicy < Struct.new(:user, :blog); end
186
+ class BlogPolicy < BasePolicy
187
+ alias blog record
188
+ end
134
189
 
135
190
  class Blog; end
136
191
 
@@ -140,7 +195,7 @@ class ArtificialBlog < Blog
140
195
  end
141
196
  end
142
197
 
143
- class ArticleTagOtherNamePolicy < Struct.new(:user, :tag)
198
+ class ArticleTagOtherNamePolicy < BasePolicy
144
199
  def show?
145
200
  true
146
201
  end
@@ -148,6 +203,8 @@ class ArticleTagOtherNamePolicy < Struct.new(:user, :tag)
148
203
  def destroy?
149
204
  false
150
205
  end
206
+
207
+ alias tag record
151
208
  end
152
209
 
153
210
  class ArticleTag
@@ -156,33 +213,41 @@ class ArticleTag
156
213
  end
157
214
  end
158
215
 
159
- class CriteriaPolicy < Struct.new(:user, :criteria); end
216
+ class CriteriaPolicy < BasePolicy
217
+ alias criteria record
218
+ end
160
219
 
161
220
  module Project
162
- class CommentPolicy < Struct.new(:user, :comment)
163
- def update?
164
- true
165
- end
166
-
167
- class Scope < Struct.new(:user, :scope)
221
+ class CommentPolicy < BasePolicy
222
+ class Scope < BaseScope
168
223
  def resolve
169
224
  scope
170
225
  end
171
226
  end
227
+
228
+ def update?
229
+ true
230
+ end
231
+
232
+ alias comment record
172
233
  end
173
234
 
174
- class CriteriaPolicy < Struct.new(:user, :criteria); end
235
+ class CriteriaPolicy < BasePolicy
236
+ alias criteria record
237
+ end
175
238
 
176
- class PostPolicy < Struct.new(:user, :post)
177
- class Scope < Struct.new(:user, :scope)
239
+ class PostPolicy < BasePolicy
240
+ class Scope < BaseScope
178
241
  def resolve
179
242
  scope.read
180
243
  end
181
244
  end
245
+
246
+ alias post record
182
247
  end
183
248
 
184
249
  module Admin
185
- class CommentPolicy < Struct.new(:user, :comment)
250
+ class CommentPolicy < BasePolicy
186
251
  def update?
187
252
  true
188
253
  end
@@ -194,7 +259,7 @@ module Project
194
259
  end
195
260
  end
196
261
 
197
- class DenierPolicy < Struct.new(:user, :record)
262
+ class DenierPolicy < BasePolicy
198
263
  def update?
199
264
  false
200
265
  end
@@ -216,7 +281,7 @@ class Controller
216
281
  end
217
282
  end
218
283
 
219
- class NilClassPolicy < Struct.new(:user, :record)
284
+ class NilClassPolicy < BasePolicy
220
285
  class Scope
221
286
  def initialize(*)
222
287
  raise Pundit::NotDefinedError, "Cannot scope NilClass"
@@ -245,8 +310,8 @@ class Thread
245
310
  def self.all; end
246
311
  end
247
312
 
248
- class ThreadPolicy < Struct.new(:user, :thread)
249
- class Scope < Struct.new(:user, :scope)
313
+ class ThreadPolicy < BasePolicy
314
+ class Scope < BaseScope
250
315
  def resolve
251
316
  # deliberate wrong useage of the method
252
317
  scope.all(:unvalid, :parameters)
@@ -254,22 +319,34 @@ class ThreadPolicy < Struct.new(:user, :thread)
254
319
  end
255
320
  end
256
321
 
257
- class PostFourFiveSix < Struct.new(:user); end
322
+ class PostFourFiveSix
323
+ def initialize(user)
324
+ @user = user
325
+ end
326
+
327
+ attr_reader(:user)
328
+ end
258
329
 
259
330
  class CommentFourFiveSix; extend ActiveModel::Naming; end
260
331
 
261
332
  module ProjectOneTwoThree
262
- class CommentFourFiveSixPolicy < Struct.new(:user, :post); end
333
+ class CommentFourFiveSixPolicy < BasePolicy; end
263
334
 
264
- class CriteriaFourFiveSixPolicy < Struct.new(:user, :criteria); end
335
+ class CriteriaFourFiveSixPolicy < BasePolicy; end
265
336
 
266
- class PostFourFiveSixPolicy < Struct.new(:user, :post); end
337
+ class PostFourFiveSixPolicy < BasePolicy; end
267
338
 
268
- class TagFourFiveSix < Struct.new(:user); end
339
+ class TagFourFiveSix
340
+ def initialize(user)
341
+ @user = user
342
+ end
343
+
344
+ attr_reader(:user)
345
+ end
269
346
 
270
- class TagFourFiveSixPolicy < Struct.new(:user, :tag); end
347
+ class TagFourFiveSixPolicy < BasePolicy; end
271
348
 
272
349
  class AvatarFourFiveSix; extend ActiveModel::Naming; end
273
350
 
274
- class AvatarFourFiveSixPolicy < Struct.new(:user, :avatar); end
351
+ class AvatarFourFiveSixPolicy < BasePolicy; end
275
352
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pundit
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Nicklas
8
8
  - Varvet AB
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-12-19 00:00:00.000000000 Z
12
+ date: 2024-05-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -127,16 +127,16 @@ dependencies:
127
127
  name: rubocop
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
- - - '='
130
+ - - ">="
131
131
  - !ruby/object:Gem::Version
132
- version: 1.24.0
132
+ version: '0'
133
133
  type: :development
134
134
  prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
- - - '='
137
+ - - ">="
138
138
  - !ruby/object:Gem::Version
139
- version: 1.24.0
139
+ version: '0'
140
140
  - !ruby/object:Gem::Dependency
141
141
  name: simplecov
142
142
  requirement: !ruby/object:Gem::Requirement
@@ -168,14 +168,17 @@ dependencies:
168
168
  description: Object oriented authorization for Rails applications
169
169
  email:
170
170
  - jonas.nicklas@gmail.com
171
- - dev@elabs.se
171
+ - info@varvet.com
172
172
  executables: []
173
173
  extensions: []
174
174
  extra_rdoc_files: []
175
175
  files:
176
+ - ".github/PULL_REQUEST_TEMPLATE/gem_release_template.md"
177
+ - ".github/PULL_REQUEST_TEMPLATE/pull_request_template.md"
178
+ - ".github/workflows/main.yml"
179
+ - ".github/workflows/push_gem.yml"
176
180
  - ".gitignore"
177
181
  - ".rubocop.yml"
178
- - ".travis.yml"
179
182
  - ".yardopts"
180
183
  - CHANGELOG.md
181
184
  - CODE_OF_CONDUCT.md
@@ -184,6 +187,7 @@ files:
184
187
  - LICENSE.txt
185
188
  - README.md
186
189
  - Rakefile
190
+ - SECURITY.md
187
191
  - config/rubocop-rspec.yml
188
192
  - lib/generators/pundit/install/USAGE
189
193
  - lib/generators/pundit/install/install_generator.rb
@@ -197,6 +201,9 @@ files:
197
201
  - lib/generators/test_unit/templates/policy_test.rb
198
202
  - lib/pundit.rb
199
203
  - lib/pundit/authorization.rb
204
+ - lib/pundit/cache_store/legacy_store.rb
205
+ - lib/pundit/cache_store/null_store.rb
206
+ - lib/pundit/context.rb
200
207
  - lib/pundit/policy_finder.rb
201
208
  - lib/pundit/rspec.rb
202
209
  - lib/pundit/version.rb
@@ -210,8 +217,9 @@ files:
210
217
  homepage: https://github.com/varvet/pundit
211
218
  licenses:
212
219
  - MIT
213
- metadata: {}
214
- post_install_message:
220
+ metadata:
221
+ rubygems_mfa_required: 'true'
222
+ post_install_message:
215
223
  rdoc_options: []
216
224
  require_paths:
217
225
  - lib
@@ -226,8 +234,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
226
234
  - !ruby/object:Gem::Version
227
235
  version: '0'
228
236
  requirements: []
229
- rubygems_version: 3.3.7
230
- signing_key:
237
+ rubygems_version: 3.5.9
238
+ signing_key:
231
239
  specification_version: 4
232
240
  summary: OO authorization for Rails
233
241
  test_files:
data/.travis.yml DELETED
@@ -1,26 +0,0 @@
1
- language: ruby
2
- dist: focal
3
-
4
- matrix:
5
- include:
6
- - name: "RuboCop lint on pre-installed Ruby version"
7
- rvm: 2.7.1 # Pre-installed Ruby version
8
- before_install:
9
- - gem install bundler
10
- script: bundle exec rake rubocop # ONLY lint once, first
11
- - rvm: 2.6.7
12
- before_script:
13
- - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
14
- - chmod +x ./cc-test-reporter
15
- - ./cc-test-reporter before-build
16
- after_script:
17
- - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
18
- - rvm: 2.7.3
19
- - rvm: 3.0.1
20
- - rvm: 3.1.0
21
- - rvm: jruby-9.2.17.0
22
- env:
23
- - JRUBY_OPTS="--debug"
24
- - rvm: truffleruby-head
25
- allow_failures:
26
- - rvm: truffleruby-head