aromat 0.1.1 → 0.2.1
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 +18 -0
- data/lib/aromat/dclone.rb +37 -0
- data/lib/aromat/version.rb +1 -1
- data/lib/aromat.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 982f5a3ae19a71b67b88f2e44983efb53e24a464
|
4
|
+
data.tar.gz: 4b91df573172ee8f2a4c3d43c9ac677f5fb862e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b1d806fc9b15f091ca12f9acd8435454241d4fc3be1df71442216651e2241dfda94d5b181540b69bceb828e8138b5f113d1c3a62c57301d7b96383a39e4fcfa
|
7
|
+
data.tar.gz: 51bcac4c59eb3b0f0974eb30132590edde0e79f2055d0a7bef59b6e1b0e429df79f1a1c9af0b89da09453c508b106d56564668694249ab5fdb9e46d24d8a0ca9
|
data/README.md
CHANGED
@@ -31,6 +31,24 @@ a.sym_keys
|
|
31
31
|
# => {:foo=>"bar", :nested=>[{:problems=>"none"}]}
|
32
32
|
```
|
33
33
|
|
34
|
+
### Deep-clone
|
35
|
+
|
36
|
+
A _dclone_ method is monkey-patched into the *Array* and *Hash* classes, and provides a way to recursively *deep-clone* an instance.
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
a = { foo: 'bar', bar: :kill_me, nested: [{ problems: 'none' }] }
|
40
|
+
b = a.dclone
|
41
|
+
b[:nested] << :foo
|
42
|
+
b[:nested][:problems] = 'no way'
|
43
|
+
b[:test] = :bork
|
44
|
+
b[:foo] = nil
|
45
|
+
b.delete :bar
|
46
|
+
a
|
47
|
+
# => {:foo=>nil, :nested=>[{:problems=>"no way"}, :foo], :test => :bork}
|
48
|
+
b
|
49
|
+
# => {:foo=>"bar", :nested=>[{:problems=>"none"}]}
|
50
|
+
```
|
51
|
+
|
34
52
|
## License
|
35
53
|
|
36
54
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Aromat
|
2
|
+
# by Eresse <eresse@eresse.net>
|
3
|
+
|
4
|
+
# Aromat Module
|
5
|
+
module Aromat
|
6
|
+
|
7
|
+
# Dclone Module
|
8
|
+
module Dclone
|
9
|
+
|
10
|
+
# Base Clone
|
11
|
+
# Clone the object if possible
|
12
|
+
def self.base_clone e
|
13
|
+
e.is_a?(Symbol) ? e : e.clone
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
# Monkey-patch Array Class
|
18
|
+
class Array
|
19
|
+
|
20
|
+
# Deep-Clone
|
21
|
+
# Recursively clones every level of the Array
|
22
|
+
# @return [Array] A copy of the original array where each element has been clone'd
|
23
|
+
def dclone
|
24
|
+
collect { |a| a.respond_to?(:dclone) ? a.dclone : Aromat::Dclone.base_clone(a) }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Monkey-patch Hash Class
|
29
|
+
class Hash
|
30
|
+
|
31
|
+
# Deep-Clone
|
32
|
+
# Recursively clones every level of the Hash
|
33
|
+
# @return [Hash] A copy of the original hash where each element has been clone'd
|
34
|
+
def dclone
|
35
|
+
Hash[*(inject([]) { |a, e| a + e }.collect { |e| e.respond_to?(:dclone) ? e.dclone : Aromat::Dclone.base_clone(e) })]
|
36
|
+
end
|
37
|
+
end
|
data/lib/aromat/version.rb
CHANGED
data/lib/aromat.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aromat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eresse
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-02-
|
11
|
+
date: 2017-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- Rakefile
|
67
67
|
- aromat.gemspec
|
68
68
|
- lib/aromat.rb
|
69
|
+
- lib/aromat/dclone.rb
|
69
70
|
- lib/aromat/sym_keys.rb
|
70
71
|
- lib/aromat/version.rb
|
71
72
|
homepage: http://redmine.eresse.net/projects/aromat
|