action_policy 0.4.2 → 0.5.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.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +229 -171
  3. data/LICENSE.txt +1 -1
  4. data/README.md +7 -11
  5. data/lib/.rbnext/2.7/action_policy/behaviours/policy_for.rb +62 -0
  6. data/lib/.rbnext/2.7/action_policy/i18n.rb +56 -0
  7. data/lib/.rbnext/2.7/action_policy/policy/cache.rb +101 -0
  8. data/lib/.rbnext/2.7/action_policy/policy/pre_check.rb +162 -0
  9. data/lib/.rbnext/2.7/action_policy/rspec/be_authorized_to.rb +89 -0
  10. data/lib/.rbnext/2.7/action_policy/rspec/have_authorized_scope.rb +124 -0
  11. data/lib/.rbnext/2.7/action_policy/utils/pretty_print.rb +159 -0
  12. data/lib/.rbnext/3.0/action_policy/behaviour.rb +115 -0
  13. data/lib/.rbnext/3.0/action_policy/behaviours/policy_for.rb +62 -0
  14. data/lib/.rbnext/3.0/action_policy/behaviours/scoping.rb +35 -0
  15. data/lib/.rbnext/3.0/action_policy/behaviours/thread_memoized.rb +59 -0
  16. data/lib/.rbnext/3.0/action_policy/ext/policy_cache_key.rb +72 -0
  17. data/lib/.rbnext/3.0/action_policy/policy/aliases.rb +69 -0
  18. data/lib/.rbnext/3.0/action_policy/policy/authorization.rb +87 -0
  19. data/lib/.rbnext/3.0/action_policy/policy/cache.rb +101 -0
  20. data/lib/.rbnext/3.0/action_policy/policy/core.rb +161 -0
  21. data/lib/.rbnext/3.0/action_policy/policy/defaults.rb +31 -0
  22. data/lib/.rbnext/3.0/action_policy/policy/execution_result.rb +37 -0
  23. data/lib/.rbnext/3.0/action_policy/policy/pre_check.rb +162 -0
  24. data/lib/.rbnext/3.0/action_policy/policy/reasons.rb +210 -0
  25. data/lib/.rbnext/3.0/action_policy/policy/scoping.rb +160 -0
  26. data/lib/.rbnext/3.0/action_policy/rspec/be_authorized_to.rb +89 -0
  27. data/lib/.rbnext/3.0/action_policy/rspec/have_authorized_scope.rb +124 -0
  28. data/lib/.rbnext/3.0/action_policy/utils/pretty_print.rb +159 -0
  29. data/lib/.rbnext/3.0/action_policy/utils/suggest_message.rb +19 -0
  30. data/lib/action_policy.rb +7 -1
  31. data/lib/action_policy/behaviour.rb +22 -16
  32. data/lib/action_policy/behaviours/policy_for.rb +10 -3
  33. data/lib/action_policy/behaviours/scoping.rb +2 -1
  34. data/lib/action_policy/behaviours/thread_memoized.rb +1 -3
  35. data/lib/action_policy/ext/module_namespace.rb +1 -6
  36. data/lib/action_policy/ext/policy_cache_key.rb +15 -33
  37. data/lib/action_policy/ext/{symbol_classify.rb → symbol_camelize.rb} +6 -6
  38. data/lib/action_policy/i18n.rb +1 -1
  39. data/lib/action_policy/lookup_chain.rb +41 -21
  40. data/lib/action_policy/policy/aliases.rb +7 -12
  41. data/lib/action_policy/policy/authorization.rb +14 -17
  42. data/lib/action_policy/policy/cache.rb +34 -18
  43. data/lib/action_policy/policy/core.rb +25 -12
  44. data/lib/action_policy/policy/defaults.rb +3 -9
  45. data/lib/action_policy/policy/execution_result.rb +3 -9
  46. data/lib/action_policy/policy/pre_check.rb +19 -58
  47. data/lib/action_policy/policy/reasons.rb +32 -20
  48. data/lib/action_policy/policy/scoping.rb +5 -6
  49. data/lib/action_policy/rails/controller.rb +6 -1
  50. data/lib/action_policy/rails/ext/active_record.rb +7 -0
  51. data/lib/action_policy/rails/policy/instrumentation.rb +1 -1
  52. data/lib/action_policy/rspec/be_authorized_to.rb +5 -9
  53. data/lib/action_policy/rspec/dsl.rb +3 -3
  54. data/lib/action_policy/rspec/have_authorized_scope.rb +5 -7
  55. data/lib/action_policy/utils/pretty_print.rb +21 -24
  56. data/lib/action_policy/utils/suggest_message.rb +1 -3
  57. data/lib/action_policy/version.rb +1 -1
  58. data/lib/generators/action_policy/install/templates/{application_policy.rb → application_policy.rb.tt} +1 -1
  59. data/lib/generators/action_policy/policy/policy_generator.rb +4 -1
  60. data/lib/generators/action_policy/policy/templates/{policy.rb → policy.rb.tt} +0 -0
  61. data/lib/generators/rspec/templates/{policy_spec.rb → policy_spec.rb.tt} +0 -0
  62. data/lib/generators/test_unit/templates/{policy_test.rb → policy_test.rb.tt} +0 -0
  63. metadata +55 -119
  64. data/.gitattributes +0 -2
  65. data/.github/FUNDING.yml +0 -1
  66. data/.github/ISSUE_TEMPLATE.md +0 -18
  67. data/.github/PULL_REQUEST_TEMPLATE.md +0 -29
  68. data/.gitignore +0 -15
  69. data/.rubocop.yml +0 -54
  70. data/.tidelift.yml +0 -6
  71. data/.travis.yml +0 -31
  72. data/Gemfile +0 -22
  73. data/Rakefile +0 -27
  74. data/action_policy.gemspec +0 -44
  75. data/benchmarks/namespaced_lookup_cache.rb +0 -71
  76. data/bin/console +0 -14
  77. data/bin/setup +0 -8
  78. data/docs/.nojekyll +0 -0
  79. data/docs/CNAME +0 -1
  80. data/docs/README.md +0 -77
  81. data/docs/_sidebar.md +0 -27
  82. data/docs/aliases.md +0 -122
  83. data/docs/assets/docsify-search.js +0 -364
  84. data/docs/assets/docsify.min.js +0 -3
  85. data/docs/assets/fonts/FiraCode-Medium.woff +0 -0
  86. data/docs/assets/fonts/FiraCode-Regular.woff +0 -0
  87. data/docs/assets/images/banner.png +0 -0
  88. data/docs/assets/images/cache.png +0 -0
  89. data/docs/assets/images/cache.svg +0 -70
  90. data/docs/assets/images/layer.png +0 -0
  91. data/docs/assets/images/layer.svg +0 -35
  92. data/docs/assets/prism-ruby.min.js +0 -1
  93. data/docs/assets/styles.css +0 -347
  94. data/docs/assets/vue.min.css +0 -1
  95. data/docs/authorization_context.md +0 -92
  96. data/docs/behaviour.md +0 -113
  97. data/docs/caching.md +0 -273
  98. data/docs/controller_action_aliases.md +0 -109
  99. data/docs/custom_lookup_chain.md +0 -48
  100. data/docs/custom_policy.md +0 -53
  101. data/docs/debugging.md +0 -55
  102. data/docs/decorators.md +0 -27
  103. data/docs/favicon.ico +0 -0
  104. data/docs/graphql.md +0 -302
  105. data/docs/i18n.md +0 -44
  106. data/docs/index.html +0 -43
  107. data/docs/instrumentation.md +0 -84
  108. data/docs/lookup_chain.md +0 -17
  109. data/docs/namespaces.md +0 -77
  110. data/docs/non_rails.md +0 -28
  111. data/docs/pre_checks.md +0 -57
  112. data/docs/pundit_migration.md +0 -80
  113. data/docs/quick_start.md +0 -118
  114. data/docs/rails.md +0 -120
  115. data/docs/reasons.md +0 -120
  116. data/docs/scoping.md +0 -255
  117. data/docs/testing.md +0 -333
  118. data/docs/writing_policies.md +0 -107
  119. data/gemfiles/jruby.gemfile +0 -8
  120. data/gemfiles/rails42.gemfile +0 -8
  121. data/gemfiles/rails6.gemfile +0 -8
  122. data/gemfiles/railsmaster.gemfile +0 -6
  123. data/lib/action_policy/ext/string_match.rb +0 -14
  124. data/lib/action_policy/ext/yield_self_then.rb +0 -25
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 946e026afb064f557ce87761fb4ddb981635d0b95ca5f8a6415ae7572932f758
4
- data.tar.gz: c97a78ac4be2b1482280c70345caa881d4b6d126e1d92c7b8e852592ccca09ed
3
+ metadata.gz: 7922156f6a9b0fa40a6451b6f6c114a0ea8d7f52d9d050ecfd266a5575357c6e
4
+ data.tar.gz: d38c700872a91ddad81a4d2db99cb4415d4ccf51064ec10db10771ebcf517c5f
5
5
  SHA512:
6
- metadata.gz: 5585386d303ef8af41651a3951fadd6970d4a127226a88b7c220852235d8f7cd34f7b608ef1390ed02b921fe64f93abc9d0ddc2d2f0780293e7b925818830d17
7
- data.tar.gz: '0954283e4e9576ced888c80e1e02bec3fa2c128f69f79962ba748b69aa6fbab0c46814746a9ac6fe36dd2609dc9a626fb4ee51848b84a5ebe3a584838e2eeb9e'
6
+ metadata.gz: efcd8c5cd621c6b08c713e71e37416e1b88a400e1f4195039059bb6d1d8baf7d09edb9425ebc0d2bdbc3a64ae6c94f78c39b55017bd918bedf890a6a107ad5b6
7
+ data.tar.gz: ca147c91c0da934f98787a4ec8ed0a84173363c828729d4d8cddb0df11a0ec4895efb63d7d25b3b9a969e807d338063ddf4746e9b4156211d96e5d8ff696a272
@@ -2,6 +2,63 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 0.5.0 (2020-09-29)
6
+
7
+ - Move `deny!` / `allow!` to core. ([@palkan][])
8
+
9
+ Now you can call `deny!` and `allow!` in policy rules to fail- or pass-fast.
10
+
11
+ **BREAKING.** Pre-check name is no longer added automatically to failure reasons. You should specify the reason
12
+ explicitly: `deny!(:my_reason)`.
13
+
14
+ - Add `Result#all_details` to return all collected details in a single hash. ([@palkan][])
15
+
16
+ - Add `default` option to lookup and `default_authorization_policy_class` callback to behaviour. ([@palkan][])
17
+
18
+ - Add `skip_verify_authorized!` to Rails controllers integration. ([@palkan][])
19
+
20
+ This method allows you to skip the `verify_authorized` callback dynamically.
21
+
22
+ - **Drop Ruby 2.4 support**. ([@palkan][])
23
+
24
+ - Add `allowance_to` method to authorization behaviour. ([@palkan][])
25
+
26
+ This method is similar to `allowed_to?` but returns an authorization result object.
27
+
28
+ - Support aliases in `allowed_to?` / `check?` calls within policies. ([@palkan][])
29
+
30
+ ## 0.4.5 (2020-07-29)
31
+
32
+ - Add strict_namespace option to lookup chain. (@rainerborene)
33
+
34
+ ## 0.4.4 (2020-07-07)
35
+
36
+ - Fix symbol lookup with namespaces. ([@palkan][])
37
+
38
+ Fixes [#122](https://github.com/palkan/action_policy/issues/122).
39
+
40
+ - Separated `#classify`-based and `#camelize`-based symbol lookups. ([Be-ngt-oH][])
41
+
42
+ Only affects Rails apps. Now lookup for `:users` tries to find `UsersPolicy` first (camelize),
43
+ and only then search for `UserPolicy` (classify).
44
+
45
+ See [PR#118](https://github.com/palkan/action_policy/pull/118).
46
+
47
+ - Fix calling rules with `allowed_to?` directly. ([@palkan][])
48
+
49
+ Fixes [#113](https://github.com/palkan/action_policy/issues/113)
50
+
51
+ ## 0.4.3 (2019-12-14)
52
+
53
+ - Add `#cache(*parts, **options) { ... }` method. ([@palkan][])
54
+
55
+ Allows you to cache anything in policy classes using the Action Policy
56
+ cache key generation mechanism.
57
+
58
+ - Handle versioned Rails cache keys. ([@palkan][])
59
+
60
+ Use `#cache_with_version` as a cache key if defined.
61
+
5
62
  ## 0.4.2 (2019-12-13)
6
63
 
7
64
  - Fix regression introduced in 0.4.0 which broke testing Class targets. ([@palkan][])
@@ -10,274 +67,275 @@
10
67
 
11
68
  - Add `action_policy.init` instrumentation event. ([@palkan][])
12
69
 
13
- Triggered every time a new policy object is initialized.
70
+ Triggered every time a new policy object is initialized.
14
71
 
15
72
  - Fix policy memoization with explicit context. ([@palkan][])
16
73
 
17
- Explicit context (`authorize! context: {}`) wasn't considered during
18
- policies memoization. Not this is fixed.
74
+ Explicit context (`authorize! context: {}`) wasn't considered during
75
+ policies memoization. Not this is fixed.
19
76
 
20
77
  - Support composed matchers for authorization target testing. ([@palkan][])
21
78
 
22
- Now you can write tests like this:
79
+ Now you can write tests like this:
23
80
 
24
- ```ruby
25
- expect { subject }.to be_authorized_to(:show?, an_instance_of(User))
26
- ```
81
+ ```ruby
82
+ expect { subject }.to be_authorized_to(:show?, an_instance_of(User))
83
+ ```
27
84
 
28
85
  ## 0.3.4 (2019-11-27)
29
86
 
30
87
  - Fix Rails generators. ([@palkan][])
31
88
 
32
- Only invoke install generator if `application_policy.rb` is missing.
33
- Fix hooking into test frameworks.
89
+ Only invoke install generator if `application_policy.rb` is missing.
90
+ Fix hooking into test frameworks.
34
91
 
35
92
  ## 0.3.3 (2019-11-27)
36
93
 
37
94
  - Improve pretty print functionality. ([@palkan][])
38
95
 
39
- Colorize true/false values.
40
- Handle multiline expressions and debug statements (i.e., `binding.pry`).
96
+ Colorize true/false values.
97
+ Handle multiline expressions and debug statements (i.e., `binding.pry`).
41
98
 
42
99
  - Add Rails generators. ([@nicolas-brousse][])
43
100
 
44
- Adds `action_policy:install` and `action_policy:policy MODEL` Rails generators.
101
+ Adds `action_policy:install` and `action_policy:policy MODEL` Rails generators.
45
102
 
46
103
  - Optional authorization target. ([@somenugget][])
47
104
 
48
- Allows making authorization context optional:
105
+ Allows making authorization context optional:
49
106
 
50
- ```ruby
51
- class OptionalRolePolicy < ActionPolicy::Base
52
- authorize :role, optional: true
53
- end
107
+ ```ruby
108
+ class OptionalRolePolicy < ActionPolicy::Base
109
+ authorize :role, optional: true
110
+ end
54
111
 
55
- policy = OptionalRolePolicy.new
56
- policy.role #=> nil
57
- ```
112
+ policy = OptionalRolePolicy.new
113
+ policy.role #=> nil
114
+ ```
58
115
 
59
116
  ## 0.3.2 (2019-05-26) 👶
60
117
 
61
118
  - Fixed thread-safety issues with scoping configs. ([@palkan][])
62
119
 
63
- Fixes [#75](https://github.com/palkan/action_policy/issues/75).
120
+ Fixes [#75](https://github.com/palkan/action_policy/issues/75).
64
121
 
65
122
  ## 0.3.1 (2019-05-30)
66
123
 
67
124
  - Fixed bug with missing implicit target and hash like scoping data. ([@palkan][])
68
125
 
69
- Fixes [#70](https://github.com/palkan/action_policy/issues/70).
126
+ Fixes [#70](https://github.com/palkan/action_policy/issues/70).
70
127
 
71
128
  ## 0.3.0 (2019-04-02)
72
129
 
73
130
  - Added ActiveSupport-based instrumentation. ([@palkan][])
74
131
 
75
- See [PR#4](https://github.com/palkan/action_policy/pull/4)
132
+ See [PR#4](https://github.com/palkan/action_policy/pull/4)
76
133
 
77
134
  - Allow passing authorization context explicitly. ([@palkan][])
78
135
 
79
- Closes [#3](https://github.com/palkan/action_policy/issues/3).
136
+ Closes [#3](https://github.com/palkan/action_policy/issues/3).
80
137
 
81
- Now it's possible to override implicit authorization context
82
- via `context` option:
138
+ Now it's possible to override implicit authorization context
139
+ via `context` option:
83
140
 
84
- ```ruby
85
- authorize! target, to: :show?, context: {user: another_user}
86
- authorized_scope User.all, context: {user: another_user}
87
- ```
141
+ ```ruby
142
+ authorize! target, to: :show?, context: {user: another_user}
143
+ authorized_scope User.all, context: {user: another_user}
144
+ ```
88
145
 
89
146
  - Renamed `#authorized` to `#authorized_scope`. ([@palkan][])
90
147
 
91
- **NOTE:** `#authorized` alias is also available.
148
+ **NOTE:** `#authorized` alias is also available.
92
149
 
93
150
  - Added `Policy#pp(rule)` method to print annotated rule source code. ([@palkan][])
94
151
 
95
- Example (debugging):
152
+ Example (debugging):
96
153
 
97
- ```ruby
98
- def edit?
99
- binding.pry # rubocop:disable Lint/Debugger
100
- (user.name == "John") && (admin? || access_feed?)
101
- end
102
- ```
103
-
104
- ```sh
105
- pry> pp :edit?
106
- MyPolicy#edit?
107
- ↳ (
108
- user.name == "John" #=> false
109
- )
110
- AND
111
- (
112
- admin? #=> false
113
- OR
114
- access_feed? #=> true
115
- )
154
+ ```ruby
155
+ def edit?
156
+ binding.pry # rubocop:disable Lint/Debugger
157
+ (user.name == "John") && (admin? || access_feed?)
158
+ end
159
+ ```
160
+
161
+ ```sh
162
+ pry> pp :edit?
163
+ MyPolicy#edit?
164
+ ↳ (
165
+ user.name == "John" #=> false
116
166
  )
117
- ```
167
+ AND
168
+ (
169
+ admin? #=> false
170
+ OR
171
+ access_feed? #=> true
172
+ )
173
+ )
174
+ ```
118
175
 
119
- See [PR#63](https://github.com/palkan/action_policy/pull/63)
176
+ See [PR#63](https://github.com/palkan/action_policy/pull/63)
120
177
 
121
178
  - Added ability to provide additional failure reasons details. ([@palkan][])
122
179
 
123
- Example:
180
+ Example:
124
181
 
125
- ```ruby
126
- class ApplicantPolicy < ApplicationPolicy
127
- def show?
128
- allowed_to?(:show?, object.stage)
129
- end
182
+ ```ruby
183
+ class ApplicantPolicy < ApplicationPolicy
184
+ def show?
185
+ allowed_to?(:show?, object.stage)
130
186
  end
131
-
132
- class StagePolicy < ApplicationPolicy
133
- def show?
134
- # Add stage title to the failure reason (if any)
135
- # (could be used by client to show more descriptive message)
136
- details[:title] = record.title
137
- # then perform the checks
138
- user.stages.where(id: record.id).exists?
139
- end
187
+ end
188
+
189
+ class StagePolicy < ApplicationPolicy
190
+ def show?
191
+ # Add stage title to the failure reason (if any)
192
+ # (could be used by client to show more descriptive message)
193
+ details[:title] = record.title
194
+ # then perform the checks
195
+ user.stages.where(id: record.id).exists?
140
196
  end
197
+ end
141
198
 
142
- # when accessing the reasons
143
- p ex.result.reasons.details #=> { stage: [{show?: {title: "Onboarding"}] }
144
- ```
199
+ # when accessing the reasons
200
+ p ex.result.reasons.details #=> { stage: [{show?: {title: "Onboarding"}] }
201
+ ```
145
202
 
146
- See https://github.com/palkan/action_policy/pull/58
203
+ See https://github.com/palkan/action_policy/pull/58
147
204
 
148
205
  - Ruby 2.4+ is required. ([@palkan][])
149
206
 
150
207
  - Added RSpec DSL for writing policy specs. ([@palkan])
151
208
 
152
- The goal of this DSL is to reduce the boilerplate when writing
153
- policies specs.
209
+ The goal of this DSL is to reduce the boilerplate when writing
210
+ policies specs.
154
211
 
155
- Example:
212
+ Example:
156
213
 
157
- ```ruby
158
- describe PostPolicy do
159
- let(:user) { build_stubbed :user }
160
- let(:record) { build_stubbed :post, draft: false }
214
+ ```ruby
215
+ describe PostPolicy do
216
+ let(:user) { build_stubbed :user }
217
+ let(:record) { build_stubbed :post, draft: false }
161
218
 
162
- let(:context) { {user: user} }
219
+ let(:context) { {user: user} }
163
220
 
164
- describe_rule :show? do
165
- succeed "when post is published"
221
+ describe_rule :show? do
222
+ succeed "when post is published"
166
223
 
167
- failed "when post is draft" do
168
- before { post.draft = false }
224
+ failed "when post is draft" do
225
+ before { post.draft = false }
169
226
 
170
- succeed "when user is a manager" do
171
- before { user.role = "manager" }
172
- end
227
+ succeed "when user is a manager" do
228
+ before { user.role = "manager" }
173
229
  end
174
230
  end
175
231
  end
176
- ```
232
+ end
233
+ ```
177
234
 
178
235
  - Added I18n support ([@DmitryTsepelev][])
179
236
 
180
- Example:
237
+ Example:
181
238
 
182
- ```ruby
183
- class ApplicationController < ActionController::Base
184
- rescue_from ActionPolicy::Unauthorized do |ex|
185
- p ex.result.message #=> "You do not have access to the stage"
186
- p ex.result.reasons.full_messages #=> ["You do not have access to the stage"]
187
- end
239
+ ```ruby
240
+ class ApplicationController < ActionController::Base
241
+ rescue_from ActionPolicy::Unauthorized do |ex|
242
+ p ex.result.message #=> "You do not have access to the stage"
243
+ p ex.result.reasons.full_messages #=> ["You do not have access to the stage"]
188
244
  end
189
- ```
245
+ end
246
+ ```
190
247
 
191
248
  - Added scope options to scopes. ([@korolvs][])
192
249
 
193
- See [#47](https://github.com/palkan/action_policy/pull/47).
250
+ See [#47](https://github.com/palkan/action_policy/pull/47).
194
251
 
195
- Example:
196
- ```ruby
197
- # users_controller.rb
198
- class UsersController < ApplicationController
199
- def index
200
- @user = authorized(User.all, scope_options: {with_deleted: true})
201
- end
252
+ Example:
253
+
254
+ ```ruby
255
+ # users_controller.rb
256
+ class UsersController < ApplicationController
257
+ def index
258
+ @user = authorized(User.all, scope_options: {with_deleted: true})
202
259
  end
260
+ end
203
261
 
204
- # user_policy.rb
205
- describe UserPolicy < Application do
206
- relation_scope do |relation, with_deleted: false|
207
- rel = some_logic(relation)
208
- with_deleted ? rel.with_deleted : rel
209
- end
262
+ # user_policy.rb
263
+ describe UserPolicy < Application do
264
+ relation_scope do |relation, with_deleted: false|
265
+ rel = some_logic(relation)
266
+ with_deleted ? rel.with_deleted : rel
210
267
  end
211
- ```
268
+ end
269
+ ```
212
270
 
213
271
  - Added Symbol lookup to the lookup chain ([@DmitryTsepelev][])
214
272
 
215
- For instance, lookup will implicitly use `AdminPolicy` in a following case:
273
+ For instance, lookup will implicitly use `AdminPolicy` in a following case:
216
274
 
217
- ```ruby
218
- # admin_controller.rb
219
- class AdminController < ApplicationController
220
- authorize! :admin, to: :update_settings
221
- end
222
- ```
275
+ ```ruby
276
+ # admin_controller.rb
277
+ class AdminController < ApplicationController
278
+ authorize! :admin, to: :update_settings
279
+ end
280
+ ```
223
281
 
224
282
  - Added testing for scopes. ([@palkan][])
225
283
 
226
- Example:
284
+ Example:
227
285
 
228
- ```ruby
229
- # users_controller.rb
230
- class UsersController < ApplicationController
231
- def index
232
- @user = authorized(User.all)
233
- end
286
+ ```ruby
287
+ # users_controller.rb
288
+ class UsersController < ApplicationController
289
+ def index
290
+ @user = authorized(User.all)
234
291
  end
235
-
236
- # users_controller_spec.rb
237
- describe UsersController do
238
- subject { get :index }
239
- it "has authorized scope" do
240
- expect { subject }.to have_authorized_scope(:active_record_relation)
241
- .with(PostPolicy)
242
- end
292
+ end
293
+
294
+ # users_controller_spec.rb
295
+ describe UsersController do
296
+ subject { get :index }
297
+ it "has authorized scope" do
298
+ expect { subject }.to have_authorized_scope(:active_record_relation)
299
+ .with(PostPolicy)
243
300
  end
244
- ```
301
+ end
302
+ ```
245
303
 
246
304
  - Added scoping support. ([@palkan][])
247
305
 
248
- See [#5](https://github.com/palkan/action_policy/issues/5).
306
+ See [#5](https://github.com/palkan/action_policy/issues/5).
249
307
 
250
- By "scoping" we mean an ability to use policies to _scope data_.
308
+ By "scoping" we mean an ability to use policies to _scope data_.
251
309
 
252
- For example, when you want to _scope_ Active Record collections depending
253
- on the current user permissions:
310
+ For example, when you want to _scope_ Active Record collections depending
311
+ on the current user permissions:
254
312
 
255
- ```ruby
256
- class PostsController < ApplicationController
257
- def index
258
- @posts = authorized(Post.all)
259
- end
313
+ ```ruby
314
+ class PostsController < ApplicationController
315
+ def index
316
+ @posts = authorized(Post.all)
260
317
  end
318
+ end
261
319
 
262
- class PostPolicy < ApplicationPolicy
263
- relation_scope do |relation|
264
- next relation if user.admin?
265
- relation.where(user: user)
266
- end
320
+ class PostPolicy < ApplicationPolicy
321
+ relation_scope do |relation|
322
+ next relation if user.admin?
323
+ relation.where(user: user)
267
324
  end
268
- ```
325
+ end
326
+ ```
269
327
 
270
- Action Policy provides a flexible mechanism to apply scopes to anything you want.
328
+ Action Policy provides a flexible mechanism to apply scopes to anything you want.
271
329
 
272
- Read more in [docs](https://actionpolicy.evilmartians.io/).
330
+ Read more in [docs](https://actionpolicy.evilmartians.io/).
273
331
 
274
332
  - Added `#implicit_authorization_target`. ([@palkan][]).
275
333
 
276
- See [#35](https://github.com/palkan/action_policy/issues/35).
334
+ See [#35](https://github.com/palkan/action_policy/issues/35).
277
335
 
278
- Implicit authorization target (defined by `implicit_authorization_target`) is used when no target specified for `authorize!` call.
336
+ Implicit authorization target (defined by `implicit_authorization_target`) is used when no target specified for `authorize!` call.
279
337
 
280
- For example, for Rails controllers integration it's just `controller_name.classify.safe_constantize`.
338
+ For example, for Rails controllers integration it's just `controller_name.classify.safe_constantize`.
281
339
 
282
340
  - Consider `record#policy_name` when looking up for a policy class. ([@palkan][])
283
341
 
@@ -291,21 +349,21 @@
291
349
 
292
350
  - Add ability to disable per-thread cache and disable it in test env by default. ([@palkan][])
293
351
 
294
- You can control per-thread cache by setting:
352
+ You can control per-thread cache by setting:
295
353
 
296
- ```ruby
297
- ActionPolicy::PerThreadCache.enabled = true # or false
298
- ```
354
+ ```ruby
355
+ ActionPolicy::PerThreadCache.enabled = true # or false
356
+ ```
299
357
 
300
358
  ## 0.2.3 (2018-07-03)
301
359
 
302
360
  - [Fix [#16](https://github.com/palkan/action_policy/issues/16)] Add ability to disable namespace resolution cache. ([@palkan][])
303
361
 
304
- We cache namespaced policy resolution for better performance (it could affect performance when we look up a policy from a deeply nested module context).
362
+ We cache namespaced policy resolution for better performance (it could affect performance when we look up a policy from a deeply nested module context).
305
363
 
306
- It could be disabled by setting `ActionPolicy::LookupChain.namespace_cache_enabled = false`. It's enabled by default unless `RACK_ENV` env var is specified and is not equal to `"production"` (e.g. when `RACK_ENV=test` the cache is disabled).
364
+ It could be disabled by setting `ActionPolicy::LookupChain.namespace_cache_enabled = false`. It's enabled by default unless `RACK_ENV` env var is specified and is not equal to `"production"` (e.g. when `RACK_ENV=test` the cache is disabled).
307
365
 
308
- When using Rails it's enabled only in production mode but could be configured through setting the `config.action_policy.namespace_cache_enabled` parameter.
366
+ When using Rails it's enabled only in production mode but could be configured through setting the `config.action_policy.namespace_cache_enabled` parameter.
309
367
 
310
368
  - [Fix [#18](https://github.com/palkan/action_policy/issues/18)] Clarify documentation around, and fix the way `resolve_rule` resolves rules and rule aliases when subclasses are involved. ([@brendon][])
311
369
 
@@ -313,11 +371,10 @@
313
371
 
314
372
  - [Fix [#29](https://github.com/palkan/action_policy/issues/29)] Fix loading cache middleware. ([@palkan][])
315
373
 
316
-
317
374
  - Use `send` instead of `public_send` to get the `authorization_context` so that contexts such as
318
375
  `current_user` can be `private` in the controller. ([@brendon][])
319
376
 
320
- - Fix railtie initialisation for Rails < 5. ([@brendon][])
377
+ - Fix railtie initialization for Rails < 5. ([@brendon][])
321
378
 
322
379
  ## 0.2.1 (yanked)
323
380
 
@@ -327,18 +384,18 @@
327
384
 
328
385
  - Add `reasons.details`. ([@palkan][])
329
386
 
330
- ```ruby
331
- rescue_from ActionPolicy::Unauthorized do |ex|
332
- ex.result.reasons.details #=> { stage: [:show?] }
333
- end
334
- ```
387
+ ```ruby
388
+ rescue_from ActionPolicy::Unauthorized do |ex|
389
+ ex.result.reasons.details #=> { stage: [:show?] }
390
+ end
391
+ ```
335
392
 
336
393
  - Add `ExecutionResult`. ([@palkan][])
337
394
 
338
- ExecutionResult contains all the rule application artifacts: the result (`true` / `false`),
339
- failures reasons.
395
+ ExecutionResult contains all the rule application artifacts: the result (`true` / `false`),
396
+ failures reasons.
340
397
 
341
- This value is now stored in a cache (if any) instead of just the call result (`true` / `false`).
398
+ This value is now stored in a cache (if any) instead of just the call result (`true` / `false`).
342
399
 
343
400
  - Add `Policy.identifier`. ([@palkan][])
344
401
 
@@ -371,3 +428,4 @@
371
428
  [@korolvs]: https://github.com/korolvs
372
429
  [@nicolas-brousse]: https://github.com/nicolas-brousse
373
430
  [@somenugget]: https://github.com/somenugget
431
+ [@Be-ngt-oH]: https://github.com/Be-ngt-oH