Class: Credentials::Rules::Rule
- Inherits:
-
Object
- Object
- Credentials::Rules::Rule
- Defined in:
- lib/credentials/rules/rule.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#options ⇒ Object
Returns the value of attribute options.
-
#verb ⇒ Object
Returns the value of attribute verb.
Instance Method Summary collapse
- #allow?(actor, verb, *args) ⇒ Boolean
- #deny?(actor, verb, *args) ⇒ Boolean
-
#initialize(klass, verb, *args) ⇒ Rule
constructor
A new instance of Rule.
- #match?(actor, verb, *args) ⇒ Boolean
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
#options ⇒ Object
Returns the value of attribute options.
5 6 7 |
# File 'lib/credentials/rules/rule.rb', line 5 def @options end |
#verb ⇒ Object
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
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
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
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 |