class DeclarativePolicy::PolicyDsl
The return value of a rule { … } declaration. Can call back to register rules with the containing Policy class (context_class here). See Base.rule
Note that the policy
method just performs an instance_eval, which is useful for multiple enable
or prevent
calls.
Also provides a method_missing
proxy to the context class's class methods, so that helper methods can be defined and used in a policy
{ … } block.
Public Class Methods
new(context_class, rule)
click to toggle source
# File lib/declarative_policy/policy_dsl.rb, line 15 def initialize(context_class, rule) @context_class = context_class @rule = rule end
Public Instance Methods
enable(*abilities)
click to toggle source
# File lib/declarative_policy/policy_dsl.rb, line 24 def enable(*abilities) @context_class.enable_when(abilities, @rule) end
method_missing(msg, *args, &block)
click to toggle source
Calls superclass method
# File lib/declarative_policy/policy_dsl.rb, line 36 def method_missing(msg, *args, &block) return super unless @context_class.respond_to?(msg) @context_class.__send__(msg, *args, &block) # rubocop: disable GitlabSecurity/PublicSend end
policy(&block)
click to toggle source
# File lib/declarative_policy/policy_dsl.rb, line 20 def policy(&block) instance_eval(&block) end
prevent(*abilities)
click to toggle source
# File lib/declarative_policy/policy_dsl.rb, line 28 def prevent(*abilities) @context_class.prevent_when(abilities, @rule) end
prevent_all()
click to toggle source
# File lib/declarative_policy/policy_dsl.rb, line 32 def prevent_all @context_class.prevent_all_when(@rule) end
respond_to_missing?(msg)
click to toggle source
Calls superclass method
# File lib/declarative_policy/policy_dsl.rb, line 42 def respond_to_missing?(msg) @context_class.respond_to?(msg) || super end