module Mongoid::Bitfield::ClassMethods
Public Instance Methods
bitfield(fieldname, *bits)
click to toggle source
# File lib/mongoid/bitfield.rb, line 6 def bitfield(fieldname, *bits) fieldsymbol = fieldname.to_sym field fieldsymbol, :type => Integer bits.each do |bitname| bitsymbol = bitname.to_sym bit = 1 << bits.index(bitsymbol) define_method bitname do result = send(fieldsymbol) & bit result && result > 0 end define_method :"#{bitname}=" do |boolean| unless boolean == send(bitsymbol) current_value = send(fieldsymbol) || 0 new_value = current_value ^ bit send(:"#{fieldname}=", new_value) end end define_method :"#{bitname}_enable!" do send(:"#{bitname}=", true) bit(fieldsymbol => { or: bit }) end define_method :"#{bitname}_disable!" do send(:"#{bitname}=", false) bit(fieldsymbol => { and: ~bit }) end end end