hash_util 0.1.0 → 1.0
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.
- 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: []
|