bit_mask 0.0.1 → 0.0.2
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.
- data/README.rdoc +1 -1
- data/VERSION +1 -1
- data/bit_mask.gemspec +2 -2
- data/lib/bit_mask.rb +25 -8
- data/spec/bit_mask_spec.rb +20 -0
- data/spec/models/dealership_search.rb +2 -2
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -63,7 +63,7 @@ When writing these config maps. Try to put the mose used options first so the st
|
|
63
63
|
|
64
64
|
* Impliment more tests
|
65
65
|
* Storage of strings?
|
66
|
-
*
|
66
|
+
* Allow for embeded bit_masks
|
67
67
|
* create javascript version for easy communication between ruby and javascript
|
68
68
|
|
69
69
|
== Contributing to bit_mask
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/bit_mask.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{bit_mask}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = [%q{Ryan Ong}]
|
12
|
-
s.date = %q{2011-07-
|
12
|
+
s.date = %q{2011-07-21}
|
13
13
|
s.description = %q{bit_mask creates a simple api to create bit mask models. By bit masking dataing you can compress the amount of data that needs to be sent between servers and clients}
|
14
14
|
s.email = %q{ryanong@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/bit_mask.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'active_support/core_ext/class/attribute'
|
2
2
|
|
3
3
|
class BitMask
|
4
|
-
CHARACTER_SET = '
|
4
|
+
CHARACTER_SET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
5
5
|
class_attribute :fields, :defaults, :base
|
6
6
|
def self.inherited(sub)
|
7
7
|
sub.fields = []
|
@@ -22,12 +22,12 @@ class BitMask
|
|
22
22
|
alias_method :attributes=, :replace
|
23
23
|
|
24
24
|
def [](field)
|
25
|
-
raise "#{field} is an invalid key" unless self.
|
25
|
+
raise "#{field} is an invalid key" unless self.respond_to?(field)
|
26
26
|
self.send(field)
|
27
27
|
end
|
28
28
|
|
29
29
|
def []=(field,value)
|
30
|
-
raise "#{field} is an invalid key" unless self.
|
30
|
+
raise "#{field} is an invalid key" unless self.respond_to?("#{field}=")
|
31
31
|
self.send("#{field}=",value)
|
32
32
|
end
|
33
33
|
|
@@ -50,8 +50,15 @@ class BitMask
|
|
50
50
|
def to_bin
|
51
51
|
self.fields.reverse.map do |field,conf|
|
52
52
|
val = self.read_attribute(field)
|
53
|
-
|
54
|
-
|
53
|
+
if conf[:nil] && val.nil?
|
54
|
+
val = 0
|
55
|
+
elsif conf[:values].respond_to? :index
|
56
|
+
val = conf[:values].index(val)
|
57
|
+
val += 1 if conf[:nil]
|
58
|
+
end
|
59
|
+
val = val.to_i.to_s(2)
|
60
|
+
val = val.rjust(conf[:bits],'0') if conf[:bits] > 0
|
61
|
+
val
|
55
62
|
end.join('').sub(/\A0+/,'')
|
56
63
|
end
|
57
64
|
|
@@ -119,7 +126,7 @@ class BitMask
|
|
119
126
|
end
|
120
127
|
|
121
128
|
int_val = 0
|
122
|
-
string.reverse.split(
|
129
|
+
string.reverse.split('').each_with_index do |char,index|
|
123
130
|
raise ArgumentError, "Character #{char} at index #{index} is not a valid character for to_insane Base #{radix} String." unless char_index = char_ref.index(char)
|
124
131
|
int_val += (char_index)*(radix**(index))
|
125
132
|
end
|
@@ -139,7 +146,11 @@ class BitMask
|
|
139
146
|
value = (conf[:bits] == -1) ? binary_array : binary_array.pop(conf[:bits])
|
140
147
|
break if value.nil?
|
141
148
|
value = value.join('').to_i(2)
|
142
|
-
if conf[:
|
149
|
+
value -= 1 if conf[:nil]
|
150
|
+
|
151
|
+
if conf[:nil] && value == -1
|
152
|
+
value = nil
|
153
|
+
elsif conf[:values].respond_to?(:at)
|
143
154
|
value = conf[:values].at(value)
|
144
155
|
elsif conf[:values].respond_to?(:from_i)
|
145
156
|
value = conf[:values].from_i(value)
|
@@ -172,9 +183,15 @@ class BitMask
|
|
172
183
|
elsif opts[:values].respond_to? :bit_length
|
173
184
|
opts[:bits] = opts[:values].bit_length
|
174
185
|
elsif opts[:values].kind_of? Integer
|
175
|
-
opts[:
|
186
|
+
if opts[:values] == -1
|
187
|
+
opts[:bits] = -1
|
188
|
+
else
|
189
|
+
opts[:limit] = opts[:values]
|
190
|
+
opts[:limit] += 1 if opts[:nil]
|
191
|
+
end
|
176
192
|
else
|
177
193
|
opts[:limit] = opts[:values].size
|
194
|
+
opts[:limit] += 1 if opts[:nil]
|
178
195
|
end
|
179
196
|
end
|
180
197
|
opts[:bits] ||= (opts[:limit].to_i-1).to_s(2).length
|
data/spec/bit_mask_spec.rb
CHANGED
@@ -84,4 +84,24 @@ describe BitMask do
|
|
84
84
|
new = CarSearch.from_s(modified_conf.to_s('qwerty'),'qwerty')
|
85
85
|
new.attributes.should == modified_conf.attributes
|
86
86
|
end
|
87
|
+
|
88
|
+
it "should have defaul nil values" do
|
89
|
+
search = DealershipSearch.new
|
90
|
+
search.zip.should == nil
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should have defaul nil values" do
|
94
|
+
search = DealershipSearch.new
|
95
|
+
search.makes = 'honda'
|
96
|
+
search.zip.should == nil
|
97
|
+
new = DealershipSearch.from_s(search.to_s)
|
98
|
+
new.attributes.should == search.attributes
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should allow for infinite values" do
|
102
|
+
search = DealershipSearch.new
|
103
|
+
search.distance = 9999999999999
|
104
|
+
loaded = DealershipSearch.from_bin(search.to_bin)
|
105
|
+
loaded.distance.should == search.distance
|
106
|
+
end
|
87
107
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: bit_mask
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ryan Ong
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-07-
|
13
|
+
date: 2011-07-21 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -114,7 +114,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
hash:
|
117
|
+
hash: 4147955215867335187
|
118
118
|
segments:
|
119
119
|
- 0
|
120
120
|
version: "0"
|