sum_sum 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES.md CHANGED
@@ -1,6 +1,13 @@
1
1
  ### dev
2
2
 
3
- [full changelog](http://github.com/yolk/sum_sum/compare/v0.0.3...master)
3
+ [full changelog](http://github.com/yolk/sum_sum/compare/v0.0.4...master)
4
+
5
+ ### 0.0.4 / 2011-01-27
6
+
7
+ [full changelog](http://github.com/yolk/sum_sum/compare/v0.0.3...v0.0.4)
8
+
9
+ * Fixed major bug on #sort!
10
+ * Some pretty_print support
4
11
 
5
12
  ### 0.0.3 / 2011-01-27
6
13
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sum_sum (0.0.2)
4
+ sum_sum (0.0.3)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
@@ -24,9 +24,9 @@ class SumSum < Hash
24
24
  end
25
25
 
26
26
  def sort!
27
- values.each(&:sort!) unless bottom?
28
- to_a.tap do |array|
29
- array.reverse!(&:count)
27
+ return self if bottom?
28
+ values.each(&:sort!)
29
+ to_a.sort_by{|it| it[1].count}.reverse.tap do |array|
30
30
  clear
31
31
  array.each{|k, v| self[k] = v }
32
32
  end
@@ -45,6 +45,11 @@ class SumSum < Hash
45
45
  bottom? ? "#{count}" : "{#{name}:#{count} #{super.gsub(/^\{|\}$/, "")}}"
46
46
  end
47
47
 
48
+ def pretty_print(pp)
49
+ return pp.text(" #{count}") if bottom?
50
+ super
51
+ end
52
+
48
53
  def dump
49
54
  return count if bottom?
50
55
  hash = {}
@@ -1,3 +1,3 @@
1
1
  class SumSum < Hash
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -15,168 +15,166 @@ describe SumSum do
15
15
  end
16
16
  end
17
17
 
18
- context "#add" do
19
- let(:sum) { SumSum.new(:type, :name, :version) }
18
+ let(:sum) { SumSum.new(:type, :name, :version) }
19
+
20
+ context "adding single hash" do
21
+ before do
22
+ sum.add({:type => :Browser, :name => :Firefox, :version => "3.6.0"})
23
+ end
20
24
 
21
- context "adding single hash" do
22
- before do
23
- sum.add({:type => :Browser, :name => :Firefox, :version => "3.6.0"})
25
+ context "#count" do
26
+ it "should return 1 on all levels" do
27
+ sum.count.should eql(1)
28
+ sum[:Browser].count.should eql(1)
29
+ sum[:Browser][:Firefox].count.should eql(1)
30
+ sum[:Browser][:Firefox]["3.6.0"].count.should eql(1)
24
31
  end
25
-
26
- context "#count" do
27
- it "should return 1 on all levels" do
28
- sum.count.should eql(1)
29
- sum[:Browser].count.should eql(1)
30
- sum[:Browser][:Firefox].count.should eql(1)
31
- sum[:Browser][:Firefox]["3.6.0"].count.should eql(1)
32
- end
32
+ end
33
+
34
+ context "#keys" do
35
+ it "should return correct keys on all levels" do
36
+ sum.keys.should eql([:Browser])
37
+ sum[:Browser].keys.should eql([:Firefox])
38
+ sum[:Browser][:Firefox].keys.should eql(["3.6.0"])
39
+ sum[:Browser][:Firefox]["3.6.0"].keys.should eql([])
33
40
  end
34
-
35
- context "#keys" do
36
- it "should return correct keys on all levels" do
37
- sum.keys.should eql([:Browser])
38
- sum[:Browser].keys.should eql([:Firefox])
39
- sum[:Browser][:Firefox].keys.should eql(["3.6.0"])
40
- sum[:Browser][:Firefox]["3.6.0"].keys.should eql([])
41
- end
41
+ end
42
+
43
+ context "#dump" do
44
+ it "should output serializable array" do
45
+ sum.dump.should eql(
46
+ [[:type, :name, :version], {:Browser=>{:Firefox=>{"3.6.0"=>1}}}]
47
+ )
48
+ end
49
+ end
50
+
51
+ context ".load" do
52
+ it "should restore everything from serializable array" do
53
+ SumSum.load(sum.dump).dump.should eql(sum.dump)
54
+ end
55
+ end
56
+ end
57
+
58
+ context "adding multiple hashes" do
59
+ before do
60
+ sum.add({:type => :Crawler, :name => :GoogleBot, :version => "2.0"})
61
+ sum.add({:type => :Browser, :name => :Firefox, :version => "3.6.0"})
62
+ sum.add({:type => :Browser, :name => :Safari, :version => "4.0"})
63
+ sum.add({:type => :Browser, :name => :Safari, :version => "5.0"})
64
+ sum.add({:type => :Browser, :name => :Safari, :version => "5.0"})
65
+ end
66
+
67
+ context "#add" do
68
+ it "should return itself" do
69
+ sum.add({:type => :Crawler, :name => :GoogleBot, :version => "2.0"}).should eql(sum)
42
70
  end
43
71
 
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
72
+ it "should add missing values as nil" do
73
+ sum.add({:type => :Crawler, :name => nil})
74
+ sum.add({:type => :Crawler})
75
+
76
+ sum[:Crawler].keys.should eql([:GoogleBot, nil])
77
+ sum[:Crawler][nil].count.should eql(2)
78
+ sum[:Crawler][nil].keys.should eql([nil])
79
+ sum[:Crawler][nil][nil].count.should eql(2)
50
80
  end
51
81
 
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
82
+ it "should allow to add multiple counts at once" do
83
+ sum.add({:type => :Crawler, :name => :DuckDuckGo, :version => "1.0"}, 10)
84
+
85
+ sum[:Crawler].count.should eql(11)
86
+ sum[:Crawler][:DuckDuckGo].count.should eql(10)
87
+ sum[:Crawler][:DuckDuckGo]["1.0"].count.should eql(10)
56
88
  end
57
89
  end
58
90
 
59
- context "adding multiple hashes" do
60
- before do
61
- sum.add({:type => :Crawler, :name => :GoogleBot, :version => "2.0"})
62
- sum.add({:type => :Browser, :name => :Firefox, :version => "3.6.0"})
63
- sum.add({:type => :Browser, :name => :Safari, :version => "4.0"})
64
- sum.add({:type => :Browser, :name => :Safari, :version => "5.0"})
65
- sum.add({:type => :Browser, :name => :Safari, :version => "5.0"})
66
- end
67
-
68
- context "#add" do
69
- it "should return itself" do
70
- sum.add({:type => :Crawler, :name => :GoogleBot, :version => "2.0"}).should eql(sum)
71
- end
91
+ context "#count" do
92
+ it "should return correct count on all levels" do
93
+ sum.count.should eql(5)
72
94
 
73
- it "should add missing values as nil" do
74
- sum.add({:type => :Crawler, :name => nil})
75
- sum.add({:type => :Crawler})
76
-
77
- sum[:Crawler].keys.should eql([:GoogleBot, nil])
78
- sum[:Crawler][nil].count.should eql(2)
79
- sum[:Crawler][nil].keys.should eql([nil])
80
- sum[:Crawler][nil][nil].count.should eql(2)
81
- end
95
+ sum[:Browser].count.should eql(4)
96
+ sum[:Browser][:Firefox].count.should eql(1)
97
+ sum[:Browser][:Firefox]["3.6.0"].count.should eql(1)
98
+ sum[:Browser][:Safari].count.should eql(3)
99
+ sum[:Browser][:Safari]["5.0"].count.should eql(2)
100
+ sum[:Browser][:Safari]["4.0"].count.should eql(1)
82
101
 
83
- it "should allow to add multiple counts at once" do
84
- sum.add({:type => :Crawler, :name => :DuckDuckGo, :version => "1.0"}, 10)
85
-
86
- sum[:Crawler].count.should eql(11)
87
- sum[:Crawler][:DuckDuckGo].count.should eql(10)
88
- sum[:Crawler][:DuckDuckGo]["1.0"].count.should eql(10)
89
- end
102
+ sum[:Crawler].count.should eql(1)
103
+ sum[:Crawler][:GoogleBot].count.should eql(1)
104
+ sum[:Crawler][:GoogleBot]["2.0"].count.should eql(1)
90
105
  end
91
-
92
- context "#count" do
93
- it "should return correct count on all levels" do
94
- sum.count.should eql(5)
95
-
96
- sum[:Browser].count.should eql(4)
97
- sum[:Browser][:Firefox].count.should eql(1)
98
- sum[:Browser][:Firefox]["3.6.0"].count.should eql(1)
99
- sum[:Browser][:Safari].count.should eql(3)
100
- sum[:Browser][:Safari]["5.0"].count.should eql(2)
101
- sum[:Browser][:Safari]["4.0"].count.should eql(1)
102
-
103
- sum[:Crawler].count.should eql(1)
104
- sum[:Crawler][:GoogleBot].count.should eql(1)
105
- sum[:Crawler][:GoogleBot]["2.0"].count.should eql(1)
106
- end
106
+ end
107
+
108
+ context "#keys" do
109
+ it "should return correct keys on all levels" do
110
+ sum.keys.should eql([:Crawler, :Browser])
111
+ sum[:Browser].keys.should eql([:Firefox, :Safari])
112
+ sum[:Browser][:Firefox].keys.should eql(["3.6.0"])
113
+ sum[:Browser][:Firefox]["3.6.0"].keys.should eql([])
114
+ sum[:Browser][:Safari].keys.should eql(["4.0", "5.0"])
115
+ sum[:Browser][:Safari]["4.0"].keys.should eql([])
116
+ sum[:Browser][:Safari]["5.0"].keys.should eql([])
117
+ sum[:Crawler].keys.should eql([:GoogleBot])
118
+ sum[:Crawler][:GoogleBot].keys.should eql(["2.0"])
119
+ sum[:Crawler][:GoogleBot]["2.0"].keys.should eql([])
107
120
  end
108
-
109
- context "#keys" do
110
- it "should return correct keys on all levels" do
111
- sum.keys.should eql([:Crawler, :Browser])
112
- sum[:Browser].keys.should eql([:Firefox, :Safari])
113
- sum[:Browser][:Firefox].keys.should eql(["3.6.0"])
114
- sum[:Browser][:Firefox]["3.6.0"].keys.should eql([])
115
- sum[:Browser][:Safari].keys.should eql(["4.0", "5.0"])
116
- sum[:Browser][:Safari]["4.0"].keys.should eql([])
117
- sum[:Browser][:Safari]["5.0"].keys.should eql([])
118
- sum[:Crawler].keys.should eql([:GoogleBot])
119
- sum[:Crawler][:GoogleBot].keys.should eql(["2.0"])
120
- sum[:Crawler][:GoogleBot]["2.0"].keys.should eql([])
121
- end
121
+ end
122
+
123
+ context "#sort" do
124
+ before do
125
+ sum.add({:type => :Browser, :name => :Safari, :version => "5.0.3"}, 3)
126
+ sum.add({:type => :Browser, :name => :Chrome, :version => "5.0"}, 2)
127
+ sum.sort!
122
128
  end
123
129
 
124
- context "#sort" do
125
- before do
126
- sum.sort!
127
- end
128
-
129
- it "should sort by count" do
130
- sum.keys.should eql([:Browser, :Crawler])
131
- sum[:Browser].keys.should eql([:Safari, :Firefox])
132
- sum[:Browser][:Safari].keys.should eql(["5.0", "4.0"])
133
- end
130
+ it "should sort by count" do
131
+ sum.keys.should eql([:Browser, :Crawler])
132
+ sum[:Browser].keys.should eql([:Safari, :Chrome, :Firefox])
133
+ sum[:Browser][:Safari].keys.should eql(["5.0.3", "5.0", "4.0"])
134
+ end
135
+ end
136
+
137
+ context "#share" do
138
+ it "should return 1.0 on root" do
139
+ sum.share.should eql(1.0)
134
140
  end
135
141
 
136
- context "#share" do
137
- it "should return 1.0 on root" do
138
- sum.share.should eql(1.0)
139
- end
140
-
141
- it "should return 1.0 on branch with single entry" do
142
- sum[:Crawler][:GoogleBot].share.should eql(1.0)
143
- end
144
-
145
- it "should return 0.2 on branch with one out of five" do
146
- sum[:Crawler].share.should eql(0.2)
147
- end
148
-
149
- it "should return 0.8 on branch with four out of five" do
150
- sum[:Browser].share.should eql(0.8)
151
- end
152
-
153
- it "should return 0.25 on branch with one out of four" do
154
- sum[:Browser][:Firefox].share.should eql(0.25)
155
- end
142
+ it "should return 1.0 on branch with single entry" do
143
+ sum[:Crawler][:GoogleBot].share.should eql(1.0)
156
144
  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
145
+
146
+ it "should return 0.2 on branch with one out of five" do
147
+ sum[:Crawler].share.should eql(0.2)
170
148
  end
171
149
 
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
150
+ it "should return 0.8 on branch with four out of five" do
151
+ sum[:Browser].share.should eql(0.8)
176
152
  end
177
153
 
154
+ it "should return 0.25 on branch with one out of four" do
155
+ sum[:Browser][:Firefox].share.should eql(0.25)
156
+ end
178
157
  end
179
158
 
159
+ context "#dump" do
160
+ it "should output serializable array" do
161
+ sum.dump.should eql(
162
+ [[:type, :name, :version], {
163
+ :Crawler=>{:GoogleBot=>{"2.0"=>1}},
164
+ :Browser=>{
165
+ :Firefox=>{"3.6.0"=>1},
166
+ :Safari=>{"4.0"=>1, "5.0"=>2}
167
+ }
168
+ }]
169
+ )
170
+ end
171
+ end
172
+
173
+ context ".load" do
174
+ it "should restore everything from serializable array" do
175
+ SumSum.load(sum.dump).dump.should eql(sum.dump)
176
+ end
177
+ end
180
178
 
181
179
  end
182
180
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 3
9
- version: 0.0.3
8
+ - 4
9
+ version: 0.0.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Sebastian Munz