sequel-bit-fields 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/sequel-bit-fields.rb +11 -7
- metadata +1 -1
data/lib/sequel-bit-fields.rb
CHANGED
@@ -4,21 +4,25 @@ module Sequel::Plugins
|
|
4
4
|
module BitFields
|
5
5
|
def self.configure(model, bit_field_column, bit_fields, options = {})
|
6
6
|
bit_fields.each_with_index do |bit_field_name, i|
|
7
|
+
index = 2**i
|
8
|
+
|
9
|
+
model.class.instance_eval do
|
10
|
+
define_method("#{bit_field_name}_sql") do |value=true|
|
11
|
+
"#{bit_field_column} & #{index} #{'!' unless value}= #{index}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
7
15
|
model.instance_eval do
|
8
16
|
define_method("#{bit_field_name}=") do |value|
|
9
17
|
self[bit_field_column] = if value
|
10
|
-
self[bit_field_column] | (
|
18
|
+
self[bit_field_column] | (index)
|
11
19
|
else
|
12
|
-
self[bit_field_column] ^ (
|
20
|
+
self[bit_field_column] ^ (index)
|
13
21
|
end
|
14
22
|
end
|
15
23
|
|
16
24
|
define_method("#{bit_field_name}?") do
|
17
|
-
self[bit_field_column] & (
|
18
|
-
end
|
19
|
-
|
20
|
-
define_method("#{bit_field_name}_sql") do
|
21
|
-
"#{bit_field_column} & #{2**i} = #{2**i}"
|
25
|
+
self[bit_field_column] & (index) == (index)
|
22
26
|
end
|
23
27
|
end
|
24
28
|
end
|