nice_hash 1.9.1 → 1.10.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 +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
|