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 +4 -4
- data/README.md +35 -0
- data/lib/nice/hash/add_to_ruby.rb +42 -35
- data/lib/nice_hash.rb +39 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6531cb144b11a3373a25dbb6e091a7477db13577dbfce6270da65376c578b843
|
4
|
+
data.tar.gz: 794d8a95f00d82661307c2d3c25d6cd62278101c03c69c9213f2156463c59ec3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
29
|
+
require "json"
|
30
30
|
result = {}
|
31
31
|
begin
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
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
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
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
|
-
|
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
|
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(
|
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
|
-
|
253
|
-
|
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
|
-
|
259
|
-
|
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.
|
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-
|
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
|