rambling-trie 2.2.1 → 2.3.1
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 +4 -4
 - data/Gemfile +5 -1
 - data/LICENSE +1 -1
 - data/README.md +37 -21
 - data/lib/rambling/trie/comparable.rb +2 -2
 - data/lib/rambling/trie/compressible.rb +3 -3
 - data/lib/rambling/trie/configuration/properties.rb +10 -9
 - data/lib/rambling/trie/configuration/provider_collection.rb +17 -15
 - data/lib/rambling/trie/container.rb +18 -20
 - data/lib/rambling/trie/enumerable.rb +4 -1
 - data/lib/rambling/trie/nodes/compressed.rb +3 -3
 - data/lib/rambling/trie/nodes/node.rb +18 -18
 - data/lib/rambling/trie/nodes/raw.rb +2 -2
 - data/lib/rambling/trie/readers/plain_text.rb +9 -4
 - data/lib/rambling/trie/readers/reader.rb +21 -0
 - data/lib/rambling/trie/readers.rb +1 -1
 - data/lib/rambling/trie/serializers/file.rb +1 -1
 - data/lib/rambling/trie/serializers/marshal.rb +6 -5
 - data/lib/rambling/trie/serializers/serializer.rb +27 -0
 - data/lib/rambling/trie/serializers/yaml.rb +7 -7
 - data/lib/rambling/trie/serializers/zip.rb +9 -5
 - data/lib/rambling/trie/serializers.rb +1 -1
 - data/lib/rambling/trie/stringifyable.rb +1 -1
 - data/lib/rambling/trie/version.rb +1 -1
 - data/lib/rambling/trie.rb +12 -10
 - data/rambling-trie.gemspec +8 -4
 - data/spec/integration/rambling/trie_spec.rb +13 -16
 - data/spec/lib/rambling/trie/comparable_spec.rb +29 -39
 - data/spec/lib/rambling/trie/compressor_spec.rb +17 -14
 - data/spec/lib/rambling/trie/configuration/properties_spec.rb +25 -7
 - data/spec/lib/rambling/trie/configuration/provider_collection_spec.rb +42 -14
 - data/spec/lib/rambling/trie/container_spec.rb +200 -325
 - data/spec/lib/rambling/trie/enumerable_spec.rb +18 -10
 - data/spec/lib/rambling/trie/inspectable_spec.rb +9 -3
 - data/spec/lib/rambling/trie/nodes/node_spec.rb +1 -1
 - data/spec/lib/rambling/trie/nodes/raw_spec.rb +26 -23
 - data/spec/lib/rambling/trie/readers/plain_text_spec.rb +11 -1
 - data/spec/lib/rambling/trie/readers/reader_spec.rb +14 -0
 - data/spec/lib/rambling/trie/serializers/file_spec.rb +1 -3
 - data/spec/lib/rambling/trie/serializers/marshal_spec.rb +1 -3
 - data/spec/lib/rambling/trie/serializers/serializer_spec.rb +21 -0
 - data/spec/lib/rambling/trie/serializers/yaml_spec.rb +1 -3
 - data/spec/lib/rambling/trie/serializers/zip_spec.rb +24 -16
 - data/spec/lib/rambling/trie/stringifyable_spec.rb +17 -13
 - data/spec/lib/rambling/trie_spec.rb +106 -44
 - data/spec/spec_helper.rb +14 -9
 - data/spec/support/shared_examples/a_compressible_trie.rb +9 -3
 - data/spec/support/shared_examples/a_container_partial_word.rb +17 -0
 - data/spec/support/shared_examples/a_container_scan.rb +14 -0
 - data/spec/support/shared_examples/a_container_word.rb +43 -0
 - data/spec/support/shared_examples/a_container_words_within.rb +44 -0
 - data/spec/support/shared_examples/a_serializable_trie.rb +4 -8
 - data/spec/support/shared_examples/a_serializer.rb +36 -13
 - data/spec/support/shared_examples/a_trie_data_structure.rb +24 -10
 - data/spec/support/shared_examples/a_trie_node.rb +19 -12
 - data/spec/support/shared_examples/a_trie_node_implementation.rb +40 -43
 - metadata +26 -10
 
| 
         @@ -3,13 +3,17 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            require 'spec_helper'
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            describe Rambling::Trie::Configuration::Properties do
         
     | 
| 
       6 
     | 
    
         
            -
              let(:properties) {  
     | 
| 
      
 6 
     | 
    
         
            +
              let(:properties) { described_class.new }
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
              describe '.new' do
         
     | 
| 
       9 
     | 
    
         
            -
                it 'configures the  
     | 
| 
      
 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  
     | 
| 
      
 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 
     | 
    
         
            -
                 
     | 
| 
      
 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
         
     | 
| 
         @@ -8,11 +8,15 @@ describe Rambling::Trie::Configuration::ProviderCollection do 
     | 
|
| 
       8 
8 
     | 
    
         
             
                { one: first_provider, two: second_provider }
         
     | 
| 
       9 
9 
     | 
    
         
             
              end
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
              let(:first_provider)  
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
      
 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 
18 
     | 
    
         
             
              let(:provider_collection) do
         
     | 
| 
       15 
     | 
    
         
            -
                 
     | 
| 
      
 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) 
     | 
| 
      
 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)  
     | 
| 
      
 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)  
     | 
| 
      
 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 
     | 
    
         
            -
                   
     | 
| 
       121 
     | 
    
         
            -
                     
     | 
| 
       122 
     | 
    
         
            -
                     
     | 
| 
      
 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 
     | 
    
         
            -
                   
     | 
| 
       128 
     | 
    
         
            -
                     
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
      
 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)  
     | 
| 
      
 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
         
     |