dry-configurable 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/spec/spec_helper.rb DELETED
@@ -1,92 +0,0 @@
1
- if ENV['COVERAGE'] == 'true' && RUBY_ENGINE == 'ruby' && RUBY_VERSION == '2.3.1'
2
- require 'simplecov'
3
-
4
- SimpleCov.start do
5
- add_filter '/spec/'
6
- end
7
- end
8
-
9
- # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
10
- RSpec.configure do |config|
11
- config.expect_with :rspec do |expectations|
12
- # This option will default to `true` in RSpec 4. It makes the `description`
13
- # and `failure_message` of custom matchers include text for helper methods
14
- # defined using `chain`, e.g.:
15
- # be_bigger_than(2).and_smaller_than(4).description
16
- # # => "be bigger than 2 and smaller than 4"
17
- # ...rather than:
18
- # # => "be bigger than 2"
19
- expectations.include_chain_clauses_in_custom_matcher_descriptions = true
20
- end
21
-
22
- config.mock_with :rspec do |mocks|
23
- # Prevents you from mocking or stubbing a method that does not exist on
24
- # a real object. This is generally recommended, and will default to
25
- # `true` in RSpec 4.
26
- mocks.verify_partial_doubles = true
27
- end
28
-
29
- # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
30
- # have no way to turn it off -- the option exists only for backwards
31
- # compatibility in RSpec 3). It causes shared context metadata to be
32
- # inherited by the metadata hash of host groups and examples, rather than
33
- # triggering implicit auto-inclusion in groups with matching metadata.
34
- config.shared_context_metadata_behavior = :apply_to_host_groups
35
-
36
- # This allows you to limit a spec run to individual examples or groups
37
- # you care about by tagging them with `:focus` metadata. When nothing
38
- # is tagged with `:focus`, all examples get run. RSpec also provides
39
- # aliases for `it`, `describe`, and `context` that include `:focus`
40
- # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
41
- config.filter_run_when_matching :focus
42
-
43
- # Allows RSpec to persist some state between runs in order to support
44
- # the `--only-failures` and `--next-failure` CLI options. We recommend
45
- # you configure your source control system to ignore this file.
46
- config.example_status_persistence_file_path = 'spec/examples.txt'
47
-
48
- # Limits the available syntax to the non-monkey patched syntax that is
49
- # recommended. For more details, see:
50
- # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
51
- # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
52
- # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
53
- config.disable_monkey_patching!
54
-
55
- # This setting enables warnings. It's recommended, but in some cases may
56
- # be too noisy due to issues in dependencies.
57
- config.warnings = true
58
-
59
- # Many RSpec users commonly either run the entire suite or an individual
60
- # file, and it's useful to allow more verbose output when running an
61
- # individual spec file.
62
- if config.files_to_run.one?
63
- # Use the documentation formatter for detailed output,
64
- # unless a formatter has already been configured
65
- # (e.g. via a command-line flag).
66
- config.default_formatter = 'doc'
67
- end
68
-
69
- # Print the n slowest examples and example groups at the
70
- # end of the spec run, to help surface which specs are running
71
- # particularly slow.
72
- config.profile_examples = 3
73
-
74
- # Run specs in random order to surface order dependencies. If you find an
75
- # order dependency and want to debug it, you can fix the order by providing
76
- # the seed, which is printed after each run.
77
- # --seed 1234
78
- config.order = :random
79
-
80
- # Seed global randomization in this process using the `--seed` CLI option.
81
- # Setting this allows you to use `--seed` to deterministically reproduce
82
- # test failures related to randomization by passing the same `--seed` value
83
- # as the one that triggered the failure.
84
- Kernel.srand config.seed
85
- end
86
-
87
- require 'dry/configurable'
88
- require 'dry/configurable/test_interface'
89
-
90
- Dir[Pathname(__FILE__).dirname.join('support/**/*.rb').to_s].each do |file|
91
- require file
92
- end
@@ -1,391 +0,0 @@
1
- RSpec.shared_examples 'a configurable class' do
2
- describe Dry::Configurable do
3
- describe 'settings' do
4
- context 'without processor option' do
5
- context 'without default value' do
6
- before do
7
- klass.setting :dsn
8
- end
9
-
10
- it 'returns nil' do
11
- expect(klass.config.dsn).to be(nil)
12
- end
13
- end
14
-
15
- context 'with default value' do
16
- context 'with a nil default value' do
17
- before do
18
- klass.setting :dsn, nil
19
- end
20
-
21
- it 'returns the default value' do
22
- expect(klass.config.dsn).to be(nil)
23
- end
24
- end
25
-
26
- context 'with a false default value' do
27
- before do
28
- klass.setting :dsn, false
29
- end
30
-
31
- it 'returns the default value' do
32
- expect(klass.config.dsn).to be(false)
33
- end
34
- end
35
-
36
- context 'with a string default value' do
37
- before do
38
- klass.setting :dsn, 'sqlite:memory'
39
- end
40
-
41
- it 'returns the default value' do
42
- expect(klass.config.dsn).to eq('sqlite:memory')
43
- end
44
- end
45
-
46
- context 'with a hash default value' do
47
- before do
48
- klass.setting :db_config, {
49
- user: 'root',
50
- password: ''
51
- }
52
- end
53
-
54
- it 'returns the default value' do
55
- expect(klass.config.db_config).to eq(
56
- user: 'root',
57
- password: ''
58
- )
59
- end
60
- end
61
- end
62
-
63
- context 'reader option' do
64
- context 'without passing option' do
65
- before do
66
- klass.setting :dsn
67
- end
68
-
69
- before do
70
- klass.configure do |config|
71
- config.dsn = 'jdbc:sqlite:memory'
72
- end
73
- end
74
-
75
- it 'will not create a getter method' do
76
- expect(klass.respond_to?(:dsn)).to be_falsey
77
- end
78
- end
79
-
80
- context 'with hash as value ' do
81
- before do
82
- klass.setting :dsn, { foo: 'bar' }, reader: true
83
- end
84
-
85
- it 'will create a getter method' do
86
- expect(klass.dsn).to eq(foo: 'bar')
87
- expect(klass.respond_to?(:dsn)).to be_truthy
88
- end
89
- end
90
-
91
- context 'with option set to true' do
92
- before do
93
- klass.setting :dsn, 'testing', reader: true
94
- end
95
-
96
- it 'will create a getter method' do
97
- expect(klass.dsn).to eq 'testing'
98
- expect(klass.respond_to?(:dsn)).to be_truthy
99
- end
100
- end
101
-
102
- context 'with nested configuration' do
103
- before do
104
- klass.setting :dsn, reader: true do
105
- setting :pool, 5
106
- end
107
- end
108
-
109
- it 'will create a nested getter method' do
110
- expect(klass.dsn.pool).to eq 5
111
- end
112
- end
113
-
114
- context 'with processor' do
115
- context 'with default value' do
116
- before do
117
- klass.setting(:dsn, 'memory', reader: true) { |dsn| "sqlite:#{dsn}" }
118
- end
119
-
120
- it 'returns the default value' do
121
- expect(klass.dsn).to eq('sqlite:memory')
122
- end
123
- end
124
-
125
- context 'without default value' do
126
- before do
127
- klass.setting(:dsn, reader: true) { |dsn| "sqlite:#{dsn}" }
128
- end
129
-
130
- it 'returns the default value' do
131
- expect(klass.dsn).to eq(nil)
132
- end
133
- end
134
- end
135
- end
136
-
137
- context 'nested configuration' do
138
- before do
139
- klass.setting :database do
140
- setting :dsn, 'sqlite:memory'
141
- end
142
- end
143
-
144
- it 'returns the default value' do
145
- expect(klass.config.database.dsn).to eq('sqlite:memory')
146
- end
147
- end
148
- end
149
-
150
- context 'with processor' do
151
- context 'without default value' do
152
- before do
153
- klass.setting(:dsn) { |dsn| "sqlite:#{dsn}" }
154
- end
155
-
156
- it 'returns nil' do
157
- expect(klass.config.dsn).to be(nil)
158
- end
159
- end
160
-
161
- context 'with default value' do
162
- before do
163
- klass.setting(:dsn, 'memory') { |dsn| "sqlite:#{dsn}" }
164
- end
165
-
166
- it 'returns the default value' do
167
- expect(klass.config.dsn).to eq('sqlite:memory')
168
- end
169
- end
170
-
171
- context 'nested configuration' do
172
- before do
173
- klass.setting :database do
174
- setting(:dsn, 'memory') { |dsn| "sqlite:#{dsn}" }
175
- end
176
- end
177
-
178
- it 'returns the default value' do
179
- expect(klass.config.database.dsn).to eq('sqlite:memory')
180
- end
181
- end
182
- end
183
- end
184
-
185
- describe 'configuration' do
186
- context 'without nesting' do
187
- context 'without processor' do
188
- before do
189
- klass.setting :dsn, 'sqlite:memory'
190
- end
191
-
192
- before do
193
- klass.configure do |config|
194
- config.dsn = 'jdbc:sqlite:memory'
195
- end
196
- end
197
-
198
- it 'updates the config value' do
199
- expect(klass.config.dsn).to eq('jdbc:sqlite:memory')
200
- end
201
- end
202
-
203
- context 'with processor' do
204
- before do
205
- klass.setting(:dsn, 'sqlite') { |dsn| "#{dsn}:memory" }
206
- end
207
-
208
- before do
209
- klass.configure do |config|
210
- config.dsn = 'jdbc:sqlite'
211
- end
212
- end
213
-
214
- it 'updates the config value' do
215
- expect(klass.config.dsn).to eq('jdbc:sqlite:memory')
216
- end
217
- end
218
- end
219
-
220
- context 'with nesting' do
221
- context 'without processor' do
222
- before do
223
- klass.setting :database do
224
- setting :dsn, 'sqlite:memory'
225
- end
226
-
227
- klass.configure do |config|
228
- config.database.dsn = 'jdbc:sqlite:memory'
229
- end
230
- end
231
-
232
- it 'updates the config value' do
233
- expect(klass.config.database.dsn).to eq('jdbc:sqlite:memory')
234
- end
235
- end
236
-
237
- context 'with processor' do
238
- before do
239
- klass.setting :database do
240
- setting(:dsn, 'sqlite') { |dsn| "#{dsn}:memory" }
241
- end
242
-
243
- klass.configure do |config|
244
- config.database.dsn = 'jdbc:sqlite'
245
- end
246
- end
247
-
248
- it 'updates the config value' do
249
- expect(klass.config.database.dsn).to eq('jdbc:sqlite:memory')
250
- end
251
- end
252
- end
253
-
254
- context 'when finalized' do
255
- before do
256
- klass.setting :dsn
257
- klass.configure do |config|
258
- config.dsn = 'jdbc:sqlite'
259
- end
260
- klass.finalize!
261
- end
262
-
263
- it 'disallows modification' do
264
- expect do
265
- klass.configure do |config|
266
- config.dsn = 'jdbc:sqlite'
267
- end
268
- end.to raise_error(Dry::Configurable::FrozenConfig, 'Cannot modify frozen config')
269
- end
270
-
271
- it 'disallows direct modification on config' do
272
- expect do
273
- klass.config.dsn = 'jdbc:sqlite:memory'
274
- end.to raise_error(Dry::Configurable::FrozenConfig, 'Cannot modify frozen config')
275
- end
276
- end
277
-
278
- context 'when inherited' do
279
- context 'without processor' do
280
- before do
281
- klass.setting :dsn
282
- klass.configure do |config|
283
- config.dsn = 'jdbc:sqlite:memory'
284
- end
285
- end
286
-
287
- subject!(:subclass) { Class.new(klass) }
288
-
289
- it 'retains its configuration' do
290
- expect(subclass.config.dsn).to eq('jdbc:sqlite:memory')
291
- end
292
-
293
- context 'when the inherited config is modified' do
294
- before do
295
- subclass.configure do |config|
296
- config.dsn = 'jdbc:sqlite:file'
297
- end
298
- end
299
-
300
- it 'does not modify the original' do
301
- expect(klass.config.dsn).to eq('jdbc:sqlite:memory')
302
- expect(subclass.config.dsn).to eq('jdbc:sqlite:file')
303
- end
304
- end
305
- end
306
-
307
- context 'with processor' do
308
- before do
309
- klass.setting(:dsn) { |dsn| "#{dsn}:memory" }
310
- klass.configure do |config|
311
- config.dsn = 'jdbc:sqlite'
312
- end
313
- end
314
-
315
- subject!(:subclass) { Class.new(klass) }
316
-
317
- it 'retains its configuration' do
318
- expect(subclass.config.dsn).to eq('jdbc:sqlite:memory')
319
- end
320
-
321
- context 'when the inherited config is modified' do
322
- before do
323
- subclass.configure do |config|
324
- config.dsn = 'sqlite'
325
- end
326
- end
327
-
328
- it 'does not modify the original' do
329
- expect(klass.config.dsn).to eq('jdbc:sqlite:memory')
330
- expect(subclass.config.dsn).to eq('sqlite:memory')
331
- end
332
- end
333
- end
334
-
335
- context 'when the inherited settings are modified' do
336
- before do
337
- klass.setting :dsn
338
- subclass.setting :db
339
- klass.configure do |config|
340
- config.dsn = 'jdbc:sqlite:memory'
341
- end
342
- end
343
-
344
- subject!(:subclass) { Class.new(klass) }
345
-
346
- it 'does not modify the original' do
347
- expect(klass.settings).to_not include(:db)
348
- end
349
- end
350
- end
351
- end
352
-
353
- context 'Test Interface' do
354
- before { klass.enable_test_interface }
355
-
356
- describe 'reset_config' do
357
- before do
358
- klass.setting :dsn, nil
359
- klass.setting :pool do
360
- setting :size, nil
361
- end
362
-
363
- klass.configure do |config|
364
- config.dsn = 'sqlite:memory'
365
- config.pool.size = 5
366
- end
367
-
368
- klass.reset_config
369
- end
370
-
371
- it 'resets configuration to default values' do
372
- expect(klass.config.dsn).to be_nil
373
- expect(klass.config.pool.size).to be_nil
374
- end
375
- end
376
- end
377
-
378
- context 'Try to set new value after config has been created' do
379
- before do
380
- klass.setting :dsn, 'sqlite:memory'
381
- klass.config
382
- end
383
-
384
- it 'raise an exception' do
385
- expect { klass.setting :pool, 5 }.to raise_error(
386
- Dry::Configurable::AlreadyDefinedConfig
387
- )
388
- end
389
- end
390
- end
391
- end
@@ -1,114 +0,0 @@
1
- RSpec.describe Dry::Configurable::ArgumentParser do
2
- let(:klass) { Dry::Configurable::ArgumentParser }
3
-
4
- context 'with no args' do
5
- let(:parsed) { klass.new([]) }
6
-
7
- it 'return default values' do
8
- expect(parsed.value).to eq nil
9
- expect(parsed.options).to eq({})
10
- end
11
- end
12
-
13
- context 'with value and options' do
14
- let(:parsed) { klass.new([value, options]) }
15
-
16
- context 'valid options' do
17
- let(:value) { 'dry-rb' }
18
- let(:options) do
19
- { reader: true }
20
- end
21
-
22
- it 'returns correct value and options' do
23
- expect(parsed.value).to eq 'dry-rb'
24
- expect(parsed.options).to eq(reader: true)
25
- end
26
- end
27
-
28
- context 'invalid options' do
29
- let(:value) { 'dry-rb' }
30
- let(:options) do
31
- { writer: true }
32
- end
33
-
34
- it 'returns correct values and empty options' do
35
- expect(parsed.value).to eq 'dry-rb'
36
- expect(parsed.options).to eq({})
37
- end
38
- end
39
-
40
- context 'values as hash' do
41
- let(:value) do
42
- { db: 'dry-rb' }
43
- end
44
- let(:options) do
45
- { reader: true }
46
- end
47
-
48
- it 'returns correct values and empty options' do
49
- expect(parsed.value).to eq(db: 'dry-rb')
50
- expect(parsed.options).to eq(reader: true)
51
- end
52
- end
53
-
54
- context 'values as array' do
55
- let(:value) { [1, 2, 3] }
56
- let(:options) do
57
- { reader: true }
58
- end
59
-
60
- it 'returns correct values and empty options' do
61
- expect(parsed.value).to eq([1, 2, 3])
62
- expect(parsed.options).to eq(reader: true)
63
- end
64
- end
65
- end
66
-
67
- context 'with value only' do
68
- let(:parsed) { klass.new([value]) }
69
- context 'valid options' do
70
- let(:value) { 'dry-rb' }
71
-
72
- it 'returns correct value and options' do
73
- expect(parsed.value).to eq 'dry-rb'
74
- expect(parsed.options).to eq({})
75
- end
76
- end
77
-
78
- context 'with hash with non option key' do
79
- let(:value) do
80
- { writer: true }
81
- end
82
-
83
- it 'returns correct value and options' do
84
- expect(parsed.value).to eq(writer: true)
85
- expect(parsed.options).to eq({})
86
- end
87
- end
88
-
89
- context 'with hash with option key' do
90
- let(:value) do
91
- { reader: true, writer: true }
92
- end
93
-
94
- it 'returns correct value and options' do
95
- expect(parsed.value).to eq nil
96
- expect(parsed.options).to eq(reader: true)
97
- end
98
- end
99
- end
100
-
101
- context 'with options only' do
102
- let(:parsed) { klass.new([options]) }
103
- context 'valid options' do
104
- let(:options) do
105
- { reader: true }
106
- end
107
-
108
- it 'returns correct value and options' do
109
- expect(parsed.value).to eq nil
110
- expect(parsed.options).to eq(reader: true)
111
- end
112
- end
113
- end
114
- end
@@ -1,55 +0,0 @@
1
- RSpec.describe Dry::Configurable::Config::Value do
2
- let(:klass) { Dry::Configurable::Config::Value }
3
- let(:config) { klass.new(name, value, processor) }
4
- let(:name) { :db }
5
- let(:value) { 'test' }
6
- let(:processor) { ->(v) { v } }
7
-
8
- describe '#initialize' do
9
- it 'coerces string name to symbol' do
10
- config = klass.new('db', value, processor)
11
-
12
- expect(config.name).to eq(:db)
13
- end
14
- end
15
-
16
- describe '#name' do
17
- subject! { config.name }
18
-
19
- it { is_expected.to eq(name) }
20
- end
21
-
22
- describe '#value' do
23
- subject! { config.value }
24
-
25
- context 'when value is not NONE' do
26
- it { is_expected.to eq(value) }
27
- end
28
-
29
- context 'when value is NONE' do
30
- let(:value) { klass::NONE }
31
-
32
- it { is_expected.to be(nil) }
33
- end
34
- end
35
-
36
- describe '#processor' do
37
- subject! { config.processor }
38
-
39
- it { is_expected.to eq(processor) }
40
- end
41
-
42
- describe '#none?' do
43
- subject! { config.none? }
44
-
45
- context 'when value is not NONE' do
46
- it { is_expected.to be(false) }
47
- end
48
-
49
- context 'when value is NONE' do
50
- let(:value) { klass::NONE }
51
-
52
- it { is_expected.to be(true) }
53
- end
54
- end
55
- end