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.4"
Class Method Summary collapse
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!`.
Class Method Details
.version ⇒ Object
4 5 6 |
# File 'lib/ability_list.rb', line 4 def self.version VERSION end |
Instance Method Details
#authorize!(verb, object = nil) ⇒ Object
Ensures that the owner can perform ‘verb` on `object/class` – raises an error otherwise.
50 51 52 |
# File 'lib/ability_list.rb', line 50 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`.
17 18 19 20 |
# File 'lib/ability_list.rb', line 17 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).
31 32 33 34 35 36 37 38 39 |
# File 'lib/ability_list.rb', line 31 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`.
23 24 25 26 |
# File 'lib/ability_list.rb', line 23 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?`.
42 43 44 |
# File 'lib/ability_list.rb', line 42 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)
10 11 12 |
# File 'lib/ability_list.rb', line 10 def rules @rules ||= [] end |
#rules_for(verb, klass) ⇒ Object
Returns a subset of ‘rules` that match the given `verb` and `class`.
62 63 64 65 66 67 |
# File 'lib/ability_list.rb', line 62 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!`.
55 56 57 |
# File 'lib/ability_list.rb', line 55 def (verb, object=nil) cannot?(verb, object) or raise Error.new("Access denied (#{verb})") end |