action_policy 0.4.0 → 0.5.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 +4 -4
- data/CHANGELOG.md +233 -171
- data/LICENSE.txt +1 -1
- data/README.md +7 -11
- data/lib/action_policy.rb +7 -1
- data/lib/action_policy/behaviour.rb +22 -16
- data/lib/action_policy/behaviours/policy_for.rb +10 -3
- data/lib/action_policy/behaviours/scoping.rb +2 -1
- data/lib/action_policy/behaviours/thread_memoized.rb +1 -3
- data/lib/action_policy/ext/module_namespace.rb +1 -6
- data/lib/action_policy/ext/policy_cache_key.rb +15 -33
- data/lib/action_policy/ext/{symbol_classify.rb → symbol_camelize.rb} +6 -6
- data/lib/action_policy/i18n.rb +1 -1
- data/lib/action_policy/lookup_chain.rb +41 -21
- data/lib/action_policy/policy/aliases.rb +7 -12
- data/lib/action_policy/policy/authorization.rb +14 -17
- data/lib/action_policy/policy/cache.rb +34 -18
- data/lib/action_policy/policy/core.rb +25 -12
- data/lib/action_policy/policy/defaults.rb +3 -9
- data/lib/action_policy/policy/execution_result.rb +3 -9
- data/lib/action_policy/policy/pre_check.rb +19 -58
- data/lib/action_policy/policy/reasons.rb +30 -20
- data/lib/action_policy/policy/scoping.rb +5 -6
- data/lib/action_policy/rails/controller.rb +6 -1
- data/lib/action_policy/rails/ext/active_record.rb +7 -0
- data/lib/action_policy/rails/policy/instrumentation.rb +1 -1
- data/lib/action_policy/rspec/be_authorized_to.rb +5 -9
- data/lib/action_policy/rspec/dsl.rb +3 -3
- data/lib/action_policy/rspec/have_authorized_scope.rb +5 -7
- data/lib/action_policy/testing.rb +1 -1
- data/lib/action_policy/utils/pretty_print.rb +21 -24
- data/lib/action_policy/utils/suggest_message.rb +1 -3
- data/lib/action_policy/version.rb +1 -1
- data/lib/generators/action_policy/install/templates/{application_policy.rb → application_policy.rb.tt} +1 -1
- data/lib/generators/action_policy/policy/policy_generator.rb +4 -1
- data/lib/generators/action_policy/policy/templates/{policy.rb → policy.rb.tt} +0 -0
- data/lib/generators/rspec/templates/{policy_spec.rb → policy_spec.rb.tt} +0 -0
- data/lib/generators/test_unit/templates/{policy_test.rb → policy_test.rb.tt} +0 -0
- metadata +30 -119
- data/.gitattributes +0 -2
- data/.github/FUNDING.yml +0 -1
- data/.github/ISSUE_TEMPLATE.md +0 -18
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -29
- data/.gitignore +0 -15
- data/.rubocop.yml +0 -54
- data/.tidelift.yml +0 -6
- data/.travis.yml +0 -31
- data/Gemfile +0 -22
- data/Rakefile +0 -27
- data/action_policy.gemspec +0 -44
- data/benchmarks/namespaced_lookup_cache.rb +0 -71
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/docs/.nojekyll +0 -0
- data/docs/CNAME +0 -1
- data/docs/README.md +0 -77
- data/docs/_sidebar.md +0 -27
- data/docs/aliases.md +0 -122
- data/docs/assets/docsify-search.js +0 -364
- data/docs/assets/docsify.min.js +0 -3
- data/docs/assets/fonts/FiraCode-Medium.woff +0 -0
- data/docs/assets/fonts/FiraCode-Regular.woff +0 -0
- data/docs/assets/images/banner.png +0 -0
- data/docs/assets/images/cache.png +0 -0
- data/docs/assets/images/cache.svg +0 -70
- data/docs/assets/images/layer.png +0 -0
- data/docs/assets/images/layer.svg +0 -35
- data/docs/assets/prism-ruby.min.js +0 -1
- data/docs/assets/styles.css +0 -347
- data/docs/assets/vue.min.css +0 -1
- data/docs/authorization_context.md +0 -92
- data/docs/behaviour.md +0 -113
- data/docs/caching.md +0 -273
- data/docs/controller_action_aliases.md +0 -109
- data/docs/custom_lookup_chain.md +0 -48
- data/docs/custom_policy.md +0 -53
- data/docs/debugging.md +0 -55
- data/docs/decorators.md +0 -27
- data/docs/favicon.ico +0 -0
- data/docs/graphql.md +0 -302
- data/docs/i18n.md +0 -44
- data/docs/index.html +0 -43
- data/docs/instrumentation.md +0 -84
- data/docs/lookup_chain.md +0 -17
- data/docs/namespaces.md +0 -77
- data/docs/non_rails.md +0 -28
- data/docs/pre_checks.md +0 -57
- data/docs/pundit_migration.md +0 -80
- data/docs/quick_start.md +0 -118
- data/docs/rails.md +0 -120
- data/docs/reasons.md +0 -120
- data/docs/scoping.md +0 -255
- data/docs/testing.md +0 -333
- data/docs/writing_policies.md +0 -107
- data/gemfiles/jruby.gemfile +0 -8
- data/gemfiles/rails42.gemfile +0 -8
- data/gemfiles/rails6.gemfile +0 -8
- data/gemfiles/railsmaster.gemfile +0 -6
- data/lib/action_policy/ext/string_match.rb +0 -14
- data/lib/action_policy/ext/yield_self_then.rb +0 -25
@@ -1,16 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
unless "".respond_to?(:then)
|
4
|
-
require "action_policy/ext/yield_self_then"
|
5
|
-
using ActionPolicy::Ext::YieldSelfThen
|
6
|
-
end
|
7
|
-
|
8
|
-
unless {}.respond_to?(:transform_keys)
|
9
|
-
require "action_policy/ext/hash_transform_keys"
|
10
|
-
using ActionPolicy::Ext::HashTransformKeys
|
11
|
-
end
|
12
|
-
|
13
3
|
module ActionPolicy
|
4
|
+
using RubyNext
|
5
|
+
|
14
6
|
module Policy
|
15
7
|
# Failures reasons store
|
16
8
|
class FailureReasons
|
@@ -33,17 +25,11 @@ module ActionPolicy
|
|
33
25
|
|
34
26
|
# Return Hash of the form:
|
35
27
|
# { policy_identifier => [rules, ...] }
|
36
|
-
def details
|
37
|
-
reasons.transform_keys(&:identifier)
|
38
|
-
end
|
28
|
+
def details() = reasons.transform_keys(&:identifier)
|
39
29
|
|
40
|
-
def empty?
|
41
|
-
reasons.empty?
|
42
|
-
end
|
30
|
+
def empty?() = reasons.empty?
|
43
31
|
|
44
|
-
def present?
|
45
|
-
!empty?
|
46
|
-
end
|
32
|
+
def present?() = !empty?
|
47
33
|
|
48
34
|
private
|
49
35
|
|
@@ -82,6 +68,25 @@ module ActionPolicy
|
|
82
68
|
@details = nil
|
83
69
|
end
|
84
70
|
|
71
|
+
# Returns all the details merged together
|
72
|
+
def all_details
|
73
|
+
return @all_details if defined?(@all_details)
|
74
|
+
|
75
|
+
{}.tap do |all|
|
76
|
+
next unless defined?(@reasons)
|
77
|
+
|
78
|
+
reasons.reasons.each_value do |rules|
|
79
|
+
detailed_reasons = rules.last
|
80
|
+
|
81
|
+
next unless detailed_reasons.is_a?(Hash)
|
82
|
+
|
83
|
+
detailed_reasons.each_value do |details|
|
84
|
+
all.merge!(details)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end => @all_details
|
88
|
+
end
|
89
|
+
|
85
90
|
# Add reasons to inspect
|
86
91
|
def inspect
|
87
92
|
super.then do |str|
|
@@ -189,12 +194,17 @@ module ActionPolicy
|
|
189
194
|
policy.result
|
190
195
|
end
|
191
196
|
|
192
|
-
result
|
197
|
+
result&.reasons&.add(policy, rule, res.details) if res.fail?
|
193
198
|
|
194
199
|
res.clear_details
|
195
200
|
|
196
201
|
res.success?
|
197
202
|
end
|
203
|
+
|
204
|
+
def deny!(reason = nil)
|
205
|
+
result&.reasons&.add(self, reason) if reason
|
206
|
+
super()
|
207
|
+
end
|
198
208
|
end
|
199
209
|
end
|
200
210
|
end
|
@@ -148,12 +148,11 @@ module ActionPolicy
|
|
148
148
|
def scope_matchers
|
149
149
|
return @scope_matchers if instance_variable_defined?(:@scope_matchers)
|
150
150
|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
end
|
151
|
+
if superclass.respond_to?(:scope_matchers)
|
152
|
+
superclass.scope_matchers.dup
|
153
|
+
else
|
154
|
+
[]
|
155
|
+
end => @scope_matchers
|
157
156
|
end
|
158
157
|
end
|
159
158
|
end
|
@@ -26,6 +26,7 @@ module ActionPolicy
|
|
26
26
|
helper_method :allowed_to? if respond_to?(:helper_method)
|
27
27
|
|
28
28
|
attr_writer :authorize_count
|
29
|
+
attr_reader :verify_authorized_skipped
|
29
30
|
|
30
31
|
protected :authorize_count=, :authorize_count
|
31
32
|
end
|
@@ -57,13 +58,17 @@ module ActionPolicy
|
|
57
58
|
|
58
59
|
def verify_authorized
|
59
60
|
raise UnauthorizedAction.new(controller_path, action_name) if
|
60
|
-
authorize_count.zero?
|
61
|
+
authorize_count.zero? && !verify_authorized_skipped
|
61
62
|
end
|
62
63
|
|
63
64
|
def authorize_count
|
64
65
|
@authorize_count ||= 0
|
65
66
|
end
|
66
67
|
|
68
|
+
def skip_verify_authorized!
|
69
|
+
@verify_authorized_skipped = true
|
70
|
+
end
|
71
|
+
|
67
72
|
class_methods do
|
68
73
|
# Adds after_action callback to check that
|
69
74
|
# authorize! method has been called.
|
@@ -7,4 +7,11 @@ ActiveRecord::Relation.include(Module.new do
|
|
7
7
|
def policy_cache_key
|
8
8
|
object_id
|
9
9
|
end
|
10
|
+
|
11
|
+
# Explicitly define the policy_class method to avoid
|
12
|
+
# making Relation immutable (by initializing `arel` in `#respond_to_missing?).
|
13
|
+
# See https://github.com/palkan/action_policy/issues/101
|
14
|
+
def policy_class
|
15
|
+
nil
|
16
|
+
end
|
10
17
|
end)
|
@@ -11,7 +11,7 @@ module ActionPolicy # :nodoc:
|
|
11
11
|
INIT_EVENT_NAME = "action_policy.init"
|
12
12
|
APPLY_EVENT_NAME = "action_policy.apply_rule"
|
13
13
|
|
14
|
-
def initialize(
|
14
|
+
def initialize(record = nil, **params)
|
15
15
|
event = {policy: self.class.name}
|
16
16
|
ActiveSupport::Notifications.instrument(INIT_EVENT_NAME, event) { super }
|
17
17
|
end
|
@@ -45,16 +45,14 @@ module ActionPolicy
|
|
45
45
|
|
46
46
|
@actual_calls = ActionPolicy::Testing::AuthorizeTracker.calls
|
47
47
|
|
48
|
-
actual_calls.any? {
|
48
|
+
actual_calls.any? { _1.matches?(policy, rule, target) }
|
49
49
|
end
|
50
50
|
|
51
51
|
def does_not_match?(*)
|
52
52
|
raise "This matcher doesn't support negation"
|
53
53
|
end
|
54
54
|
|
55
|
-
def supports_block_expectations?
|
56
|
-
true
|
57
|
-
end
|
55
|
+
def supports_block_expectations?() = true
|
58
56
|
|
59
57
|
def failure_message
|
60
58
|
"expected #{formatted_record} " \
|
@@ -72,14 +70,12 @@ module ActionPolicy
|
|
72
70
|
end
|
73
71
|
|
74
72
|
def formatted_calls
|
75
|
-
actual_calls.map do
|
76
|
-
" - #{
|
73
|
+
actual_calls.map do
|
74
|
+
" - #{_1.inspect}"
|
77
75
|
end.join("\n")
|
78
76
|
end
|
79
77
|
|
80
|
-
def formatted_record(record = target)
|
81
|
-
::RSpec::Support::ObjectFormatter.format(record)
|
82
|
-
end
|
78
|
+
def formatted_record(record = target) = ::RSpec::Support::ObjectFormatter.format(record)
|
83
79
|
end
|
84
80
|
end
|
85
81
|
end
|
@@ -50,7 +50,7 @@ if defined?(::RSpec)
|
|
50
50
|
::RSpec.shared_context "action_policy:policy_context" do
|
51
51
|
let(:record) { nil }
|
52
52
|
let(:context) { {} }
|
53
|
-
let(:policy) { described_class.new(record, context) }
|
53
|
+
let(:policy) { described_class.new(record, **context) }
|
54
54
|
end
|
55
55
|
|
56
56
|
::RSpec.shared_context "action_policy:policy_rule_context" do |policy_rule, *args, method: "describe", block: nil|
|
@@ -68,7 +68,7 @@ if defined?(::RSpec)
|
|
68
68
|
|
69
69
|
::RSpec.shared_examples_for "action_policy:policy_rule_example" do |success, the_caller|
|
70
70
|
if success
|
71
|
-
specify do
|
71
|
+
specify "is allowed" do
|
72
72
|
next if subject.success?
|
73
73
|
raise(
|
74
74
|
RSpec::Expectations::ExpectationNotMetError,
|
@@ -77,7 +77,7 @@ if defined?(::RSpec)
|
|
77
77
|
)
|
78
78
|
end
|
79
79
|
else
|
80
|
-
specify do
|
80
|
+
specify "is denied" do
|
81
81
|
next if subject.fail?
|
82
82
|
raise(
|
83
83
|
RSpec::Expectations::ExpectationNotMetError,
|
@@ -21,7 +21,7 @@ module ActionPolicy
|
|
21
21
|
#
|
22
22
|
class HaveAuthorizedScope < ::RSpec::Matchers::BuiltIn::BaseMatcher
|
23
23
|
attr_reader :type, :name, :policy, :scope_options, :actual_scopes,
|
24
|
-
|
24
|
+
:target_expectations
|
25
25
|
|
26
26
|
def initialize(type)
|
27
27
|
@type = type
|
@@ -56,7 +56,7 @@ module ActionPolicy
|
|
56
56
|
|
57
57
|
@actual_scopes = ActionPolicy::Testing::AuthorizeTracker.scopings
|
58
58
|
|
59
|
-
matching_scopes = actual_scopes.select {
|
59
|
+
matching_scopes = actual_scopes.select { _1.matches?(policy, type, name, scope_options) }
|
60
60
|
|
61
61
|
return false if matching_scopes.empty?
|
62
62
|
|
@@ -75,9 +75,7 @@ module ActionPolicy
|
|
75
75
|
raise "This matcher doesn't support negation"
|
76
76
|
end
|
77
77
|
|
78
|
-
def supports_block_expectations?
|
79
|
-
true
|
80
|
-
end
|
78
|
+
def supports_block_expectations?() = true
|
81
79
|
|
82
80
|
def failure_message
|
83
81
|
"expected a scoping named :#{name} for type :#{type} " \
|
@@ -109,8 +107,8 @@ module ActionPolicy
|
|
109
107
|
end
|
110
108
|
|
111
109
|
def formatted_scopings
|
112
|
-
actual_scopes.map do
|
113
|
-
" - #{
|
110
|
+
actual_scopes.map do
|
111
|
+
" - #{_1.inspect}"
|
114
112
|
end.join("\n")
|
115
113
|
end
|
116
114
|
end
|
@@ -16,10 +16,7 @@ ensure
|
|
16
16
|
end
|
17
17
|
|
18
18
|
module ActionPolicy
|
19
|
-
|
20
|
-
require "action_policy/ext/yield_self_then"
|
21
|
-
using ActionPolicy::Ext::YieldSelfThen
|
22
|
-
end
|
19
|
+
using RubyNext
|
23
20
|
|
24
21
|
# Takes the object and a method name,
|
25
22
|
# and returns the "annotated" source code for the method:
|
@@ -41,7 +38,7 @@ module ActionPolicy
|
|
41
38
|
# #=> AND
|
42
39
|
# #=> access_feed? #=> true
|
43
40
|
module PrettyPrint
|
44
|
-
TRUE =
|
41
|
+
TRUE = "\e[32mtrue\e[0m"
|
45
42
|
FALSE = "\e[31mfalse\e[0m"
|
46
43
|
|
47
44
|
class Visitor
|
@@ -71,7 +68,7 @@ module ActionPolicy
|
|
71
68
|
|
72
69
|
def expression_with_result(sexp)
|
73
70
|
expression = Unparser.unparse(sexp)
|
74
|
-
"#{expression} #=> #{colorize(eval_exp(expression))}"
|
71
|
+
"#{expression} #=> #{PrettyPrint.colorize(eval_exp(expression))}"
|
75
72
|
end
|
76
73
|
|
77
74
|
def eval_exp(exp)
|
@@ -124,39 +121,39 @@ module ActionPolicy
|
|
124
121
|
|
125
122
|
# Some lines should not be evaled
|
126
123
|
def ignore_exp?(exp)
|
127
|
-
exp.match?(
|
128
|
-
end
|
129
|
-
|
130
|
-
def colorize(val)
|
131
|
-
return val unless $stdout.isatty
|
132
|
-
return TRUE if val.eql?(true)
|
133
|
-
return FALSE if val.eql?(false)
|
134
|
-
val
|
124
|
+
PrettyPrint.ignore_expressions.any? { exp.match?(_1) }
|
135
125
|
end
|
136
126
|
end
|
137
127
|
|
138
128
|
class << self
|
129
|
+
attr_accessor :ignore_expressions
|
130
|
+
|
139
131
|
if defined?(::Unparser) && defined?(::MethodSource)
|
140
|
-
def available?
|
141
|
-
true
|
142
|
-
end
|
132
|
+
def available?() = true
|
143
133
|
|
144
134
|
def print_method(object, method_name)
|
145
|
-
ast = object.method(method_name).source.then(&Unparser
|
135
|
+
ast = object.method(method_name).source.then(&Unparser.:parse)
|
146
136
|
# outer node is a method definition itself
|
147
137
|
body = ast.children[2]
|
148
138
|
|
149
139
|
Visitor.new(object).collect(body)
|
150
140
|
end
|
151
141
|
else
|
152
|
-
def available?
|
153
|
-
false
|
154
|
-
end
|
142
|
+
def available?() = false
|
155
143
|
|
156
|
-
def print_method(_, _)
|
157
|
-
|
158
|
-
|
144
|
+
def print_method(_, _) = ""
|
145
|
+
end
|
146
|
+
|
147
|
+
def colorize(val)
|
148
|
+
return val unless $stdout.isatty
|
149
|
+
return TRUE if val.eql?(true)
|
150
|
+
return FALSE if val.eql?(false)
|
151
|
+
val
|
159
152
|
end
|
160
153
|
end
|
154
|
+
|
155
|
+
self.ignore_expressions = [
|
156
|
+
/^\s*binding\.(pry|irb)\s*$/s
|
157
|
+
]
|
161
158
|
end
|
162
159
|
end
|
@@ -5,7 +5,7 @@ class ApplicationPolicy < ActionPolicy::Base
|
|
5
5
|
#
|
6
6
|
# authorize :account, optional: true
|
7
7
|
#
|
8
|
-
# Read more about
|
8
|
+
# Read more about authorization context: https://actionpolicy.evilmartians.io/#/authorization_context
|
9
9
|
|
10
10
|
private
|
11
11
|
|
@@ -8,7 +8,10 @@ module ActionPolicy
|
|
8
8
|
source_root File.expand_path("templates", __dir__)
|
9
9
|
|
10
10
|
def run_install_if_needed
|
11
|
-
|
11
|
+
in_root do
|
12
|
+
return if File.exist?("app/policies/application_policy.rb")
|
13
|
+
end
|
14
|
+
|
12
15
|
generate "action_policy:install"
|
13
16
|
end
|
14
17
|
|
File without changes
|
File without changes
|
File without changes
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: action_policy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Dementyev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-09-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ruby-next-core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.10.3
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.10.3
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: ammeter
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,72 +70,30 @@ dependencies:
|
|
56
70
|
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- - "
|
73
|
+
- - ">="
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
75
|
+
version: '13.0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- - "
|
80
|
+
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
82
|
+
version: '13.0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: rspec
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- - "
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '3.3'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '3.3'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rubocop
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 0.67.0
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 0.67.0
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: rubocop-md
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0.2'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0.2'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: standard
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
87
|
+
- - ">="
|
116
88
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
89
|
+
version: '3.9'
|
118
90
|
type: :development
|
119
91
|
prerelease: false
|
120
92
|
version_requirements: !ruby/object:Gem::Requirement
|
121
93
|
requirements:
|
122
|
-
- - "
|
94
|
+
- - ">="
|
123
95
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
96
|
+
version: '3.9'
|
125
97
|
- !ruby/object:Gem::Dependency
|
126
98
|
name: benchmark-ips
|
127
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -157,68 +129,9 @@ executables: []
|
|
157
129
|
extensions: []
|
158
130
|
extra_rdoc_files: []
|
159
131
|
files:
|
160
|
-
- ".gitattributes"
|
161
|
-
- ".github/FUNDING.yml"
|
162
|
-
- ".github/ISSUE_TEMPLATE.md"
|
163
|
-
- ".github/PULL_REQUEST_TEMPLATE.md"
|
164
|
-
- ".gitignore"
|
165
|
-
- ".rubocop.yml"
|
166
|
-
- ".tidelift.yml"
|
167
|
-
- ".travis.yml"
|
168
132
|
- CHANGELOG.md
|
169
|
-
- Gemfile
|
170
133
|
- LICENSE.txt
|
171
134
|
- README.md
|
172
|
-
- Rakefile
|
173
|
-
- action_policy.gemspec
|
174
|
-
- benchmarks/namespaced_lookup_cache.rb
|
175
|
-
- bin/console
|
176
|
-
- bin/setup
|
177
|
-
- docs/.nojekyll
|
178
|
-
- docs/CNAME
|
179
|
-
- docs/README.md
|
180
|
-
- docs/_sidebar.md
|
181
|
-
- docs/aliases.md
|
182
|
-
- docs/assets/docsify-search.js
|
183
|
-
- docs/assets/docsify.min.js
|
184
|
-
- docs/assets/fonts/FiraCode-Medium.woff
|
185
|
-
- docs/assets/fonts/FiraCode-Regular.woff
|
186
|
-
- docs/assets/images/banner.png
|
187
|
-
- docs/assets/images/cache.png
|
188
|
-
- docs/assets/images/cache.svg
|
189
|
-
- docs/assets/images/layer.png
|
190
|
-
- docs/assets/images/layer.svg
|
191
|
-
- docs/assets/prism-ruby.min.js
|
192
|
-
- docs/assets/styles.css
|
193
|
-
- docs/assets/vue.min.css
|
194
|
-
- docs/authorization_context.md
|
195
|
-
- docs/behaviour.md
|
196
|
-
- docs/caching.md
|
197
|
-
- docs/controller_action_aliases.md
|
198
|
-
- docs/custom_lookup_chain.md
|
199
|
-
- docs/custom_policy.md
|
200
|
-
- docs/debugging.md
|
201
|
-
- docs/decorators.md
|
202
|
-
- docs/favicon.ico
|
203
|
-
- docs/graphql.md
|
204
|
-
- docs/i18n.md
|
205
|
-
- docs/index.html
|
206
|
-
- docs/instrumentation.md
|
207
|
-
- docs/lookup_chain.md
|
208
|
-
- docs/namespaces.md
|
209
|
-
- docs/non_rails.md
|
210
|
-
- docs/pre_checks.md
|
211
|
-
- docs/pundit_migration.md
|
212
|
-
- docs/quick_start.md
|
213
|
-
- docs/rails.md
|
214
|
-
- docs/reasons.md
|
215
|
-
- docs/scoping.md
|
216
|
-
- docs/testing.md
|
217
|
-
- docs/writing_policies.md
|
218
|
-
- gemfiles/jruby.gemfile
|
219
|
-
- gemfiles/rails42.gemfile
|
220
|
-
- gemfiles/rails6.gemfile
|
221
|
-
- gemfiles/railsmaster.gemfile
|
222
135
|
- lib/action_policy.rb
|
223
136
|
- lib/action_policy/authorizer.rb
|
224
137
|
- lib/action_policy/base.rb
|
@@ -233,10 +146,8 @@ files:
|
|
233
146
|
- lib/action_policy/ext/module_namespace.rb
|
234
147
|
- lib/action_policy/ext/policy_cache_key.rb
|
235
148
|
- lib/action_policy/ext/string_constantize.rb
|
236
|
-
- lib/action_policy/ext/string_match.rb
|
237
149
|
- lib/action_policy/ext/string_underscore.rb
|
238
|
-
- lib/action_policy/ext/
|
239
|
-
- lib/action_policy/ext/yield_self_then.rb
|
150
|
+
- lib/action_policy/ext/symbol_camelize.rb
|
240
151
|
- lib/action_policy/i18n.rb
|
241
152
|
- lib/action_policy/lookup_chain.rb
|
242
153
|
- lib/action_policy/policy/aliases.rb
|
@@ -269,14 +180,14 @@ files:
|
|
269
180
|
- lib/action_policy/version.rb
|
270
181
|
- lib/generators/action_policy/install/USAGE
|
271
182
|
- lib/generators/action_policy/install/install_generator.rb
|
272
|
-
- lib/generators/action_policy/install/templates/application_policy.rb
|
183
|
+
- lib/generators/action_policy/install/templates/application_policy.rb.tt
|
273
184
|
- lib/generators/action_policy/policy/USAGE
|
274
185
|
- lib/generators/action_policy/policy/policy_generator.rb
|
275
|
-
- lib/generators/action_policy/policy/templates/policy.rb
|
186
|
+
- lib/generators/action_policy/policy/templates/policy.rb.tt
|
276
187
|
- lib/generators/rspec/policy_generator.rb
|
277
|
-
- lib/generators/rspec/templates/policy_spec.rb
|
188
|
+
- lib/generators/rspec/templates/policy_spec.rb.tt
|
278
189
|
- lib/generators/test_unit/policy_generator.rb
|
279
|
-
- lib/generators/test_unit/templates/policy_test.rb
|
190
|
+
- lib/generators/test_unit/templates/policy_test.rb.tt
|
280
191
|
homepage: https://github.com/palkan/action_policy
|
281
192
|
licenses:
|
282
193
|
- MIT
|
@@ -294,7 +205,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
294
205
|
requirements:
|
295
206
|
- - ">="
|
296
207
|
- !ruby/object:Gem::Version
|
297
|
-
version: 2.
|
208
|
+
version: 2.5.0
|
298
209
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
299
210
|
requirements:
|
300
211
|
- - ">="
|