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.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +233 -171
  3. data/LICENSE.txt +1 -1
  4. data/README.md +7 -11
  5. data/lib/action_policy.rb +7 -1
  6. data/lib/action_policy/behaviour.rb +22 -16
  7. data/lib/action_policy/behaviours/policy_for.rb +10 -3
  8. data/lib/action_policy/behaviours/scoping.rb +2 -1
  9. data/lib/action_policy/behaviours/thread_memoized.rb +1 -3
  10. data/lib/action_policy/ext/module_namespace.rb +1 -6
  11. data/lib/action_policy/ext/policy_cache_key.rb +15 -33
  12. data/lib/action_policy/ext/{symbol_classify.rb → symbol_camelize.rb} +6 -6
  13. data/lib/action_policy/i18n.rb +1 -1
  14. data/lib/action_policy/lookup_chain.rb +41 -21
  15. data/lib/action_policy/policy/aliases.rb +7 -12
  16. data/lib/action_policy/policy/authorization.rb +14 -17
  17. data/lib/action_policy/policy/cache.rb +34 -18
  18. data/lib/action_policy/policy/core.rb +25 -12
  19. data/lib/action_policy/policy/defaults.rb +3 -9
  20. data/lib/action_policy/policy/execution_result.rb +3 -9
  21. data/lib/action_policy/policy/pre_check.rb +19 -58
  22. data/lib/action_policy/policy/reasons.rb +30 -20
  23. data/lib/action_policy/policy/scoping.rb +5 -6
  24. data/lib/action_policy/rails/controller.rb +6 -1
  25. data/lib/action_policy/rails/ext/active_record.rb +7 -0
  26. data/lib/action_policy/rails/policy/instrumentation.rb +1 -1
  27. data/lib/action_policy/rspec/be_authorized_to.rb +5 -9
  28. data/lib/action_policy/rspec/dsl.rb +3 -3
  29. data/lib/action_policy/rspec/have_authorized_scope.rb +5 -7
  30. data/lib/action_policy/testing.rb +1 -1
  31. data/lib/action_policy/utils/pretty_print.rb +21 -24
  32. data/lib/action_policy/utils/suggest_message.rb +1 -3
  33. data/lib/action_policy/version.rb +1 -1
  34. data/lib/generators/action_policy/install/templates/{application_policy.rb → application_policy.rb.tt} +1 -1
  35. data/lib/generators/action_policy/policy/policy_generator.rb +4 -1
  36. data/lib/generators/action_policy/policy/templates/{policy.rb → policy.rb.tt} +0 -0
  37. data/lib/generators/rspec/templates/{policy_spec.rb → policy_spec.rb.tt} +0 -0
  38. data/lib/generators/test_unit/templates/{policy_test.rb → policy_test.rb.tt} +0 -0
  39. metadata +30 -119
  40. data/.gitattributes +0 -2
  41. data/.github/FUNDING.yml +0 -1
  42. data/.github/ISSUE_TEMPLATE.md +0 -18
  43. data/.github/PULL_REQUEST_TEMPLATE.md +0 -29
  44. data/.gitignore +0 -15
  45. data/.rubocop.yml +0 -54
  46. data/.tidelift.yml +0 -6
  47. data/.travis.yml +0 -31
  48. data/Gemfile +0 -22
  49. data/Rakefile +0 -27
  50. data/action_policy.gemspec +0 -44
  51. data/benchmarks/namespaced_lookup_cache.rb +0 -71
  52. data/bin/console +0 -14
  53. data/bin/setup +0 -8
  54. data/docs/.nojekyll +0 -0
  55. data/docs/CNAME +0 -1
  56. data/docs/README.md +0 -77
  57. data/docs/_sidebar.md +0 -27
  58. data/docs/aliases.md +0 -122
  59. data/docs/assets/docsify-search.js +0 -364
  60. data/docs/assets/docsify.min.js +0 -3
  61. data/docs/assets/fonts/FiraCode-Medium.woff +0 -0
  62. data/docs/assets/fonts/FiraCode-Regular.woff +0 -0
  63. data/docs/assets/images/banner.png +0 -0
  64. data/docs/assets/images/cache.png +0 -0
  65. data/docs/assets/images/cache.svg +0 -70
  66. data/docs/assets/images/layer.png +0 -0
  67. data/docs/assets/images/layer.svg +0 -35
  68. data/docs/assets/prism-ruby.min.js +0 -1
  69. data/docs/assets/styles.css +0 -347
  70. data/docs/assets/vue.min.css +0 -1
  71. data/docs/authorization_context.md +0 -92
  72. data/docs/behaviour.md +0 -113
  73. data/docs/caching.md +0 -273
  74. data/docs/controller_action_aliases.md +0 -109
  75. data/docs/custom_lookup_chain.md +0 -48
  76. data/docs/custom_policy.md +0 -53
  77. data/docs/debugging.md +0 -55
  78. data/docs/decorators.md +0 -27
  79. data/docs/favicon.ico +0 -0
  80. data/docs/graphql.md +0 -302
  81. data/docs/i18n.md +0 -44
  82. data/docs/index.html +0 -43
  83. data/docs/instrumentation.md +0 -84
  84. data/docs/lookup_chain.md +0 -17
  85. data/docs/namespaces.md +0 -77
  86. data/docs/non_rails.md +0 -28
  87. data/docs/pre_checks.md +0 -57
  88. data/docs/pundit_migration.md +0 -80
  89. data/docs/quick_start.md +0 -118
  90. data/docs/rails.md +0 -120
  91. data/docs/reasons.md +0 -120
  92. data/docs/scoping.md +0 -255
  93. data/docs/testing.md +0 -333
  94. data/docs/writing_policies.md +0 -107
  95. data/gemfiles/jruby.gemfile +0 -8
  96. data/gemfiles/rails42.gemfile +0 -8
  97. data/gemfiles/rails6.gemfile +0 -8
  98. data/gemfiles/railsmaster.gemfile +0 -6
  99. data/lib/action_policy/ext/string_match.rb +0 -14
  100. 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.reasons.add(policy, rule, res.details) if res.fail?
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
- @scope_matchers =
152
- if superclass.respond_to?(:scope_matchers)
153
- superclass.scope_matchers.dup
154
- else
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? { |call| call.matches?(policy, rule, target) }
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 |acall|
76
- " - #{acall.inspect}"
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
- :target_expectations
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 { |scope| scope.matches?(policy, type, name, scope_options) }
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 |ascope|
113
- " - #{ascope.inspect}"
110
+ actual_scopes.map do
111
+ " - #{_1.inspect}"
114
112
  end.join("\n")
115
113
  end
116
114
  end
@@ -15,7 +15,7 @@ module ActionPolicy
15
15
 
16
16
  def matches?(policy_class, actual_rule, target)
17
17
  policy_class == policy.class &&
18
- target === policy.record &&
18
+ (target.is_a?(Class) ? target == policy.record : target === policy.record) &&
19
19
  rule == actual_rule
20
20
  end
21
21
 
@@ -16,10 +16,7 @@ ensure
16
16
  end
17
17
 
18
18
  module ActionPolicy
19
- unless "".respond_to?(:then)
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 = "\e[32mtrue\e[0m"
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?(/^\s*binding\.(pry|irb)\s*$/)
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.method(:parse))
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
- end
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
@@ -13,9 +13,7 @@ module ActionPolicy
13
13
  suggestion ? "\nDid you mean? #{suggestion}" : ""
14
14
  end
15
15
  else
16
- def suggest(*)
17
- ""
18
- end
16
+ def suggest(*) = ""
19
17
  end
20
18
  end
21
19
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActionPolicy
4
- VERSION = "0.4.0"
4
+ VERSION = "0.5.0"
5
5
  end
@@ -5,7 +5,7 @@ class ApplicationPolicy < ActionPolicy::Base
5
5
  #
6
6
  # authorize :account, optional: true
7
7
  #
8
- # Read more about authoriztion context: https://actionpolicy.evilmartians.io/#/authorization_context
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
- return if ::Rails.root.join("app/policies/application_policy.rb").exist?
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
 
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.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: 2019-12-12 00:00:00.000000000 Z
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: '10.0'
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: '10.0'
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: 0.0.39
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: 0.0.39
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/symbol_classify.rb
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.4.0
208
+ version: 2.5.0
298
209
  required_rubygems_version: !ruby/object:Gem::Requirement
299
210
  requirements:
300
211
  - - ">="