sum_sum 0.0.2 → 0.0.3
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/CHANGES.md +7 -1
- data/Gemfile.lock +1 -1
- data/lib/sum_sum/version.rb +1 -1
- data/lib/sum_sum.rb +28 -0
- data/spec/sum_sum_spec.rb +37 -0
- metadata +2 -2
data/CHANGES.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
### dev
|
2
2
|
|
3
|
-
[full changelog](http://github.com/yolk/sum_sum/compare/v0.0.
|
3
|
+
[full changelog](http://github.com/yolk/sum_sum/compare/v0.0.3...master)
|
4
|
+
|
5
|
+
### 0.0.3 / 2011-01-27
|
6
|
+
|
7
|
+
[full changelog](http://github.com/yolk/sum_sum/compare/v0.0.2...v0.0.3)
|
8
|
+
|
9
|
+
* Added SumSum#dump & SumSum.load methods to dump and load data to serializable objects (array, hash)
|
4
10
|
|
5
11
|
### 0.0.2 / 2011-01-27
|
6
12
|
|
data/Gemfile.lock
CHANGED
data/lib/sum_sum/version.rb
CHANGED
data/lib/sum_sum.rb
CHANGED
@@ -44,4 +44,32 @@ class SumSum < Hash
|
|
44
44
|
def inspect
|
45
45
|
bottom? ? "#{count}" : "{#{name}:#{count} #{super.gsub(/^\{|\}$/, "")}}"
|
46
46
|
end
|
47
|
+
|
48
|
+
def dump
|
49
|
+
return count if bottom?
|
50
|
+
hash = {}
|
51
|
+
each{ |k, v| hash[k] = v.dump }
|
52
|
+
root? ? [all_args, hash] : hash
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.load(data)
|
56
|
+
new(*data[0]).tap do |sum_sum|
|
57
|
+
sum_sum.add_from_dump(data[1])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def add_from_dump(data, hash={}, level=0)
|
62
|
+
data.each do |key, value|
|
63
|
+
hash[all_args[level]] = key
|
64
|
+
value.is_a?(Hash) ?
|
65
|
+
add_from_dump(value, hash, level + 1) :
|
66
|
+
add(hash, value)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def all_args
|
73
|
+
[name] + args
|
74
|
+
end
|
47
75
|
end
|
data/spec/sum_sum_spec.rb
CHANGED
@@ -40,6 +40,20 @@ describe SumSum do
|
|
40
40
|
sum[:Browser][:Firefox]["3.6.0"].keys.should eql([])
|
41
41
|
end
|
42
42
|
end
|
43
|
+
|
44
|
+
context "#dump" do
|
45
|
+
it "should output serializable array" do
|
46
|
+
sum.dump.should eql(
|
47
|
+
[[:type, :name, :version], {:Browser=>{:Firefox=>{"3.6.0"=>1}}}]
|
48
|
+
)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context ".load" do
|
53
|
+
it "should restore everything from serializable array" do
|
54
|
+
SumSum.load(sum.dump).dump.should eql(sum.dump)
|
55
|
+
end
|
56
|
+
end
|
43
57
|
end
|
44
58
|
|
45
59
|
context "adding multiple hashes" do
|
@@ -140,6 +154,29 @@ describe SumSum do
|
|
140
154
|
sum[:Browser][:Firefox].share.should eql(0.25)
|
141
155
|
end
|
142
156
|
end
|
157
|
+
|
158
|
+
context "#dump" do
|
159
|
+
it "should output serializable array" do
|
160
|
+
sum.dump.should eql(
|
161
|
+
[[:type, :name, :version], {
|
162
|
+
:Crawler=>{:GoogleBot=>{"2.0"=>1}},
|
163
|
+
:Browser=>{
|
164
|
+
:Firefox=>{"3.6.0"=>1},
|
165
|
+
:Safari=>{"4.0"=>1, "5.0"=>2}
|
166
|
+
}
|
167
|
+
}]
|
168
|
+
)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
context ".load" do
|
173
|
+
it "should restore everything from serializable array" do
|
174
|
+
SumSum.load(sum.dump).dump.should eql(sum.dump)
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
143
178
|
end
|
179
|
+
|
180
|
+
|
144
181
|
end
|
145
182
|
end
|