module BitfieldAttribute::Base::ClassMethods

Public Instance Methods

define_bits(*keys) click to toggle source
# File lib/bitfield_attribute/base.rb, line 12
def define_bits(*keys)
  if @keys.present?
    raise ArgumentError, 'Define all your bits with a single #define_bits statement'
  end

  @keys = keys.map(&:to_sym)

  if @keys.uniq.size != @keys.size
    raise ArgumentError, "Bit names are not uniq"
  end

  if @keys.size > INTEGER_SIZE
    raise ArgumentError, "Too many bit names for #{INTEGER_SIZE}-bit integer"
  end

  define_bit_methods
end
keys() click to toggle source
# File lib/bitfield_attribute/base.rb, line 30
def keys
  @keys
end

Private Instance Methods

define_bit_methods() click to toggle source
# File lib/bitfield_attribute/base.rb, line 35
def define_bit_methods
  keys.each do |key|
    define_setter(key)
    define_getter(key)
  end
end
define_getter(key) click to toggle source
# File lib/bitfield_attribute/base.rb, line 49
def define_getter(key)
  define_method :"#{key}?" do
    @values[key] || false
  end

  alias_method key, :"#{key}?"
end
define_setter(key) click to toggle source
# File lib/bitfield_attribute/base.rb, line 42
def define_setter(key)
  define_method :"#{key}=" do |value|
    @values[key] = value
    write_bits
  end
end