Module: Sequel::Plugins::BitFields

Defined in:
lib/sequel-bit-fields.rb

Class Method Summary collapse

Class Method Details

.configure(model, bit_field_column, bit_fields, options = {}) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/sequel-bit-fields.rb', line 5

def self.configure(model, bit_field_column, bit_fields, options = {})
  bit_fields.each_with_index do |bit_field_name, i|
    index = 2**i

    model.class.instance_eval do
      define_method("#{bit_field_name}_sql") do |value=true|
        "#{bit_field_column} & #{index} #{'!' unless value}= #{index}"
      end
    end

    model.instance_eval do
      define_method("#{bit_field_name}=") do |value|
        self[bit_field_column] = if value
          self[bit_field_column] | (index)
        else
          self[bit_field_column] ^ (index)
        end
      end

      define_method("#{bit_field_name}?") do
        self[bit_field_column] & (index) == (index)
      end
    end
  end
end