rambling-trie 1.0.3 → 2.2.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 +5 -5
- data/Gemfile +6 -4
- data/Guardfile +3 -1
- data/README.md +12 -9
- data/Rakefile +4 -0
- data/lib/rambling-trie.rb +2 -0
- data/lib/rambling/trie.rb +25 -9
- data/lib/rambling/trie/comparable.rb +4 -1
- data/lib/rambling/trie/compressible.rb +6 -4
- data/lib/rambling/trie/compressor.rb +12 -10
- data/lib/rambling/trie/configuration.rb +3 -1
- data/lib/rambling/trie/configuration/properties.rb +15 -8
- data/lib/rambling/trie/configuration/provider_collection.rb +4 -1
- data/lib/rambling/trie/container.rb +7 -40
- data/lib/rambling/trie/enumerable.rb +2 -0
- data/lib/rambling/trie/inspectable.rb +2 -0
- data/lib/rambling/trie/invalid_operation.rb +3 -1
- data/lib/rambling/trie/nodes.rb +3 -1
- data/lib/rambling/trie/nodes/compressed.rb +53 -70
- data/lib/rambling/trie/nodes/missing.rb +2 -0
- data/lib/rambling/trie/nodes/node.rb +38 -6
- data/lib/rambling/trie/nodes/raw.rb +21 -28
- data/lib/rambling/trie/readers.rb +3 -1
- data/lib/rambling/trie/readers/plain_text.rb +2 -0
- data/lib/rambling/trie/serializers.rb +3 -1
- data/lib/rambling/trie/serializers/file.rb +2 -0
- data/lib/rambling/trie/serializers/marshal.rb +12 -2
- data/lib/rambling/trie/serializers/yaml.rb +18 -2
- data/lib/rambling/trie/serializers/zip.rb +6 -0
- data/lib/rambling/trie/stringifyable.rb +8 -2
- data/lib/rambling/trie/version.rb +3 -1
- data/rambling-trie.gemspec +21 -10
- data/spec/integration/rambling/trie_spec.rb +8 -4
- data/spec/lib/rambling/trie/comparable_spec.rb +2 -0
- data/spec/lib/rambling/trie/compressor_spec.rb +35 -33
- data/spec/lib/rambling/trie/configuration/properties_spec.rb +17 -9
- data/spec/lib/rambling/trie/configuration/provider_collection_spec.rb +10 -14
- data/spec/lib/rambling/trie/container_spec.rb +28 -53
- data/spec/lib/rambling/trie/enumerable_spec.rb +2 -0
- data/spec/lib/rambling/trie/inspectable_spec.rb +32 -7
- data/spec/lib/rambling/trie/nodes/compressed_spec.rb +2 -0
- data/spec/lib/rambling/trie/nodes/node_spec.rb +2 -0
- data/spec/lib/rambling/trie/nodes/raw_spec.rb +2 -0
- data/spec/lib/rambling/trie/readers/plain_text_spec.rb +3 -1
- data/spec/lib/rambling/trie/serializers/file_spec.rb +2 -0
- data/spec/lib/rambling/trie/serializers/marshal_spec.rb +2 -0
- data/spec/lib/rambling/trie/serializers/yaml_spec.rb +2 -0
- data/spec/lib/rambling/trie/serializers/zip_spec.rb +6 -4
- data/spec/lib/rambling/trie/stringifyable_spec.rb +7 -3
- data/spec/lib/rambling/trie_spec.rb +16 -9
- data/spec/spec_helper.rb +10 -7
- data/spec/support/config.rb +6 -0
- data/spec/support/helpers/add_word.rb +2 -0
- data/spec/support/helpers/one_line_heredoc.rb +11 -0
- data/spec/support/shared_examples/a_compressible_trie.rb +7 -3
- data/spec/support/shared_examples/a_serializable_trie.rb +2 -0
- data/spec/support/shared_examples/a_serializer.rb +3 -1
- data/spec/support/shared_examples/a_trie_data_structure.rb +2 -0
- data/spec/support/shared_examples/a_trie_node.rb +15 -5
- data/spec/support/shared_examples/a_trie_node_implementation.rb +10 -6
- metadata +22 -18
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 84eecdcb6a45ad3f8104e85aadc5bfb777342a4ea2b332b5e236b651b1398375
|
|
4
|
+
data.tar.gz: b68bb7bd9a9da2fe61c921645ff0864ca0dcaa515920d99ccf9456bb5482e159
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d6d88b9d85d9e373a6da19a7db578c7ecd20826974ea1cb4b6a2a502fd7b7d653de46c385e7aa4f9d31918d9d2a792563322c7d8e30ea272e1df053e352b1775
|
|
7
|
+
data.tar.gz: 4f47a7e8e9f38e6580154c5efe5e723798c48a264e530cb86951ee53e0c555f57bb04414a9367584242f6116e1c198ebbd4065b25d52f12a5769c5adc33cc516
|
data/Gemfile
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
source 'https://rubygems.org'
|
|
3
4
|
|
|
4
5
|
gemspec
|
|
@@ -6,19 +7,20 @@ gemspec
|
|
|
6
7
|
gem 'rubyzip'
|
|
7
8
|
|
|
8
9
|
group :development do
|
|
9
|
-
gem 'ruby-prof'
|
|
10
|
-
gem 'memory_profiler'
|
|
11
10
|
gem 'benchmark-ips'
|
|
12
11
|
gem 'flamegraph'
|
|
13
|
-
gem '
|
|
12
|
+
gem 'memory_profiler'
|
|
14
13
|
gem 'pry'
|
|
14
|
+
gem 'ruby-prof'
|
|
15
|
+
gem 'stackprof'
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
group :test do
|
|
18
|
-
gem 'simplecov', require: false
|
|
19
19
|
gem 'coveralls', '~>0.8.21', require: false
|
|
20
|
+
gem 'simplecov', require: false
|
|
20
21
|
end
|
|
21
22
|
|
|
22
23
|
group :local do
|
|
23
24
|
gem 'guard-rspec'
|
|
25
|
+
gem 'rubocop', require: false
|
|
24
26
|
end
|
data/Guardfile
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# A sample Guardfile
|
|
2
4
|
# More info at https://github.com/guard/guard#readme
|
|
3
5
|
|
|
4
6
|
guard 'rspec', cmd: 'rspec', all_on_start: true, all_after_pass: false do
|
|
5
7
|
watch(%r{^spec/.+_spec\.rb$})
|
|
6
8
|
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
|
7
|
-
watch('spec/spec_helper.rb') {
|
|
9
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
|
8
10
|
end
|
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Rambling Trie
|
|
2
2
|
|
|
3
|
-
[![Gem Version][badge_fury_badge]][badge_fury_link] [![
|
|
3
|
+
[![Gem Version][badge_fury_badge]][badge_fury_link] [![Build Status][travis_ci_badge]][travis_ci_link] [![Code Climate][code_climate_badge]][code_climage_link] [![Coverage Status][coveralls_badge]][coveralls_link] [![Documentation Status][inch_ci_badge]][inch_ci_link] [![License][license_badge]][license_link]
|
|
4
4
|
|
|
5
5
|
The Rambling Trie is a Ruby implementation of the [trie data structure][trie_wiki], which includes compression abilities and is designed to be very fast to traverse.
|
|
6
6
|
|
|
@@ -10,7 +10,7 @@ The Rambling Trie is a Ruby implementation of the [trie data structure][trie_wik
|
|
|
10
10
|
|
|
11
11
|
You will need:
|
|
12
12
|
|
|
13
|
-
* Ruby 2.
|
|
13
|
+
* Ruby 2.5.0 or up
|
|
14
14
|
* RubyGems
|
|
15
15
|
|
|
16
16
|
See [RVM][rvm], [rbenv][rbenv] or [chruby][chruby] for more information on how to manage Ruby versions.
|
|
@@ -242,15 +242,18 @@ You can find further API documentation on the autogenerated [rambling-trie gem R
|
|
|
242
242
|
|
|
243
243
|
The Rambling Trie has been tested with the following Ruby versions:
|
|
244
244
|
|
|
245
|
+
* 3.0.x
|
|
246
|
+
* 2.7.x
|
|
247
|
+
* 2.6.x
|
|
245
248
|
* 2.5.x
|
|
246
|
-
* 2.4.x
|
|
247
|
-
* 2.3.x
|
|
248
|
-
* 2.2.x
|
|
249
249
|
|
|
250
250
|
**No longer supported**:
|
|
251
251
|
|
|
252
|
-
* 2.
|
|
253
|
-
* 2.
|
|
252
|
+
* 2.4.x (EOL'ed)
|
|
253
|
+
* 2.3.x (EOL'ed)
|
|
254
|
+
* 2.2.x
|
|
255
|
+
* 2.1.x
|
|
256
|
+
* 2.0.x
|
|
254
257
|
* 1.9.x
|
|
255
258
|
* 1.8.x
|
|
256
259
|
|
|
@@ -293,7 +296,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
|
|
293
296
|
[rubydoc_github]: http://rubydoc.info/github/gonzedge/rambling-trie
|
|
294
297
|
[rubyzip]: https://github.com/rubyzip/rubyzip
|
|
295
298
|
[rvm]: https://rvm.io
|
|
296
|
-
[travis_ci_badge]: https://travis-ci.
|
|
297
|
-
[travis_ci_link]: https://travis-ci.
|
|
299
|
+
[travis_ci_badge]: https://travis-ci.com/gonzedge/rambling-trie.svg?branch=master
|
|
300
|
+
[travis_ci_link]: https://travis-ci.com/github/gonzedge/rambling-trie
|
|
298
301
|
[trie_wiki]: https://en.wikipedia.org/wiki/Trie
|
|
299
302
|
[yaml]: https://ruby-doc.org/stdlib-2.5.0/libdoc/yaml/rdoc/YAML.html
|
data/Rakefile
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'bundler/gem_tasks'
|
|
2
4
|
require 'rspec/core/rake_task'
|
|
5
|
+
require 'rubocop/rake_task'
|
|
3
6
|
|
|
4
7
|
require 'rambling-trie'
|
|
5
8
|
require_relative 'tasks/performance'
|
|
@@ -7,5 +10,6 @@ require_relative 'tasks/serialization'
|
|
|
7
10
|
require_relative 'tasks/ips'
|
|
8
11
|
|
|
9
12
|
RSpec::Core::RakeTask.new :spec
|
|
13
|
+
RuboCop::RakeTask.new :rubocop
|
|
10
14
|
|
|
11
15
|
task default: :spec
|
data/lib/rambling-trie.rb
CHANGED
data/lib/rambling/trie.rb
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
%w(
|
|
2
4
|
comparable compressible compressor configuration container enumerable
|
|
3
5
|
inspectable invalid_operation readers serializers stringifyable nodes
|
|
4
6
|
version
|
|
5
|
-
|
|
7
|
+
).each do |file|
|
|
6
8
|
require File.join('rambling', 'trie', file)
|
|
7
9
|
end
|
|
8
10
|
|
|
@@ -18,7 +20,9 @@ module Rambling
|
|
|
18
20
|
# @yield [Container] the trie just created.
|
|
19
21
|
# @see Rambling::Trie::Readers Readers.
|
|
20
22
|
def create filepath = nil, reader = nil
|
|
21
|
-
|
|
23
|
+
root = root_builder.call
|
|
24
|
+
|
|
25
|
+
Rambling::Trie::Container.new root, compressor do |container|
|
|
22
26
|
if filepath
|
|
23
27
|
reader ||= readers.resolve filepath
|
|
24
28
|
reader.each_word filepath do |word|
|
|
@@ -30,13 +34,20 @@ module Rambling
|
|
|
30
34
|
end
|
|
31
35
|
end
|
|
32
36
|
|
|
33
|
-
# Loads an existing trie from disk into memory.
|
|
37
|
+
# Loads an existing trie from disk into memory. By default, it will
|
|
38
|
+
# deduce the correct way to deserialize based on the file extension.
|
|
39
|
+
# Available formats are `yml`, `marshal`, and `zip` versions of all the
|
|
40
|
+
# previous formats. You can also define your own.
|
|
34
41
|
# @param [String] filepath the file to load the words from.
|
|
35
|
-
# @param [Serializer, nil] serializer the object responsible of loading
|
|
36
|
-
# from disk
|
|
42
|
+
# @param [Serializer, nil] serializer the object responsible of loading
|
|
43
|
+
# the trie from disk
|
|
37
44
|
# @return [Container] the trie just loaded.
|
|
38
45
|
# @yield [Container] the trie just loaded.
|
|
39
46
|
# @see Rambling::Trie::Serializers Serializers.
|
|
47
|
+
# @note Use of
|
|
48
|
+
# {https://ruby-doc.org/core-2.5.0/Marshal.html#method-c-load
|
|
49
|
+
# Marshal.load} is generally discouraged. Only use the `.marshal`
|
|
50
|
+
# format with trusted input.
|
|
40
51
|
def load filepath, serializer = nil
|
|
41
52
|
serializer ||= serializers.resolve filepath
|
|
42
53
|
root = serializer.load filepath
|
|
@@ -45,7 +56,10 @@ module Rambling
|
|
|
45
56
|
end
|
|
46
57
|
end
|
|
47
58
|
|
|
48
|
-
# Dumps an existing trie from memory into disk.
|
|
59
|
+
# Dumps an existing trie from memory into disk. By default, it will
|
|
60
|
+
# deduce the correct way to serialize based on the file extension.
|
|
61
|
+
# Available formats are `yml`, `marshal`, and `zip` versions of all the
|
|
62
|
+
# previous formats. You can also define your own.
|
|
49
63
|
# @param [Container] trie the trie to dump into disk.
|
|
50
64
|
# @param [String] filepath the file to dump to serialized trie into.
|
|
51
65
|
# @param [Serializer, nil] serializer the object responsible of
|
|
@@ -57,8 +71,10 @@ module Rambling
|
|
|
57
71
|
end
|
|
58
72
|
|
|
59
73
|
# Provides configuration properties for the Rambling::Trie gem.
|
|
60
|
-
# @return [Configuration::Properties] the configured properties of the
|
|
61
|
-
#
|
|
74
|
+
# @return [Configuration::Properties] the configured properties of the
|
|
75
|
+
# gem.
|
|
76
|
+
# @yield [Configuration::Properties] the configured properties of the
|
|
77
|
+
# gem.
|
|
62
78
|
def config
|
|
63
79
|
yield properties if block_given?
|
|
64
80
|
properties
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Rambling
|
|
2
4
|
module Trie
|
|
3
5
|
# Provides the comparable behavior for the trie data structure.
|
|
@@ -5,7 +7,8 @@ module Rambling
|
|
|
5
7
|
# Compares two nodes.
|
|
6
8
|
# @param [Nodes::Node] other the node to compare against.
|
|
7
9
|
# @return [Boolean] `true` if the nodes' {Nodes::Node#letter #letter} and
|
|
8
|
-
# {Nodes::Node#children_tree #children_tree} are equal, `false`
|
|
10
|
+
# {Nodes::Node#children_tree #children_tree} are equal, `false`
|
|
11
|
+
# otherwise.
|
|
9
12
|
def == other
|
|
10
13
|
letter == other.letter &&
|
|
11
14
|
terminal? == other.terminal? &&
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Rambling
|
|
2
4
|
module Trie
|
|
3
5
|
# Provides the compressible behavior for the trie data structure.
|
|
4
6
|
module Compressible
|
|
5
|
-
# Indicates if the current {Rambling::Trie::Nodes::Node Node} can be
|
|
6
|
-
# or not.
|
|
7
|
-
# @return [Boolean] `true` for non-{Nodes::Node#terminal? terminal} nodes
|
|
8
|
-
# one child, `false` otherwise.
|
|
7
|
+
# Indicates if the current {Rambling::Trie::Nodes::Node Node} can be
|
|
8
|
+
# compressed or not.
|
|
9
|
+
# @return [Boolean] `true` for non-{Nodes::Node#terminal? terminal} nodes
|
|
10
|
+
# with one child, `false` otherwise.
|
|
9
11
|
def compressible?
|
|
10
12
|
!(root? || terminal?) && children_tree.size == 1
|
|
11
13
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Rambling
|
|
2
4
|
module Trie
|
|
3
5
|
# Responsible for the compression process of a trie data structure.
|
|
@@ -26,7 +28,7 @@ module Rambling
|
|
|
26
28
|
letter.to_sym,
|
|
27
29
|
node.parent,
|
|
28
30
|
other.children_tree,
|
|
29
|
-
other.terminal
|
|
31
|
+
other.terminal?,
|
|
30
32
|
)
|
|
31
33
|
end
|
|
32
34
|
|
|
@@ -35,26 +37,26 @@ module Rambling
|
|
|
35
37
|
node.letter,
|
|
36
38
|
node.parent,
|
|
37
39
|
compress_children(node.children_tree),
|
|
38
|
-
node.terminal
|
|
40
|
+
node.terminal?,
|
|
39
41
|
)
|
|
40
42
|
end
|
|
41
43
|
|
|
42
|
-
def compress_children
|
|
43
|
-
|
|
44
|
+
def compress_children tree
|
|
45
|
+
new_tree = {}
|
|
44
46
|
|
|
45
|
-
|
|
47
|
+
tree.each do |letter, child|
|
|
46
48
|
compressed_child = compress child
|
|
47
|
-
|
|
49
|
+
new_tree[letter] = compressed_child
|
|
48
50
|
end
|
|
49
51
|
|
|
50
|
-
|
|
52
|
+
new_tree
|
|
51
53
|
end
|
|
52
54
|
|
|
53
|
-
def new_compressed_node letter, parent,
|
|
54
|
-
node = Rambling::Trie::Nodes::Compressed.new letter, parent,
|
|
55
|
+
def new_compressed_node letter, parent, tree, terminal
|
|
56
|
+
node = Rambling::Trie::Nodes::Compressed.new letter, parent, tree
|
|
55
57
|
node.terminal! if terminal
|
|
56
58
|
|
|
57
|
-
|
|
59
|
+
tree.each_value { |child| child.parent = node }
|
|
58
60
|
node
|
|
59
61
|
end
|
|
60
62
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Rambling
|
|
2
4
|
module Trie
|
|
3
5
|
module Configuration
|
|
@@ -17,8 +19,8 @@ module Rambling
|
|
|
17
19
|
# @return [Compressor] the configured compressor.
|
|
18
20
|
attr_accessor :compressor
|
|
19
21
|
|
|
20
|
-
# The configured root_builder, which should return a {Nodes::Node Node}
|
|
21
|
-
# called.
|
|
22
|
+
# The configured root_builder, which should return a {Nodes::Node Node}
|
|
23
|
+
# when called.
|
|
22
24
|
# @return [Proc<Nodes::Node>] the configured root_builder.
|
|
23
25
|
attr_accessor :root_builder
|
|
24
26
|
|
|
@@ -36,9 +38,9 @@ module Rambling
|
|
|
36
38
|
reset_readers
|
|
37
39
|
reset_serializers
|
|
38
40
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
@compressor = Rambling::Trie::Compressor.new
|
|
42
|
+
@root_builder = -> { Rambling::Trie::Nodes::Raw.new }
|
|
43
|
+
@tmp_path = '/tmp'
|
|
42
44
|
end
|
|
43
45
|
|
|
44
46
|
private
|
|
@@ -48,7 +50,10 @@ module Rambling
|
|
|
48
50
|
def reset_readers
|
|
49
51
|
plain_text_reader = Rambling::Trie::Readers::PlainText.new
|
|
50
52
|
|
|
51
|
-
|
|
53
|
+
@readers = Rambling::Trie::Configuration::ProviderCollection.new(
|
|
54
|
+
:reader,
|
|
55
|
+
txt: plain_text_reader,
|
|
56
|
+
)
|
|
52
57
|
end
|
|
53
58
|
|
|
54
59
|
def reset_serializers
|
|
@@ -56,11 +61,13 @@ module Rambling
|
|
|
56
61
|
yaml_serializer = Rambling::Trie::Serializers::Yaml.new
|
|
57
62
|
zip_serializer = Rambling::Trie::Serializers::Zip.new self
|
|
58
63
|
|
|
59
|
-
|
|
64
|
+
@serializers = Rambling::Trie::Configuration::ProviderCollection.new(
|
|
65
|
+
:serializer,
|
|
60
66
|
marshal: marshal_serializer,
|
|
61
67
|
yml: yaml_serializer,
|
|
62
68
|
yaml: yaml_serializer,
|
|
63
|
-
zip: zip_serializer
|
|
69
|
+
zip: zip_serializer,
|
|
70
|
+
)
|
|
64
71
|
end
|
|
65
72
|
end
|
|
66
73
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Rambling
|
|
2
4
|
module Trie
|
|
3
5
|
module Configuration
|
|
@@ -44,7 +46,8 @@ module Rambling
|
|
|
44
46
|
|
|
45
47
|
def default= provider
|
|
46
48
|
unless contains? provider
|
|
47
|
-
raise ArgumentError,
|
|
49
|
+
raise ArgumentError,
|
|
50
|
+
"default #{name} should be part of configured #{name}s"
|
|
48
51
|
end
|
|
49
52
|
|
|
50
53
|
@default = provider
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Rambling
|
|
2
4
|
module Trie
|
|
3
5
|
# Wrapper on top of trie data structure.
|
|
@@ -175,9 +177,9 @@ module Rambling
|
|
|
175
177
|
# Check if a letter is part of the root {Nodes::Node}'s children tree.
|
|
176
178
|
# @param [Symbol] letter the letter to search for in the root node.
|
|
177
179
|
# @return [Boolean] whether the letter is contained or not.
|
|
178
|
-
# @see Nodes::Node#
|
|
179
|
-
def
|
|
180
|
-
root.
|
|
180
|
+
# @see Nodes::Node#key?
|
|
181
|
+
def key? letter
|
|
182
|
+
root.key? letter
|
|
181
183
|
end
|
|
182
184
|
|
|
183
185
|
# Size of the Root {Nodes::Node Node}'s children tree.
|
|
@@ -186,47 +188,12 @@ module Rambling
|
|
|
186
188
|
root.size
|
|
187
189
|
end
|
|
188
190
|
|
|
189
|
-
# String representation of the current node, if it is a terminal node.
|
|
190
|
-
# @return [String] the string representation of the current node.
|
|
191
|
-
# @raise [InvalidOperation] if node is not terminal or is root.
|
|
192
|
-
# @deprecated This will always raise an {InvalidOperation} exception.
|
|
193
|
-
def as_word
|
|
194
|
-
warn '[DEPRECATION WARNING] `#as_word` is deprecated. Please use `#root#as_word` instead.'
|
|
195
|
-
root.as_word
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
# Root {Nodes::Node Node}'s letter.
|
|
199
|
-
# @return [Symbol] the root node's letter
|
|
200
|
-
# @see Nodes::Node#letter
|
|
201
|
-
# @deprecated This will always return `nil`.
|
|
202
|
-
def letter
|
|
203
|
-
warn '[DEPRECATION WARNING] `#letter` is deprecated. Please use `#root#letter` instead.'
|
|
204
|
-
root.letter
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
# Root {Nodes::Node Node}'s parent.
|
|
208
|
-
# @return [Symbol] the root node's parent
|
|
209
|
-
# @see Nodes::Node#parent
|
|
210
|
-
# @deprecated This will always return `nil`.
|
|
211
|
-
def parent
|
|
212
|
-
warn '[DEPRECATION WARNING] `#parent` is deprecated. Please use `#root#parent` instead.'
|
|
213
|
-
root.parent
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
# String representation of root {Nodes::Node Node}.
|
|
217
|
-
# @return [String] the root node's string representation.
|
|
218
|
-
# @see Stringifyable#to_s
|
|
219
|
-
# @deprecated This will always return an empty string (`''`).
|
|
220
|
-
def to_s
|
|
221
|
-
warn '[DEPRECATION WARNING] `#to_s` is deprecated. Please use `#root#to_s` instead.'
|
|
222
|
-
root.to_s
|
|
223
|
-
end
|
|
224
|
-
|
|
225
191
|
alias_method :include?, :word?
|
|
226
192
|
alias_method :match?, :partial_word?
|
|
227
193
|
alias_method :words, :scan
|
|
228
194
|
alias_method :<<, :add
|
|
229
|
-
alias_method :
|
|
195
|
+
alias_method :has_key?, :key?
|
|
196
|
+
alias_method :has_letter?, :key?
|
|
230
197
|
|
|
231
198
|
private
|
|
232
199
|
|