nested_config 0.2.1 → 0.3.0
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.
- data/README.rdoc +46 -0
- data/lib/nested_config/version.rb +1 -1
- data/lib/nested_config/with_config.rb +42 -0
- data/lib/nested_config.rb +4 -0
- data/test/nested_config_test.rb +29 -0
- data/test/nested_config_with_config_test.rb +28 -0
- metadata +3 -2
- data/test/neopoly_config_evaluate_once_test.rb +0 -42
data/README.rdoc
CHANGED
@@ -62,6 +62,52 @@ The initial access to key +country_list+ calls (via +call+ method) the proc and
|
|
62
62
|
Subsequent calls just fetch the replaced value.
|
63
63
|
|
64
64
|
|
65
|
+
=== Cloning
|
66
|
+
|
67
|
+
NestedConfig can be cloned:
|
68
|
+
|
69
|
+
clone = MyApp.config.__clone__
|
70
|
+
clone.coins = 2000
|
71
|
+
MyApp.config.conins # => 1000
|
72
|
+
|
73
|
+
*Note*: Proc values CANNOT be cloned.
|
74
|
+
|
75
|
+
|
76
|
+
=== Modifying config using NestedConfig::WithConfig
|
77
|
+
|
78
|
+
Values of NestedConfig can be temporalily modified.
|
79
|
+
|
80
|
+
This can be used in tests modifying a global application config inside a block:
|
81
|
+
|
82
|
+
require 'nested_config/with_config'
|
83
|
+
|
84
|
+
class MyCase < MiniTest::TestCase
|
85
|
+
include NestedConfig::WithConfig
|
86
|
+
|
87
|
+
def with_app_config(key, &block)
|
88
|
+
with_config(MyApp.config, key, &block)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
class SomeCase < MyCase
|
93
|
+
def setup
|
94
|
+
app_config.tap do |config|
|
95
|
+
config.workers do |workers|
|
96
|
+
workers.max = 5
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_with_config
|
102
|
+
with_app_config(:workers) do |workers|
|
103
|
+
workers.max = 1
|
104
|
+
# do stuff with modified config max value
|
105
|
+
end
|
106
|
+
# global config reset to previous config
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
|
65
111
|
=== Key names
|
66
112
|
|
67
113
|
*Note*: NestedConfig is not a blank slate so you CANNOT use defined method names as keys like +object_id+.
|
@@ -0,0 +1,42 @@
|
|
1
|
+
class NestedConfig
|
2
|
+
# Test helper for modifying config inside a block.
|
3
|
+
#
|
4
|
+
# == Example
|
5
|
+
#
|
6
|
+
# require 'nested_config/with_config'
|
7
|
+
#
|
8
|
+
# class MyCase < MiniTest::TestCase
|
9
|
+
# include NestedConfig::WithConfig
|
10
|
+
#
|
11
|
+
# def app_config
|
12
|
+
# MyApp.config # global
|
13
|
+
# end
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# class SomeCase < MyCase
|
17
|
+
# def setup
|
18
|
+
# app_config.tap do |config|
|
19
|
+
# config.workers do |workers|
|
20
|
+
# workers.max = 5
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# def test_with_config
|
26
|
+
# with_config(app_config, :workers) do |workers|
|
27
|
+
# workers.max = 1
|
28
|
+
# # do stuff with modified config max value
|
29
|
+
# end
|
30
|
+
# # global config reset to previous config
|
31
|
+
# end
|
32
|
+
# end
|
33
|
+
module WithConfig
|
34
|
+
def with_config(config, key)
|
35
|
+
current = config[key]
|
36
|
+
backup = current.__clone__
|
37
|
+
yield current
|
38
|
+
ensure
|
39
|
+
config[key] = backup
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/nested_config.rb
CHANGED
data/test/nested_config_test.rb
CHANGED
@@ -124,5 +124,34 @@ class NestedConfigTest < NestedConfigSpec
|
|
124
124
|
assert_equal :bar!, c.users.foo?
|
125
125
|
end
|
126
126
|
end
|
127
|
+
|
128
|
+
context "clone" do
|
129
|
+
let(:config) do
|
130
|
+
NestedConfig.new.tap do |config|
|
131
|
+
config.nest do |nest|
|
132
|
+
nest.level = 1
|
133
|
+
nest.deep do |deep|
|
134
|
+
deep.level = 2
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
test "deep" do
|
141
|
+
clone = config.__clone__
|
142
|
+
clone.nest.level = 23
|
143
|
+
clone.nest.deep.level = 5
|
144
|
+
|
145
|
+
assert_equal 1, config.nest.level
|
146
|
+
assert_equal 2, config.nest.deep.level
|
147
|
+
end
|
148
|
+
|
149
|
+
test "cannot clone procs" do
|
150
|
+
config.proc = proc {}
|
151
|
+
assert_raises TypeError do
|
152
|
+
config.__clone__
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
127
156
|
end
|
128
157
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class NestedConfigWithConfigTest < NestedConfigSpec
|
4
|
+
require 'nested_config/with_config'
|
5
|
+
include NestedConfig::WithConfig
|
6
|
+
|
7
|
+
let(:config) do
|
8
|
+
NestedConfig.new.tap do |config|
|
9
|
+
config.nest do |nest|
|
10
|
+
nest.level = 1
|
11
|
+
nest.deep do |deep|
|
12
|
+
deep.level = 2
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
test "with_config with one key" do
|
19
|
+
assert_equal 1, config.nest.level
|
20
|
+
|
21
|
+
with_config(config, :nest) do |nest|
|
22
|
+
nest.level = 2
|
23
|
+
assert_equal 2, config.nest.level
|
24
|
+
end
|
25
|
+
|
26
|
+
assert_equal 1, config.nest.level
|
27
|
+
end
|
28
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nested_config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -76,11 +76,12 @@ files:
|
|
76
76
|
- lib/nested_config.rb
|
77
77
|
- lib/nested_config/evaluate_once.rb
|
78
78
|
- lib/nested_config/version.rb
|
79
|
+
- lib/nested_config/with_config.rb
|
79
80
|
- nested_config.gemspec
|
80
81
|
- test/helper.rb
|
81
|
-
- test/neopoly_config_evaluate_once_test.rb
|
82
82
|
- test/nested_config_evaluate_once_test.rb
|
83
83
|
- test/nested_config_test.rb
|
84
|
+
- test/nested_config_with_config_test.rb
|
84
85
|
homepage: https://rubygems.org/gems/nested_config
|
85
86
|
licenses: []
|
86
87
|
post_install_message:
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
class NestedConfigEvaluateOnceTest < NestedConfigSpec
|
4
|
-
let(:config) do
|
5
|
-
Class.new(NestedConfig) do
|
6
|
-
include NestedConfig::EvaluateOnce
|
7
|
-
end.new
|
8
|
-
end
|
9
|
-
|
10
|
-
context "evaluates once w/o argument" do
|
11
|
-
context "w/o argument" do
|
12
|
-
before do
|
13
|
-
config.startup_time = proc { Time.now }
|
14
|
-
end
|
15
|
-
|
16
|
-
test "has time value" do
|
17
|
-
assert_instance_of Time, config.startup_time
|
18
|
-
end
|
19
|
-
|
20
|
-
test "value does not change" do
|
21
|
-
n = config.startup_time
|
22
|
-
assert_same n, config.startup_time
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
context "with argument" do
|
27
|
-
before do
|
28
|
-
config.env = proc { |e| e.to_s.upcase }
|
29
|
-
config.env(:development)
|
30
|
-
end
|
31
|
-
|
32
|
-
test "replaces original value" do
|
33
|
-
assert_equal "DEVELOPMENT", config.env
|
34
|
-
end
|
35
|
-
|
36
|
-
test "value does not change" do
|
37
|
-
env = config.env
|
38
|
-
assert_same env, config.env
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|