hash_util 1.3 → 1.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ab549485511ee94e51e5f7c31244c41fc8cc832c
4
- data.tar.gz: 8b4e7a4bf9a56a5df26ba3d70c06585abfd1bbae
3
+ metadata.gz: 0230c0efbf88089171c6e9a2235e91f2acaa9071
4
+ data.tar.gz: '08c22b3fd5ea8a65d8592b15b4d31d01ae9568ad'
5
5
  SHA512:
6
- metadata.gz: dab8bdaf0d4c2f5fa8abd9b5588dcb6da870901d5bcfb564d7269ebbf972470708d449733e43e3f9c5c6e1d8074db216572d7c32dd2516eeb656f897c0515d34
7
- data.tar.gz: 7985b1064ccaf3f848367893ff32108e8863c466a2c3ca33c71f7616c5f3e7e7aa0edf3e1bb43359a16d187e8763aece87bbdeda51684320f629163de1e03e3e
6
+ metadata.gz: ba88670cdb68c6b3f437248dfa6a0606d61315a03b4c97b82d724e3e0c3209ec60b00f8d20682316e4b8f003841799e83123fa865d78a4fba67d36a70e5cf8a1
7
+ data.tar.gz: 9b10d7350fb58bbe2c43f5973a322320ef1e4b9854f1e415b065d2f1d5136652cd276f43155b6180af7d615507c68cc88cf3629158921fd051e110daab6e29ab
data/README.md CHANGED
@@ -37,6 +37,7 @@ Or install it yourself as:
37
37
 
38
38
  (1)add_hash2_to_hash1
39
39
  ```ruby
40
+ require 'hash_util'
40
41
  hash1 = {a:1,b:2,c:[1,2],d:{a:1}}
41
42
  hash2 = {a:3,b:3,c:[3,2],d:{a:10}}
42
43
  hash3 = HashUtil.add_hash2_to_hash1(hash1,hash2) # hash1 = hash3 = {a:4,b:5,c:[4,4],d:{a:11}}
@@ -0,0 +1,65 @@
1
+ require 'hash_util/version'
2
+ require 'byebug'
3
+
4
+ # Ruby Hash utility module
5
+ module HashHelper
6
+
7
+ def tokenize(str)
8
+ # extract words + nums
9
+ str.scan(/[0-9.e-]+|\w+/)
10
+ end
11
+
12
+ # extracts all numbers in a hash string
13
+ def extract_numbers_hash(str)
14
+ str = tokenize str
15
+ # extract all nums including those using e notation
16
+ str.select! { |m| /^[0-9.e-]+$/.match m }
17
+ # used Float instead of to_f as to_f converts string to '0'
18
+ str.collect do |m|
19
+ Float m
20
+ end
21
+ end
22
+
23
+ # submethod used by add_hash2_to_hash1 if type Array
24
+ def add_hash_if_array(a1, b1)
25
+ a1 = a1.enum_for(:each_with_index).collect do |m, index|
26
+ if %w[Array Hash].include?(m.class.name)
27
+ add_hash2_to_hash1(a1[index], b1[index])
28
+ else
29
+ m + b1[index]
30
+ end
31
+ end
32
+ a1
33
+ end
34
+
35
+ # submethod used by add_hash2_to_hash1 if type Hash
36
+ def add_hash_if_hash(a1, b1)
37
+ a1.each do |k, _v|
38
+ if %w[Array Hash].include?(a1[k].class.name)
39
+ a1[k] = add_hash2_to_hash1(a1[k], b1[k])
40
+ else
41
+ a1[k] += b1[k]
42
+ end
43
+ end
44
+ end
45
+
46
+ # adds up hash2 values in to hash1
47
+ # alternate implementation using string instead of hash
48
+
49
+ # def self.add_hash2_to_hash1(hash1, hash2)
50
+ # token1 = hash1.to_s.scan(/[[+-]?([0-9]*[.])?[0-9e-]+]+|\w+|[{}\[\]:,"\040]/)
51
+ # token2 = extract_numbers_hash(hash2.to_s)
52
+ # j = 0
53
+ # token1.each_index do |i|
54
+ # begin
55
+ # Float token1[i]
56
+ # b = Float token2[j]
57
+ # token1[i] = token1[i].to_f + b
58
+ # j += 1
59
+ # rescue => e
60
+ # e.backtrace
61
+ # end
62
+ # end
63
+ # token1.join.gsub(/\s+/, ' ').gsub(/[.0]/, '')
64
+ # end
65
+ end
@@ -1,3 +1,3 @@
1
1
  module HashUtil
2
- VERSION = "1.3"
2
+ VERSION = "1.4"
3
3
  end
data/lib/hash_util.rb CHANGED
@@ -1,33 +1,30 @@
1
1
  require 'hash_util/version'
2
2
  require 'byebug'
3
+ require 'hash_helper'
3
4
 
4
5
  # Ruby Hash utility module
5
6
  module HashUtil
6
- # adds up hash2 values in to hash1
7
+ extend HashHelper
8
+
9
+ # adds hash2 value to hash1 value recursively
10
+ # alternate implementation using a string instead of hash
11
+ # can be found in hash helper module
7
12
  def self.add_hash2_to_hash1(a1, b1)
8
13
  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
13
- m + b1[index]
14
- end
15
- end
16
- a1
14
+ add_hash_if_array(a1, b1)
17
15
  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])
21
- else
22
- a1[k] += b1[k]
23
- end
24
- end
16
+ add_hash_if_hash(a1, b1)
25
17
  else
26
18
  a1[k] += b1[k]
27
19
  end
28
20
  end
29
21
 
30
22
  # set all values in the hash to 0
23
+ # This method should be moved to helper module and
24
+ # another genericmethod called set_Values to be added
25
+ # that can set all values including zero
26
+ # TODO optimize
27
+ # FIXME rubocop
31
28
  def self.zero(obj)
32
29
  if obj.class.name == 'Array'
33
30
  obj = obj.collect do |m|
@@ -49,13 +46,15 @@ module HashUtil
49
46
  # copies values from a hash string in to another
50
47
  # The 2 hashes should be of same structure but keys
51
48
  # can be different
49
+ # FIXME rubocop
52
50
  def self.merge(hash_str1, hash_str2)
51
+ # extract nums, words
53
52
  token1 = hash_str1.scan(/[[+-]?([0-9]*[.])?[0-9e-]+]+|\w+|[{}\[\]:,"\040]/)
54
53
  token2 = extract_numbers_hash(hash_str2)
55
- # byebug
56
54
  j = 0
57
55
  token1.each_index do |i|
58
56
  begin
57
+ # used Float instead of to_f as to_f converts string to '0'
59
58
  Float token1[i]
60
59
  token1[i] = token2[j]
61
60
  j += 1
@@ -64,17 +63,4 @@ module HashUtil
64
63
  end
65
64
  token1.join.gsub(/\s+/, ' ')
66
65
  end
67
-
68
- def self.tokenize(str)
69
- str.scan(/[0-9.e-]+|\w+/)
70
- end
71
-
72
- # extracts all numbers in a hash string
73
- def self.extract_numbers_hash(str)
74
- str = tokenize str
75
- str.select! { |m| /^[0-9.e-]+$/.match m }
76
- str.collect do |m|
77
- Float m
78
- end
79
- end
80
66
  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: '1.3'
4
+ version: '1.4'
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-10-02 00:00:00.000000000 Z
11
+ date: 2017-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -69,6 +69,7 @@ files:
69
69
  - bin/console
70
70
  - bin/setup
71
71
  - hash_util.gemspec
72
+ - lib/hash_helper.rb
72
73
  - lib/hash_util.rb
73
74
  - lib/hash_util/version.rb
74
75
  homepage: https://github.com/dtheetla/hash_util