pundit 1.1.0 → 2.0.0.beta1
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 +5 -5
- data/.rubocop.yml +18 -10
- data/.travis.yml +19 -9
- data/CHANGELOG.md +13 -0
- data/Gemfile +13 -1
- data/README.md +233 -60
- data/Rakefile +0 -1
- data/lib/generators/pundit/install/install_generator.rb +1 -1
- data/lib/generators/pundit/install/templates/application_policy.rb +2 -6
- data/lib/generators/pundit/policy/policy_generator.rb +1 -1
- data/lib/generators/pundit/policy/templates/policy.rb +1 -1
- data/lib/generators/rspec/policy_generator.rb +1 -1
- data/lib/generators/rspec/templates/policy_spec.rb +0 -1
- data/lib/generators/test_unit/policy_generator.rb +1 -1
- data/lib/generators/test_unit/templates/policy_test.rb +0 -1
- data/lib/pundit.rb +84 -59
- data/lib/pundit/policy_finder.rb +25 -31
- data/lib/pundit/rspec.rb +11 -7
- data/lib/pundit/version.rb +3 -1
- data/pundit.gemspec +2 -11
- data/spec/policy_finder_spec.rb +122 -0
- data/spec/pundit_spec.rb +136 -32
- data/spec/spec_helper.rb +73 -11
- metadata +8 -119
data/spec/spec_helper.rb
CHANGED
@@ -46,7 +46,7 @@ class PostPolicy < Struct.new(:user, :post)
|
|
46
46
|
|
47
47
|
def permitted_attributes
|
48
48
|
if post.user == user
|
49
|
-
[
|
49
|
+
%i[title votes]
|
50
50
|
else
|
51
51
|
[:votes]
|
52
52
|
end
|
@@ -62,6 +62,10 @@ class Post < Struct.new(:user)
|
|
62
62
|
:published
|
63
63
|
end
|
64
64
|
|
65
|
+
def self.read
|
66
|
+
:read
|
67
|
+
end
|
68
|
+
|
65
69
|
def to_s
|
66
70
|
"Post"
|
67
71
|
end
|
@@ -77,20 +81,47 @@ module Customer
|
|
77
81
|
OpenStruct.new(param_key: "customer_post")
|
78
82
|
end
|
79
83
|
|
80
|
-
def policy_class
|
84
|
+
def self.policy_class
|
81
85
|
PostPolicy
|
82
86
|
end
|
87
|
+
|
88
|
+
def policy_class
|
89
|
+
self.class.policy_class
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
class CommentScope
|
95
|
+
attr_reader :original_object
|
96
|
+
def initialize(original_object)
|
97
|
+
@original_object = original_object
|
98
|
+
end
|
99
|
+
|
100
|
+
def ==(other)
|
101
|
+
original_object == other.original_object
|
83
102
|
end
|
84
103
|
end
|
85
104
|
|
86
105
|
class CommentPolicy < Struct.new(:user, :comment)
|
87
106
|
class Scope < Struct.new(:user, :scope)
|
88
107
|
def resolve
|
89
|
-
scope
|
108
|
+
CommentScope.new(scope)
|
90
109
|
end
|
91
110
|
end
|
92
111
|
end
|
93
112
|
|
113
|
+
class PublicationPolicy < Struct.new(:user, :publication)
|
114
|
+
class Scope < Struct.new(:user, :scope)
|
115
|
+
def resolve
|
116
|
+
scope.published
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def create?
|
121
|
+
true
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
94
125
|
class Comment
|
95
126
|
extend ActiveModel::Naming
|
96
127
|
end
|
@@ -140,9 +171,23 @@ end
|
|
140
171
|
class CriteriaPolicy < Struct.new(:user, :criteria); end
|
141
172
|
|
142
173
|
module Project
|
143
|
-
class CommentPolicy < Struct.new(:user, :
|
174
|
+
class CommentPolicy < Struct.new(:user, :comment)
|
175
|
+
class Scope < Struct.new(:user, :scope)
|
176
|
+
def resolve
|
177
|
+
scope
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
144
182
|
class CriteriaPolicy < Struct.new(:user, :criteria); end
|
145
|
-
|
183
|
+
|
184
|
+
class PostPolicy < Struct.new(:user, :post)
|
185
|
+
class Scope < Struct.new(:user, :scope)
|
186
|
+
def resolve
|
187
|
+
scope.read
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
146
191
|
end
|
147
192
|
|
148
193
|
class DenierPolicy < Struct.new(:user, :record)
|
@@ -153,24 +198,41 @@ end
|
|
153
198
|
|
154
199
|
class Controller
|
155
200
|
include Pundit
|
201
|
+
# 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
|
156
205
|
|
157
|
-
attr_reader :current_user, :params
|
206
|
+
attr_reader :current_user, :action_name, :params
|
158
207
|
|
159
|
-
def initialize(current_user, params)
|
208
|
+
def initialize(current_user, action_name, params)
|
160
209
|
@current_user = current_user
|
210
|
+
@action_name = action_name
|
161
211
|
@params = params
|
162
212
|
end
|
163
213
|
end
|
164
214
|
|
165
|
-
class NilClassPolicy
|
215
|
+
class NilClassPolicy < Struct.new(:user, :record)
|
166
216
|
class Scope
|
167
217
|
def initialize(*)
|
168
|
-
raise "
|
218
|
+
raise Pundit::NotDefinedError, "Cannot scope NilClass"
|
169
219
|
end
|
170
220
|
end
|
171
221
|
|
172
|
-
def
|
173
|
-
|
222
|
+
def show?
|
223
|
+
false
|
224
|
+
end
|
225
|
+
|
226
|
+
def destroy?
|
227
|
+
false
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
class Wiki; end
|
232
|
+
class WikiPolicy
|
233
|
+
class Scope
|
234
|
+
# deliberate typo method
|
235
|
+
def initalize; end
|
174
236
|
end
|
175
237
|
end
|
176
238
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pundit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonas Nicklas
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2018-07-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -25,118 +25,6 @@ dependencies:
|
|
25
25
|
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: 3.0.0
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: activemodel
|
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: actionpack
|
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: '1.3'
|
63
|
-
type: :development
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - "~>"
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '1.3'
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
name: rspec
|
72
|
-
requirement: !ruby/object:Gem::Requirement
|
73
|
-
requirements:
|
74
|
-
- - ">="
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: 2.0.0
|
77
|
-
type: :development
|
78
|
-
prerelease: false
|
79
|
-
version_requirements: !ruby/object:Gem::Requirement
|
80
|
-
requirements:
|
81
|
-
- - ">="
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
version: 2.0.0
|
84
|
-
- !ruby/object:Gem::Dependency
|
85
|
-
name: pry
|
86
|
-
requirement: !ruby/object:Gem::Requirement
|
87
|
-
requirements:
|
88
|
-
- - ">="
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version: '0'
|
91
|
-
type: :development
|
92
|
-
prerelease: false
|
93
|
-
version_requirements: !ruby/object:Gem::Requirement
|
94
|
-
requirements:
|
95
|
-
- - ">="
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
version: '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: yard
|
114
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
-
requirements:
|
116
|
-
- - ">="
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: '0'
|
119
|
-
type: :development
|
120
|
-
prerelease: false
|
121
|
-
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
requirements:
|
123
|
-
- - ">="
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '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: '0'
|
133
|
-
type: :development
|
134
|
-
prerelease: false
|
135
|
-
version_requirements: !ruby/object:Gem::Requirement
|
136
|
-
requirements:
|
137
|
-
- - ">="
|
138
|
-
- !ruby/object:Gem::Version
|
139
|
-
version: '0'
|
140
28
|
description: Object oriented authorization for Rails applications
|
141
29
|
email:
|
142
30
|
- jonas.nicklas@gmail.com
|
@@ -172,9 +60,10 @@ files:
|
|
172
60
|
- lib/pundit/version.rb
|
173
61
|
- pundit.gemspec
|
174
62
|
- spec/policies/post_policy_spec.rb
|
63
|
+
- spec/policy_finder_spec.rb
|
175
64
|
- spec/pundit_spec.rb
|
176
65
|
- spec/spec_helper.rb
|
177
|
-
homepage: https://github.com/
|
66
|
+
homepage: https://github.com/varvet/pundit
|
178
67
|
licenses:
|
179
68
|
- MIT
|
180
69
|
metadata: {}
|
@@ -189,17 +78,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
189
78
|
version: '0'
|
190
79
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
80
|
requirements:
|
192
|
-
- - "
|
81
|
+
- - ">"
|
193
82
|
- !ruby/object:Gem::Version
|
194
|
-
version:
|
83
|
+
version: 1.3.1
|
195
84
|
requirements: []
|
196
85
|
rubyforge_project:
|
197
|
-
rubygems_version: 2.
|
86
|
+
rubygems_version: 2.7.6
|
198
87
|
signing_key:
|
199
88
|
specification_version: 4
|
200
89
|
summary: OO authorization for Rails
|
201
90
|
test_files:
|
202
91
|
- spec/policies/post_policy_spec.rb
|
92
|
+
- spec/policy_finder_spec.rb
|
203
93
|
- spec/pundit_spec.rb
|
204
94
|
- spec/spec_helper.rb
|
205
|
-
has_rdoc:
|