Module: RoleModel
- Defined in:
- lib/role_model.rb,
lib/role_model/roles.rb
Defined Under Namespace
Modules: ClassMethods Classes: Roles
Constant Summary collapse
- INHERITABLE_CLASS_ATTRIBUTES =
[:roles_attribute_name, :valid_roles]
Class Method Summary collapse
-
.included(base) ⇒ Object
:nodoc:.
Instance Method Summary collapse
-
#has_role?(role) ⇒ Boolean
check if a given role has been assigned.
-
#roles ⇒ Object
query assigned roles.
-
#roles=(*roles) ⇒ Object
assign roles.
Class Method Details
.included(base) ⇒ Object
:nodoc:
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/role_model.rb', line 7 def self.included(base) # :nodoc: base.extend ClassMethods base.class_eval do class << self attr_accessor(*::RoleModel::INHERITABLE_CLASS_ATTRIBUTES) end roles_attribute :roles_mask end # assign roles def roles=(*roles) self.send("#{self.class.roles_attribute_name}=", (Array[*roles].flatten.map { |r| r.to_sym } & self.class.valid_roles).map { |r| 2**self.class.valid_roles.index(r) }.inject { |sum, bitvalue| sum + bitvalue }) end # query assigned roles def roles Roles.new(self, self.class.valid_roles.reject { |r| ((self.send(self.class.roles_attribute_name) || 0) & 2**self.class.valid_roles.index(r)).zero? }) end alias role_symbols roles # check if a given role has been assigned def has_role?(role) roles.include?(role.to_sym) end alias is_a? has_role? end |
Instance Method Details
#has_role?(role) ⇒ Boolean
check if a given role has been assigned
28 29 30 |
# File 'lib/role_model.rb', line 28 def has_role?(role) roles.include?(role.to_sym) end |
#roles ⇒ Object
query assigned roles
22 23 24 |
# File 'lib/role_model.rb', line 22 def roles Roles.new(self, self.class.valid_roles.reject { |r| ((self.send(self.class.roles_attribute_name) || 0) & 2**self.class.valid_roles.index(r)).zero? }) end |
#roles=(*roles) ⇒ Object
assign roles
17 18 19 |
# File 'lib/role_model.rb', line 17 def roles=(*roles) self.send("#{self.class.roles_attribute_name}=", (Array[*roles].flatten.map { |r| r.to_sym } & self.class.valid_roles).map { |r| 2**self.class.valid_roles.index(r) }.inject { |sum, bitvalue| sum + bitvalue }) end |