module BitmaskAttribute::ClassMethods

Public Instance Methods

bitmask_attribute( attribute_name, options = {} ) click to toggle source
# File lib/bitmask_attribute.rb, line 9
    def bitmask_attribute ( attribute_name, options = {} )
      default_options = {
        :bitmask_object => attribute_name.to_s + '_bitmask',
        :bit_ids => []
      }
      options = default_options.merge(options)

      bitmask_obj = options[:bitmask_object]
      class_eval <<-ADD_METHODS
        def #{options[:bitmask_object]}
          @_#{options[:bitmask_object]} ||= Bitmask.new({
            :bit_ids => #{options[:bit_ids].inspect},
            :value => self.#{attribute_name},
            :after_change => Proc.new { |bitmask|
              self.#{attribute_name} = bitmask.value
            }
          })
        end

        def #{options[:bitmask_object]}= new_bitmask_hash
          new_bitmask_hash.each do |key, val|
            #{options[:bitmask_object]}[key] = val
          end
          #{options[:bitmask_object]}
        end
      ADD_METHODS

    end