hashlib 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/hashlib.rb +55 -0
- metadata +8 -6
- checksums.yaml +0 -7
data/lib/hashlib.rb
CHANGED
@@ -160,4 +160,59 @@ class Hash
|
|
160
160
|
|
161
161
|
self
|
162
162
|
end
|
163
|
+
end
|
164
|
+
|
165
|
+
class Array
|
166
|
+
def count_distinct(group_by=[])
|
167
|
+
rv = {}
|
168
|
+
|
169
|
+
self.each do |i|
|
170
|
+
if i.is_a?(Hash)
|
171
|
+
components = group_by
|
172
|
+
components = components.collect{|j| i.get(j) }
|
173
|
+
path = []
|
174
|
+
stack = []
|
175
|
+
|
176
|
+
components.compact.each do |c|
|
177
|
+
if c.is_a?(Array)
|
178
|
+
path += [stack].product(c.flatten).collect{|i| i.flatten }
|
179
|
+
stack = []
|
180
|
+
else
|
181
|
+
stack << c
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
path = [components] if path.empty?
|
186
|
+
|
187
|
+
path.each do |parts|
|
188
|
+
parts[-1] = :null if parts[-1].nil?
|
189
|
+
rv.set(parts, rv.get(parts, 0) + 1)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
|
195
|
+
sum_children = proc do |sum, key, value|
|
196
|
+
if value.is_a?(Hash)
|
197
|
+
sum += value.inject(0){|s,(k,v)| sum_children.call(s,k,v) }
|
198
|
+
else
|
199
|
+
sum += value
|
200
|
+
end
|
201
|
+
|
202
|
+
sum
|
203
|
+
end
|
204
|
+
|
205
|
+
populate = proc do |rv, key, value|
|
206
|
+
i = ({
|
207
|
+
:id => ((key.empty? or key.nil? or key == 'null') ? nil : key),
|
208
|
+
:count => (value.is_a?(Hash) ? value.inject(0){|s,(k,v)| sum_children.call(s,k,v) } : value)
|
209
|
+
})
|
210
|
+
|
211
|
+
i[:children] = value.inject([]){|s,(k,v)| populate.call(s,k,v) } if value.is_a?(Hash)
|
212
|
+
rv << i
|
213
|
+
rv
|
214
|
+
end
|
215
|
+
|
216
|
+
rv.inject([]){|s,(k,v)| populate.call(s,k,v) }
|
217
|
+
end
|
163
218
|
end
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hashlib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Gary Hetzel
|
@@ -21,25 +22,26 @@ files:
|
|
21
22
|
- lib/hashlib.rb
|
22
23
|
homepage: https://github.com/ghetzel/hashlib
|
23
24
|
licenses: []
|
24
|
-
metadata: {}
|
25
25
|
post_install_message:
|
26
26
|
rdoc_options: []
|
27
27
|
require_paths:
|
28
28
|
- lib
|
29
29
|
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
30
31
|
requirements:
|
31
|
-
- - '>='
|
32
|
+
- - ! '>='
|
32
33
|
- !ruby/object:Gem::Version
|
33
34
|
version: '0'
|
34
35
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
|
+
none: false
|
35
37
|
requirements:
|
36
|
-
- - '>='
|
38
|
+
- - ! '>='
|
37
39
|
- !ruby/object:Gem::Version
|
38
40
|
version: '0'
|
39
41
|
requirements: []
|
40
42
|
rubyforge_project:
|
41
|
-
rubygems_version:
|
43
|
+
rubygems_version: 1.8.11
|
42
44
|
signing_key:
|
43
|
-
specification_version:
|
45
|
+
specification_version: 3
|
44
46
|
summary: Useful utility methods for working with Ruby hashes
|
45
47
|
test_files: []
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 61b6fe87bc44efa6061512b91b0550bdb0b8242a
|
4
|
-
data.tar.gz: 0c61cd2d7f685beb5ab64f9677e0a8d6a0e3fb5c
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 20c334a2514053e88006c07f352da46f41e5aa199bc13f78d2374a124e7c9e2ac22402c4dd4e29cb49a7f7721a972012394002e97d35d2ff42d1ef1fc731a8e2
|
7
|
-
data.tar.gz: b0ac8be93c2c9c252faa87642c37b11a58cd5ebb978d038d0d143bfbe052fe26b4fef8dd87fce141186f2edcc963d4d72898ab01688df423911cc2c8243786bb
|