rambling-trie 2.3.0 → 2.4.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.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +6 -0
  3. data/LICENSE +1 -1
  4. data/README.md +68 -29
  5. data/lib/rambling/trie/comparable.rb +2 -3
  6. data/lib/rambling/trie/compressible.rb +3 -5
  7. data/lib/rambling/trie/compressor.rb +2 -12
  8. data/lib/rambling/trie/configuration/properties.rb +8 -14
  9. data/lib/rambling/trie/configuration/provider_collection.rb +19 -27
  10. data/lib/rambling/trie/container.rb +28 -42
  11. data/lib/rambling/trie/enumerable.rb +4 -2
  12. data/lib/rambling/trie/nodes/compressed.rb +4 -5
  13. data/lib/rambling/trie/nodes/missing.rb +1 -2
  14. data/lib/rambling/trie/nodes/node.rb +21 -34
  15. data/lib/rambling/trie/nodes/raw.rb +2 -2
  16. data/lib/rambling/trie/readers/plain_text.rb +10 -6
  17. data/lib/rambling/trie/readers/reader.rb +19 -0
  18. data/lib/rambling/trie/readers.rb +1 -1
  19. data/lib/rambling/trie/serializers/file.rb +1 -1
  20. data/lib/rambling/trie/serializers/marshal.rb +12 -20
  21. data/lib/rambling/trie/serializers/serializer.rb +27 -0
  22. data/lib/rambling/trie/serializers/yaml.rb +10 -16
  23. data/lib/rambling/trie/serializers/zip.rb +9 -5
  24. data/lib/rambling/trie/serializers.rb +1 -1
  25. data/lib/rambling/trie/stringifyable.rb +1 -1
  26. data/lib/rambling/trie/version.rb +1 -1
  27. data/lib/rambling/trie.rb +19 -22
  28. data/rambling-trie.gemspec +9 -5
  29. data/spec/integration/rambling/trie_spec.rb +49 -20
  30. data/spec/lib/rambling/trie/comparable_spec.rb +29 -39
  31. data/spec/lib/rambling/trie/compressor_spec.rb +17 -14
  32. data/spec/lib/rambling/trie/configuration/properties_spec.rb +25 -7
  33. data/spec/lib/rambling/trie/configuration/provider_collection_spec.rb +44 -16
  34. data/spec/lib/rambling/trie/container_spec.rb +202 -327
  35. data/spec/lib/rambling/trie/enumerable_spec.rb +18 -10
  36. data/spec/lib/rambling/trie/inspectable_spec.rb +9 -3
  37. data/spec/lib/rambling/trie/nodes/compressed_spec.rb +6 -0
  38. data/spec/lib/rambling/trie/nodes/node_spec.rb +1 -1
  39. data/spec/lib/rambling/trie/nodes/raw_spec.rb +32 -27
  40. data/spec/lib/rambling/trie/readers/plain_text_spec.rb +11 -1
  41. data/spec/lib/rambling/trie/readers/reader_spec.rb +14 -0
  42. data/spec/lib/rambling/trie/serializers/file_spec.rb +2 -4
  43. data/spec/lib/rambling/trie/serializers/marshal_spec.rb +2 -4
  44. data/spec/lib/rambling/trie/serializers/serializer_spec.rb +21 -0
  45. data/spec/lib/rambling/trie/serializers/yaml_spec.rb +2 -4
  46. data/spec/lib/rambling/trie/serializers/zip_spec.rb +24 -16
  47. data/spec/lib/rambling/trie/stringifyable_spec.rb +17 -13
  48. data/spec/lib/rambling/trie_spec.rb +107 -45
  49. data/spec/spec_helper.rb +16 -9
  50. data/spec/support/shared_examples/a_compressible_trie.rb +9 -3
  51. data/spec/support/shared_examples/a_container_partial_word.rb +17 -0
  52. data/spec/support/shared_examples/a_container_scan.rb +14 -0
  53. data/spec/support/shared_examples/a_container_word.rb +43 -0
  54. data/spec/support/shared_examples/a_container_words_within.rb +44 -0
  55. data/spec/support/shared_examples/a_serializable_trie.rb +5 -9
  56. data/spec/support/shared_examples/a_serializer.rb +37 -14
  57. data/spec/support/shared_examples/a_trie_data_structure.rb +24 -10
  58. data/spec/support/shared_examples/a_trie_node.rb +22 -14
  59. data/spec/support/shared_examples/a_trie_node_implementation.rb +40 -43
  60. metadata +25 -9
@@ -6,32 +6,60 @@ require 'zip'
6
6
  describe Rambling::Trie do
7
7
  let(:assets_path) { File.join ::SPEC_ROOT, 'assets' }
8
8
 
9
+ describe '::VERSION' do
10
+ let(:root_path) { File.join ::SPEC_ROOT, '..' }
11
+ let(:readme_path) { File.join root_path, 'README.md' }
12
+ let(:readme) { File.read readme_path }
13
+ let(:changelog_path) { File.join root_path, 'CHANGELOG.md' }
14
+ let(:changelog) { File.read changelog_path }
15
+
16
+ let(:changelog_versions) do
17
+ matches = []
18
+ changelog.scan %r{^## (\d+\.\d+\.\d+)} do |match|
19
+ matches << match[0]
20
+ end
21
+ matches
22
+ end
23
+
24
+ it 'matches with the version in the README badge' do
25
+ match = %r{\?version=(?<version>.*)$}.match readme
26
+ expect(match['version']).to eq Rambling::Trie::VERSION
27
+ end
28
+
29
+ it 'is the version before the one at the top of the CHANGELOG' do
30
+ changelog_version = Gem::Version.new changelog_versions.first
31
+ lib_version = Gem::Version.new "#{Rambling::Trie::VERSION}.0"
32
+ expect(changelog_version).to eq lib_version.bump
33
+ end
34
+
35
+ it 'is included in the CHANGELOG diffs' do
36
+ changelog_versions.shift
37
+ expect(changelog_versions.first).to eq Rambling::Trie::VERSION
38
+ end
39
+ end
40
+
9
41
  context 'when providing words directly' do
10
42
  it_behaves_like 'a compressible trie' do
11
- let(:trie) { Rambling::Trie.create }
43
+ let(:trie) { described_class.create }
12
44
  let(:words) { %w(a couple of words for our full trie integration test) }
13
45
 
14
- before do
15
- trie.concat words
16
- end
46
+ before { trie.concat words }
17
47
  end
18
48
  end
19
49
 
20
50
  context 'when provided with words with unicode characters' do
21
51
  it_behaves_like 'a compressible trie' do
22
- let(:trie) { Rambling::Trie.create }
23
- let(:words) do
52
+ let(:trie) { described_class.create }
53
+ let :words do
24
54
  %w(poquísimas palabras para nuestra prueba de integración completa 🙃)
25
55
  end
26
56
 
27
- before do
28
- trie.concat words
29
- end
57
+ before { trie.concat words }
30
58
  end
31
59
  end
32
60
 
33
61
  context 'when provided with a filepath' do
34
- let(:trie) { Rambling::Trie.create filepath }
62
+ let(:trie) { described_class.create filepath }
35
63
  let(:words) { File.readlines(filepath).map(&:chomp) }
36
64
 
37
65
  context 'with english words' do
@@ -53,34 +81,35 @@ describe Rambling::Trie do
53
81
 
54
82
  context 'when serialized with Ruby marshal format (default)' do
55
83
  it_behaves_like 'a serializable trie' do
56
- let(:trie_to_serialize) { Rambling::Trie.create words_filepath }
57
- let(:format) { :marshal }
84
+ let(:trie_to_serialize) { described_class.create words_filepath }
85
+ let(:file_format) { :marshal }
58
86
  end
59
87
  end
60
88
 
61
89
  context 'when serialized with YAML' do
62
90
  it_behaves_like 'a serializable trie' do
63
- let(:trie_to_serialize) { Rambling::Trie.create words_filepath }
64
- let(:format) { :yml }
91
+ let(:trie_to_serialize) { described_class.create words_filepath }
92
+ let(:file_format) { :yml }
65
93
  end
66
94
  end
67
95
 
68
96
  context 'when serialized with zipped Ruby marshal format' do
97
+ let!(:original_on_exists_proc) { ::Zip.on_exists_proc }
98
+ let!(:original_continue_on_exists_proc) { ::Zip.continue_on_exists_proc }
99
+
69
100
  before do
70
- @original_on_exists_proc = ::Zip.on_exists_proc
71
- @original_continue_on_exists_proc = ::Zip.continue_on_exists_proc
72
101
  ::Zip.on_exists_proc = true
73
102
  ::Zip.continue_on_exists_proc = true
74
103
  end
75
104
 
76
105
  after do
77
- ::Zip.on_exists_proc = @original_on_exists_proc
78
- ::Zip.continue_on_exists_proc = @original_continue_on_exists_proc
106
+ ::Zip.on_exists_proc = original_on_exists_proc
107
+ ::Zip.continue_on_exists_proc = original_continue_on_exists_proc
79
108
  end
80
109
 
81
110
  it_behaves_like 'a serializable trie' do
82
- let(:trie_to_serialize) { Rambling::Trie.create words_filepath }
83
- let(:format) { 'marshal.zip' }
111
+ let(:trie_to_serialize) { described_class.create words_filepath }
112
+ let(:file_format) { 'marshal.zip' }
84
113
  end
85
114
  end
86
115
  end
@@ -4,93 +4,83 @@ require 'spec_helper'
4
4
 
5
5
  describe Rambling::Trie::Comparable do
6
6
  describe '#==' do
7
- let(:node_1) { Rambling::Trie::Nodes::Raw.new }
8
- let(:node_2) { Rambling::Trie::Nodes::Raw.new }
7
+ let(:node_one) { Rambling::Trie::Nodes::Raw.new }
8
+ let(:node_two) { Rambling::Trie::Nodes::Raw.new }
9
9
 
10
10
  context 'when the nodes do not have the same letter' do
11
11
  before do
12
- node_1.letter = :a
13
- node_2.letter = :b
12
+ node_one.letter = :a
13
+ node_two.letter = :b
14
14
  end
15
15
 
16
16
  it 'returns false' do
17
- expect(node_1).not_to eq node_2
17
+ expect(node_one).not_to eq node_two
18
18
  end
19
19
  end
20
20
 
21
- context 'when the nodes have the same letter and no children' do
21
+ context 'when nodes have same letter, not terminal and no children' do
22
22
  before do
23
- node_1.letter = :a
24
- node_2.letter = :a
23
+ node_one.letter = :a
24
+ node_two.letter = :a
25
25
  end
26
26
 
27
27
  it 'returns true' do
28
- expect(node_1).to eq node_2
28
+ expect(node_one).to eq node_two
29
29
  end
30
30
  end
31
31
 
32
32
  context 'when the nodes have the same letter and are terminal' do
33
33
  before do
34
- node_1.letter = :a
35
- node_1.terminal!
34
+ node_one.letter = :a
35
+ node_one.terminal!
36
36
 
37
- node_2.letter = :a
38
- node_2.terminal!
37
+ node_two.letter = :a
38
+ node_two.terminal!
39
39
  end
40
40
 
41
41
  it 'returns true' do
42
- expect(node_1).to eq node_2
43
- end
44
- end
45
-
46
- context 'when the nodes have the same letter and are not terminal' do
47
- before do
48
- node_1.letter = :a
49
- node_2.letter = :a
50
- end
51
-
52
- it 'returns true' do
53
- expect(node_1).to eq node_2
42
+ expect(node_one).to eq node_two
54
43
  end
55
44
  end
56
45
 
57
46
  context 'when the nodes have the same letter but are not both terminal' do
58
47
  before do
59
- node_1.letter = :a
60
- node_1.terminal!
48
+ node_one.letter = :a
49
+ node_one.terminal!
61
50
 
62
- node_2.letter = :a
51
+ node_two.letter = :a
63
52
  end
53
+
64
54
  it 'returns false' do
65
- expect(node_1).not_to eq node_2
55
+ expect(node_one).not_to eq node_two
66
56
  end
67
57
  end
68
58
 
69
59
  context 'when the nodes have the same letter and the same children' do
70
60
  before do
71
- node_1.letter = :t
72
- add_words node_1, %w(hese hree hings)
61
+ node_one.letter = :t
62
+ add_words node_one, %w(hese hree hings)
73
63
 
74
- node_2.letter = :t
75
- add_words node_2, %w(hese hree hings)
64
+ node_two.letter = :t
65
+ add_words node_two, %w(hese hree hings)
76
66
  end
77
67
 
78
68
  it 'returns true' do
79
- expect(node_1).to eq node_2
69
+ expect(node_one).to eq node_two
80
70
  end
81
71
  end
82
72
 
83
73
  context 'when the nodes have the same letter but different children' do
84
74
  before do
85
- node_1.letter = :t
86
- add_words node_1, %w(hese wo)
75
+ node_one.letter = :t
76
+ add_words node_one, %w(hese wo)
87
77
 
88
- node_2.letter = :t
89
- add_words node_2, %w(hese hree hings)
78
+ node_two.letter = :t
79
+ add_words node_two, %w(hese hree hings)
90
80
  end
91
81
 
92
82
  it 'returns false' do
93
- expect(node_1).not_to eq node_2
83
+ expect(node_one).not_to eq node_two
94
84
  end
95
85
  end
96
86
  end
@@ -3,7 +3,7 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Rambling::Trie::Compressor do
6
- let(:compressor) { Rambling::Trie::Compressor.new }
6
+ let(:compressor) { described_class.new }
7
7
 
8
8
  describe '#compress' do
9
9
  let(:node) { Rambling::Trie::Nodes::Raw.new }
@@ -16,9 +16,7 @@ describe Rambling::Trie::Compressor do
16
16
  end
17
17
 
18
18
  context 'with at least one word' do
19
- before do
20
- add_words node, %w(all the words)
21
- end
19
+ before { add_words node, %w(all the words) }
22
20
 
23
21
  it 'keeps the node letter nil' do
24
22
  compressed = compressor.compress node
@@ -28,25 +26,25 @@ describe Rambling::Trie::Compressor do
28
26
  end
29
27
 
30
28
  context 'with a single word' do
31
- before do
32
- add_word node, 'all'
33
- end
29
+ before { add_word node, 'all' }
34
30
 
31
+ # rubocop:disable RSpec/ExampleLength, RSpec/MultipleExpectations
35
32
  it 'compresses into a single node without children' do
36
33
  compressed = compressor.compress node
34
+ compressed_node_a = compressed[:a]
37
35
 
38
- expect(compressed[:a].letter).to eq :all
39
- expect(compressed[:a].children.size).to eq 0
40
- expect(compressed[:a]).to be_terminal
41
- expect(compressed[:a]).to be_compressed
36
+ expect(compressed_node_a.letter).to eq :all
37
+ expect(compressed_node_a.children.size).to eq 0
38
+ expect(compressed_node_a).to be_terminal
39
+ expect(compressed_node_a).to be_compressed
42
40
  end
41
+ # rubocop:enable RSpec/ExampleLength, RSpec/MultipleExpectations
43
42
  end
44
43
 
45
44
  context 'with two words' do
46
- before do
47
- add_words node, %w(all ask)
48
- end
45
+ before { add_words node, %w(all ask) }
49
46
 
47
+ # rubocop:disable RSpec/ExampleLength, RSpec/MultipleExpectations
50
48
  it 'compresses into corresponding three nodes' do
51
49
  compressed = compressor.compress node
52
50
 
@@ -65,8 +63,10 @@ describe Rambling::Trie::Compressor do
65
63
  expect(compressed[:a][:l]).to be_compressed
66
64
  expect(compressed[:a][:s]).to be_compressed
67
65
  end
66
+ # rubocop:enable RSpec/ExampleLength, RSpec/MultipleExpectations
68
67
  end
69
68
 
69
+ # rubocop:disable RSpec/ExampleLength, RSpec/MultipleExpectations
70
70
  it 'reassigns the parent nodes correctly' do
71
71
  add_words node, %w(repay rest repaint)
72
72
  compressed = compressor.compress node
@@ -91,7 +91,9 @@ describe Rambling::Trie::Compressor do
91
91
  expect(compressed[:r][:p][:i].parent).to eq compressed[:r][:p]
92
92
  expect(compressed[:r][:p][:i].children.size).to eq 0
93
93
  end
94
+ # rubocop:enable RSpec/ExampleLength, RSpec/MultipleExpectations
94
95
 
96
+ # rubocop:disable RSpec/ExampleLength, RSpec/MultipleExpectations
95
97
  it 'does not compress terminal nodes' do
96
98
  add_words node, %w(you your yours)
97
99
  compressed = compressor.compress node
@@ -104,5 +106,6 @@ describe Rambling::Trie::Compressor do
104
106
  expect(compressed[:y][:r][:s].letter).to eq :s
105
107
  expect(compressed[:y][:r][:s]).to be_compressed
106
108
  end
109
+ # rubocop:enable RSpec/ExampleLength, RSpec/MultipleExpectations
107
110
  end
108
111
  end
@@ -3,13 +3,17 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Rambling::Trie::Configuration::Properties do
6
- let(:properties) { Rambling::Trie::Configuration::Properties.new }
6
+ let(:properties) { described_class.new }
7
7
 
8
8
  describe '.new' do
9
- it 'configures the serializers' do
9
+ it 'configures the serializer formats' do
10
10
  serializers = properties.serializers
11
-
12
11
  expect(serializers.formats).to match_array %i(marshal yaml yml zip)
12
+ end
13
+
14
+ # rubocop:disable RSpec/ExampleLength
15
+ it 'configures the serializer providers' do
16
+ serializers = properties.serializers
13
17
  expect(serializers.providers.to_a).to match_array [
14
18
  [:marshal, Rambling::Trie::Serializers::Marshal],
15
19
  [:yaml, Rambling::Trie::Serializers::Yaml],
@@ -17,11 +21,15 @@ describe Rambling::Trie::Configuration::Properties do
17
21
  [:zip, Rambling::Trie::Serializers::Zip],
18
22
  ]
19
23
  end
24
+ # rubocop:enable RSpec/ExampleLength
20
25
 
21
- it 'configures the readers' do
26
+ it 'configures the reader formats' do
22
27
  readers = properties.readers
23
-
24
28
  expect(readers.formats).to match_array %i(txt)
29
+ end
30
+
31
+ it 'configures the reader providers' do
32
+ readers = properties.readers
25
33
  expect(readers.providers.to_a).to match_array [
26
34
  [:txt, Rambling::Trie::Readers::PlainText],
27
35
  ]
@@ -44,14 +52,24 @@ describe Rambling::Trie::Configuration::Properties do
44
52
  properties.readers.add :test, 'test'
45
53
  end
46
54
 
47
- it 'resets the serializers and readers to initial values' do
55
+ # rubocop:disable RSpec/MultipleExpectations
56
+ it 'resets the serializers to initial values' do
48
57
  expect(properties.serializers.formats).to include :test
49
- expect(properties.readers.formats).to include :test
50
58
 
51
59
  properties.reset
52
60
 
53
61
  expect(properties.serializers.formats).not_to include :test
62
+ end
63
+ # rubocop:enable RSpec/MultipleExpectations
64
+
65
+ # rubocop:disable RSpec/MultipleExpectations
66
+ it 'resets the readers to initial values' do
67
+ expect(properties.readers.formats).to include :test
68
+
69
+ properties.reset
70
+
54
71
  expect(properties.readers.formats).not_to include :test
55
72
  end
73
+ # rubocop:enable RSpec/MultipleExpectations
56
74
  end
57
75
  end
@@ -4,15 +4,19 @@ require 'spec_helper'
4
4
 
5
5
  describe Rambling::Trie::Configuration::ProviderCollection do
6
6
  let(:configured_default) { nil }
7
- let(:configured_providers) do
7
+ let :configured_providers do
8
8
  { one: first_provider, two: second_provider }
9
9
  end
10
10
 
11
- let(:first_provider) { double :first_provider }
12
- let(:second_provider) { double :second_provider }
11
+ let :first_provider do
12
+ instance_double 'Rambling::Trie::Serializers::Marshal', :first_provider
13
+ end
14
+ let :second_provider do
15
+ instance_double 'Rambling::Trie::Serializers::Marshal', :second_provider
16
+ end
13
17
 
14
- let(:provider_collection) do
15
- Rambling::Trie::Configuration::ProviderCollection.new(
18
+ let :provider_collection do
19
+ described_class.new(
16
20
  :provider,
17
21
  configured_providers,
18
22
  configured_default,
@@ -46,25 +50,31 @@ describe Rambling::Trie::Configuration::ProviderCollection do
46
50
  let(:providers) { provider_collection.providers }
47
51
 
48
52
  before do
49
- allow(providers) .to receive_messages(
53
+ allow(providers).to receive_messages(
50
54
  :[] => 'value',
51
55
  keys: %i(a b),
52
56
  )
53
57
  end
54
58
 
59
+ # rubocop:disable RSpec/MultipleExpectations
55
60
  it 'delegates `#[]` to providers' do
56
61
  expect(provider_collection[:key]).to eq 'value'
57
62
  expect(providers).to have_received(:[]).with :key
58
63
  end
64
+ # rubocop:enable RSpec/MultipleExpectations
59
65
 
66
+ # rubocop:disable RSpec/MultipleExpectations
60
67
  it 'aliases `#formats` to `providers#keys`' do
61
68
  expect(provider_collection.formats).to eq %i(a b)
62
69
  expect(providers).to have_received :keys
63
70
  end
71
+ # rubocop:enable RSpec/MultipleExpectations
64
72
  end
65
73
 
66
74
  describe '#add' do
67
- let(:provider) { double :provider }
75
+ let :provider do
76
+ instance_double 'Rambling::Trie::Serializers::Marshal', :provider
77
+ end
68
78
 
69
79
  before do
70
80
  provider_collection.add :three, provider
@@ -76,7 +86,9 @@ describe Rambling::Trie::Configuration::ProviderCollection do
76
86
  end
77
87
 
78
88
  describe '#default=' do
79
- let(:other_provider) { double :other_provider }
89
+ let :other_provider do
90
+ instance_double 'Rambling::Trie::Serializers::Marshal', :other_provider
91
+ end
80
92
 
81
93
  context 'when the given value is in the providers list' do
82
94
  it 'changes the default provider' do
@@ -106,43 +118,59 @@ describe Rambling::Trie::Configuration::ProviderCollection do
106
118
  expect(provider_collection.default).to be_nil
107
119
  end
108
120
 
121
+ # rubocop:disable RSpec/MultipleExpectations
109
122
  it 'raises an ArgumentError for any other provider' do
110
123
  expect do
111
124
  provider_collection.default = other_provider
112
125
  end.to raise_error ArgumentError
113
126
  expect(provider_collection.default).to be_nil
114
127
  end
128
+ # rubocop:enable RSpec/MultipleExpectations
115
129
  end
116
130
  end
117
131
 
118
132
  describe '#resolve' do
119
133
  context 'when the file extension is one of the providers' do
120
- it 'returns the corresponding provider' do
121
- expect(provider_collection.resolve 'hola.one').to eq first_provider
122
- expect(provider_collection.resolve 'hola.two').to eq second_provider
134
+ [
135
+ ['hola.one', :first_provider],
136
+ ['hola.two', :second_provider],
137
+ ].each do |test_params|
138
+ filepath, provider = test_params
139
+
140
+ it 'returns the corresponding provider' do
141
+ provider_instance = public_send provider
142
+ expect(provider_collection.resolve filepath).to eq provider_instance
143
+ end
123
144
  end
124
145
  end
125
146
 
126
147
  context 'when the file extension is not one of the providers' do
127
- it 'returns the default provider' do
128
- expect(provider_collection.resolve 'hola.unknown').to eq first_provider
129
- expect(provider_collection.resolve 'hola').to eq first_provider
148
+ %w(hola.unknown hola).each do |filepath|
149
+ it 'returns the default provider' do
150
+ expect(provider_collection.resolve filepath).to eq first_provider
151
+ end
130
152
  end
131
153
  end
132
154
  end
133
155
 
134
156
  describe '#reset' do
135
157
  let(:configured_default) { second_provider }
136
- let(:provider) { double :provider }
158
+ let :provider do
159
+ instance_double 'Rambling::Trie::Serializers::Marshal', :provider
160
+ end
137
161
 
138
162
  before do
139
163
  provider_collection.add :three, provider
140
164
  provider_collection.default = provider
141
165
  end
142
166
 
143
- it 'resets to back to the initially configured values' do
167
+ it 'resets to back to the initially configured values (:three => nil)' do
144
168
  provider_collection.reset
145
169
  expect(provider_collection[:three]).to be_nil
170
+ end
171
+
172
+ it 'resets to back to the initially configured default' do
173
+ provider_collection.reset
146
174
  expect(provider_collection.default).to eq second_provider
147
175
  end
148
176
  end