nice_hash 1.9.1 → 1.10.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 249b566696d5318f1d0c705386ab26fc6361a343da30b82a5a877d55e9c580de
4
- data.tar.gz: a13077bb28217ed4869e14a4d2369029409fef58cdaeb582d7762ff030f7cbf3
3
+ metadata.gz: 6531cb144b11a3373a25dbb6e091a7477db13577dbfce6270da65376c578b843
4
+ data.tar.gz: 794d8a95f00d82661307c2d3c25d6cd62278101c03c69c9213f2156463c59ec3
5
5
  SHA512:
6
- metadata.gz: d757b6dfac4d65498fe47d5ea46b2a4a04ae65b9f3ef82c788a9722d588444bf582db7ff467290e19d187f810282f843568d1d4245656973e96489d9548dcd67
7
- data.tar.gz: 1fac5fa164636d5d4a8019fd82305845c64facfdc5b3d0b02945d19231374aabcebea058ef4e8281d48df558158dee36540e580180e927ce971532b8755a8356
6
+ metadata.gz: 81a602fbbdaacf401a39c28152f3af1191d485bfa3b0da94bb58a64747c52fed7539ea443a5ead5568f01162dc154d3424cff238b082f1df005bdfaf8fb2fa74
7
+ data.tar.gz: deb1f88a222d9d3c13d35c6abd5836baef49c4cd1a09e2a24ad02179a76a5d0cb4d641fd2d48f1db5718dbb5bbce22b6483a91d3a7fae94a14d0e2edb1eb0c96
data/README.md CHANGED
@@ -166,6 +166,41 @@ new_hash = my_hash.generate
166
166
  puts new_hash.get_values(:address) #> {:address=>"21 Doom Av"}
167
167
  puts new_hash.get_values(:address, :zip) #> {:zip=>{:default=>"00000", :correct=>"42782"}, :address=>"21 Doom Av"}
168
168
  puts new_hash.get_values(:drawId) #> {:drawId=>["84914", "21158"]}
169
+ ```
170
+ ### Change all values on the keys we specified
171
+
172
+ Supply a hash with all the keys and the values you want to change on the hash, then it will return the hash/array with the values modified at any level.
173
+
174
+ ```ruby
175
+ my_hash = {
176
+ path: "/api/users",
177
+ data: {
178
+ name: "morpheus",
179
+ job: "leader",
180
+ lab: {
181
+ doom: 'one',
182
+ beep: true,
183
+ name:'mario',
184
+ products: [
185
+ {
186
+ name: 'game',
187
+ price: 30
188
+ },
189
+ {
190
+ name: 'chair',
191
+ price: 130
192
+ }
193
+ ]
194
+ }
195
+ }
196
+ }
197
+
198
+ # using NiceHash class
199
+ pp NiceHash.set_values(my_hash, { price: 75, beep: false } )
200
+
201
+ # using the Hash class
202
+ pp my_hash.set_values({ price: 75, beep: false })
203
+
169
204
  ```
170
205
 
171
206
  ### Filtering / Selecting an specific key on the hash and subhashes
@@ -26,39 +26,38 @@ class String
26
26
  # if no json string or wrong json string, an empty hash.
27
27
  ###########################################################################
28
28
  def json(*keys)
29
- require 'json'
29
+ require "json"
30
30
  result = {}
31
31
  begin
32
- feed_symbols = JSON.parse(self, symbolize_names: true)
33
- if !keys.empty?
34
- result_tmp = if keys[0].is_a?(Symbol)
35
- NiceHash.get_values(feed_symbols, keys)
32
+ feed_symbols = JSON.parse(self, symbolize_names: true)
33
+ if !keys.empty?
34
+ result_tmp = if keys[0].is_a?(Symbol)
35
+ NiceHash.get_values(feed_symbols, keys)
36
+ else
37
+ {}
38
+ end
39
+
40
+ if result_tmp.size == 1
41
+ result = if result_tmp.values.is_a?(Array) && (result_tmp.values.size == 1)
42
+ result_tmp.values[0]
36
43
  else
37
- {}
44
+ result_tmp.values
38
45
  end
39
-
40
- if result_tmp.size == 1
41
- result = if result_tmp.values.is_a?(Array) && (result_tmp.values.size == 1)
42
- result_tmp.values[0]
43
- else
44
- result_tmp.values
45
- end
46
- else
47
- result_tmp.each do |key, value|
48
- result[key] = if (value.is_a?(Array) || value.is_a?(Hash)) && (value.size == 1)
49
- value[0]
50
- else
51
- value
52
- end
46
+ else
47
+ result_tmp.each do |key, value|
48
+ result[key] = if (value.is_a?(Array) || value.is_a?(Hash)) && (value.size == 1)
49
+ value[0]
50
+ else
51
+ value
52
+ end
53
+ end
53
54
  end
55
+ else
56
+ result = feed_symbols
54
57
  end
55
-
56
- else
57
- result = feed_symbols
58
- end
59
58
  rescue StandardError => stack
60
59
  puts stack.to_s
61
- end
60
+ end
62
61
  result
63
62
  end
64
63
  end
@@ -92,12 +91,13 @@ class Array
92
91
  # if no keys given, an empty hash
93
92
  ###########################################################################
94
93
  def json(*keys)
95
- json_string = "[#{join(',')}]"
94
+ json_string = "[#{join(",")}]"
96
95
  json_string.json(*keys)
97
96
  end
98
97
  end
99
98
 
100
- require 'date'
99
+ require "date"
100
+
101
101
  class Date
102
102
  ###########################################################################
103
103
  # It will generate a random date
@@ -124,7 +124,7 @@ class Time
124
124
  # It will return in the format: '%Y-%m-%dT%H:%M:%S.%LZ'
125
125
  # Example: puts Time.now.stamp
126
126
  def stamp
127
- strftime('%Y-%m-%dT%H:%M:%S.%LZ')
127
+ strftime("%Y-%m-%dT%H:%M:%S.%LZ")
128
128
  end
129
129
  end
130
130
 
@@ -142,10 +142,10 @@ class Hash
142
142
  # my_hash.products[1].price.wrong="AAAAA"
143
143
  ###########################################################################
144
144
  def method_missing(m, *arguments, &block)
145
- m = m[1..-1].to_sym if m[0] == '_'
145
+ m = m[1..-1].to_sym if m[0] == "_"
146
146
  if key?(m)
147
147
  self[m]
148
- elsif m.to_s[-1] == '='
148
+ elsif m.to_s[-1] == "="
149
149
  self[m.to_s.chop.to_sym] = arguments[0]
150
150
  else
151
151
  super
@@ -234,12 +234,19 @@ class Hash
234
234
  NiceHash.get_values(self, keys)
235
235
  end
236
236
 
237
+ ###########################################################################
238
+ # It will search for the keys supplied and it will set the value specified
239
+ # More info: NiceHash.set_values
240
+ ###########################################################################
241
+ def set_values(hash_values)
242
+ NiceHash.set_values(self, hash_values)
243
+ end
244
+
237
245
  alias gen generate
238
246
  alias val validate
239
247
  alias patterns pattern_fields
240
248
  end
241
249
 
242
-
243
250
  ###########################################################################
244
251
  # symbolize hash of arrays and array of hashes
245
252
  # Taken from gist https://gist.github.com/Integralist/9503099
@@ -249,14 +256,14 @@ class Object
249
256
  def deep_symbolize_keys
250
257
  if is_a? Hash
251
258
  return reduce({}) do |memo, (k, v)|
252
- memo.tap { |m| m[k.to_sym] = v.deep_symbolize_keys }
253
- end
259
+ memo.tap { |m| m[k.to_sym] = v.deep_symbolize_keys }
260
+ end
254
261
  end
255
262
 
256
263
  if is_a? Array
257
264
  return each_with_object([]) do |v, memo|
258
- memo << v.deep_symbolize_keys
259
- end
265
+ memo << v.deep_symbolize_keys
266
+ end
260
267
  end
261
268
  self
262
269
  end
data/lib/nice_hash.rb CHANGED
@@ -86,6 +86,45 @@ class NiceHash
86
86
  return hashv
87
87
  end
88
88
 
89
+ ###########################################################################
90
+ # It will search for the keys supplied and it will set the value specified
91
+ #
92
+ # input:
93
+ # hash_array: (Hash/Array) Hash/Array we want to search on
94
+ # hash_values: (Hash) Hash that contains the keys and values to set
95
+ # output: (Hash/Array)
96
+ # The same hash/array but with the values we specifed changed
97
+ # example:
98
+ # new_hash = NiceHash.set_values(my_hash, {city: 'London', price: '1000'})
99
+ # #> {:name=>"Peter", :address=>"\#$$$$$", :city=>"London", :products=> [{:name=>:"10:Ln", :price=>"1000"}, {:name=>:"10:Ln", :price=>"1000"}]}
100
+ # Using it directly on Hash class, set_values(hash_values):
101
+ # new_hash = my_hash.set_values({city: 'London', price: '1000'})
102
+ ###########################################################################
103
+ def NiceHash.set_values(hash_array, hash_values)
104
+ hashv = Hash.new()
105
+
106
+ if hash_array.is_a?(Hash) and hash_array.size > 0
107
+ hash_array.each do |k, v|
108
+ if hash_values.keys.include?(k)
109
+ hashv[k] = hash_values[k]
110
+ elsif v.is_a?(Array) or v.is_a?(Hash)
111
+ hashv[k] = NiceHash.set_values(v, hash_values)
112
+ else
113
+ hashv[k] = v
114
+ end
115
+ end
116
+ return hashv
117
+ elsif hash_array.is_a?(Array) and hash_array.size > 0
118
+ hashv = Array.new
119
+ hash_array.each do |r|
120
+ hashv << NiceHash.set_values(r, hash_values)
121
+ end
122
+ return hashv
123
+ else
124
+ return hash_array
125
+ end
126
+ end
127
+
89
128
  ###########################################################################
90
129
  # It will return an array of the keys where we are using string patterns.
91
130
  #
metadata CHANGED
@@ -1,19 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nice_hash
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.1
4
+ version: 1.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mario Ruiz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-22 00:00:00.000000000 Z
11
+ date: 2019-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: string_pattern
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
17
20
  - - ">="
18
21
  - !ruby/object:Gem::Version
19
22
  version: 2.0.0
@@ -21,6 +24,9 @@ dependencies:
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.0'
24
30
  - - ">="
25
31
  - !ruby/object:Gem::Version
26
32
  version: 2.0.0