Class: Credentials::Rules::Rule

Inherits:
Object
  • Object
show all
Defined in:
lib/credentials/rules/rule.rb

Direct Known Subclasses

Can

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass, verb, *args) ⇒ Rule

Returns a new instance of Rule.



7
8
9
10
11
12
# File 'lib/credentials/rules/rule.rb', line 7

def initialize(klass, verb, *args)
  @klass = klass
  @verb = verb.to_sym
  @options = args.last.is_a?(Hash) ? args.pop : {}
  @pattern = Array(args)
end

Instance Attribute Details

#optionsObject

Returns the value of attribute options.



5
6
7
# File 'lib/credentials/rules/rule.rb', line 5

def options
  @options
end

#verbObject

Returns the value of attribute verb.



4
5
6
# File 'lib/credentials/rules/rule.rb', line 4

def verb
  @verb
end

Instance Method Details

#allow?(actor, verb, *args) ⇒ Boolean

Returns:

  • (Boolean)


21
22
23
24
25
26
27
# File 'lib/credentials/rules/rule.rb', line 21

def allow?(actor, verb, *args)
  return false unless match? actor, verb, *args
  result = true
  result &&= evaluate(@options[:if], actor, *args) if @options[:if]
  result &&= !evaluate(@options[:unless], actor, *args) if @options[:unless]
  result
end

#deny?(actor, verb, *args) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
32
33
34
# File 'lib/credentials/rules/rule.rb', line 29

def deny?(actor, verb, *args)
  return false unless match? actor, verb, *args
  result = false
  result ||= evaluate(@options[:unless], actor, *args) if @options[:unless]
  result
end

#match?(actor, verb, *args) ⇒ Boolean

Returns:

  • (Boolean)


14
15
16
17
18
19
# File 'lib/credentials/rules/rule.rb', line 14

def match?(actor, verb, *args)
  return false unless actor == @klass or actor.is_a?(@klass)
  return false unless @verb == :any or @verb == verb.to_sym
  return false unless args.size == @pattern.size
  @pattern.zip(args).each { |pattern, arg| return false unless !pattern.is_a?(Class) or arg == pattern or arg.is_a?(pattern) }
end