dry-configurable 0.7.0 → 0.8.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.
- checksums.yaml +5 -5
- data/.gitignore +0 -1
- data/.travis.yml +5 -12
- data/CHANGELOG.md +46 -2
- data/CONTRIBUTING.md +29 -0
- data/Gemfile +1 -0
- data/README.md +18 -31
- data/dry-configurable.gemspec +5 -4
- data/lib/dry/configurable/config.rb +109 -40
- data/lib/dry/configurable/error.rb +0 -2
- data/lib/dry/configurable/setting.rb +37 -0
- data/lib/dry/configurable/settings/argument_parser.rb +50 -0
- data/lib/dry/configurable/settings.rb +92 -0
- data/lib/dry/configurable/test_interface.rb +5 -1
- data/lib/dry/configurable/version.rb +1 -1
- data/lib/dry/configurable.rb +116 -127
- metadata +44 -37
- data/.ruby-version +0 -1
- data/lib/dry/configurable/argument_parser.rb +0 -91
- data/lib/dry/configurable/config/value.rb +0 -27
- data/lib/dry/configurable/nested_config.rb +0 -33
- data/spec/integration/configurable_spec.rb +0 -25
- data/spec/spec_helper.rb +0 -92
- data/spec/support/shared_examples/configurable.rb +0 -391
- data/spec/unit/dry/configurable/argument_parser_spec.rb +0 -114
- data/spec/unit/dry/configurable/config/value_spec.rb +0 -55
- data/spec/unit/dry/configurable/config_spec.rb +0 -186
@@ -1,186 +0,0 @@
|
|
1
|
-
RSpec.describe Dry::Configurable::Config do
|
2
|
-
let(:klass) { Dry::Configurable::Config }
|
3
|
-
let(:config) { klass.create(settings) }
|
4
|
-
let(:settings) do
|
5
|
-
[
|
6
|
-
value_class.new(:db, 'sqlite', ->(v) { "#{v}:memory" }),
|
7
|
-
value_class.new(:user, 'root', ->(v) { v }),
|
8
|
-
value_class.new(:pass, none, ->(v) { v })
|
9
|
-
]
|
10
|
-
end
|
11
|
-
let(:value_class) { Dry::Configurable::Config::Value }
|
12
|
-
let(:none) { value_class::NONE }
|
13
|
-
|
14
|
-
describe '.create' do
|
15
|
-
it 'creates a config subclass from the given settings' do
|
16
|
-
expect(config.class).to be < klass
|
17
|
-
|
18
|
-
expect(config.db).to eq('sqlite:memory')
|
19
|
-
expect(config.user).to eq('root')
|
20
|
-
expect(config.pass).to be(nil)
|
21
|
-
|
22
|
-
expect { config.db = 'ineedm0ar' }.to change(config, :db)
|
23
|
-
.from('sqlite:memory')
|
24
|
-
.to('ineedm0ar:memory')
|
25
|
-
expect { config.user = 'whoami' }.to change(config, :user)
|
26
|
-
.from('root')
|
27
|
-
.to('whoami')
|
28
|
-
expect { config.pass = 'h4xz0rz' }.to change(config, :pass)
|
29
|
-
.from(nil)
|
30
|
-
.to('h4xz0rz')
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
describe '#clone' do
|
35
|
-
subject!(:clone) { config.clone }
|
36
|
-
|
37
|
-
it 'clones and returns the config' do
|
38
|
-
expect(clone.db).to eq(config.db)
|
39
|
-
expect(clone.user).to eq(config.user)
|
40
|
-
expect(clone.pass).to eq(config.pass)
|
41
|
-
is_expected.to_not be(config)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
describe '#dup' do
|
46
|
-
subject!(:dup) { config.dup }
|
47
|
-
|
48
|
-
it 'dups and returns the config' do
|
49
|
-
expect(dup.db).to eq(config.db)
|
50
|
-
expect(dup.user).to eq(config.user)
|
51
|
-
expect(dup.pass).to eq(config.pass)
|
52
|
-
is_expected.to_not be(config)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
describe '#finalize!' do
|
57
|
-
subject!(:dup) { config.finalize! }
|
58
|
-
|
59
|
-
it 'freezes itself and the config' do
|
60
|
-
expect { config.user = 'whoami' }
|
61
|
-
.to raise_error(Dry::Configurable::FrozenConfig, 'Cannot modify frozen config')
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe '#to_h' do
|
66
|
-
subject! { config.to_h }
|
67
|
-
|
68
|
-
context 'without nesting' do
|
69
|
-
it 'returns a config hash' do
|
70
|
-
is_expected.to eq(
|
71
|
-
db: 'sqlite:memory',
|
72
|
-
user: 'root',
|
73
|
-
pass: nil
|
74
|
-
)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
context 'with nesting' do
|
79
|
-
let(:nested_setting) do
|
80
|
-
::Dry::Configurable::NestedConfig.new do
|
81
|
-
setting(:bar, 'baz') { |v| v }
|
82
|
-
end.tap(&:create_config)
|
83
|
-
end
|
84
|
-
let(:settings) do
|
85
|
-
[
|
86
|
-
value_class.new(:db, 'sqlite', ->(v) { "#{v}:memory" }),
|
87
|
-
value_class.new(:user, 'root', ->(v) { v }),
|
88
|
-
value_class.new(:pass, none, ->(v) { v }),
|
89
|
-
value_class.new(:foo, nested_setting, ->(v) { v })
|
90
|
-
]
|
91
|
-
end
|
92
|
-
it 'returns a config hash' do
|
93
|
-
is_expected.to eq(
|
94
|
-
db: 'sqlite:memory',
|
95
|
-
user: 'root',
|
96
|
-
pass: nil,
|
97
|
-
foo: {
|
98
|
-
bar: 'baz'
|
99
|
-
}
|
100
|
-
)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
describe '#to_hash' do
|
106
|
-
subject! { config.to_hash }
|
107
|
-
|
108
|
-
context 'without nesting' do
|
109
|
-
it 'returns a config hash' do
|
110
|
-
is_expected.to eq(
|
111
|
-
db: 'sqlite:memory',
|
112
|
-
user: 'root',
|
113
|
-
pass: nil
|
114
|
-
)
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
context 'with nesting' do
|
119
|
-
let(:nested_setting) do
|
120
|
-
klass.create([value_class.new(:bar, 'baz', ->(v) { v })])
|
121
|
-
end
|
122
|
-
let(:settings) do
|
123
|
-
[
|
124
|
-
value_class.new(:db, 'sqlite', ->(v) { "#{v}:memory" }),
|
125
|
-
value_class.new(:user, 'root', ->(v) { v }),
|
126
|
-
value_class.new(:pass, none, ->(v) { v }),
|
127
|
-
value_class.new(:foo, nested_setting, ->(v) { v })
|
128
|
-
]
|
129
|
-
end
|
130
|
-
it 'returns a config hash' do
|
131
|
-
is_expected.to eq(
|
132
|
-
db: 'sqlite:memory',
|
133
|
-
user: 'root',
|
134
|
-
pass: nil,
|
135
|
-
foo: {
|
136
|
-
bar: 'baz'
|
137
|
-
}
|
138
|
-
)
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
describe '#[]' do
|
144
|
-
it 'returns given setting' do
|
145
|
-
expect(config[:db]).to eq('sqlite:memory')
|
146
|
-
expect(config[:user]).to eq('root')
|
147
|
-
expect(config[:pass]).to be(nil)
|
148
|
-
end
|
149
|
-
|
150
|
-
it 'raises an ArgumentError when setting does not exist' do
|
151
|
-
expect { config[:unknown] }.to raise_error(
|
152
|
-
ArgumentError, '+unknown+ is not a setting name'
|
153
|
-
)
|
154
|
-
end
|
155
|
-
|
156
|
-
it 'accepts setting name as a string' do
|
157
|
-
expect(config['user']).to eq('root')
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
describe '#[]=' do
|
162
|
-
it 'sets given setting' do
|
163
|
-
expect { config[:db] = 'ineedm0ar' }.to change(config, :db)
|
164
|
-
.from('sqlite:memory')
|
165
|
-
.to('ineedm0ar:memory')
|
166
|
-
expect { config[:user] = 'whoami' }.to change(config, :user)
|
167
|
-
.from('root')
|
168
|
-
.to('whoami')
|
169
|
-
expect { config[:pass] = 'h4xz0rz' }.to change(config, :pass)
|
170
|
-
.from(nil)
|
171
|
-
.to('h4xz0rz')
|
172
|
-
end
|
173
|
-
|
174
|
-
it 'raises an ArgumentError when setting does not exist' do
|
175
|
-
expect { config[:unknown] = 'unknown' }.to raise_error(
|
176
|
-
ArgumentError, '+unknown+ is not a setting name'
|
177
|
-
)
|
178
|
-
end
|
179
|
-
|
180
|
-
it 'accepts setting name as a string' do
|
181
|
-
expect { config['user'] = 'whoami' }.to change(config, :user)
|
182
|
-
.from('root')
|
183
|
-
.to('whoami')
|
184
|
-
end
|
185
|
-
end
|
186
|
-
end
|