class Troles::Common::Marshaller::Bitmask

Attributes

role_subject[R]
valid_roles[R]

Public Class Methods

new(role_subject) click to toggle source
Calls superclass method
# File lib/troles/common/marshaller/bitmask.rb, line 8
def initialize role_subject
  super
end

Public Instance Methods

read() click to toggle source
# File lib/troles/common/marshaller/bitmask.rb, line 12
def read
  valid_roles.reject do |r| 
    num = as_number(ds_field_value) 
    ((num || 0) & calc_index(r)).zero?
  end
end
write(*roles) click to toggle source
# File lib/troles/common/marshaller/bitmask.rb, line 19
def write *roles
  roles = roles.uniq.compact
  return as_number(false) if roles.empty?
  roles.to_symbols.map { |r| calc_index(r) }.inject { |sum, bitvalue| sum + bitvalue }          
end

Protected Instance Methods

as_number(value) click to toggle source
# File lib/troles/common/marshaller/bitmask.rb, line 27
def as_number value
  case value
  when TrueClass, FalseClass
    value ? 2 : 1
  when Fixnum
    value 
  else
    raise ArgumentError, "Cant be converted to a bit index, #{value}"
  end
end
calc_index(r) click to toggle source
# File lib/troles/common/marshaller/bitmask.rb, line 38
def calc_index(r)
  2**valid_roles.index(r)
end