pundit 2.0.0 → 2.3.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.
data/spec/pundit_spec.rb CHANGED
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
- describe Pundit do
5
+ RSpec.describe Pundit do
4
6
  let(:user) { double }
5
7
  let(:post) { Post.new(user) }
6
8
  let(:customer_post) { Customer::Post.new(user) }
@@ -8,11 +10,10 @@ describe Pundit do
8
10
  let(:comment) { Comment.new }
9
11
  let(:comment_four_five_six) { CommentFourFiveSix.new }
10
12
  let(:article) { Article.new }
11
- let(:controller) { Controller.new(user, "update", {}) }
12
13
  let(:artificial_blog) { ArtificialBlog.new }
13
14
  let(:article_tag) { ArticleTag.new }
14
- let(:comments_relation) { CommentsRelation.new }
15
- let(:empty_comments_relation) { CommentsRelation.new(true) }
15
+ let(:comments_relation) { CommentsRelation.new(empty: false) }
16
+ let(:empty_comments_relation) { CommentsRelation.new(empty: true) }
16
17
  let(:tag_four_five_six) { ProjectOneTwoThree::TagFourFiveSix.new(user) }
17
18
  let(:avatar_four_five_six) { ProjectOneTwoThree::AvatarFourFiveSix.new }
18
19
  let(:wiki) { Wiki.new }
@@ -22,10 +23,35 @@ describe Pundit do
22
23
  expect(Pundit.authorize(user, post, :update?)).to be_truthy
23
24
  end
24
25
 
26
+ it "returns the record on successful authorization" do
27
+ expect(Pundit.authorize(user, post, :update?)).to eq(post)
28
+ end
29
+
30
+ it "returns the record when passed record with namespace " do
31
+ expect(Pundit.authorize(user, [:project, comment], :update?)).to eq(comment)
32
+ end
33
+
34
+ it "returns the record when passed record with nested namespace " do
35
+ expect(Pundit.authorize(user, [:project, :admin, comment], :update?)).to eq(comment)
36
+ end
37
+
38
+ it "returns the policy name symbol when passed record with headless policy" do
39
+ expect(Pundit.authorize(user, :publication, :create?)).to eq(:publication)
40
+ end
41
+
42
+ it "returns the class when passed record not a particular instance" do
43
+ expect(Pundit.authorize(user, Post, :show?)).to eq(Post)
44
+ end
45
+
25
46
  it "can be given a different policy class" do
26
47
  expect(Pundit.authorize(user, post, :create?, policy_class: PublicationPolicy)).to be_truthy
27
48
  end
28
49
 
50
+ it "can be given a different policy class using namespaces" do
51
+ expect(PublicationPolicy).to receive(:new).with(user, comment).and_call_original
52
+ expect(Pundit.authorize(user, [:project, comment], :create?, policy_class: PublicationPolicy)).to be_truthy
53
+ end
54
+
29
55
  it "works with anonymous class policies" do
30
56
  expect(Pundit.authorize(user, article_tag, :show?)).to be_truthy
31
57
  expect { Pundit.authorize(user, article_tag, :destroy?) }.to raise_error(Pundit::NotAuthorizedError)
@@ -35,7 +61,7 @@ describe Pundit do
35
61
  # rubocop:disable Style/MultilineBlockChain
36
62
  expect do
37
63
  Pundit.authorize(user, post, :destroy?)
38
- end.to raise_error(Pundit::NotAuthorizedError, "not allowed to destroy? this #<Post>") do |error|
64
+ end.to raise_error(Pundit::NotAuthorizedError, "not allowed to destroy? this Post") do |error|
39
65
  expect(error.query).to eq :destroy?
40
66
  expect(error.record).to eq post
41
67
  expect(error.policy).to eq Pundit.policy(user, post)
@@ -43,6 +69,18 @@ describe Pundit do
43
69
  # rubocop:enable Style/MultilineBlockChain
44
70
  end
45
71
 
72
+ it "raises an error with a the record, query and action when the record is namespaced" do
73
+ # rubocop:disable Style/MultilineBlockChain
74
+ expect do
75
+ Pundit.authorize(user, [:project, :admin, comment], :destroy?)
76
+ end.to raise_error(Pundit::NotAuthorizedError, "not allowed to destroy? this Comment") do |error|
77
+ expect(error.query).to eq :destroy?
78
+ expect(error.record).to eq comment
79
+ expect(error.policy).to eq Pundit.policy(user, [:project, :admin, comment])
80
+ end
81
+ # rubocop:enable Style/MultilineBlockChain
82
+ end
83
+
46
84
  it "raises an error with a invalid policy constructor" do
47
85
  expect do
48
86
  Pundit.authorize(user, wiki, :update?)
@@ -88,6 +126,12 @@ describe Pundit do
88
126
  Pundit.policy_scope(user, Wiki)
89
127
  end.to raise_error(Pundit::InvalidConstructorError, "Invalid #<WikiPolicy::Scope> constructor is called")
90
128
  end
129
+
130
+ it "raises an original error with a policy scope that contains error" do
131
+ expect do
132
+ Pundit.policy_scope(user, Thread)
133
+ end.to raise_error(ArgumentError)
134
+ end
91
135
  end
92
136
 
93
137
  describe ".policy_scope!" do
@@ -351,223 +395,22 @@ describe Pundit do
351
395
  end
352
396
  end
353
397
 
354
- describe "#verify_authorized" do
355
- it "does nothing when authorized" do
356
- controller.authorize(post)
357
- controller.verify_authorized
358
- end
398
+ describe ".included" do
399
+ it "includes Authorization module" do
400
+ klass = Class.new
359
401
 
360
- it "raises an exception when not authorized" do
361
- expect { controller.verify_authorized }.to raise_error(Pundit::AuthorizationNotPerformedError)
362
- end
363
- end
364
-
365
- describe "#verify_policy_scoped" do
366
- it "does nothing when policy_scope is used" do
367
- controller.policy_scope(Post)
368
- controller.verify_policy_scoped
369
- end
370
-
371
- it "raises an exception when policy_scope is not used" do
372
- expect { controller.verify_policy_scoped }.to raise_error(Pundit::PolicyScopingNotPerformedError)
373
- end
374
- end
375
-
376
- describe "#pundit_policy_authorized?" do
377
- it "is true when authorized" do
378
- controller.authorize(post)
379
- expect(controller.pundit_policy_authorized?).to be true
380
- end
381
-
382
- it "is false when not authorized" do
383
- expect(controller.pundit_policy_authorized?).to be false
384
- end
385
- end
386
-
387
- describe "#pundit_policy_scoped?" do
388
- it "is true when policy_scope is used" do
389
- controller.policy_scope(Post)
390
- expect(controller.pundit_policy_scoped?).to be true
391
- end
392
-
393
- it "is false when policy scope is not used" do
394
- expect(controller.pundit_policy_scoped?).to be false
395
- end
396
- end
397
-
398
- describe "#authorize" do
399
- it "infers the policy name and authorizes based on it" do
400
- expect(controller.authorize(post)).to be_truthy
401
- end
402
-
403
- it "returns the record on successful authorization" do
404
- expect(controller.authorize(post)).to be(post)
405
- end
406
-
407
- it "can be given a different permission to check" do
408
- expect(controller.authorize(post, :show?)).to be_truthy
409
- expect { controller.authorize(post, :destroy?) }.to raise_error(Pundit::NotAuthorizedError)
410
- end
411
-
412
- it "can be given a different policy class" do
413
- expect(controller.authorize(post, :create?, policy_class: PublicationPolicy)).to be_truthy
414
- end
415
-
416
- it "works with anonymous class policies" do
417
- expect(controller.authorize(article_tag, :show?)).to be_truthy
418
- expect { controller.authorize(article_tag, :destroy?) }.to raise_error(Pundit::NotAuthorizedError)
419
- end
420
-
421
- it "throws an exception when the permission check fails" do
422
- expect { controller.authorize(Post.new) }.to raise_error(Pundit::NotAuthorizedError)
423
- end
424
-
425
- it "throws an exception when a policy cannot be found" do
426
- expect { controller.authorize(Article) }.to raise_error(Pundit::NotDefinedError)
427
- end
428
-
429
- it "caches the policy" do
430
- expect(controller.policies[post]).to be_nil
431
- controller.authorize(post)
432
- expect(controller.policies[post]).not_to be_nil
433
- end
434
-
435
- it "raises an error when the given record is nil" do
436
- expect { controller.authorize(nil, :destroy?) }.to raise_error(Pundit::NotAuthorizedError)
437
- end
438
-
439
- it "raises an error with a invalid policy constructor" do
440
- expect { controller.authorize(wiki, :destroy?) }.to raise_error(Pundit::InvalidConstructorError)
441
- end
442
- end
443
-
444
- describe "#skip_authorization" do
445
- it "disables authorization verification" do
446
- controller.skip_authorization
447
- expect { controller.verify_authorized }.not_to raise_error
448
- end
449
- end
450
-
451
- describe "#skip_policy_scope" do
452
- it "disables policy scope verification" do
453
- controller.skip_policy_scope
454
- expect { controller.verify_policy_scoped }.not_to raise_error
455
- end
456
- end
457
-
458
- describe "#pundit_user" do
459
- it "returns the same thing as current_user" do
460
- expect(controller.pundit_user).to eq controller.current_user
461
- end
462
- end
463
-
464
- describe "#policy" do
465
- it "returns an instantiated policy" do
466
- policy = controller.policy(post)
467
- expect(policy.user).to eq user
468
- expect(policy.post).to eq post
469
- end
470
-
471
- it "throws an exception if the given policy can't be found" do
472
- expect { controller.policy(article) }.to raise_error(Pundit::NotDefinedError)
473
- end
474
-
475
- it "raises an error with a invalid policy constructor" do
476
- expect { controller.policy(wiki) }.to raise_error(Pundit::InvalidConstructorError)
477
- end
478
-
479
- it "allows policy to be injected" do
480
- new_policy = OpenStruct.new
481
- controller.policies[post] = new_policy
482
-
483
- expect(controller.policy(post)).to eq new_policy
484
- end
485
- end
486
-
487
- describe "#policy_scope" do
488
- it "returns an instantiated policy scope" do
489
- expect(controller.policy_scope(Post)).to eq :published
490
- end
491
-
492
- it "allows policy scope class to be overriden" do
493
- expect(controller.policy_scope(Post, policy_scope_class: PublicationPolicy::Scope)).to eq :published
494
- end
495
-
496
- it "throws an exception if the given policy can't be found" do
497
- expect { controller.policy_scope(Article) }.to raise_error(Pundit::NotDefinedError)
498
- end
499
-
500
- it "raises an error with a invalid policy scope constructor" do
501
- expect { controller.policy_scope(Wiki) }.to raise_error(Pundit::InvalidConstructorError)
502
- end
503
-
504
- it "allows policy_scope to be injected" do
505
- new_scope = OpenStruct.new
506
- controller.policy_scopes[Post] = new_scope
507
-
508
- expect(controller.policy_scope(Post)).to eq new_scope
509
- end
510
- end
511
-
512
- describe "#permitted_attributes" do
513
- it "checks policy for permitted attributes" do
514
- params = ActionController::Parameters.new(post: {
515
- title: "Hello",
516
- votes: 5,
517
- admin: true
518
- })
519
-
520
- action = "update"
521
-
522
- expect(Controller.new(user, action, params).permitted_attributes(post).to_h).to eq(
523
- "title" => "Hello",
524
- "votes" => 5
525
- )
526
- expect(Controller.new(double, action, params).permitted_attributes(post).to_h).to eq("votes" => 5)
527
- end
528
-
529
- it "checks policy for permitted attributes for record of a ActiveModel type" do
530
- params = ActionController::Parameters.new(customer_post: {
531
- title: "Hello",
532
- votes: 5,
533
- admin: true
534
- })
535
-
536
- action = "update"
402
+ expect do
403
+ klass.include Pundit
404
+ end.to output.to_stderr
537
405
 
538
- expect(Controller.new(user, action, params).permitted_attributes(customer_post).to_h).to eq(
539
- "title" => "Hello",
540
- "votes" => 5
541
- )
542
- expect(Controller.new(double, action, params).permitted_attributes(customer_post).to_h).to eq(
543
- "votes" => 5
544
- )
406
+ expect(klass).to include Pundit::Authorization
545
407
  end
546
- end
547
408
 
548
- describe "#permitted_attributes_for_action" do
549
- it "is checked if it is defined in the policy" do
550
- params = ActionController::Parameters.new(post: {
551
- title: "Hello",
552
- body: "blah",
553
- votes: 5,
554
- admin: true
555
- })
556
-
557
- action = "revise"
558
- expect(Controller.new(user, action, params).permitted_attributes(post).to_h).to eq("body" => "blah")
559
- end
560
-
561
- it "can be explicitly set" do
562
- params = ActionController::Parameters.new(post: {
563
- title: "Hello",
564
- body: "blah",
565
- votes: 5,
566
- admin: true
567
- })
568
-
569
- action = "update"
570
- expect(Controller.new(user, action, params).permitted_attributes(post, :revise).to_h).to eq("body" => "blah")
409
+ it "warns about deprecation" do
410
+ klass = Class.new
411
+ expect do
412
+ klass.include Pundit
413
+ end.to output(a_string_starting_with("'include Pundit' is deprecated")).to_stderr
571
414
  end
572
415
  end
573
416
 
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "simplecov"
4
+ SimpleCov.start do
5
+ add_filter "/spec/"
6
+ end
7
+
1
8
  require "pundit"
2
9
  require "pundit/rspec"
3
10
 
@@ -9,22 +16,6 @@ require "active_support/core_ext"
9
16
  require "active_model/naming"
10
17
  require "action_controller/metal/strong_parameters"
11
18
 
12
- I18n.enforce_available_locales = false
13
-
14
- module PunditSpecHelper
15
- extend RSpec::Matchers::DSL
16
-
17
- matcher :be_truthy do
18
- match do |actual|
19
- actual
20
- end
21
- end
22
- end
23
-
24
- RSpec.configure do |config|
25
- config.include PunditSpecHelper
26
- end
27
-
28
19
  class PostPolicy < Struct.new(:user, :post)
29
20
  class Scope < Struct.new(:user, :scope)
30
21
  def resolve
@@ -84,15 +75,12 @@ module Customer
84
75
  def self.policy_class
85
76
  PostPolicy
86
77
  end
87
-
88
- def policy_class
89
- self.class.policy_class
90
- end
91
78
  end
92
79
  end
93
80
 
94
81
  class CommentScope
95
82
  attr_reader :original_object
83
+
96
84
  def initialize(original_object)
97
85
  @original_object = original_object
98
86
  end
@@ -127,7 +115,7 @@ class Comment
127
115
  end
128
116
 
129
117
  class CommentsRelation
130
- def initialize(empty = false)
118
+ def initialize(empty: false)
131
119
  @empty = empty
132
120
  end
133
121
 
@@ -135,7 +123,7 @@ class CommentsRelation
135
123
  @empty
136
124
  end
137
125
 
138
- def model_name
126
+ def self.model_name
139
127
  Comment.model_name
140
128
  end
141
129
  end
@@ -172,6 +160,10 @@ class CriteriaPolicy < Struct.new(:user, :criteria); end
172
160
 
173
161
  module Project
174
162
  class CommentPolicy < Struct.new(:user, :comment)
163
+ def update?
164
+ true
165
+ end
166
+
175
167
  class Scope < Struct.new(:user, :scope)
176
168
  def resolve
177
169
  scope
@@ -188,6 +180,18 @@ module Project
188
180
  end
189
181
  end
190
182
  end
183
+
184
+ module Admin
185
+ class CommentPolicy < Struct.new(:user, :comment)
186
+ def update?
187
+ true
188
+ end
189
+
190
+ def destroy?
191
+ false
192
+ end
193
+ end
194
+ end
191
195
  end
192
196
 
193
197
  class DenierPolicy < Struct.new(:user, :record)
@@ -197,11 +201,11 @@ class DenierPolicy < Struct.new(:user, :record)
197
201
  end
198
202
 
199
203
  class Controller
200
- include Pundit
204
+ include Pundit::Authorization
201
205
  # Mark protected methods public so they may be called in test
202
- # rubocop:disable Layout/AccessModifierIndentation, Style/AccessModifierDeclarations
203
- public(*Pundit.protected_instance_methods)
204
- # rubocop:enable Layout/AccessModifierIndentation, Style/AccessModifierDeclarations
206
+ # rubocop:disable Style/AccessModifierDeclarations
207
+ public(*Pundit::Authorization.protected_instance_methods)
208
+ # rubocop:enable Style/AccessModifierDeclarations
205
209
 
206
210
  attr_reader :current_user, :action_name, :params
207
211
 
@@ -229,6 +233,7 @@ class NilClassPolicy < Struct.new(:user, :record)
229
233
  end
230
234
 
231
235
  class Wiki; end
236
+
232
237
  class WikiPolicy
233
238
  class Scope
234
239
  # deliberate typo method
@@ -236,6 +241,19 @@ class WikiPolicy
236
241
  end
237
242
  end
238
243
 
244
+ class Thread
245
+ def self.all; end
246
+ end
247
+
248
+ class ThreadPolicy < Struct.new(:user, :thread)
249
+ class Scope < Struct.new(:user, :scope)
250
+ def resolve
251
+ # deliberate wrong useage of the method
252
+ scope.all(:unvalid, :parameters)
253
+ end
254
+ end
255
+ end
256
+
239
257
  class PostFourFiveSix < Struct.new(:user); end
240
258
 
241
259
  class CommentFourFiveSix; extend ActiveModel::Naming; 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.0.0
4
+ version: 2.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Nicklas
8
- - Elabs AB
9
- autorequire:
8
+ - Varvet AB
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-07-21 00:00:00.000000000 Z
12
+ date: 2023-07-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -25,14 +25,155 @@ dependencies:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: 3.0.0
28
+ - !ruby/object:Gem::Dependency
29
+ name: actionpack
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: 3.0.0
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: 3.0.0
42
+ - !ruby/object:Gem::Dependency
43
+ name: activemodel
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: 3.0.0
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 3.0.0
56
+ - !ruby/object:Gem::Dependency
57
+ name: bundler
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: pry
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: railties
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: 3.0.0
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: 3.0.0
98
+ - !ruby/object:Gem::Dependency
99
+ name: rake
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rspec
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: 3.0.0
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: 3.0.0
126
+ - !ruby/object:Gem::Dependency
127
+ name: rubocop
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - '='
131
+ - !ruby/object:Gem::Version
132
+ version: 1.24.0
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - '='
138
+ - !ruby/object:Gem::Version
139
+ version: 1.24.0
140
+ - !ruby/object:Gem::Dependency
141
+ name: simplecov
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: 0.17.0
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: 0.17.0
154
+ - !ruby/object:Gem::Dependency
155
+ name: yard
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
28
168
  description: Object oriented authorization for Rails applications
29
169
  email:
30
170
  - jonas.nicklas@gmail.com
31
- - dev@elabs.se
171
+ - info@varvet.com
32
172
  executables: []
33
173
  extensions: []
34
174
  extra_rdoc_files: []
35
175
  files:
176
+ - ".github/pull_request_template.md"
36
177
  - ".gitignore"
37
178
  - ".rubocop.yml"
38
179
  - ".travis.yml"
@@ -44,6 +185,8 @@ files:
44
185
  - LICENSE.txt
45
186
  - README.md
46
187
  - Rakefile
188
+ - SECURITY.md
189
+ - config/rubocop-rspec.yml
47
190
  - lib/generators/pundit/install/USAGE
48
191
  - lib/generators/pundit/install/install_generator.rb
49
192
  - lib/generators/pundit/install/templates/application_policy.rb
@@ -55,10 +198,13 @@ files:
55
198
  - lib/generators/test_unit/policy_generator.rb
56
199
  - lib/generators/test_unit/templates/policy_test.rb
57
200
  - lib/pundit.rb
201
+ - lib/pundit/authorization.rb
58
202
  - lib/pundit/policy_finder.rb
59
203
  - lib/pundit/rspec.rb
60
204
  - lib/pundit/version.rb
61
205
  - pundit.gemspec
206
+ - spec/authorization_spec.rb
207
+ - spec/generators_spec.rb
62
208
  - spec/policies/post_policy_spec.rb
63
209
  - spec/policy_finder_spec.rb
64
210
  - spec/pundit_spec.rb
@@ -66,8 +212,9 @@ files:
66
212
  homepage: https://github.com/varvet/pundit
67
213
  licenses:
68
214
  - MIT
69
- metadata: {}
70
- post_install_message:
215
+ metadata:
216
+ rubygems_mfa_required: 'true'
217
+ post_install_message:
71
218
  rdoc_options: []
72
219
  require_paths:
73
220
  - lib
@@ -82,12 +229,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
229
  - !ruby/object:Gem::Version
83
230
  version: '0'
84
231
  requirements: []
85
- rubyforge_project:
86
- rubygems_version: 2.7.6
87
- signing_key:
232
+ rubygems_version: 3.4.10
233
+ signing_key:
88
234
  specification_version: 4
89
235
  summary: OO authorization for Rails
90
236
  test_files:
237
+ - spec/authorization_spec.rb
238
+ - spec/generators_spec.rb
91
239
  - spec/policies/post_policy_spec.rb
92
240
  - spec/policy_finder_spec.rb
93
241
  - spec/pundit_spec.rb