Module: Bitroles

Extended by:
ActiveSupport::Concern
Included in:
ActiveRecord::Base
Defined in:
lib/bitroles.rb,
lib/bitroles/version.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

VERSION =
"0.0.3"

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_sym, *arguments, &block) ⇒ Object



28
29
30
31
32
33
34
35
# File 'lib/bitroles.rb', line 28

def method_missing(method_sym, *arguments, &block)
  roles = self.class.roles.join('|')
  if method_sym.to_s =~ /^is_(#{roles})\?$/
    role? $1
  else
    super
  end
end

Instance Method Details

#role?(role) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/bitroles.rb', line 46

def role?(role)
  roles.include? role.to_s
end

#rolesObject



42
43
44
# File 'lib/bitroles.rb', line 42

def roles
  self.class.roles.reject { |r| ((send(self.class.mask_column_name) || 0) & 2**self.class.roles.index(r)).zero? }
end

#roles=(roles) ⇒ Object



37
38
39
40
# File 'lib/bitroles.rb', line 37

def roles=(roles)
  roles = (roles.map(&:to_s) & self.class.roles).map { |r| 2**self.class.roles.index(r) }.sum
  self.send("#{self.class.mask_column_name}=", roles)
end