# ActsAsBits module ActiveRecord module Acts #:nodoc: module Bits #:nodoc: def self.included(base) base.extend(ClassMethods) end # Example: # acts_as_bits :flags, %w( admin composer ) module ClassMethods def acts_as_bits(part_id, bit_names) composed_name = part_id.id2name bit_names.each_with_index do |name, index| module_eval <<-end_eval def #{name} #{composed_name}[#{index}] != ?0 end alias #{name}? #{name} def #{name}=(v) #{composed_name}[#{index}] = v ? ?1 : ?0 end end_eval end end end end end end