Module: Hubbado::Policy::Base::PolicyDSL::ClassMethods

Defined in:
lib/hubbado/policy/base.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#policiesObject (readonly)

Returns the value of attribute policies.



34
35
36
# File 'lib/hubbado/policy/base.rb', line 34

def policies
  @policies
end

Instance Method Details

#define_policy(policy, *args, **kwargs, &block) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/hubbado/policy/base.rb', line 16

def define_policy(policy, *args, **kwargs, &block)
  @policies ||= Set.new
  @policies << policy

  # NOTE: This uses the technique described here so that the block given to
  # define_policy can have return statements without causing LocalJumpError
  #   http://blog.jayfields.com/2007/03/ruby-localjumperror-workaround.html
  define_method policy, &block
  new_method = instance_method(policy)
  define_method policy do |*args, **kwargs|
    new_method.bind(self).call(*args, **kwargs) || denied
  end

  define_method "#{policy}?" do |*args, **kwargs|
    send(policy, *args, **kwargs).permitted?
  end
end

#inherited(subclass) ⇒ Object



10
11
12
13
14
# File 'lib/hubbado/policy/base.rb', line 10

def inherited(subclass)
  super
  # Copy policies from parent class to subclass
  subclass.instance_variable_set(:@policies, @policies&.dup || Set.new)
end