module ModelManage::Bitfield

Public Class Methods

included(base) click to toggle source
# File lib/model_manage/bitfield.rb, line 3
def self.included(base)
  def base.bitfield field, bits
    all = (1 << bits.size) - 1
    const_set "ALL_BITS", all

    bits.each_with_index do |key, index|
      mask = 1 << index 
      const_set "#{key}_BIT".upcase, mask

      define_method "#{key}?" do
        self[:status][index] != 0
      end

      define_method "#{key}=" do |bit|
        case bit
        when nil, false, 0
          self[:status] &= all - mask
        else
          self[:status] |= mask
        end
      end
    end
  end
end