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