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