configatron 4.2.0 → 4.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/lib/configatron/deep_clone.rb +9 -2
- data/lib/configatron/store.rb +6 -2
- data/lib/configatron/version.rb +1 -1
- data/test/functional/configatron.rb +9 -0
- metadata +4 -4
data/History.txt
CHANGED
@@ -37,8 +37,16 @@ module Configatron::DeepClone
|
|
37
37
|
def self.deep_clone( obj=self, cloned={} )
|
38
38
|
if Configatron::RootStore === obj
|
39
39
|
# We never actually want to have multiple copies of our
|
40
|
-
# Configatron::RootStore
|
40
|
+
# Configatron::RootStore -- when making a temp, we just stick
|
41
|
+
# the state-to-revert-to into an ivar.
|
41
42
|
return obj
|
43
|
+
elsif Configatron::Store === obj
|
44
|
+
# Need to special-case this since it's a BasicObject, meaning it
|
45
|
+
# doesn't respond to all the usual ivar magic methods
|
46
|
+
cl = obj.clone(cloned)
|
47
|
+
cloned[obj.__id__] = cl
|
48
|
+
cloned[cl.__id__] = cl
|
49
|
+
return cl
|
42
50
|
elsif cloned.key?( obj.__id__ )
|
43
51
|
return cloned[obj.__id__]
|
44
52
|
else
|
@@ -52,7 +60,6 @@ module Configatron::DeepClone
|
|
52
60
|
cloned[obj.__id__] = cl
|
53
61
|
cloned[cl.__id__] = cl
|
54
62
|
case
|
55
|
-
when Configatron::Store === cl then return cl
|
56
63
|
when Hash === cl
|
57
64
|
cl.clone.each do |k,v|
|
58
65
|
cl[k] = deep_clone( v, cloned )
|
data/lib/configatron/store.rb
CHANGED
@@ -88,8 +88,12 @@ class Configatron
|
|
88
88
|
end
|
89
89
|
|
90
90
|
# Needed for deep_clone to actually clone this object
|
91
|
-
def clone
|
92
|
-
|
91
|
+
def clone(cloned={})
|
92
|
+
root_store = DeepClone.deep_clone(@root_store, cloned)
|
93
|
+
name = DeepClone.deep_clone(@name, cloned)
|
94
|
+
attributes = DeepClone.deep_clone(@attributes, cloned)
|
95
|
+
|
96
|
+
Store.new(root_store, name, attributes)
|
93
97
|
end
|
94
98
|
|
95
99
|
def to_h
|
data/lib/configatron/version.rb
CHANGED
@@ -26,6 +26,15 @@ class Critic::Functional::ConfigatronTest < Critic::Functional::Test
|
|
26
26
|
assert_equal(false, @kernel.key?(:c))
|
27
27
|
end
|
28
28
|
|
29
|
+
it 'nested' do
|
30
|
+
@kernel.foo.bar = 'original'
|
31
|
+
@kernel.temp do
|
32
|
+
@kernel.foo.bar = 'temp'
|
33
|
+
assert_equal('temp', @kernel.foo.bar)
|
34
|
+
end
|
35
|
+
assert_equal('original', @kernel.foo.bar)
|
36
|
+
end
|
37
|
+
|
29
38
|
describe 'start/end' do
|
30
39
|
it 'allows for temporary setting of values' do
|
31
40
|
assert_equal('A', @kernel.a)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: configatron
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.2.
|
4
|
+
version: 4.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-10-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -138,7 +138,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
138
138
|
version: '0'
|
139
139
|
segments:
|
140
140
|
- 0
|
141
|
-
hash: -
|
141
|
+
hash: -3339507519042551569
|
142
142
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
143
|
none: false
|
144
144
|
requirements:
|
@@ -147,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
147
147
|
version: '0'
|
148
148
|
segments:
|
149
149
|
- 0
|
150
|
-
hash: -
|
150
|
+
hash: -3339507519042551569
|
151
151
|
requirements: []
|
152
152
|
rubyforge_project:
|
153
153
|
rubygems_version: 1.8.25
|