Class: AbilityList
- Inherits:
-
Object
- Object
- AbilityList
- Defined in:
- lib/ability_list.rb,
lib/ability_list/version.rb
Defined Under Namespace
Modules: Helpers
Constant Summary collapse
- Error =
Class.new(StandardError)
- VERSION =
"0.0.3"
Instance Method Summary collapse
-
#authorize!(verb, object = nil) ⇒ Object
Ensures that the owner can perform ‘verb` on `object/class` – raises an error otherwise.
-
#can(verb, klass = nil, columns = [], &block) ⇒ Object
Declares that the owner can perform ‘verb` on `class`.
-
#can?(verb, object = nil, columns = []) ⇒ Boolean
Checks if the owner can perform ‘verb` on the given `object` (or class).
-
#cannot(verb, klass = nil, columns = [], &block) ⇒ Object
Inverse of ‘can`.
-
#cannot?(verb, object = nil, columns = []) ⇒ Boolean
Inverse of ‘can?`.
-
#rules ⇒ Object
Returns a list of rules.
-
#rules_for(verb, klass) ⇒ Object
Returns a subset of ‘rules` that match the given `verb` and `class`.
-
#unauthorize!(verb, object = nil) ⇒ Object
Inverse of ‘authorize!`.
Instance Method Details
#authorize!(verb, object = nil) ⇒ Object
Ensures that the owner can perform ‘verb` on `object/class` – raises an error otherwise.
46 47 48 |
# File 'lib/ability_list.rb', line 46 def (verb, object=nil) can?(verb, object) or raise Error.new("Access denied (#{verb})") end |
#can(verb, klass = nil, columns = [], &block) ⇒ Object
Declares that the owner can perform ‘verb` on `class`.
13 14 15 16 |
# File 'lib/ability_list.rb', line 13 def can(verb, klass=nil, columns=[], &block) columns = [columns] unless columns.is_a? Array rules << [true, verb, get_class(klass), columns, block] end |
#can?(verb, object = nil, columns = []) ⇒ Boolean
Checks if the owner can perform ‘verb` on the given `object` (or class).
27 28 29 30 31 32 33 34 35 |
# File 'lib/ability_list.rb', line 27 def can?(verb, object=nil, columns=[]) columns = [columns] unless columns.is_a? Array rules = rules_for(verb, get_class(object)) rules.inject(false) do |bool, (sign, _, _, cols, proc)| sign ? ((bool || !proc || proc.call(object)) && ((columns & cols) == columns)) : # can (bool && proc && !proc.call(object) && (columns.empty? || (columns & cols) != columns)) # cannot end end |
#cannot(verb, klass = nil, columns = [], &block) ⇒ Object
Inverse of ‘can`.
19 20 21 22 |
# File 'lib/ability_list.rb', line 19 def cannot(verb, klass=nil, columns=[], &block) columns = [columns] unless columns.is_a? Array rules << [false, verb, get_class(klass), columns, block] end |
#cannot?(verb, object = nil, columns = []) ⇒ Boolean
Inverse of ‘can?`.
38 39 40 |
# File 'lib/ability_list.rb', line 38 def cannot?(verb, object=nil, columns=[]) !can?(verb, object, columns) end |
#rules ⇒ Object
Returns a list of rules. These are populated by ‘can` and `cannot`. (Rules are tuples)
6 7 8 |
# File 'lib/ability_list.rb', line 6 def rules @rules ||= [] end |
#rules_for(verb, klass) ⇒ Object
Returns a subset of ‘rules` that match the given `verb` and `class`.
58 59 60 61 62 63 |
# File 'lib/ability_list.rb', line 58 def rules_for(verb, klass) rules.select do |(sign, _verb, _klass, cols, block)| (_verb == :manage || _verb == verb) && (_klass == :all || _klass == klass) end end |
#unauthorize!(verb, object = nil) ⇒ Object
Inverse of ‘authorize!`.
51 52 53 |
# File 'lib/ability_list.rb', line 51 def (verb, object=nil) cannot?(verb, object) or raise Error.new("Access denied (#{verb})") end |