rambling-trie 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -9,14 +9,13 @@ module Rambling
9
9
  # trying to add a word to the current compressed trie node
10
10
  # @param [String] _ the word to add to the trie.
11
11
  # @raise [InvalidOperation] if the trie is already compressed.
12
- # @return [nil] this never returns as it always raises an exception.
12
+ # @return [void]
13
13
  def add _
14
- raise Rambling::Trie::InvalidOperation,
15
- 'Cannot add word to compressed trie'
14
+ raise Rambling::Trie::InvalidOperation, 'Cannot add word to compressed trie'
16
15
  end
17
16
 
18
- # Always return `true` for a compressed node.
19
- # @return [Boolean] always `true` for a compressed node.
17
+ # Always return +true+ for a compressed node.
18
+ # @return [Boolean] always +true+ for a compressed node.
20
19
  def compressed?
21
20
  true
22
21
  end
@@ -3,8 +3,7 @@
3
3
  module Rambling
4
4
  module Trie
5
5
  module Nodes
6
- # A representation of a missing node in the trie data structure. Returned
7
- # when a node is not found.
6
+ # A representation of a missing node in the trie data structure. Returned when a node is not found.
8
7
  class Missing < Rambling::Trie::Nodes::Node
9
8
  end
10
9
  end
@@ -22,8 +22,7 @@ module Rambling
22
22
  attr_reader :letter
23
23
 
24
24
  # Child nodes tree.
25
- # @return [Hash] the children_tree hash, consisting of `:letter =>
26
- # node`.
25
+ # @return [Hash<Symbol, Node>] the children tree hash, consisting of +:letter => node+.
27
26
  attr_accessor :children_tree
28
27
 
29
28
  # Parent node.
@@ -31,7 +30,7 @@ module Rambling
31
30
  attr_accessor :parent
32
31
 
33
32
  # Creates a new node.
34
- # @param [Symbol, nil] letter the Node's letter value
33
+ # @param [Symbol, nil] letter the Node's letter value.
35
34
  # @param [Node, nil] parent the parent of the current node.
36
35
  def initialize letter = nil, parent = nil, children_tree = {}
37
36
  @letter = letter
@@ -40,8 +39,7 @@ module Rambling
40
39
  end
41
40
 
42
41
  # Child nodes.
43
- # @return [Array<Node>] the array of children nodes contained
44
- # in the current node.
42
+ # @return [Array<Node>] the array of child nodes contained in the current node.
45
43
  def children
46
44
  children_tree.values
47
45
  end
@@ -51,26 +49,25 @@ module Rambling
51
49
  def first_child
52
50
  return if children_tree.empty?
53
51
 
54
- children_tree.each_value do |child|
55
- return child
56
- end
52
+ # rubocop:disable Lint/UnreachableLoop
53
+ children_tree.each_value { |child| return child }
54
+ # rubocop:enable Lint/UnreachableLoop
57
55
  end
58
56
 
59
57
  # Indicates if the current node is the root node.
60
- # @return [Boolean] `true` if the node does not have a parent, `false`
61
- # otherwise.
58
+ # @return [Boolean] +true+ if the node does not have a parent, +false+ otherwise.
62
59
  def root?
63
60
  !parent
64
61
  end
65
62
 
66
63
  # Indicates if a {Node Node} is terminal or not.
67
- # @return [Boolean] `true` for terminal nodes, `false` otherwise.
64
+ # @return [Boolean] +true+ for terminal nodes, +false+ otherwise.
68
65
  def terminal?
69
66
  !!terminal
70
67
  end
71
68
 
72
69
  # Mark {Node Node} as terminal.
73
- # @return [Node] the modified node.
70
+ # @return [self] the modified node.
74
71
  def terminal!
75
72
  self.terminal = true
76
73
  self
@@ -82,8 +79,7 @@ module Rambling
82
79
 
83
80
  # Checks if a path for a set of characters exists in the trie.
84
81
  # @param [Array<String>] chars the characters to look for in the trie.
85
- # @return [Boolean] `true` if the characters are found, `false`
86
- # otherwise.
82
+ # @return [Boolean] +true+ if the characters are found, +false+ otherwise.
87
83
  def partial_word? chars
88
84
  return true if chars.empty?
89
85
 
@@ -92,8 +88,7 @@ module Rambling
92
88
 
93
89
  # Checks if a path for set of characters represents a word in the trie.
94
90
  # @param [Array<String>] chars the characters to look for in the trie.
95
- # @return [Boolean] `true` if the characters are found and form a word,
96
- # `false` otherwise.
91
+ # @return [Boolean] +true+ if the characters are found and form a word, +false+ otherwise.
97
92
  def word? chars = []
98
93
  return terminal? if chars.empty?
99
94
 
@@ -112,8 +107,7 @@ module Rambling
112
107
 
113
108
  # Returns all words that match a prefix of any length within chars.
114
109
  # @param [String] chars the chars to base the prefix on.
115
- # @return [Enumerator<String>] all the words that match a prefix given
116
- # by chars.
110
+ # @return [Enumerator<String>] all the words that match a prefix by chars.
117
111
  # @yield [String] each word found.
118
112
  def match_prefix chars
119
113
  return enum_for :match_prefix, chars unless block_given?
@@ -128,8 +122,7 @@ module Rambling
128
122
  # Get {Node Node} corresponding to a given letter.
129
123
  # @param [Symbol] letter the letter to search for in the node.
130
124
  # @return [Node] the node corresponding to that letter.
131
- # @see https://ruby-doc.org/core-2.7.0/Hash.html#method-i-5B-5D
132
- # Hash#[]
125
+ # @see https://ruby-doc.org/core-2.7.0/Hash.html#method-i-5B-5D Hash#[]
133
126
  def [] letter
134
127
  children_tree[letter]
135
128
  end
@@ -137,31 +130,25 @@ module Rambling
137
130
  # Set the {Node Node} that corresponds to a given letter.
138
131
  # @param [Symbol] letter the letter to insert or update in the node's
139
132
  # @param [Node] node the {Node Node} to assign to that letter.
140
- # @return [Node] the node corresponding to the inserted or
141
- # updated letter.
142
- # @see https://ruby-doc.org/core-2.7.0/Hash.html#method-i-5B-5D
143
- # Hash#[]
133
+ # @return [Node] the node corresponding to the inserted or updated letter.
134
+ # @see https://ruby-doc.org/core-2.7.0/Hash.html#method-i-5B-5D Hash#[]
144
135
  def []= letter, node
145
136
  children_tree[letter] = node
146
137
  end
147
138
 
148
- # Check if a {Node Node}'s children tree contains a given
149
- # letter.
139
+ # Check if a {Node Node}'s children tree contains a given letter.
150
140
  # @param [Symbol] letter the letter to search for in the node.
151
- # @return [Boolean] `true` if the letter is present, `false` otherwise
152
- # @see https://ruby-doc.org/core-2.7.0/Hash.html#method-i-has_key-3F
153
- # Hash#key?
141
+ # @return [Boolean] +true+ if the letter is present, +false+ otherwise.
142
+ # @see https://ruby-doc.org/core-2.7.0/Hash.html#method-i-has_key-3F Hash#key?
154
143
  def key? letter
155
144
  children_tree.key? letter
156
145
  end
157
146
 
158
147
  # Delete a given letter and its corresponding {Node Node} from
159
- # this {Node Node}'s children tree.
160
- # @param [Symbol] letter the letter to delete from the node's children
161
- # tree.
148
+ # this {Node Node}'s children tree.
149
+ # @param [Symbol] letter the letter to delete from the node's children tree.
162
150
  # @return [Node] the node corresponding to the deleted letter.
163
- # @see https://ruby-doc.org/core-2.7.0/Hash.html#method-i-delete
164
- # Hash#delete
151
+ # @see https://ruby-doc.org/core-2.7.0/Hash.html#method-i-delete Hash#delete
165
152
  def delete letter
166
153
  children_tree.delete letter
167
154
  end
@@ -17,8 +17,8 @@ module Rambling
17
17
  end
18
18
  end
19
19
 
20
- # Always return `false` for a raw (uncompressed) node.
21
- # @return [Boolean] always `false` for a raw (uncompressed) node.
20
+ # Always return +false+ for a raw (uncompressed) node.
21
+ # @return [Boolean] always +false+ for a raw (uncompressed) node.
22
22
  def compressed?
23
23
  false
24
24
  end
@@ -3,14 +3,18 @@
3
3
  module Rambling
4
4
  module Trie
5
5
  module Readers
6
- # File reader for .txt files.
7
- class PlainText
8
- # Yields each word read from a .txt file.
9
- # @param [String] filepath the full path of the file to load the words
10
- # from.
6
+ # File reader for +.txt+ files.
7
+ class PlainText < Reader
8
+ # Yields each word read from a +.txt+ file.
9
+ # @param [String] filepath the full path of the file to load the words from.
11
10
  # @yield [String] Each line read from the file.
11
+ # @return [self]
12
12
  def each_word filepath
13
- File.foreach(filepath) { |line| yield line.chomp! }
13
+ return enum_for :each_word unless block_given?
14
+
15
+ ::File.foreach(filepath) { |line| yield line.chomp! }
16
+
17
+ self
14
18
  end
15
19
  end
16
20
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rambling
4
+ module Trie
5
+ module Readers
6
+ # Base class for all readers.
7
+ class Reader
8
+ # Yields each word read from given file.
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.
11
+ # @yield [String] Each line read from the file.
12
+ # @return [self]
13
+ def each_word filepath
14
+ raise NotImplementedError
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- %w(plain_text).each do |file|
3
+ %w(reader plain_text).each do |file|
4
4
  require File.join('rambling', 'trie', 'readers', file)
5
5
  end
6
6
 
@@ -4,7 +4,7 @@ module Rambling
4
4
  module Trie
5
5
  module Serializers
6
6
  # Basic file serializer. Dumps/loads string contents from files.
7
- class File
7
+ class File < Serializer
8
8
  # Loads contents from a specified filepath.
9
9
  # @param [String] filepath the filepath to load contents from.
10
10
  # @return [String] all contents of the file.
@@ -3,38 +3,30 @@
3
3
  module Rambling
4
4
  module Trie
5
5
  module Serializers
6
- # Serializer for Ruby marshal format (.marshal) files.
7
- class Marshal
6
+ # Serializer for Ruby marshal format (+.marshal+) files.
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
11
+ super()
12
12
  @serializer = serializer || Rambling::Trie::Serializers::File.new
13
13
  end
14
14
 
15
- # Loads marshaled object from contents in filepath and deserializes it
16
- # into a {Nodes::Node Node}.
17
- # @param [String] filepath the full path of the file to load the
18
- # 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.
19
17
  # @return [Nodes::Node] The deserialized {Nodes::Node Node}.
20
- # @see https://ruby-doc.org/core-2.7.0/Marshal.html#method-c-load
21
- # Marshal.load
22
- # @note Use of
23
- # {https://ruby-doc.org/core-2.7.0/Marshal.html#method-c-load
24
- # Marshal.load} is generally discouraged. Only use this with trusted
25
- # 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.
26
21
  def load filepath
27
22
  ::Marshal.load serializer.load filepath
28
23
  end
29
24
 
30
- # Serializes a {Nodes::Node Node} and dumps it as a marshaled object
31
- # into filepath.
25
+ # Serializes a {Nodes::Node Node} and dumps it as a marshaled object into filepath.
32
26
  # @param [Nodes::Node] node the node to serialize
33
- # @param [String] filepath the full path of the file to dump the
34
- # marshaled object into.
27
+ # @param [String] filepath the full path of the file to dump the marshaled object into.
35
28
  # @return [Numeric] number of bytes written to disk.
36
- # @see https://ruby-doc.org/core-2.7.0/Marshal.html#method-c-dump
37
- # Marshal.dump
29
+ # @see https://ruby-doc.org/core-2.7.0/Marshal.html#method-c-dump Marshal.dump
38
30
  def dump node, filepath
39
31
  serializer.dump ::Marshal.dump(node), filepath
40
32
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rambling
4
+ module Trie
5
+ module Serializers
6
+ # Base class for all serializers.
7
+ class Serializer
8
+ # Loads contents from a specified filepath.
9
+ # @abstract Subclass and override {#load} to parse the desired format.
10
+ # @param [String] filepath the filepath to load contents from.
11
+ # @return [TContents] parsed contents from given file.
12
+ def load filepath
13
+ raise NotImplementedError
14
+ end
15
+
16
+ # Dumps contents into a specified filepath.
17
+ # @abstract Subclass and override {#dump} to output the desired format.
18
+ # @param [TContents] contents the contents to dump into given file.
19
+ # @param [String] filepath the filepath to dump the contents to.
20
+ # @return [Numeric] number of bytes written to disk.
21
+ def dump contents, filepath
22
+ raise NotImplementedError
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -3,22 +3,19 @@
3
3
  module Rambling
4
4
  module Trie
5
5
  module Serializers
6
- # Serializer for Ruby yaml format (.yaml) files.
7
- class Yaml
6
+ # Serializer for Ruby yaml format (+.yaml+, or +.yml+) files.
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
11
+ super()
12
12
  @serializer = serializer || Rambling::Trie::Serializers::File.new
13
13
  end
14
14
 
15
- # Loads serialized object from YAML file in filepath and deserializes
16
- # it into a {Nodes::Node Node}.
17
- # @param [String] filepath the full path of the file to load the
18
- # 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.
19
17
  # @return [Nodes::Node] The deserialized {Nodes::Node Node}.
20
- # @see https://ruby-doc.org/stdlib-2.7.0/libdoc/psych/rdoc/Psych.html#method-c-safe_load
21
- # 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
22
19
  def load filepath
23
20
  require 'yaml'
24
21
  ::YAML.safe_load(
@@ -32,14 +29,11 @@ module Rambling
32
29
  )
33
30
  end
34
31
 
35
- # Serializes a {Nodes::Node Node} and dumps it as a YAML object into
36
- # filepath.
32
+ # Serializes a {Nodes::Node Node} and dumps it as a YAML object into filepath.
37
33
  # @param [Nodes::Node] node the node to serialize
38
- # @param [String] filepath the full path of the file to dump the YAML
39
- # object into.
34
+ # @param [String] filepath the full path of the file to dump the YAML object into.
40
35
  # @return [Numeric] number of bytes written to disk.
41
- # @see https://ruby-doc.org/stdlib-2.7.0/libdoc/psych/rdoc/Psych.html#method-c-dump
42
- # Psych.dump
36
+ # @see https://ruby-doc.org/stdlib-2.7.0/libdoc/psych/rdoc/Psych.html#method-c-dump Psych.dump
43
37
  def dump node, filepath
44
38
  require 'yaml'
45
39
  serializer.dump ::YAML.dump(node), filepath
@@ -3,20 +3,22 @@
3
3
  module Rambling
4
4
  module Trie
5
5
  module Serializers
6
- # Zip file serializer. Dumps/loads contents from zip files. Automatically
7
- # detects if zip file contains `.marshal` or `.yml` file
8
- class Zip
6
+ # Zip file serializer. Dumps/loads contents from +.zip+ files.
7
+ # Automatically detects if zip file contains a +.marshal+ or +.yml+ file,
8
+ # or any other registered +:format => serializer+ combo.
9
+ class Zip < Serializer
9
10
  # Creates a new Zip serializer.
10
11
  # @param [Configuration::Properties] properties the configuration
11
12
  # properties set up so far.
12
13
  def initialize properties
14
+ super()
13
15
  @properties = properties
14
16
  end
15
17
 
16
18
  # Unzip contents from specified filepath and load in contents from
17
19
  # unzipped files.
18
20
  # @param [String] filepath the filepath to load contents from.
19
- # @return [String] all contents of the unzipped loaded file.
21
+ # @return [TContents] all contents of the unzipped loaded file.
20
22
  # @see https://github.com/rubyzip/rubyzip#reading-a-zip-file Zip
21
23
  # reading a file
22
24
  def load filepath
@@ -35,7 +37,7 @@ module Rambling
35
37
  # Dumps contents and zips into a specified filepath.
36
38
  # @param [String] contents the contents to dump.
37
39
  # @param [String] filepath the filepath to dump the contents to.
38
- # @return [Numeric] number of bytes written to disk.
40
+ # @return [TContents] number of bytes written to disk.
39
41
  # @see https://github.com/rubyzip/rubyzip#basic-zip-archive-creation
40
42
  # Zip archive creation
41
43
  def dump contents, filepath
@@ -50,6 +52,8 @@ module Rambling
50
52
 
51
53
  zip.add filename, entry_path
52
54
  end
55
+
56
+ ::File.size filepath
53
57
  end
54
58
 
55
59
  private
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- %w(file marshal yaml zip).each do |file|
3
+ %w(serializer file marshal yaml zip).each do |file|
4
4
  require File.join('rambling', 'trie', 'serializers', file)
5
5
  end
6
6
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Rambling
4
4
  module Trie
5
- # Provides the String representation behavior for the trie data structure.
5
+ # Provides the +String+ representation behavior for the trie data structure.
6
6
  module Stringifyable
7
7
  # String representation of the current node, if it is a terminal node.
8
8
  # @return [String] the string representation of the current node.
@@ -3,6 +3,6 @@
3
3
  module Rambling
4
4
  module Trie
5
5
  # Current version of the rambling-trie.
6
- VERSION = '2.3.0'
6
+ VERSION = '2.4.0'
7
7
  end
8
8
  end
data/lib/rambling/trie.rb CHANGED
@@ -1,21 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  %w(
4
- comparable compressible compressor configuration container enumerable
5
- inspectable invalid_operation readers serializers stringifyable nodes
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
10
9
 
11
10
  # General namespace for all Rambling gems.
12
11
  module Rambling
13
- # Entry point for rambling-trie API.
12
+ # Entry point for +rambling-trie+ API.
14
13
  module Trie
15
14
  class << self
16
- # Creates a new Rambling::Trie. Entry point for the Rambling::Trie API.
15
+ # Creates a new +Rambling::Trie+. Entry point for the +rambling-trie+ API.
17
16
  # @param [String, nil] filepath the file to load the words from.
18
- # @param [Reader, nil] reader the file parser to get each word.
17
+ # @param [Readers::Reader, nil] reader the file parser to get each word.
19
18
  # @return [Container] the trie just created.
20
19
  # @yield [Container] the trie just created.
21
20
  # @see Rambling::Trie::Readers Readers.
@@ -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
@@ -36,18 +37,15 @@ module Rambling
36
37
 
37
38
  # Loads an existing trie from disk into memory. By default, it will
38
39
  # deduce the correct way to deserialize based on the file extension.
39
- # Available formats are `yml`, `marshal`, and `zip` versions of all the
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
- # {https://ruby-doc.org/core-2.7.0/Marshal.html#method-c-load
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
@@ -58,23 +56,22 @@ module Rambling
58
56
 
59
57
  # Dumps an existing trie from memory into disk. By default, it will
60
58
  # deduce the correct way to serialize based on the file extension.
61
- # Available formats are `yml`, `marshal`, and `zip` versions of all the
59
+ # Available formats are +yml+, +marshal+, and +zip+ versions of all the
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 [Serializer, nil] serializer the object responsible of
66
- # serializing and dumping the trie into disk.
67
- # @see Rambling::Trie::Serializers Serializers.
63
+ # @param [Serializers::Serializer, nil] serializer the object responsible for trie serialization.
64
+ # @return [void]
65
+ # @see Serializers Serializers.
68
66
  def dump trie, filepath, serializer = nil
69
67
  serializer ||= serializers.resolve filepath
68
+ # noinspection RubyNilAnalysis
70
69
  serializer.dump trie.root, filepath
71
70
  end
72
71
 
73
- # Provides configuration properties for the Rambling::Trie gem.
74
- # @return [Configuration::Properties] the configured properties of the
75
- # gem.
76
- # @yield [Configuration::Properties] the configured properties of the
77
- # gem.
72
+ # Provides configuration properties for the +Rambling::Trie+ gem.
73
+ # @return [Configuration::Properties] the configured properties of the gem.
74
+ # @yield [Configuration::Properties] the configured properties of the gem.
78
75
  def config
79
76
  yield properties if block_given?
80
77
  properties
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- $LOAD_PATH.push File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
4
4
  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 = ['edggonzalezg@gmail.com', 'lilibethdlc@gmail.com']
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,8 +13,12 @@ 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 = 'http://github.com/gonzedge/rambling-trie'
16
+ gem.homepage = 'https://github.com/gonzedge/rambling-trie'
17
17
  gem.date = Time.now.strftime '%Y-%m-%d'
18
+ gem.metadata = {
19
+ 'changelog_uri' => 'https://github.com/gonzedge/rambling-trie/blob/master/CHANGELOG.md',
20
+ 'documentation_uri' => 'https://www.rubydoc.info/gems/rambling-trie',
21
+ }
18
22
 
19
23
  executables = `git ls-files -- bin/*`.split "\n"
20
24
  files = `git ls-files -- {lib,*file,*.gemspec,LICENSE*,README*}`.split "\n"
@@ -31,7 +35,7 @@ Gem::Specification.new do |gem|
31
35
  gem.platform = Gem::Platform::RUBY
32
36
  gem.required_ruby_version = '>= 2.7', '< 4'
33
37
 
34
- gem.add_development_dependency 'rake', '~> 13.0'
38
+ gem.add_development_dependency 'rake', '~> 13.1'
35
39
  gem.add_development_dependency 'rspec', '~> 3.12'
36
- gem.add_development_dependency 'yard', '~> 0.9.28'
40
+ gem.add_development_dependency 'yard', '~> 0.9.34'
37
41
  end