module RoleModel::ClassMethods
Public Instance Methods
mask_for(*roles)
click to toggle source
# File lib/role_model/class_methods.rb, line 21 def mask_for(*roles) sanitized_roles = roles.map { |role| Array(role) }.flatten.map(&:to_sym) (valid_roles & sanitized_roles).inject(0) { |sum, role| sum + 2**valid_roles.index(role) } end
roles_attribute(name)
click to toggle source
set the bitmask attribute role assignments will be stored in
# File lib/role_model/class_methods.rb, line 12 def roles_attribute(name) self.roles_attribute = name end
roles_attribute=(name)
click to toggle source
alternative method signature: set the bitmask attribute role assignments will be stored in
# File lib/role_model/class_methods.rb, line 17 def roles_attribute=(name) self.roles_attribute_name = name.to_sym end
roles_from_mask(mask)
click to toggle source
# File lib/role_model/class_methods.rb, line 27 def roles_from_mask(mask) valid_roles.reject { |role| (mask.to_i & 2**valid_roles.index(role)).zero? } end
Protected Instance Methods
define_dynamic_queries(roles)
click to toggle source
Defines dynamic queries for :role
#is_<:role>? #<:role>?
Defines new methods which call is?(:role)
# File lib/role_model/class_methods.rb, line 53 def define_dynamic_queries(roles) dynamic_module = Module.new do roles.each do |role| ["#{role}?".to_sym, "is_#{role}?".to_sym].each do |method| define_method(method) { is? role } end end end include dynamic_module end
roles(:role_1, ..., :role_n)
click to toggle source
roles('role_1', ..., 'role_n')
roles([:role_1, ..., :role_n])
roles(['role_1', ..., 'role_n'])
declare valid roles
# File lib/role_model/class_methods.rb, line 40 def roles(*roles) opts = roles.last.is_a?(Hash) ? roles.pop : {} self.valid_roles = roles.flatten.map(&:to_sym) unless (opts[:dynamic] == false) self.define_dynamic_queries(self.valid_roles) end end