attr_bitwise 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/attr_bitwise.rb +16 -21
- data/lib/attr_bitwise/version.rb +1 -1
- data/spec/attr_bitwise_spec.rb +8 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16dab4194bbaa9823b98c7e854d2206d78f8973a
|
4
|
+
data.tar.gz: ebcca512d44597c2ef24616d47250c85866442cc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39fed55c81083363efa43f2c62c5e1fc22d2e1123ae786ce25ed97da56fc0cbe6689b943cc918d095b429ec0a772ea116a0e9ce1260ddc7ab42731eb82dcb1a1
|
7
|
+
data.tar.gz: 9b7cab5a08b27f10e77e7e92971b26deca51b297944ad263f00db6c4d6b6afde6f0271f4d1279f34ef6edb6aba188c9483f9a910d830948f280dffc168dda046
|
data/Gemfile.lock
CHANGED
data/lib/attr_bitwise.rb
CHANGED
@@ -63,33 +63,28 @@ module AttrBitwise
|
|
63
63
|
def attr_bitwise(name, column_name: nil, mapping:)
|
64
64
|
column_name = "#{name}_value" unless column_name.present?
|
65
65
|
|
66
|
-
# mask attribute_accessor (internals)
|
67
|
-
define_method('value') { send(column_name) }
|
68
|
-
define_method('value=') { |value| send("#{column_name}=", value) }
|
69
|
-
|
70
66
|
# build mapping
|
71
67
|
bitwise_mapping = build_mapping(mapping, name)
|
72
68
|
|
73
69
|
# mask to symbols helper
|
74
|
-
define_method("#{name}") { send(:value_getter, bitwise_mapping) }
|
75
|
-
|
70
|
+
define_method("#{name}") { send(:value_getter, column_name, bitwise_mapping) }
|
76
71
|
define_method("#{name}=") do |values_or_symbols_array|
|
77
|
-
send(:value_setter, Array(values_or_symbols_array), bitwise_mapping)
|
72
|
+
send(:value_setter, column_name, Array(values_or_symbols_array), bitwise_mapping)
|
78
73
|
end
|
79
74
|
|
80
75
|
# masks symbol presence
|
81
76
|
define_method("#{name.to_s.singularize}?") do |value_or_symbol|
|
82
|
-
send(:value?, force_to_bitwise_value(value_or_symbol, bitwise_mapping))
|
77
|
+
send(:value?, column_name, force_to_bitwise_value(value_or_symbol, bitwise_mapping))
|
83
78
|
end
|
84
79
|
|
85
80
|
# add value to mask
|
86
81
|
define_method("add_#{name.to_s.singularize}") do |value_or_symbol|
|
87
|
-
send(:add_value, force_to_bitwise_value(value_or_symbol, bitwise_mapping))
|
82
|
+
send(:add_value, column_name, force_to_bitwise_value(value_or_symbol, bitwise_mapping))
|
88
83
|
end
|
89
84
|
|
90
85
|
# remove value from mask
|
91
86
|
define_method("remove_#{name.to_s.singularize}") do |value_or_symbol|
|
92
|
-
send(:remove_value, force_to_bitwise_value(value_or_symbol, bitwise_mapping))
|
87
|
+
send(:remove_value, column_name, force_to_bitwise_value(value_or_symbol, bitwise_mapping))
|
93
88
|
end
|
94
89
|
|
95
90
|
# compute values union against mask
|
@@ -226,35 +221,35 @@ module AttrBitwise
|
|
226
221
|
|
227
222
|
# Return current value to symbols array
|
228
223
|
# Ex : 011 => :slots, :credits
|
229
|
-
def value_getter(mapping)
|
224
|
+
def value_getter(name, mapping)
|
230
225
|
ComparableSymbolsArray.new(
|
231
|
-
mapping.values.select { |pv| (
|
226
|
+
mapping.values.select { |pv| (send(name) & pv) != 0 }.
|
232
227
|
map { |v| value_to_sym(v, mapping) }
|
233
228
|
)
|
234
229
|
end
|
235
230
|
|
236
231
|
# Set current values from values array
|
237
|
-
def value_setter(values_or_symbols_array, mapping)
|
238
|
-
|
239
|
-
values_or_symbols_array.each { |val| add_value(force_to_bitwise_value(val, mapping)) }
|
232
|
+
def value_setter(column_name, values_or_symbols_array, mapping)
|
233
|
+
send("#{column_name}=", 0)
|
234
|
+
values_or_symbols_array.each { |val| add_value(column_name, force_to_bitwise_value(val, mapping)) }
|
240
235
|
end
|
241
236
|
|
242
237
|
# Return if value presents in mask (raw value)
|
243
|
-
def value?(val)
|
244
|
-
|
238
|
+
def value?(column_name, val)
|
239
|
+
send(column_name) & val != 0
|
245
240
|
end
|
246
241
|
|
247
242
|
# add `value_or_symbol` to mask
|
248
243
|
# Ex, with values = `10`
|
249
244
|
# add_value(1) => 11
|
250
|
-
def add_value(val)
|
251
|
-
|
245
|
+
def add_value(column_name, val)
|
246
|
+
send("#{column_name}=", send(column_name) | val)
|
252
247
|
end
|
253
248
|
|
254
249
|
# remove `value_or_symbol` to mask
|
255
250
|
# Ex, with values = `11`
|
256
251
|
# remove_value(1) => 10
|
257
|
-
def remove_value(val)
|
258
|
-
|
252
|
+
def remove_value(column_name, val)
|
253
|
+
send("#{column_name}=", send(column_name) & ~val)
|
259
254
|
end
|
260
255
|
end
|
data/lib/attr_bitwise/version.rb
CHANGED
data/spec/attr_bitwise_spec.rb
CHANGED
@@ -8,11 +8,14 @@ describe AttrBitwise do
|
|
8
8
|
include AttrBitwise
|
9
9
|
|
10
10
|
attr_accessor :fruits_value
|
11
|
+
attr_accessor :vegetables_value
|
11
12
|
|
12
13
|
attr_bitwise :fruits, mapping: [:banana, :apple]
|
14
|
+
attr_bitwise :vegetables, mapping: [:carrot, :pepper]
|
13
15
|
|
14
16
|
def initialize
|
15
17
|
@fruits_value = 0
|
18
|
+
@vegetables_value = 0
|
16
19
|
end
|
17
20
|
|
18
21
|
end
|
@@ -63,6 +66,11 @@ describe AttrBitwise do
|
|
63
66
|
expect(subject.fruits).to eq [:banana, :apple]
|
64
67
|
end
|
65
68
|
|
69
|
+
it 'shouldn\'t set values in other field' do
|
70
|
+
expect(subject.vegetables_value).to eq 0
|
71
|
+
expect(subject.vegetables).to eq []
|
72
|
+
end
|
73
|
+
|
66
74
|
end
|
67
75
|
|
68
76
|
context '#fruits==' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: attr_bitwise
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Charly POLY
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|