duplicate 1.0.0 → 1.1.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 +6 -2
- data/duplicate.gemspec +1 -0
- data/lib/duplicate.rb +41 -7
- data/lib/duplicate/version.rb +2 -2
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf3e85ee6b06f58563948e537b8ff4d48501a5b1
|
4
|
+
data.tar.gz: e1ec3eb858cd0444ed7d420d761be2bd75a6b22d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d815cd7adf6332b79eb2a8eac2aa503b6a99f227a5c188eebb6815c0f909de944e47b61832cab6a1faefbedc169fc09ab6c51ef33b86419e53f02fbb7a115205
|
7
|
+
data.tar.gz: 0bbc228173a3ad42b395c2e4172f57a8f85e1d8ef8942582d6b29b8e8be73ef206bc8e9c851782e6869ea912e6e9da6cdb6bfcba23df9be65ec943a2e19f4e34
|
data/README.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
-
# Duplicate
|
1
|
+
# Duplicate [![Build Status][travis-image]][travis-link]
|
2
2
|
|
3
|
-
|
3
|
+
[travis-image]: https://travis-ci.org/adamluzsi/duplicate.rb.svg?branch=master
|
4
|
+
[travis-link]: https://travis-ci.org/adamluzsi/duplicate.rb
|
5
|
+
[travis-home]: http://travis-ci.org/
|
6
|
+
|
7
|
+
Duplicate is Originally extracted from [rack-app](http://www.rack-app.com) project.
|
4
8
|
Allows you to Deep duplicate any ruby objects in pure ruby way.
|
5
9
|
That way you can recursively duplicate objects and even replacing original object references with in instance variable references
|
6
10
|
|
data/duplicate.gemspec
CHANGED
@@ -9,6 +9,7 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Adam Luzsi"]
|
10
10
|
spec.email = ["adamluzsi@gmail.com"]
|
11
11
|
|
12
|
+
spec.license = 'Apache License Version 2.0'
|
12
13
|
spec.summary = %q{Deep duplication for ruby objects in pure ruby}
|
13
14
|
spec.description = %q{Originally extracted from rack-app project. Deep duplication for ruby objects in pure ruby, that allow you recursively duplicate objects based on a source object, even replacing original object references}
|
14
15
|
spec.homepage = "http://www.rack-app.com"
|
data/lib/duplicate.rb
CHANGED
@@ -13,17 +13,18 @@ module Duplicate
|
|
13
13
|
protected
|
14
14
|
|
15
15
|
def registered(object, register)
|
16
|
-
register[object.
|
16
|
+
register[object.__id__]
|
17
17
|
end
|
18
18
|
|
19
19
|
def register_duplication(register, object, duplicate)
|
20
|
-
register[object.
|
20
|
+
register[object.__id__]= duplicate
|
21
21
|
duplicate
|
22
22
|
end
|
23
23
|
|
24
24
|
def dup(register, object)
|
25
25
|
|
26
26
|
return registered(object, register) if registered(object, register)
|
27
|
+
return register_duplication(register, object, object) unless identifiable?(object)
|
27
28
|
|
28
29
|
case object
|
29
30
|
|
@@ -48,6 +49,12 @@ module Duplicate
|
|
48
49
|
end
|
49
50
|
end
|
50
51
|
|
52
|
+
def identifiable?(object)
|
53
|
+
object.class && object.respond_to?(:is_a?)
|
54
|
+
rescue NoMethodError
|
55
|
+
false
|
56
|
+
end
|
57
|
+
|
51
58
|
def dup_array(register, object)
|
52
59
|
duplication = dup_object(register, object)
|
53
60
|
duplication.map! { |e| dup(register, e) }
|
@@ -75,16 +82,43 @@ module Duplicate
|
|
75
82
|
end
|
76
83
|
|
77
84
|
def dup_object(register, object)
|
78
|
-
dup_instance_variables(register, object, register_duplication(register, object, object
|
85
|
+
dup_instance_variables(register, object, register_duplication(register, object, try_dup(object)))
|
79
86
|
end
|
80
87
|
|
81
|
-
def dup_instance_variables(register, object,
|
88
|
+
def dup_instance_variables(register, object, duplication)
|
89
|
+
return duplication unless respond_to_instance_variables?(object)
|
90
|
+
|
82
91
|
object.instance_variables.each do |instance_variable|
|
83
|
-
value = object
|
84
|
-
|
92
|
+
value = get_instance_variable(object, instance_variable)
|
93
|
+
|
94
|
+
set_instance_variable(duplication, instance_variable, dup(register, value))
|
85
95
|
end
|
86
96
|
|
87
|
-
return
|
97
|
+
return duplication
|
98
|
+
end
|
99
|
+
|
100
|
+
def get_instance_variable(object, instance_variable_name)
|
101
|
+
object.instance_variable_get(instance_variable_name)
|
102
|
+
rescue NoMethodError
|
103
|
+
object.instance_eval("#{instance_variable_name}")
|
104
|
+
end
|
105
|
+
|
106
|
+
def set_instance_variable(duplicate, instance_variable_name, value_to_set)
|
107
|
+
duplicate.instance_variable_set(instance_variable_name, value_to_set)
|
108
|
+
rescue NoMethodError
|
109
|
+
duplicate.instance_eval("#{instance_variable_name} = Marshal.load(#{Marshal.dump(value_to_set).inspect})")
|
110
|
+
end
|
111
|
+
|
112
|
+
def try_dup(object)
|
113
|
+
object.dup
|
114
|
+
rescue NoMethodError, TypeError
|
115
|
+
object
|
116
|
+
end
|
117
|
+
|
118
|
+
def respond_to_instance_variables?(object)
|
119
|
+
object.respond_to?(:instance_variables) && object.instance_variables.is_a?(Array)
|
120
|
+
rescue NoMethodError
|
121
|
+
false
|
88
122
|
end
|
89
123
|
|
90
124
|
end
|
data/lib/duplicate/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module Duplicate
|
2
|
-
VERSION = "1.
|
3
|
-
end
|
2
|
+
VERSION = "1.1.1"
|
3
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: duplicate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Luzsi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -74,7 +74,8 @@ files:
|
|
74
74
|
- lib/duplicate/core_ext/object.rb
|
75
75
|
- lib/duplicate/version.rb
|
76
76
|
homepage: http://www.rack-app.com
|
77
|
-
licenses:
|
77
|
+
licenses:
|
78
|
+
- Apache License Version 2.0
|
78
79
|
metadata: {}
|
79
80
|
post_install_message:
|
80
81
|
rdoc_options: []
|