module RolesField::Base::ClassMethods
Public Instance Methods
roles_field(field, options={})
click to toggle source
# File lib/roles-field.rb, line 11 def roles_field(field, options={}) roles = options[:roles] class_eval %( def roles=(roles) self.#{field} = (#{roles} & roles).map { |role| 2 ** #{roles}.index(role.to_sym) }.sum end def roles #{roles}.reject { |role| ((#{field} || 0) & 2 ** #{roles}.index(role.to_sym)).zero? } end def role?(role) roles.include? role.to_sym end def role=(role) self.roles = (#{roles} & [role.to_sym]) end def set_role(role) self.role = role end scope :with_role, lambda { |role| { :conditions => ['#{field} & ? > 0', 2 ** #{roles}.index(role.to_sym)] } } ) roles.each do |role| define_method "is_#{role}?" do role? role end end end