aukan-bitmask 0.0.5 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/bitmask.rb +6 -4
- data/lib/bitmask_attribute.rb +9 -2
- data/test/test_bitmask.rb +34 -0
- data/test/test_bitmask_attribute.rb +13 -0
- metadata +12 -27
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
data.tar.gz: 487be3aae6556e0673414b9826e51354af80ec54
|
4
|
+
metadata.gz: 1783a12d886912fef53eebc1ba0376d49b54f08e
|
5
|
+
SHA512:
|
6
|
+
data.tar.gz: 9df37bccf89a2aa3965dcdaa8183c055bd74fecc721f824417c65debddfe1d382a2c60af56029551ed71ad3fa57ebfe8cb6307d53963aa907aabc8303dc96600
|
7
|
+
metadata.gz: 4f6707a916c14d8ce067c69be8fdcfe1fe67b593610f03c46cb1e7015ff7e9a00749577f7fb2f690697b982e54337eccb5fadf9820abb71f4cb0c45c4c25579d
|
data/lib/bitmask.rb
CHANGED
@@ -21,17 +21,18 @@ class Bitmask
|
|
21
21
|
position = @bit_ids.index( bit_id )
|
22
22
|
|
23
23
|
if position == nil
|
24
|
-
raise "#{bit_id.inspect} was not included on bit_ids array"
|
24
|
+
raise ArgumentError, "#{bit_id.inspect} was not included on bit_ids array"
|
25
25
|
end
|
26
26
|
|
27
|
-
|
27
|
+
(@value & (2 ** position)) > 0
|
28
28
|
end
|
29
|
+
alias :[] :get
|
29
30
|
|
30
31
|
def set ( bit_id, val )
|
31
32
|
position = @bit_ids.index( bit_id )
|
32
33
|
|
33
34
|
if position == nil
|
34
|
-
raise "#{bit_id.inspect} was not included on bit_ids array"
|
35
|
+
raise ArgumentError, "#{bit_id.inspect} was not included on bit_ids array"
|
35
36
|
end
|
36
37
|
|
37
38
|
if val == true
|
@@ -42,8 +43,9 @@ class Bitmask
|
|
42
43
|
|
43
44
|
@after_change.call(self) if @after_change
|
44
45
|
|
45
|
-
|
46
|
+
val
|
46
47
|
end
|
48
|
+
alias :[]= :set
|
47
49
|
|
48
50
|
def value= ( val )
|
49
51
|
@value = val
|
data/lib/bitmask_attribute.rb
CHANGED
@@ -14,7 +14,7 @@ module BitmaskAttribute
|
|
14
14
|
options = default_options.merge(options)
|
15
15
|
|
16
16
|
bitmask_obj = options[:bitmask_object]
|
17
|
-
class_eval <<-
|
17
|
+
class_eval <<-ADD_METHODS
|
18
18
|
def #{options[:bitmask_object]}
|
19
19
|
@_#{options[:bitmask_object]} ||= Bitmask.new({
|
20
20
|
:bit_ids => #{options[:bit_ids].inspect},
|
@@ -24,7 +24,14 @@ module BitmaskAttribute
|
|
24
24
|
}
|
25
25
|
})
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
|
+
def #{options[:bitmask_object]}= new_bitmask_hash
|
29
|
+
new_bitmask_hash.each do |key, val|
|
30
|
+
#{options[:bitmask_object]}[key] = val
|
31
|
+
end
|
32
|
+
#{options[:bitmask_object]}
|
33
|
+
end
|
34
|
+
ADD_METHODS
|
28
35
|
|
29
36
|
end
|
30
37
|
|
data/test/test_bitmask.rb
CHANGED
@@ -70,4 +70,38 @@ class TestBitmask < Test::Unit::TestCase
|
|
70
70
|
@bitmask.value = 1
|
71
71
|
assert number == 5
|
72
72
|
end
|
73
|
+
|
74
|
+
def test_getting_attributes_with_square_brackets
|
75
|
+
assert @bitmask[:flag1] == false
|
76
|
+
assert @bitmask[:flag2] == false
|
77
|
+
assert @bitmask[:flag3] == false
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_setting_attributes_with_square_brackets
|
81
|
+
@bitmask[:flag1] = true
|
82
|
+
@bitmask[:flag2] = false
|
83
|
+
@bitmask[:flag3] = true
|
84
|
+
|
85
|
+
assert @bitmask[:flag1] == true
|
86
|
+
assert @bitmask[:flag2] == false
|
87
|
+
assert @bitmask[:flag3] == true
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_getting_missing_attribute_raises_error
|
91
|
+
assert_raise(ArgumentError) { @bitmask.get(:me_not_here) }
|
92
|
+
assert_raise(ArgumentError) { @bitmask[:me_not_here] }
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_setting_missing_attribute_raises_error
|
96
|
+
assert_raise(ArgumentError) { @bitmask.set(:me_not_here, true) }
|
97
|
+
assert_raise(ArgumentError) { @bitmask[:me_not_here] = true }
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_setting_returns_the_value_set
|
101
|
+
assert (@bitmask[:flag3] = true) == true
|
102
|
+
assert (@bitmask[:flag3] = false) == false
|
103
|
+
|
104
|
+
assert (@bitmask.set(:flag3, true)) == true
|
105
|
+
assert (@bitmask.set(:flag3, false)) == false
|
106
|
+
end
|
73
107
|
end
|
@@ -34,4 +34,17 @@ class TestBitmaskAttribute < Test::Unit::TestCase
|
|
34
34
|
assert @something.flags_bitmask.bit_ids == [:flag1, :flag2, :flag3]
|
35
35
|
end
|
36
36
|
|
37
|
+
def test_setting_with_a_hash
|
38
|
+
@something.flags_bitmask= { :flag1 => true, :flag2 => false, :flag3 => true }
|
39
|
+
assert @something.flags == 5
|
40
|
+
|
41
|
+
@something.flags_bitmask= { :flag1 => false }
|
42
|
+
assert @something.flags == 4
|
43
|
+
|
44
|
+
@something.flags_bitmask= { :flag2 => true }
|
45
|
+
assert @something.flags == 6
|
46
|
+
|
47
|
+
assert_raise(ArgumentError) { @something.flags_bitmask= { :i_dont_exist => true } }
|
48
|
+
end
|
49
|
+
|
37
50
|
end
|
metadata
CHANGED
@@ -1,13 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aukan-bitmask
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 5
|
10
|
-
version: 0.0.5
|
4
|
+
version: 0.1.0
|
11
5
|
platform: ruby
|
12
6
|
authors:
|
13
7
|
- Pablo Gonzalez
|
@@ -15,8 +9,7 @@ autorequire:
|
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
11
|
|
18
|
-
date:
|
19
|
-
default_executable:
|
12
|
+
date: 2014-07-16 00:00:00 Z
|
20
13
|
dependencies: []
|
21
14
|
|
22
15
|
description: Agnostic Bitmask and BitmaskAttribute. This gem includes Bitmask for standalone usage, and BitmaskAttribute to decorate an existing attribute on any class.
|
@@ -33,15 +26,16 @@ files:
|
|
33
26
|
- README.md
|
34
27
|
- README.rdoc
|
35
28
|
- Rakefile
|
36
|
-
- lib/bitmask.rb
|
37
29
|
- lib/aukan-bitmask.rb
|
38
30
|
- lib/bitmask_attribute.rb
|
31
|
+
- lib/bitmask.rb
|
32
|
+
- test/test_helper.rb
|
39
33
|
- test/test_bitmask_attribute.rb
|
40
34
|
- test/test_bitmask.rb
|
41
|
-
- test/test_helper.rb
|
42
|
-
has_rdoc: true
|
43
35
|
homepage: https://github.com/aukan/aukan-bitmask
|
44
|
-
licenses:
|
36
|
+
licenses:
|
37
|
+
- MIT
|
38
|
+
metadata: {}
|
45
39
|
|
46
40
|
post_install_message:
|
47
41
|
rdoc_options: []
|
@@ -49,29 +43,20 @@ rdoc_options: []
|
|
49
43
|
require_paths:
|
50
44
|
- lib
|
51
45
|
required_ruby_version: !ruby/object:Gem::Requirement
|
52
|
-
none: false
|
53
46
|
requirements:
|
54
|
-
-
|
47
|
+
- &id001
|
48
|
+
- ">="
|
55
49
|
- !ruby/object:Gem::Version
|
56
|
-
hash: 3
|
57
|
-
segments:
|
58
|
-
- 0
|
59
50
|
version: "0"
|
60
51
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
-
none: false
|
62
52
|
requirements:
|
63
|
-
-
|
64
|
-
- !ruby/object:Gem::Version
|
65
|
-
hash: 3
|
66
|
-
segments:
|
67
|
-
- 0
|
68
|
-
version: "0"
|
53
|
+
- *id001
|
69
54
|
requirements: []
|
70
55
|
|
71
56
|
rubyforge_project: aukan-bitmask
|
72
|
-
rubygems_version:
|
57
|
+
rubygems_version: 2.0.14
|
73
58
|
signing_key:
|
74
|
-
specification_version:
|
59
|
+
specification_version: 4
|
75
60
|
summary: Agnostic Bitmask and BitmaskAttribute.
|
76
61
|
test_files: []
|
77
62
|
|