class Grognard::Guard
Attributes
can_dos[R]
current_abilities[R]
Public Class Methods
new(*arr_roles, hash_roles: {})
click to toggle source
# File lib/grognard/guard.rb, line 9 def initialize(*arr_roles, hash_roles: {}) @can_dos = {} @current_abilities = nil insert_array_roles(arr_roles) || insert_hash_roles(hash_roles) end
Public Instance Methods
<<(object)
click to toggle source
# File lib/grognard/guard.rb, line 30 def <<(object) add_role(object.name.underscore, object) self end
abilities_defined!(object)
click to toggle source
# File lib/grognard/guard.rb, line 43 def abilities_defined!(object) abilities_defined?(object) || raise_no_such_abilites end
abilities_defined?(object)
click to toggle source
# File lib/grognard/guard.rb, line 39 def abilities_defined?(object) object.respond_to?(:allowed_to) end
add_role(name, object)
click to toggle source
# File lib/grognard/guard.rb, line 22 def add_role(name, object) @can_dos[name.to_sym] = object if abilities_defined!(object) end
be_a(name)
click to toggle source
# File lib/grognard/guard.rb, line 17 def be_a(name) @current_abilities = @can_dos[name.to_sym] if role_defined! name self end
can?(action, object, subject)
click to toggle source
# File lib/grognard/guard.rb, line 35 def can?(action, object, subject) @current_abilities.allowed_to(object, subject).include? action end
method_missing(meth, *args, &block)
click to toggle source
Calls superclass method
# File lib/grognard/guard.rb, line 56 def method_missing(meth, *args, &block) meth = meth.to_s case when meth.match(/^be_a_(\w+)/) be_a($1, *args, &block) when meth.match(/^can_be_a_(\w+)?/) can_be_a?($1, *args, &block) when meth.match(/^can_(\w+)?/) can?($1.to_sym, *args, &block) else super end end
remove_role(name)
click to toggle source
# File lib/grognard/guard.rb, line 26 def remove_role(name) @can_dos.delete name.to_sym end
respond_to?(meth, include_private = false)
click to toggle source
Calls superclass method
# File lib/grognard/guard.rb, line 70 def respond_to?(meth, include_private = false) meth.to_s.start_with?("be_a_") || meth.to_s.start_with?("can_") || super end
role_defined!(name)
click to toggle source
# File lib/grognard/guard.rb, line 52 def role_defined!(name) role_defined?(name) || raise_no_such_role end
role_defined?(name)
click to toggle source
# File lib/grognard/guard.rb, line 48 def role_defined?(name) @can_dos.key?(name.to_sym) end
Also aliased as: can_be_a?
Protected Instance Methods
raise_no_such_abilites()
click to toggle source
# File lib/grognard/guard.rb, line 78 def raise_no_such_abilites fail AbilitiesNotDefinedError.new end
raise_no_such_role()
click to toggle source
# File lib/grognard/guard.rb, line 82 def raise_no_such_role fail RoleNotDefinedError.new end
Private Instance Methods
insert_array_roles(roles)
click to toggle source
# File lib/grognard/guard.rb, line 88 def insert_array_roles(roles) return unless roles.kind_of? Array roles.each do |role| add_role(role.name.underscore, role) end end
insert_hash_roles(roles)
click to toggle source
# File lib/grognard/guard.rb, line 95 def insert_hash_roles(roles) return unless roles.kind_of? Hash roles.each do |key, role| add_role(key, role) end end