nice_hash 1.18.1 → 1.18.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5eb4297991e401679fa80b27d5317ad1e7ed2454879b1717c920bd862f7de53f
4
- data.tar.gz: beb646818a282748bb694d117533ea339d2a702ca7c024746846894e190ab05d
3
+ metadata.gz: a94b3296aebd74d819129f0c1f78a8727b4845c7f1204061768a1f7d8dfb044e
4
+ data.tar.gz: 901de5b3043b42c499e01820e654950c03f2fa0fc305cff1e4a904681be11af7
5
5
  SHA512:
6
- metadata.gz: 8332df937c26fc60091db0fb821c4b585029b60976a703d49439adef13f1df03af721b31bb68c1965413ed02bcbbf6ccb005f280ea44731a8b4c5af923610b59
7
- data.tar.gz: d18ed3d408b262fcc9f982b4cc1bbbaf5795d1f701be3d4aa3ebd80c532156a88a6380e1c9c657d13b050c79ad77275b9a8792d502bdc5e3eb60fc7b306d0a8d
6
+ metadata.gz: 6680d1e70b147ceff037e223ec78e37bbba08b76accffc96adcf29cc00a975cb76e697e3aad5b9507131c5964a10563c5ee1c6d0a5904b2f7f7281b9bef43443
7
+ data.tar.gz: 8cbd3a88cceaf12958afbeac4c10b1ef34fed4f2ccf5fcbdeebfff1f5bace38613ce4acc7188733dcf3b8b10abe7d138129506f121895dd4bab3b1996ec0182c
@@ -198,8 +198,8 @@ class Hash
198
198
  # returns a clean copy of the hash
199
199
  ###########################################################################
200
200
  def deep_copy
201
- Marshal.load(Marshal.dump(self))
202
- end
201
+ NiceHash.deep_clone(self)
202
+ end
203
203
 
204
204
  ###########################################################################
205
205
  # It will filter the hash by the key specified on select_hash_key.
@@ -291,18 +291,25 @@ class Hash
291
291
  ###########################################################################
292
292
  # Merging multi-dimensional hashes
293
293
  ###########################################################################
294
- def nice_merge(hash = nil)
295
- return self unless hash.is_a?(Hash)
296
- base = self
294
+ def nice_merge(hash = nil, return_self = false)
295
+ if return_self
296
+ base = self
297
+ else
298
+ base = self.deep_copy
299
+ end
300
+ return base unless hash.is_a?(Hash)
297
301
  hash.each do |key, v|
298
302
  if base[key].is_a?(Hash) && hash[key].is_a?(Hash)
299
- base[key].nice_merge(hash[key])
303
+ base[key].nice_merge!(hash[key])
300
304
  else
301
305
  base[key]= hash[key]
302
306
  end
303
307
  end
304
308
  base
305
309
  end
310
+ def nice_merge!(hash = nil)
311
+ return nice_merge(hash, true)
312
+ end
306
313
 
307
314
  alias gen generate
308
315
  alias val validate
@@ -0,0 +1,38 @@
1
+ class NiceHash
2
+ ##################################################
3
+ # Deep clones the supplied object
4
+ #
5
+ # @param obj [Object] The object we want to deep clone
6
+ #
7
+ # @return [Object]
8
+ #
9
+ # @example
10
+ # my_hash = { user: {
11
+ # address: {
12
+ # city: 'Madrid',
13
+ # country: 'Spain'
14
+ # },
15
+ # name: 'Peter',
16
+ # age: 33
17
+ # },
18
+ # customer: true
19
+ # }
20
+ # NiceHash.deep_clone(my_hash)
21
+ # #>{:user=>{:address=>{:city=>"Madrid", :country=>"Spain"}, :name=>"Peter", :age=>33}, :customer=>true}
22
+ ##################################################
23
+ def self.deep_clone(obj)
24
+ obj.clone.tap do |new_obj|
25
+ if new_obj.is_a?(Array)
26
+ new_obj.each_with_index do |val, i|
27
+ new_obj[i] = deep_clone(val)
28
+ end
29
+ elsif new_obj.is_a?(Hash)
30
+ new_obj.each do |key, val|
31
+ new_obj[key] = deep_clone(val)
32
+ end
33
+ else
34
+ new_obj = obj.clone
35
+ end
36
+ end
37
+ end
38
+ end
data/lib/nice_hash.rb CHANGED
@@ -16,6 +16,7 @@ require_relative "nice/hash/set_nested"
16
16
  require_relative "nice/hash/set_values"
17
17
  require_relative "nice/hash/transtring"
18
18
  require_relative "nice/hash/validate"
19
+ require_relative "nice/hash/deep_clone"
19
20
 
20
21
 
21
22
  require "string_pattern"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nice_hash
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.18.1
4
+ version: 1.18.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mario Ruiz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-27 00:00:00.000000000 Z
11
+ date: 2023-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: string_pattern
@@ -69,6 +69,7 @@ files:
69
69
  - lib/nice/hash/add_to_ruby.rb
70
70
  - lib/nice/hash/change_one_by_one.rb
71
71
  - lib/nice/hash/compare_structure.rb
72
+ - lib/nice/hash/deep_clone.rb
72
73
  - lib/nice/hash/delete_nested.rb
73
74
  - lib/nice/hash/generate.rb
74
75
  - lib/nice/hash/get_all_keys.rb