165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
|
# File 'lib/packed_model/base.rb', line 165
def self.bit_vector(name, fields, options={})
raise "too many fields for bit vecotr #{name}" if fields.size > 32
self.attribute name, {:type => :integer, :fields => fields}.merge(options)
name_equals = "#{name}="
fields.each_with_index do |fld, idx|
mask = 1 << idx
define_method fld do
(self.send(name) & mask) == mask
end
define_method "#{fld}=" do |val|
if val
self.send(name_equals, self.send(name) | mask)
else
self.send(name_equals, self.send(name) ^ mask)
end
end
end
end
|