hash_util 0.1.0 → 1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +38 -3
- data/hash_util.gemspec +1 -1
- data/lib/hash_util/version.rb +1 -1
- data/lib/hash_util.rb +57 -27
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e7bcbc1535ccb18c49cfd09076c942764bd314f
|
4
|
+
data.tar.gz: 8417454997da561f492a79e251fa894e4a102578
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b39ed7b7987778b2a5fd6d2d1911f2777abb1d44c248ea121f38de18189ea775f8192e18a8ea0f5e8f9d45e0700724a462764d12824ebcacee1ea6842eb530b0
|
7
|
+
data.tar.gz: aef50b34442a3fa01a6f743bc655221c064503d7374f01e7a7b890dc5fcc14ef467c8cef04166b87bb6c1f607f65c346eb77ba5b274ab47b722ab793f50226e8
|
data/README.md
CHANGED
@@ -24,20 +24,55 @@ Or install it yourself as:
|
|
24
24
|
|
25
25
|
## Usage
|
26
26
|
|
27
|
-
(1)add_hash2_to_hash1
|
27
|
+
(1)add_hash2_to_hash1)
|
28
28
|
```ruby
|
29
29
|
hash1 = {a:1,b:2,c:[1,2],d:{a:1}}
|
30
30
|
hash2 = {a:3,b:3,c:[3,2],d:{a:10}}
|
31
|
-
hash3 =
|
31
|
+
hash3 = HashUtil.add_hash2_to_hash1(hash1,hash2) # hash1 = hash3 = {a:4,b:5,c:[4,4],d:{a:11}}
|
32
32
|
```
|
33
33
|
(2) zero
|
34
34
|
```ruby
|
35
35
|
hash1 = {a:1,b:2,c:[1,2],d:{a:1}}
|
36
36
|
HashUtil.zero(hash1) #{a:0,b:0,c:[0,0],d:{a:0}}
|
37
37
|
```
|
38
|
+
(3) merge
|
39
|
+
0verrides hash1 values with hash2 values.
|
40
|
+
```ruby
|
41
|
+
str1 = %{
|
42
|
+
{ "OccExp": [ -0.0004, 0.09600, 0.0000, -0.0204, 0.09 ,"abc":{"a":1,"b":0,"c":[0,1,2]} ],
|
43
|
+
"PremRV": [ 8.500, 4.19999981, 5.0, 7.80 ]}
|
44
|
+
}
|
45
|
+
|
46
|
+
str2 = %{
|
47
|
+
{ "OccExp": [ 0.0250000004, 0.0, 0.023, 0.0250000004, 0.0280000009,
|
48
|
+
"abc":{"a":1,"b":0,"c":[0,1,2]} ], "PremRV": [ 8.5, 4.19999981, 5.5,
|
49
|
+
7.80000019 ]}
|
50
|
+
}
|
51
|
+
str1 = HashUtil.merge(str1,str2) # values in str1 == str2
|
52
|
+
```
|
53
|
+
(4) tokenize
|
54
|
+
tokenizes a hash and returns a flat array
|
55
|
+
```ruby
|
56
|
+
str2 = %{
|
57
|
+
{ "OccExp": [ 0.0250000004, 0.0199999996, "abc":{"a":1,"b":0,"c":[0,1,2]}]}
|
58
|
+
}
|
59
|
+
HashUtil.extract_numbers_hash(str2) #[ 0.0250000004, 0.0199999996,1,0,0,1,2]
|
60
|
+
```
|
61
|
+
(5) extract_numbers_hash
|
62
|
+
extracts numbers from a hash
|
63
|
+
```ruby
|
64
|
+
str2 = %{
|
65
|
+
{ "OccExp": [ 0.0250000004, 0.0199999996, "abc":{"a":1,"b":0,"c":[0,1,2]}]}
|
66
|
+
}
|
67
|
+
HashUtil.extract_numbers_hash(str2) #[ 0.0250000004, 0.0199999996,1,0,0,1,2]
|
68
|
+
|
69
|
+
```
|
70
|
+
|
71
|
+
|
72
|
+
|
38
73
|
## Contributing
|
39
74
|
|
40
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
75
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/dtheetla/hash_util. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
41
76
|
|
42
77
|
## License
|
43
78
|
|
data/hash_util.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["dinesh"]
|
11
11
|
|
12
12
|
spec.summary = %q{Ruby Hash utility methods.}
|
13
|
-
spec.description = %q{Hash utility methods
|
13
|
+
spec.description = %q{Hash utility methods for Ruby Hashes, refer documentation}
|
14
14
|
spec.homepage = "https://github.com/dtheetla/hash_util"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
data/lib/hash_util/version.rb
CHANGED
data/lib/hash_util.rb
CHANGED
@@ -1,47 +1,77 @@
|
|
1
|
-
require
|
1
|
+
require 'hash_util/version'
|
2
|
+
require 'byebug'
|
2
3
|
|
4
|
+
# Ruby Hash utility module
|
3
5
|
module HashUtil
|
4
6
|
# adds up hash2 values in to hash1
|
5
|
-
def self.add_hash2_to_hash1(a1,b1)
|
6
|
-
if a1.class.name==
|
7
|
-
a1= a1.enum_for(:each_with_index).collect
|
8
|
-
if
|
9
|
-
|
10
|
-
|
7
|
+
def self.add_hash2_to_hash1(a1, b1)
|
8
|
+
if a1.class.name == 'Array'
|
9
|
+
a1 = a1.enum_for(:each_with_index).collect do |m, index|
|
10
|
+
if %w[Array Hash].include?(m.class.name)
|
11
|
+
add_hash2_to_hash1(a1[index], b1[index])
|
12
|
+
else
|
11
13
|
m + b1[index]
|
12
14
|
end
|
13
|
-
|
14
|
-
|
15
|
-
elsif a1.class.name==
|
16
|
-
a1.each do |k,
|
17
|
-
if [
|
18
|
-
a1[k]=add_hash2_to_hash1(a1[k],b1[k])
|
15
|
+
end
|
16
|
+
a1
|
17
|
+
elsif a1.class.name == 'Hash'
|
18
|
+
a1.each do |k, _v|
|
19
|
+
if %w[Array Hash].include?(a1[k].class.name)
|
20
|
+
a1[k] = add_hash2_to_hash1(a1[k], b1[k])
|
19
21
|
else
|
20
22
|
a1[k] += b1[k]
|
21
23
|
end
|
22
24
|
end
|
23
25
|
else
|
24
|
-
a1[k]+=b1[k]
|
26
|
+
a1[k] += b1[k]
|
25
27
|
end
|
26
28
|
end
|
27
29
|
|
28
30
|
# set all values in the hash to 0
|
29
31
|
def self.zero(obj)
|
30
|
-
if obj.class.name==
|
31
|
-
obj=obj.collect
|
32
|
-
[
|
33
|
-
|
34
|
-
elsif obj.class.name==
|
35
|
-
obj.each do |k,
|
36
|
-
if [
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
32
|
+
if obj.class.name == 'Array'
|
33
|
+
obj = obj.collect do |m|
|
34
|
+
%w[Array Hash].include?(m.class.name) ? zero(m) : 0
|
35
|
+
end
|
36
|
+
elsif obj.class.name == 'Hash'
|
37
|
+
obj.each do |k, _v|
|
38
|
+
obj[k] = if %w[Array Hash].include?(obj[k].class.name)
|
39
|
+
zero(obj[k])
|
40
|
+
else
|
41
|
+
0
|
42
|
+
end
|
41
43
|
end
|
42
44
|
else
|
43
|
-
obj[k]=0
|
45
|
+
obj[k] = 0
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# copies values from a hash string in to another
|
50
|
+
# The 2 hashes should be of same structure but keys
|
51
|
+
# can be different
|
52
|
+
def self.merge(hash_str1, hash_str2)
|
53
|
+
token1 = hash_str1.scan(/[[+-]?([0-9]*[.])?[0-9]+]+|\w+|[{}\[\]:,"\040]/)
|
54
|
+
token2 = extract_numbers_hash(hash_str2)
|
55
|
+
j = 0
|
56
|
+
token1.each_index do |i|
|
57
|
+
if /[0-9.]/.match token1[i]
|
58
|
+
token1[i] = token2[j]
|
59
|
+
j += 1
|
60
|
+
end
|
44
61
|
end
|
45
|
-
|
62
|
+
token1.join.gsub(/\s+/, ' ')
|
63
|
+
end
|
46
64
|
|
65
|
+
def self.tokenize(str)
|
66
|
+
str.scan(/[0-9.-]+|\w+/)
|
67
|
+
end
|
68
|
+
|
69
|
+
# extracts all numbers in a hash string
|
70
|
+
def self.extract_numbers_hash(str)
|
71
|
+
str = tokenize str
|
72
|
+
str.select! { |m| /[0-9.]/.match m }
|
73
|
+
str.collect do |m|
|
74
|
+
m.to_s.include?('.') ? m.to_f : m.to_i
|
75
|
+
end
|
76
|
+
end
|
47
77
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hash_util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: '1.0'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- dinesh.theetla@gmail.com
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-09-
|
11
|
+
date: 2017-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,7 +52,7 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '5.0'
|
55
|
-
description: Hash utility methods
|
55
|
+
description: Hash utility methods for Ruby Hashes, refer documentation
|
56
56
|
email:
|
57
57
|
- dinesh
|
58
58
|
executables: []
|