rambling-trie-opal 2.1.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.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +26 -0
  3. data/Guardfile +10 -0
  4. data/LICENSE +26 -0
  5. data/README.md +301 -0
  6. data/Rakefile +15 -0
  7. data/lib/rambling-trie.rb +3 -0
  8. data/lib/rambling/trie.rb +119 -0
  9. data/lib/rambling/trie/comparable.rb +19 -0
  10. data/lib/rambling/trie/compressible.rb +16 -0
  11. data/lib/rambling/trie/compressor.rb +64 -0
  12. data/lib/rambling/trie/configuration.rb +16 -0
  13. data/lib/rambling/trie/configuration/properties.rb +75 -0
  14. data/lib/rambling/trie/configuration/provider_collection.rb +122 -0
  15. data/lib/rambling/trie/container.rb +226 -0
  16. data/lib/rambling/trie/enumerable.rb +29 -0
  17. data/lib/rambling/trie/inspectable.rb +39 -0
  18. data/lib/rambling/trie/invalid_operation.rb +15 -0
  19. data/lib/rambling/trie/nodes.rb +18 -0
  20. data/lib/rambling/trie/nodes/compressed.rb +98 -0
  21. data/lib/rambling/trie/nodes/missing.rb +12 -0
  22. data/lib/rambling/trie/nodes/node.rb +183 -0
  23. data/lib/rambling/trie/nodes/raw.rb +82 -0
  24. data/lib/rambling/trie/readers.rb +15 -0
  25. data/lib/rambling/trie/readers/plain_text.rb +18 -0
  26. data/lib/rambling/trie/serializers.rb +18 -0
  27. data/lib/rambling/trie/serializers/file.rb +27 -0
  28. data/lib/rambling/trie/serializers/marshal.rb +48 -0
  29. data/lib/rambling/trie/serializers/yaml.rb +55 -0
  30. data/lib/rambling/trie/serializers/zip.rb +74 -0
  31. data/lib/rambling/trie/stringifyable.rb +26 -0
  32. data/lib/rambling/trie/version.rb +8 -0
  33. data/rambling-trie-opal.gemspec +36 -0
  34. data/spec/assets/test_words.en_US.txt +23 -0
  35. data/spec/assets/test_words.es_DO.txt +24 -0
  36. data/spec/integration/rambling/trie_spec.rb +87 -0
  37. data/spec/lib/rambling/trie/comparable_spec.rb +97 -0
  38. data/spec/lib/rambling/trie/compressor_spec.rb +108 -0
  39. data/spec/lib/rambling/trie/configuration/properties_spec.rb +57 -0
  40. data/spec/lib/rambling/trie/configuration/provider_collection_spec.rb +149 -0
  41. data/spec/lib/rambling/trie/container_spec.rb +591 -0
  42. data/spec/lib/rambling/trie/enumerable_spec.rb +42 -0
  43. data/spec/lib/rambling/trie/inspectable_spec.rb +56 -0
  44. data/spec/lib/rambling/trie/nodes/compressed_spec.rb +37 -0
  45. data/spec/lib/rambling/trie/nodes/node_spec.rb +9 -0
  46. data/spec/lib/rambling/trie/nodes/raw_spec.rb +179 -0
  47. data/spec/lib/rambling/trie/readers/plain_text_spec.rb +16 -0
  48. data/spec/lib/rambling/trie/serializers/file_spec.rb +13 -0
  49. data/spec/lib/rambling/trie/serializers/marshal_spec.rb +12 -0
  50. data/spec/lib/rambling/trie/serializers/yaml_spec.rb +12 -0
  51. data/spec/lib/rambling/trie/serializers/zip_spec.rb +28 -0
  52. data/spec/lib/rambling/trie/stringifyable_spec.rb +85 -0
  53. data/spec/lib/rambling/trie_spec.rb +182 -0
  54. data/spec/spec_helper.rb +37 -0
  55. data/spec/support/config.rb +15 -0
  56. data/spec/support/helpers/add_word.rb +20 -0
  57. data/spec/support/helpers/one_line_heredoc.rb +11 -0
  58. data/spec/support/shared_examples/a_compressible_trie.rb +40 -0
  59. data/spec/support/shared_examples/a_serializable_trie.rb +30 -0
  60. data/spec/support/shared_examples/a_serializer.rb +37 -0
  61. data/spec/support/shared_examples/a_trie_data_structure.rb +31 -0
  62. data/spec/support/shared_examples/a_trie_node.rb +127 -0
  63. data/spec/support/shared_examples/a_trie_node_implementation.rb +152 -0
  64. data/spec/tmp/.gitkeep +0 -0
  65. metadata +179 -0
@@ -0,0 +1,152 @@
1
+ # frozen_string_literal: true
2
+
3
+ shared_examples_for 'a trie node implementation' do
4
+ it_behaves_like 'a trie node'
5
+
6
+ describe '#partial_word?' do
7
+ context 'when the chars array is empty' do
8
+ it 'returns true' do
9
+ expect(node.partial_word? []).to be true
10
+ end
11
+ end
12
+
13
+ context 'when the chars array is not empty' do
14
+ context 'when the node has a tree that matches the characters' do
15
+ before do
16
+ add_word_to_tree 'abc'
17
+ end
18
+
19
+ it 'returns true' do
20
+ expect(node.partial_word? %w(a)).to be true
21
+ expect(node.partial_word? %w(a b)).to be true
22
+ expect(node.partial_word? %w(a b c)).to be true
23
+ end
24
+ end
25
+
26
+ context 'when the node has a tree that does not match the characters' do
27
+ before do
28
+ add_word_to_tree 'cba'
29
+ end
30
+
31
+ it 'returns false' do
32
+ expect(node.partial_word? %w(a)).to be false
33
+ expect(node.partial_word? %w(a b)).to be false
34
+ expect(node.partial_word? %w(a b c)).to be false
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ describe '#word?' do
41
+ context 'when the chars array is empty' do
42
+ context 'when the node is terminal' do
43
+ before do
44
+ node.terminal!
45
+ end
46
+
47
+ it 'returns true' do
48
+ expect(node.word? []).to be true
49
+ end
50
+ end
51
+
52
+ context 'when the node is not terminal' do
53
+ it 'returns false' do
54
+ expect(node.word? []).to be false
55
+ end
56
+ end
57
+ end
58
+
59
+ context 'when the chars array is not empty' do
60
+ context 'when the node has a tree that matches all the characters' do
61
+ before do
62
+ add_word_to_tree 'abc'
63
+ end
64
+
65
+ it 'returns true' do
66
+ expect(node.word? %w(a b c).map(&:dup)).to be true
67
+ end
68
+ end
69
+
70
+ context 'when the node subtree does not match all the characters' do
71
+ before do
72
+ add_word_to_tree 'abc'
73
+ end
74
+
75
+ it 'returns false' do
76
+ expect(node.word? %w(a).map(&:dup)).to be false
77
+ expect(node.word? %w(a b).map(&:dup)).to be false
78
+ end
79
+ end
80
+ end
81
+ end
82
+
83
+ describe '#scan' do
84
+ context 'when the chars array is empty' do
85
+ it 'returns itself' do
86
+ expect(node.scan []).to eq node
87
+ end
88
+ end
89
+
90
+ context 'when the chars array is not empty' do
91
+ before do
92
+ add_words_to_tree %w(cba ccab)
93
+ end
94
+
95
+ context 'when the chars are found' do
96
+ it 'returns the found child' do
97
+ expect(node.scan %w(c)).to match_array %w(cba ccab)
98
+ expect(node.scan %w(c b)).to match_array %w(cba)
99
+ expect(node.scan %w(c b a)).to match_array %w(cba)
100
+ end
101
+ end
102
+
103
+ context 'when the chars are not found' do
104
+ it 'returns a Nodes::Missing' do
105
+ expect(node.scan %w(a)).to be_a Rambling::Trie::Nodes::Missing
106
+ expect(node.scan %w(a b)).to be_a Rambling::Trie::Nodes::Missing
107
+ expect(node.scan %w(a b c)).to be_a Rambling::Trie::Nodes::Missing
108
+ expect(node.scan %w(c a)).to be_a Rambling::Trie::Nodes::Missing
109
+ expect(node.scan %w(c c b)).to be_a Rambling::Trie::Nodes::Missing
110
+ expect(node.scan %w(c b a d)).to be_a Rambling::Trie::Nodes::Missing
111
+ end
112
+ end
113
+ end
114
+ end
115
+
116
+ describe '#match_prefix' do
117
+ before do
118
+ assign_letter :i
119
+ add_words_to_tree %w(gnite mport mportant mportantly)
120
+ end
121
+
122
+ context 'when the node is terminal' do
123
+ before do
124
+ node.terminal!
125
+ end
126
+
127
+ it 'adds itself to the words' do
128
+ expect(node.match_prefix %w(g n i t e)).to include 'i'
129
+ end
130
+ end
131
+
132
+ context 'when the node is not terminal' do
133
+ it 'does not add itself to the words' do
134
+ expect(node.match_prefix %w(g n i t e)).not_to include 'i'
135
+ end
136
+ end
137
+
138
+ context 'when the first few chars match a terminal node' do
139
+ it 'adds those terminal nodes to the words' do
140
+ words = node.match_prefix(%w(m p o r t a n t l y)).to_a
141
+ expect(words).to include 'import', 'important', 'importantly'
142
+ end
143
+ end
144
+
145
+ context 'when the first few chars do not match a terminal node' do
146
+ it 'does not add any other words found' do
147
+ words = node.match_prefix(%w(m p m p o r t a n t l y)).to_a
148
+ expect(words).not_to include 'import', 'important', 'importantly'
149
+ end
150
+ end
151
+ end
152
+ end
File without changes
metadata ADDED
@@ -0,0 +1,179 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rambling-trie-opal
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Ribose Inc.
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-08-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '13.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '13.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.9'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: yard
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.9.25
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.9.25
55
+ description: 'The original Rambling Trie gem but Opal-compatible. '
56
+ email:
57
+ - open.source@ribose.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - Gemfile
63
+ - Guardfile
64
+ - LICENSE
65
+ - README.md
66
+ - Rakefile
67
+ - lib/rambling-trie.rb
68
+ - lib/rambling/trie.rb
69
+ - lib/rambling/trie/comparable.rb
70
+ - lib/rambling/trie/compressible.rb
71
+ - lib/rambling/trie/compressor.rb
72
+ - lib/rambling/trie/configuration.rb
73
+ - lib/rambling/trie/configuration/properties.rb
74
+ - lib/rambling/trie/configuration/provider_collection.rb
75
+ - lib/rambling/trie/container.rb
76
+ - lib/rambling/trie/enumerable.rb
77
+ - lib/rambling/trie/inspectable.rb
78
+ - lib/rambling/trie/invalid_operation.rb
79
+ - lib/rambling/trie/nodes.rb
80
+ - lib/rambling/trie/nodes/compressed.rb
81
+ - lib/rambling/trie/nodes/missing.rb
82
+ - lib/rambling/trie/nodes/node.rb
83
+ - lib/rambling/trie/nodes/raw.rb
84
+ - lib/rambling/trie/readers.rb
85
+ - lib/rambling/trie/readers/plain_text.rb
86
+ - lib/rambling/trie/serializers.rb
87
+ - lib/rambling/trie/serializers/file.rb
88
+ - lib/rambling/trie/serializers/marshal.rb
89
+ - lib/rambling/trie/serializers/yaml.rb
90
+ - lib/rambling/trie/serializers/zip.rb
91
+ - lib/rambling/trie/stringifyable.rb
92
+ - lib/rambling/trie/version.rb
93
+ - rambling-trie-opal.gemspec
94
+ - spec/assets/test_words.en_US.txt
95
+ - spec/assets/test_words.es_DO.txt
96
+ - spec/integration/rambling/trie_spec.rb
97
+ - spec/lib/rambling/trie/comparable_spec.rb
98
+ - spec/lib/rambling/trie/compressor_spec.rb
99
+ - spec/lib/rambling/trie/configuration/properties_spec.rb
100
+ - spec/lib/rambling/trie/configuration/provider_collection_spec.rb
101
+ - spec/lib/rambling/trie/container_spec.rb
102
+ - spec/lib/rambling/trie/enumerable_spec.rb
103
+ - spec/lib/rambling/trie/inspectable_spec.rb
104
+ - spec/lib/rambling/trie/nodes/compressed_spec.rb
105
+ - spec/lib/rambling/trie/nodes/node_spec.rb
106
+ - spec/lib/rambling/trie/nodes/raw_spec.rb
107
+ - spec/lib/rambling/trie/readers/plain_text_spec.rb
108
+ - spec/lib/rambling/trie/serializers/file_spec.rb
109
+ - spec/lib/rambling/trie/serializers/marshal_spec.rb
110
+ - spec/lib/rambling/trie/serializers/yaml_spec.rb
111
+ - spec/lib/rambling/trie/serializers/zip_spec.rb
112
+ - spec/lib/rambling/trie/stringifyable_spec.rb
113
+ - spec/lib/rambling/trie_spec.rb
114
+ - spec/spec_helper.rb
115
+ - spec/support/config.rb
116
+ - spec/support/helpers/add_word.rb
117
+ - spec/support/helpers/one_line_heredoc.rb
118
+ - spec/support/shared_examples/a_compressible_trie.rb
119
+ - spec/support/shared_examples/a_serializable_trie.rb
120
+ - spec/support/shared_examples/a_serializer.rb
121
+ - spec/support/shared_examples/a_trie_data_structure.rb
122
+ - spec/support/shared_examples/a_trie_node.rb
123
+ - spec/support/shared_examples/a_trie_node_implementation.rb
124
+ - spec/tmp/.gitkeep
125
+ homepage: http://github.com/interscript/rambling-trie
126
+ licenses:
127
+ - MIT
128
+ metadata: {}
129
+ post_install_message:
130
+ rdoc_options: []
131
+ require_paths:
132
+ - lib
133
+ required_ruby_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '2.4'
138
+ required_rubygems_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ requirements: []
144
+ rubygems_version: 3.0.3
145
+ signing_key:
146
+ specification_version: 4
147
+ summary: A Ruby implementation (Opal Compatible) of the trie data structure.
148
+ test_files:
149
+ - spec/assets/test_words.en_US.txt
150
+ - spec/assets/test_words.es_DO.txt
151
+ - spec/integration/rambling/trie_spec.rb
152
+ - spec/lib/rambling/trie/comparable_spec.rb
153
+ - spec/lib/rambling/trie/compressor_spec.rb
154
+ - spec/lib/rambling/trie/configuration/properties_spec.rb
155
+ - spec/lib/rambling/trie/configuration/provider_collection_spec.rb
156
+ - spec/lib/rambling/trie/container_spec.rb
157
+ - spec/lib/rambling/trie/enumerable_spec.rb
158
+ - spec/lib/rambling/trie/inspectable_spec.rb
159
+ - spec/lib/rambling/trie/nodes/compressed_spec.rb
160
+ - spec/lib/rambling/trie/nodes/node_spec.rb
161
+ - spec/lib/rambling/trie/nodes/raw_spec.rb
162
+ - spec/lib/rambling/trie/readers/plain_text_spec.rb
163
+ - spec/lib/rambling/trie/serializers/file_spec.rb
164
+ - spec/lib/rambling/trie/serializers/marshal_spec.rb
165
+ - spec/lib/rambling/trie/serializers/yaml_spec.rb
166
+ - spec/lib/rambling/trie/serializers/zip_spec.rb
167
+ - spec/lib/rambling/trie/stringifyable_spec.rb
168
+ - spec/lib/rambling/trie_spec.rb
169
+ - spec/spec_helper.rb
170
+ - spec/support/config.rb
171
+ - spec/support/helpers/add_word.rb
172
+ - spec/support/helpers/one_line_heredoc.rb
173
+ - spec/support/shared_examples/a_compressible_trie.rb
174
+ - spec/support/shared_examples/a_serializable_trie.rb
175
+ - spec/support/shared_examples/a_serializer.rb
176
+ - spec/support/shared_examples/a_trie_data_structure.rb
177
+ - spec/support/shared_examples/a_trie_node.rb
178
+ - spec/support/shared_examples/a_trie_node_implementation.rb
179
+ - spec/tmp/.gitkeep