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
@@ -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