rambling-trie 2.3.1 → 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.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/LICENSE +1 -1
- data/README.md +45 -20
- data/lib/rambling/trie/comparable.rb +1 -2
- data/lib/rambling/trie/compressible.rb +2 -4
- data/lib/rambling/trie/compressor.rb +2 -12
- data/lib/rambling/trie/configuration/properties.rb +4 -11
- data/lib/rambling/trie/configuration/provider_collection.rb +10 -20
- data/lib/rambling/trie/container.rb +20 -32
- data/lib/rambling/trie/enumerable.rb +1 -2
- data/lib/rambling/trie/nodes/compressed.rb +1 -2
- data/lib/rambling/trie/nodes/missing.rb +1 -2
- data/lib/rambling/trie/nodes/node.rb +14 -27
- data/lib/rambling/trie/readers/plain_text.rb +1 -2
- data/lib/rambling/trie/readers/reader.rb +2 -4
- data/lib/rambling/trie/serializers/marshal.rb +10 -19
- data/lib/rambling/trie/serializers/yaml.rb +8 -15
- data/lib/rambling/trie/serializers/zip.rb +1 -1
- data/lib/rambling/trie/version.rb +1 -1
- data/lib/rambling/trie.rb +11 -16
- data/rambling-trie.gemspec +4 -4
- data/spec/integration/rambling/trie_spec.rb +36 -4
- data/spec/lib/rambling/trie/configuration/provider_collection_spec.rb +7 -7
- data/spec/lib/rambling/trie/container_spec.rb +4 -4
- data/spec/lib/rambling/trie/nodes/compressed_spec.rb +6 -0
- data/spec/lib/rambling/trie/nodes/raw_spec.rb +6 -4
- data/spec/lib/rambling/trie/serializers/file_spec.rb +1 -1
- data/spec/lib/rambling/trie/serializers/marshal_spec.rb +1 -1
- data/spec/lib/rambling/trie/serializers/yaml_spec.rb +1 -1
- data/spec/lib/rambling/trie/serializers/zip_spec.rb +4 -4
- data/spec/lib/rambling/trie_spec.rb +11 -11
- data/spec/spec_helper.rb +5 -5
- data/spec/support/shared_examples/a_container_word.rb +3 -3
- data/spec/support/shared_examples/a_serializable_trie.rb +1 -1
- data/spec/support/shared_examples/a_serializer.rb +2 -2
- data/spec/support/shared_examples/a_trie_node.rb +3 -2
- metadata +8 -8
@@ -6,10 +6,8 @@ module Rambling
|
|
6
6
|
# Base class for all readers.
|
7
7
|
class Reader
|
8
8
|
# Yields each word read from given file.
|
9
|
-
# @abstract Subclass and override {#each_word} to fit to a particular
|
10
|
-
#
|
11
|
-
# @param [String] filepath the full path of the file to load the words
|
12
|
-
# from.
|
9
|
+
# @abstract Subclass and override {#each_word} to fit to a particular file format.
|
10
|
+
# @param [String] filepath the full path of the file to load the words from.
|
13
11
|
# @yield [String] Each line read from the file.
|
14
12
|
# @return [self]
|
15
13
|
def each_word filepath
|
@@ -6,36 +6,27 @@ module Rambling
|
|
6
6
|
# Serializer for Ruby marshal format (+.marshal+) files.
|
7
7
|
class Marshal < Serializer
|
8
8
|
# Creates a new Marshal serializer.
|
9
|
-
# @param [Serializer] serializer the serializer responsible to write to
|
10
|
-
# and read from disk.
|
9
|
+
# @param [Serializer] serializer the serializer responsible to write to and read from disk.
|
11
10
|
def initialize serializer = nil
|
12
|
-
@serializer = serializer || Rambling::Trie::Serializers::File.new
|
13
11
|
super()
|
12
|
+
@serializer = serializer || Rambling::Trie::Serializers::File.new
|
14
13
|
end
|
15
14
|
|
16
|
-
# Loads marshaled object from contents in filepath and deserializes it
|
17
|
-
#
|
18
|
-
# @param [String] filepath the full path of the file to load the
|
19
|
-
# marshaled object from.
|
15
|
+
# Loads marshaled object from contents in filepath and deserializes it into a {Nodes::Node Node}.
|
16
|
+
# @param [String] filepath the full path of the file to load the marshaled object from.
|
20
17
|
# @return [Nodes::Node] The deserialized {Nodes::Node Node}.
|
21
|
-
# @see https://ruby-doc.org/core-2.7.0/Marshal.html#method-c-load
|
22
|
-
#
|
23
|
-
#
|
24
|
-
# {https://ruby-doc.org/core-2.7.0/Marshal.html#method-c-load
|
25
|
-
# Marshal.load} is generally discouraged. Only use this with trusted
|
26
|
-
# input.
|
18
|
+
# @see https://ruby-doc.org/core-2.7.0/Marshal.html#method-c-load Marshal.load
|
19
|
+
# @note Use of {https://ruby-doc.org/core-2.7.0/Marshal.html#method-c-load Marshal.load} is generally
|
20
|
+
# discouraged. Only use this with trusted input.
|
27
21
|
def load filepath
|
28
22
|
::Marshal.load serializer.load filepath
|
29
23
|
end
|
30
24
|
|
31
|
-
# Serializes a {Nodes::Node Node} and dumps it as a marshaled object
|
32
|
-
# into filepath.
|
25
|
+
# Serializes a {Nodes::Node Node} and dumps it as a marshaled object into filepath.
|
33
26
|
# @param [Nodes::Node] node the node to serialize
|
34
|
-
# @param [String] filepath the full path of the file to dump the
|
35
|
-
# marshaled object into.
|
27
|
+
# @param [String] filepath the full path of the file to dump the marshaled object into.
|
36
28
|
# @return [Numeric] number of bytes written to disk.
|
37
|
-
# @see https://ruby-doc.org/core-2.7.0/Marshal.html#method-c-dump
|
38
|
-
# Marshal.dump
|
29
|
+
# @see https://ruby-doc.org/core-2.7.0/Marshal.html#method-c-dump Marshal.dump
|
39
30
|
def dump node, filepath
|
40
31
|
serializer.dump ::Marshal.dump(node), filepath
|
41
32
|
end
|
@@ -6,20 +6,16 @@ module Rambling
|
|
6
6
|
# Serializer for Ruby yaml format (+.yaml+, or +.yml+) files.
|
7
7
|
class Yaml < Serializer
|
8
8
|
# Creates a new Yaml serializer.
|
9
|
-
# @param [Serializer] serializer the serializer responsible to write to
|
10
|
-
# and read from disk.
|
9
|
+
# @param [Serializer] serializer the serializer responsible to write to and read from disk.
|
11
10
|
def initialize serializer = nil
|
12
|
-
@serializer = serializer || Rambling::Trie::Serializers::File.new
|
13
11
|
super()
|
12
|
+
@serializer = serializer || Rambling::Trie::Serializers::File.new
|
14
13
|
end
|
15
14
|
|
16
|
-
# Loads serialized object from YAML file in filepath and deserializes
|
17
|
-
#
|
18
|
-
# @param [String] filepath the full path of the file to load the
|
19
|
-
# serialized YAML object from.
|
15
|
+
# Loads serialized object from YAML file in filepath and deserializes it into a {Nodes::Node Node}.
|
16
|
+
# @param [String] filepath the full path of the file to load the serialized YAML object from.
|
20
17
|
# @return [Nodes::Node] The deserialized {Nodes::Node Node}.
|
21
|
-
# @see https://ruby-doc.org/stdlib-2.7.0/libdoc/psych/rdoc/Psych.html#method-c-safe_load
|
22
|
-
# Psych.safe_load
|
18
|
+
# @see https://ruby-doc.org/stdlib-2.7.0/libdoc/psych/rdoc/Psych.html#method-c-safe_load Psych.safe_load
|
23
19
|
def load filepath
|
24
20
|
require 'yaml'
|
25
21
|
::YAML.safe_load(
|
@@ -33,14 +29,11 @@ module Rambling
|
|
33
29
|
)
|
34
30
|
end
|
35
31
|
|
36
|
-
# Serializes a {Nodes::Node Node} and dumps it as a YAML object into
|
37
|
-
# filepath.
|
32
|
+
# Serializes a {Nodes::Node Node} and dumps it as a YAML object into filepath.
|
38
33
|
# @param [Nodes::Node] node the node to serialize
|
39
|
-
# @param [String] filepath the full path of the file to dump the YAML
|
40
|
-
# object into.
|
34
|
+
# @param [String] filepath the full path of the file to dump the YAML object into.
|
41
35
|
# @return [Numeric] number of bytes written to disk.
|
42
|
-
# @see https://ruby-doc.org/stdlib-2.7.0/libdoc/psych/rdoc/Psych.html#method-c-dump
|
43
|
-
# Psych.dump
|
36
|
+
# @see https://ruby-doc.org/stdlib-2.7.0/libdoc/psych/rdoc/Psych.html#method-c-dump Psych.dump
|
44
37
|
def dump node, filepath
|
45
38
|
require 'yaml'
|
46
39
|
serializer.dump ::YAML.dump(node), filepath
|
@@ -11,8 +11,8 @@ module Rambling
|
|
11
11
|
# @param [Configuration::Properties] properties the configuration
|
12
12
|
# properties set up so far.
|
13
13
|
def initialize properties
|
14
|
-
@properties = properties
|
15
14
|
super()
|
15
|
+
@properties = properties
|
16
16
|
end
|
17
17
|
|
18
18
|
# Unzip contents from specified filepath and load in contents from
|
data/lib/rambling/trie.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
%w(
|
4
|
-
comparable compressible compressor configuration container enumerable
|
5
|
-
|
6
|
-
version
|
4
|
+
comparable compressible compressor configuration container enumerable inspectable invalid_operation
|
5
|
+
readers serializers stringifyable nodes version
|
7
6
|
).each do |file|
|
8
7
|
require File.join('rambling', 'trie', file)
|
9
8
|
end
|
@@ -23,8 +22,10 @@ module Rambling
|
|
23
22
|
root = root_builder.call
|
24
23
|
|
25
24
|
Rambling::Trie::Container.new root, compressor do |container|
|
25
|
+
# noinspection RubyMismatchedArgumentType
|
26
26
|
if filepath
|
27
27
|
reader ||= readers.resolve filepath
|
28
|
+
# noinspection RubyMismatchedArgumentType,RubyNilAnalysis
|
28
29
|
reader.each_word filepath do |word|
|
29
30
|
container << word
|
30
31
|
end
|
@@ -39,15 +40,12 @@ module Rambling
|
|
39
40
|
# Available formats are +yml+, +marshal+, and +zip+ versions of all the
|
40
41
|
# previous formats. You can also define your own.
|
41
42
|
# @param [String] filepath the file to load the words from.
|
42
|
-
# @param [Serializer, nil] serializer the object responsible of loading
|
43
|
-
# the trie from disk
|
43
|
+
# @param [Serializer, nil] serializer the object responsible of loading the trie from disk.
|
44
44
|
# @return [Container] the trie just loaded.
|
45
45
|
# @yield [Container] the trie just loaded.
|
46
46
|
# @see Rambling::Trie::Serializers Serializers.
|
47
|
-
# @note Use of
|
48
|
-
#
|
49
|
-
# Marshal.load} is generally discouraged. Only use the +.marshal+
|
50
|
-
# format with trusted input.
|
47
|
+
# @note Use of # {https://ruby-doc.org/core-2.7.0/Marshal.html#method-c-load Marshal.load} is generally
|
48
|
+
# discouraged. Only use the +.marshal+ format with trusted input.
|
51
49
|
def load filepath, serializer = nil
|
52
50
|
serializer ||= serializers.resolve filepath
|
53
51
|
root = serializer.load filepath
|
@@ -62,21 +60,18 @@ module Rambling
|
|
62
60
|
# previous formats. You can also define your own.
|
63
61
|
# @param [Container] trie the trie to dump into disk.
|
64
62
|
# @param [String] filepath the file to dump to serialized trie into.
|
65
|
-
# @param [Serializers::Serializer, nil] serializer the object responsible
|
66
|
-
# for trie serialization.
|
63
|
+
# @param [Serializers::Serializer, nil] serializer the object responsible for trie serialization.
|
67
64
|
# @return [void]
|
68
|
-
# serializing and dumping the trie into disk.
|
69
65
|
# @see Serializers Serializers.
|
70
66
|
def dump trie, filepath, serializer = nil
|
71
67
|
serializer ||= serializers.resolve filepath
|
68
|
+
# noinspection RubyNilAnalysis
|
72
69
|
serializer.dump trie.root, filepath
|
73
70
|
end
|
74
71
|
|
75
72
|
# Provides configuration properties for the +Rambling::Trie+ gem.
|
76
|
-
# @return [Configuration::Properties] the configured properties of the
|
77
|
-
#
|
78
|
-
# @yield [Configuration::Properties] the configured properties of the
|
79
|
-
# gem.
|
73
|
+
# @return [Configuration::Properties] the configured properties of the gem.
|
74
|
+
# @yield [Configuration::Properties] the configured properties of the gem.
|
80
75
|
def config
|
81
76
|
yield properties if block_given?
|
82
77
|
properties
|
data/rambling-trie.gemspec
CHANGED
@@ -5,7 +5,7 @@ require 'rambling/trie/version'
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
7
|
gem.authors = ['Edgar Gonzalez', 'Lilibeth De La Cruz']
|
8
|
-
gem.email =
|
8
|
+
gem.email = %w(edggonzalezg@gmail.com lilibethdlc@gmail.com)
|
9
9
|
|
10
10
|
gem.description = <<~DESCRIPTION.gsub(%r{\s+}, ' ')
|
11
11
|
The Rambling Trie is a Ruby implementation of the trie data structure, which
|
@@ -13,7 +13,7 @@ Gem::Specification.new do |gem|
|
|
13
13
|
DESCRIPTION
|
14
14
|
|
15
15
|
gem.summary = 'A Ruby implementation of the trie data structure.'
|
16
|
-
gem.homepage = '
|
16
|
+
gem.homepage = 'https://github.com/gonzedge/rambling-trie'
|
17
17
|
gem.date = Time.now.strftime '%Y-%m-%d'
|
18
18
|
gem.metadata = {
|
19
19
|
'changelog_uri' => 'https://github.com/gonzedge/rambling-trie/blob/master/CHANGELOG.md',
|
@@ -35,7 +35,7 @@ Gem::Specification.new do |gem|
|
|
35
35
|
gem.platform = Gem::Platform::RUBY
|
36
36
|
gem.required_ruby_version = '>= 2.7', '< 4'
|
37
37
|
|
38
|
-
gem.add_development_dependency 'rake', '~> 13.
|
38
|
+
gem.add_development_dependency 'rake', '~> 13.1'
|
39
39
|
gem.add_development_dependency 'rspec', '~> 3.12'
|
40
|
-
gem.add_development_dependency 'yard', '~> 0.9.
|
40
|
+
gem.add_development_dependency 'yard', '~> 0.9.34'
|
41
41
|
end
|
@@ -6,6 +6,38 @@ 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
43
|
let(:trie) { described_class.create }
|
@@ -18,7 +50,7 @@ describe Rambling::Trie do
|
|
18
50
|
context 'when provided with words with unicode characters' do
|
19
51
|
it_behaves_like 'a compressible trie' do
|
20
52
|
let(:trie) { described_class.create }
|
21
|
-
let
|
53
|
+
let :words do
|
22
54
|
%w(poquísimas palabras para nuestra prueba de integración completa 🙃)
|
23
55
|
end
|
24
56
|
|
@@ -50,14 +82,14 @@ describe Rambling::Trie do
|
|
50
82
|
context 'when serialized with Ruby marshal format (default)' do
|
51
83
|
it_behaves_like 'a serializable trie' do
|
52
84
|
let(:trie_to_serialize) { described_class.create words_filepath }
|
53
|
-
let(:
|
85
|
+
let(:file_format) { :marshal }
|
54
86
|
end
|
55
87
|
end
|
56
88
|
|
57
89
|
context 'when serialized with YAML' do
|
58
90
|
it_behaves_like 'a serializable trie' do
|
59
91
|
let(:trie_to_serialize) { described_class.create words_filepath }
|
60
|
-
let(:
|
92
|
+
let(:file_format) { :yml }
|
61
93
|
end
|
62
94
|
end
|
63
95
|
|
@@ -77,7 +109,7 @@ describe Rambling::Trie do
|
|
77
109
|
|
78
110
|
it_behaves_like 'a serializable trie' do
|
79
111
|
let(:trie_to_serialize) { described_class.create words_filepath }
|
80
|
-
let(:
|
112
|
+
let(:file_format) { 'marshal.zip' }
|
81
113
|
end
|
82
114
|
end
|
83
115
|
end
|
@@ -4,18 +4,18 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
describe Rambling::Trie::Configuration::ProviderCollection do
|
6
6
|
let(:configured_default) { nil }
|
7
|
-
let
|
7
|
+
let :configured_providers do
|
8
8
|
{ one: first_provider, two: second_provider }
|
9
9
|
end
|
10
10
|
|
11
|
-
let
|
11
|
+
let :first_provider do
|
12
12
|
instance_double 'Rambling::Trie::Serializers::Marshal', :first_provider
|
13
13
|
end
|
14
|
-
let
|
14
|
+
let :second_provider do
|
15
15
|
instance_double 'Rambling::Trie::Serializers::Marshal', :second_provider
|
16
16
|
end
|
17
17
|
|
18
|
-
let
|
18
|
+
let :provider_collection do
|
19
19
|
described_class.new(
|
20
20
|
:provider,
|
21
21
|
configured_providers,
|
@@ -72,7 +72,7 @@ describe Rambling::Trie::Configuration::ProviderCollection do
|
|
72
72
|
end
|
73
73
|
|
74
74
|
describe '#add' do
|
75
|
-
let
|
75
|
+
let :provider do
|
76
76
|
instance_double 'Rambling::Trie::Serializers::Marshal', :provider
|
77
77
|
end
|
78
78
|
|
@@ -86,7 +86,7 @@ describe Rambling::Trie::Configuration::ProviderCollection do
|
|
86
86
|
end
|
87
87
|
|
88
88
|
describe '#default=' do
|
89
|
-
let
|
89
|
+
let :other_provider do
|
90
90
|
instance_double 'Rambling::Trie::Serializers::Marshal', :other_provider
|
91
91
|
end
|
92
92
|
|
@@ -155,7 +155,7 @@ describe Rambling::Trie::Configuration::ProviderCollection do
|
|
155
155
|
|
156
156
|
describe '#reset' do
|
157
157
|
let(:configured_default) { second_provider }
|
158
|
-
let
|
158
|
+
let :provider do
|
159
159
|
instance_double 'Rambling::Trie::Serializers::Marshal', :provider
|
160
160
|
end
|
161
161
|
|
@@ -171,7 +171,7 @@ describe Rambling::Trie::Container do
|
|
171
171
|
|
172
172
|
describe '#word?' do
|
173
173
|
it_behaves_like 'a propagating node' do
|
174
|
-
let(:
|
174
|
+
let(:method_name) { :word? }
|
175
175
|
end
|
176
176
|
|
177
177
|
context 'when word is contained' do
|
@@ -202,7 +202,7 @@ describe Rambling::Trie::Container do
|
|
202
202
|
describe '#partial_word?' do
|
203
203
|
context 'with underlying node' do
|
204
204
|
it_behaves_like 'a propagating node' do
|
205
|
-
let(:
|
205
|
+
let(:method_name) { :partial_word? }
|
206
206
|
end
|
207
207
|
end
|
208
208
|
|
@@ -329,7 +329,7 @@ describe Rambling::Trie::Container do
|
|
329
329
|
|
330
330
|
describe '#==' do
|
331
331
|
context 'when the root nodes are the same' do
|
332
|
-
let
|
332
|
+
let :other_container do
|
333
333
|
described_class.new container.root, compressor
|
334
334
|
end
|
335
335
|
|
@@ -340,7 +340,7 @@ describe Rambling::Trie::Container do
|
|
340
340
|
|
341
341
|
context 'when the root nodes are not the same' do
|
342
342
|
let(:other_root) { Rambling::Trie::Nodes::Raw.new }
|
343
|
-
let
|
343
|
+
let :other_container do
|
344
344
|
described_class.new other_root, compressor
|
345
345
|
end
|
346
346
|
|
@@ -7,6 +7,12 @@ describe Rambling::Trie::Nodes::Compressed do
|
|
7
7
|
let(:compressor) { Rambling::Trie::Compressor.new }
|
8
8
|
let(:node) { compressor.compress raw_node }
|
9
9
|
|
10
|
+
describe '#new' do
|
11
|
+
it 'is not a word' do
|
12
|
+
expect(node).not_to be_word
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
10
16
|
it_behaves_like 'a trie node implementation' do
|
11
17
|
def add_word_to_tree word
|
12
18
|
add_word raw_node, word
|
@@ -5,6 +5,12 @@ require 'spec_helper'
|
|
5
5
|
describe Rambling::Trie::Nodes::Raw do
|
6
6
|
let(:node) { described_class.new }
|
7
7
|
|
8
|
+
describe '#new' do
|
9
|
+
it 'is not a word' do
|
10
|
+
expect(node).not_to be_word
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
8
14
|
it_behaves_like 'a trie node implementation' do
|
9
15
|
def add_word_to_tree word
|
10
16
|
add_word node, word
|
@@ -17,10 +23,6 @@ describe Rambling::Trie::Nodes::Raw do
|
|
17
23
|
def assign_letter letter
|
18
24
|
node.letter = letter
|
19
25
|
end
|
20
|
-
|
21
|
-
it 'is not a word' do
|
22
|
-
expect(node).not_to be_word
|
23
|
-
end
|
24
26
|
end
|
25
27
|
|
26
28
|
describe '#compressed?' do
|
@@ -8,14 +8,14 @@ describe Rambling::Trie::Serializers::Zip do
|
|
8
8
|
yml: YAML.method(:dump),
|
9
9
|
marshal: Marshal.method(:dump),
|
10
10
|
file: Marshal.method(:dump),
|
11
|
-
}.each do |
|
12
|
-
context "with '.#{
|
11
|
+
}.each do |file_format, dump_method|
|
12
|
+
context "with '.#{file_format}'" do
|
13
13
|
it_behaves_like 'a serializer' do
|
14
14
|
let(:properties) { Rambling::Trie::Configuration::Properties.new }
|
15
15
|
let(:serializer) { described_class.new properties }
|
16
|
-
let(:
|
16
|
+
let(:file_format) { :zip }
|
17
17
|
|
18
|
-
let(:filepath) { File.join tmp_path, "trie-root.#{
|
18
|
+
let(:filepath) { File.join tmp_path, "trie-root.#{file_format}.zip" }
|
19
19
|
let(:format_content) { ->(content) { zip dump_method.call content } }
|
20
20
|
let(:filename) { File.basename(filepath).gsub %r{\.zip}, '' }
|
21
21
|
|
@@ -28,14 +28,14 @@ describe Rambling::Trie do
|
|
28
28
|
|
29
29
|
context 'with a filepath' do
|
30
30
|
let(:filepath) { 'a test filepath' }
|
31
|
-
let
|
31
|
+
let :reader do
|
32
32
|
instance_double 'Rambling::Trie::Readers::PlainText', :reader
|
33
33
|
end
|
34
34
|
let(:words) { %w(a couple of test words over here) }
|
35
35
|
|
36
36
|
before do
|
37
37
|
receive_and_yield = receive(:each_word)
|
38
|
-
words.inject
|
38
|
+
words.inject receive_and_yield do |yielder, word|
|
39
39
|
yielder.and_yield word
|
40
40
|
end
|
41
41
|
|
@@ -54,7 +54,7 @@ describe Rambling::Trie do
|
|
54
54
|
|
55
55
|
context 'without any reader' do
|
56
56
|
let(:filepath) { 'a test filepath' }
|
57
|
-
let
|
57
|
+
let :reader do
|
58
58
|
instance_double(
|
59
59
|
'Rambling::Trie::Readers::PlainText',
|
60
60
|
:reader,
|
@@ -82,7 +82,7 @@ describe Rambling::Trie do
|
|
82
82
|
let(:root) { Rambling::Trie::Nodes::Raw.new }
|
83
83
|
let(:compressor) { Rambling::Trie::Compressor.new }
|
84
84
|
let(:container) { Rambling::Trie::Container.new root, compressor }
|
85
|
-
let
|
85
|
+
let :serializer do
|
86
86
|
instance_double(
|
87
87
|
'Rambling::True::Serializers::File',
|
88
88
|
:serializer,
|
@@ -101,21 +101,21 @@ describe Rambling::Trie do
|
|
101
101
|
end
|
102
102
|
|
103
103
|
context 'without a serializer' do
|
104
|
-
let
|
104
|
+
let :marshal_serializer do
|
105
105
|
instance_double(
|
106
106
|
'Rambling::Trie::Serializers::Marshal',
|
107
107
|
:marshal_serializer,
|
108
108
|
load: nil,
|
109
109
|
)
|
110
110
|
end
|
111
|
-
let
|
111
|
+
let :default_serializer do
|
112
112
|
instance_double(
|
113
113
|
'Rambling::Trie::Serializers::File',
|
114
114
|
:default_serializer,
|
115
115
|
load: nil,
|
116
116
|
)
|
117
117
|
end
|
118
|
-
let
|
118
|
+
let :yaml_serializer do
|
119
119
|
instance_double(
|
120
120
|
'Rambling::Trie::Serializers::Yaml',
|
121
121
|
:yaml_serializer,
|
@@ -168,26 +168,26 @@ describe Rambling::Trie do
|
|
168
168
|
describe '.dump' do
|
169
169
|
let(:filename) { 'a trie' }
|
170
170
|
let(:root) { instance_double 'Rambling::Trie::Serializers::Marshal', :root }
|
171
|
-
let
|
171
|
+
let :compressor do
|
172
172
|
instance_double 'Rambling::Trie::Serializers::Marshal', :compressor
|
173
173
|
end
|
174
174
|
let(:trie) { Rambling::Trie::Container.new root, compressor }
|
175
175
|
|
176
|
-
let
|
176
|
+
let :marshal_serializer do
|
177
177
|
instance_double(
|
178
178
|
'Rambling::Trie::Serializers::Marshal',
|
179
179
|
:marshal_serializer,
|
180
180
|
dump: nil,
|
181
181
|
)
|
182
182
|
end
|
183
|
-
let
|
183
|
+
let :yaml_serializer do
|
184
184
|
instance_double(
|
185
185
|
'Rambling::Trie::Serializers::Yaml',
|
186
186
|
:yaml_serializer,
|
187
187
|
dump: nil,
|
188
188
|
)
|
189
189
|
end
|
190
|
-
let
|
190
|
+
let :default_serializer do
|
191
191
|
instance_double(
|
192
192
|
'Rambling::Trie::Serializers::File',
|
193
193
|
:default_serializer,
|
data/spec/spec_helper.rb
CHANGED
@@ -3,6 +3,8 @@
|
|
3
3
|
require 'yaml'
|
4
4
|
require 'simplecov'
|
5
5
|
|
6
|
+
COVERAGE_FILTER = %r{/spec/}.freeze
|
7
|
+
|
6
8
|
if ENV.key? 'COVERALLS_REPO_TOKEN'
|
7
9
|
require 'coveralls'
|
8
10
|
|
@@ -11,11 +13,9 @@ if ENV.key? 'COVERALLS_REPO_TOKEN'
|
|
11
13
|
Coveralls::SimpleCov::Formatter,
|
12
14
|
]
|
13
15
|
|
14
|
-
Coveralls.wear!
|
15
|
-
add_filter '/spec/'
|
16
|
-
end
|
16
|
+
Coveralls.wear! { add_filter COVERAGE_FILTER }
|
17
17
|
else
|
18
|
-
SimpleCov.start
|
18
|
+
SimpleCov.start { add_filter COVERAGE_FILTER }
|
19
19
|
end
|
20
20
|
|
21
21
|
require 'rspec'
|
@@ -27,7 +27,7 @@ RSpec.configure do |config|
|
|
27
27
|
config.tty = true
|
28
28
|
config.formatter = :documentation
|
29
29
|
config.order = :random
|
30
|
-
config.
|
30
|
+
config.filter_run_when_matching :focus
|
31
31
|
config.raise_errors_for_deprecations!
|
32
32
|
end
|
33
33
|
|
@@ -24,7 +24,7 @@ shared_examples_for 'a propagating node' do
|
|
24
24
|
compressed_value, instance_double_class = test_params
|
25
25
|
|
26
26
|
context "when root has compressed=#{compressed_value}" do
|
27
|
-
let
|
27
|
+
let :root do
|
28
28
|
instance_double(
|
29
29
|
instance_double_class,
|
30
30
|
:root,
|
@@ -35,8 +35,8 @@ shared_examples_for 'a propagating node' do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
it 'calls the root with the word characters' do
|
38
|
-
container.public_send
|
39
|
-
expect(root).to have_received(
|
38
|
+
container.public_send method_name, 'words'
|
39
|
+
expect(root).to have_received(method_name).with %w(w o r d s)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
shared_examples_for 'a serializable trie' do
|
4
4
|
let(:tmp_path) { File.join ::SPEC_ROOT, 'tmp' }
|
5
|
-
let(:filepath) { File.join tmp_path, "trie-root.#{
|
5
|
+
let(:filepath) { File.join tmp_path, "trie-root.#{file_format}" }
|
6
6
|
|
7
7
|
context 'with an uncompressed trie' do
|
8
8
|
before { Rambling::Trie.dump trie_to_serialize, filepath }
|
@@ -5,7 +5,7 @@ shared_examples_for 'a serializer' do
|
|
5
5
|
|
6
6
|
let(:trie) { Rambling::Trie.create }
|
7
7
|
let(:tmp_path) { File.join ::SPEC_ROOT, 'tmp' }
|
8
|
-
let(:filepath) { File.join tmp_path, "trie-root.#{
|
8
|
+
let(:filepath) { File.join tmp_path, "trie-root.#{file_format}" }
|
9
9
|
let(:content) { trie.root }
|
10
10
|
|
11
11
|
before do
|
@@ -52,7 +52,7 @@ shared_examples_for 'a serializer' do
|
|
52
52
|
|
53
53
|
it "loads a compressed=#{compress_value} object" do
|
54
54
|
loaded = serializer.load filepath
|
55
|
-
expect(loaded.compressed?).to be compress_value
|
55
|
+
expect(loaded.compressed?).to be compress_value unless :file == file_format
|
56
56
|
end
|
57
57
|
end
|
58
58
|
end
|
@@ -21,7 +21,8 @@ shared_examples_for 'a trie node' do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
context 'with a letter and a parent' do
|
24
|
-
let(:parent) {
|
24
|
+
let(:parent) { node_class.new }
|
25
|
+
# noinspection RubyArgCount
|
25
26
|
let(:node_with_parent) { node_class.new :a, parent }
|
26
27
|
|
27
28
|
it 'does not have any letter' do
|
@@ -71,7 +72,7 @@ shared_examples_for 'a trie node' do
|
|
71
72
|
end
|
72
73
|
|
73
74
|
describe 'delegates and aliases' do
|
74
|
-
let
|
75
|
+
let :children_tree do
|
75
76
|
instance_double(
|
76
77
|
'Hash',
|
77
78
|
:children_tree,
|