LittleWeasel 3.0.4 → 5.0.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/.github/workflows/codeql-analysis.yml +72 -0
- data/.gitignore +19 -17
- data/.reek.yml +17 -0
- data/.rspec +4 -2
- data/.rubocop.yml +187 -0
- data/.ruby-version +1 -1
- data/.yardopts +2 -0
- data/CHANGELOG.md +21 -1
- data/Gemfile +3 -1
- data/Gemfile.lock +114 -0
- data/Jenkinsfile +20 -0
- data/LittleWeasel.gemspec +31 -18
- data/README.md +408 -42
- data/Rakefile +296 -3
- data/lib/LittleWeasel/block_results.rb +81 -0
- data/lib/LittleWeasel/configure.rb +98 -0
- data/lib/LittleWeasel/dictionary.rb +125 -0
- data/lib/LittleWeasel/dictionary_key.rb +48 -0
- data/lib/LittleWeasel/dictionary_manager.rb +91 -0
- data/lib/LittleWeasel/errors/dictionary_file_already_loaded_error.rb +9 -0
- data/lib/LittleWeasel/errors/dictionary_file_empty_error.rb +8 -0
- data/lib/LittleWeasel/errors/dictionary_file_not_found_error.rb +8 -0
- data/lib/LittleWeasel/errors/dictionary_file_too_large_error.rb +16 -0
- data/lib/LittleWeasel/errors/language_required_error.rb +8 -0
- data/lib/LittleWeasel/errors/must_override_error.rb +8 -0
- data/lib/LittleWeasel/filters/en_us/currency_filter.rb +19 -0
- data/lib/LittleWeasel/filters/en_us/numeric_filter.rb +19 -0
- data/lib/LittleWeasel/filters/en_us/single_character_word_filter.rb +21 -0
- data/lib/LittleWeasel/filters/word_filter.rb +59 -0
- data/lib/LittleWeasel/filters/word_filter_managable.rb +80 -0
- data/lib/LittleWeasel/filters/word_filter_validatable.rb +31 -0
- data/lib/LittleWeasel/filters/word_filterable.rb +19 -0
- data/lib/LittleWeasel/filters/word_filters_validatable.rb +29 -0
- data/lib/LittleWeasel/metadata/dictionary_metadata.rb +145 -0
- data/lib/LittleWeasel/metadata/invalid_words_metadata.rb +134 -0
- data/lib/LittleWeasel/metadata/invalid_words_service_results.rb +45 -0
- data/lib/LittleWeasel/metadata/metadata_observable_validatable.rb +22 -0
- data/lib/LittleWeasel/metadata/metadata_observerable.rb +90 -0
- data/lib/LittleWeasel/metadata/metadatable.rb +134 -0
- data/lib/LittleWeasel/modules/class_name_to_symbol.rb +26 -0
- data/lib/LittleWeasel/modules/configurable.rb +26 -0
- data/lib/LittleWeasel/modules/deep_dup.rb +11 -0
- data/lib/LittleWeasel/modules/dictionary_cache_keys.rb +34 -0
- data/lib/LittleWeasel/modules/dictionary_cache_servicable.rb +26 -0
- data/lib/LittleWeasel/modules/dictionary_cache_validatable.rb +18 -0
- data/lib/LittleWeasel/modules/dictionary_creator_servicable.rb +27 -0
- data/lib/LittleWeasel/modules/dictionary_file_loader.rb +67 -0
- data/lib/LittleWeasel/modules/dictionary_key_validatable.rb +17 -0
- data/lib/LittleWeasel/modules/dictionary_keyable.rb +24 -0
- data/lib/LittleWeasel/modules/dictionary_metadata_servicable.rb +29 -0
- data/lib/LittleWeasel/modules/dictionary_metadata_validatable.rb +15 -0
- data/lib/LittleWeasel/modules/dictionary_source_validatable.rb +15 -0
- data/lib/LittleWeasel/modules/dictionary_sourceable.rb +86 -0
- data/lib/LittleWeasel/modules/dictionary_validatable.rb +18 -0
- data/lib/LittleWeasel/modules/language.rb +24 -0
- data/lib/LittleWeasel/modules/language_validatable.rb +14 -0
- data/lib/LittleWeasel/modules/locale.rb +23 -0
- data/lib/LittleWeasel/modules/order_validatable.rb +16 -0
- data/lib/LittleWeasel/modules/orderable.rb +17 -0
- data/lib/LittleWeasel/modules/region.rb +24 -0
- data/lib/LittleWeasel/modules/region_validatable.rb +14 -0
- data/lib/LittleWeasel/modules/tag_validatable.rb +14 -0
- data/lib/LittleWeasel/modules/taggable.rb +31 -0
- data/lib/LittleWeasel/modules/word_results_validatable.rb +28 -0
- data/lib/LittleWeasel/preprocessors/en_us/capitalize_preprocessor.rb +22 -0
- data/lib/LittleWeasel/preprocessors/preprocessed_word.rb +29 -0
- data/lib/LittleWeasel/preprocessors/preprocessed_word_validatable.rb +56 -0
- data/lib/LittleWeasel/preprocessors/preprocessed_words.rb +59 -0
- data/lib/LittleWeasel/preprocessors/preprocessed_words_validatable.rb +28 -0
- data/lib/LittleWeasel/preprocessors/word_preprocessable.rb +19 -0
- data/lib/LittleWeasel/preprocessors/word_preprocessor.rb +123 -0
- data/lib/LittleWeasel/preprocessors/word_preprocessor_managable.rb +114 -0
- data/lib/LittleWeasel/preprocessors/word_preprocessor_validatable.rb +40 -0
- data/lib/LittleWeasel/preprocessors/word_preprocessors_validatable.rb +24 -0
- data/lib/LittleWeasel/services/dictionary_cache_service.rb +211 -0
- data/lib/LittleWeasel/services/dictionary_creator_service.rb +94 -0
- data/lib/LittleWeasel/services/dictionary_file_loader_service.rb +37 -0
- data/lib/LittleWeasel/services/dictionary_killer_service.rb +35 -0
- data/lib/LittleWeasel/services/dictionary_metadata_service.rb +116 -0
- data/lib/LittleWeasel/services/invalid_words_service.rb +59 -0
- data/lib/LittleWeasel/version.rb +3 -1
- data/lib/LittleWeasel/word_results.rb +146 -0
- data/lib/LittleWeasel.rb +72 -186
- data/spec/factories/dictionary.rb +43 -0
- data/spec/factories/dictionary_cache_service.rb +95 -0
- data/spec/factories/dictionary_creator_service.rb +16 -0
- data/spec/factories/dictionary_file_loader_service.rb +13 -0
- data/spec/factories/dictionary_hash.rb +39 -0
- data/spec/factories/dictionary_key.rb +14 -0
- data/spec/factories/dictionary_killer_service.rb +14 -0
- data/spec/factories/dictionary_manager.rb +10 -0
- data/spec/factories/dictionary_metadata.rb +16 -0
- data/spec/factories/dictionary_metadata_service.rb +16 -0
- data/spec/factories/numeric_filter.rb +12 -0
- data/spec/factories/preprocessed_word.rb +16 -0
- data/spec/factories/preprocessed_words.rb +41 -0
- data/spec/factories/single_character_word_filter.rb +12 -0
- data/spec/factories/word_results.rb +16 -0
- data/spec/lib/LittleWeasel/block_results_spec.rb +248 -0
- data/spec/lib/LittleWeasel/configure_spec.rb +74 -0
- data/spec/lib/LittleWeasel/dictionary_key_spec.rb +118 -0
- data/spec/lib/LittleWeasel/dictionary_manager_spec.rb +166 -0
- data/spec/lib/LittleWeasel/dictionary_spec.rb +289 -0
- data/spec/lib/LittleWeasel/filters/en_us/currency_filter_spec.rb +80 -0
- data/spec/lib/LittleWeasel/filters/en_us/numeric_filter_spec.rb +66 -0
- data/spec/lib/LittleWeasel/filters/en_us/single_character_word_filter_spec.rb +58 -0
- data/spec/lib/LittleWeasel/filters/word_filter_managable_spec.rb +180 -0
- data/spec/lib/LittleWeasel/filters/word_filter_spec.rb +151 -0
- data/spec/lib/LittleWeasel/filters/word_filter_validatable_spec.rb +94 -0
- data/spec/lib/LittleWeasel/filters/word_filters_validatable_spec.rb +48 -0
- data/spec/lib/LittleWeasel/integraton_tests/dictionary_integration_spec.rb +201 -0
- data/spec/lib/LittleWeasel/metadata/dictionary_creator_servicable_spec.rb +54 -0
- data/spec/lib/LittleWeasel/metadata/dictionary_metadata_spec.rb +209 -0
- data/spec/lib/LittleWeasel/metadata/invalid_words_metadata_spec.rb +155 -0
- data/spec/lib/LittleWeasel/metadata/metadata_observerable_spec.rb +31 -0
- data/spec/lib/LittleWeasel/metadata/metadatable_spec.rb +35 -0
- data/spec/lib/LittleWeasel/modules/class_name_to_symbol_spec.rb +21 -0
- data/spec/lib/LittleWeasel/modules/dictionary_file_loader_spec.rb +125 -0
- data/spec/lib/LittleWeasel/modules/dictionary_sourceable_spec.rb +81 -0
- data/spec/lib/LittleWeasel/modules/language_spec.rb +112 -0
- data/spec/lib/LittleWeasel/modules/locale_spec.rb +95 -0
- data/spec/lib/LittleWeasel/modules/region_spec.rb +112 -0
- data/spec/lib/LittleWeasel/preprocessors/en_us/capitalize_preprocessor_spec.rb +34 -0
- data/spec/lib/LittleWeasel/preprocessors/preprocessed_word_spec.rb +105 -0
- data/spec/lib/LittleWeasel/preprocessors/preprocessed_word_validatable_spec.rb +143 -0
- data/spec/lib/LittleWeasel/preprocessors/preprocessed_words_spec.rb +77 -0
- data/spec/lib/LittleWeasel/preprocessors/preprocessed_words_validatable_spec.rb +58 -0
- data/spec/lib/LittleWeasel/preprocessors/word_preprocessor_managable_spec.rb +242 -0
- data/spec/lib/LittleWeasel/preprocessors/word_preprocessor_spec.rb +218 -0
- data/spec/lib/LittleWeasel/preprocessors/word_preprocessor_validatable_spec.rb +109 -0
- data/spec/lib/LittleWeasel/preprocessors/word_preprocessors_validatable_spec.rb +49 -0
- data/spec/lib/LittleWeasel/services/dictionary_cache_service_spec.rb +444 -0
- data/spec/lib/LittleWeasel/services/dictionary_creator_service_spec.rb +119 -0
- data/spec/lib/LittleWeasel/services/dictionary_file_loader_service_spec.rb +71 -0
- data/spec/lib/LittleWeasel/services/dictionary_metadata_service_spec.rb +279 -0
- data/spec/lib/LittleWeasel/word_results_spec.rb +275 -0
- data/spec/lib/LittleWeasel/workflow/workflow_spec.rb +20 -0
- data/spec/spec_helper.rb +117 -6
- data/spec/support/factory_bot.rb +15 -0
- data/spec/support/file_helpers.rb +46 -0
- data/spec/support/files/empty-dictionary.txt +0 -0
- data/{lib/dictionary → spec/support/files/en-US-big.txt} +262156 -31488
- data/spec/support/files/en-US-tagged.txt +26 -0
- data/spec/support/files/en-US.txt +26 -0
- data/spec/support/files/en.txt +26 -0
- data/spec/support/files/es-ES.txt +27 -0
- data/spec/support/files/es.txt +27 -0
- data/spec/support/general_helpers.rb +68 -0
- data/spec/support/shared_contexts.rb +107 -0
- data/spec/support/shared_examples.rb +105 -0
- metadata +418 -70
- data/spec/checker/checker_spec.rb +0 -286
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
RSpec.describe LittleWeasel::Preprocessors::WordPreprocessor do
|
|
6
|
+
subject do
|
|
7
|
+
word_preprocessor = described_class.new order: order
|
|
8
|
+
word_preprocessor.preprocessor_on = preprocessor_on
|
|
9
|
+
word_preprocessor
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
let(:preprocessor_on) { true }
|
|
13
|
+
let(:order) { 0 }
|
|
14
|
+
let(:word) { 'word' }
|
|
15
|
+
|
|
16
|
+
#.new
|
|
17
|
+
describe '.new' do
|
|
18
|
+
context 'when arguments are valid' do
|
|
19
|
+
it 'instantiates the object' do
|
|
20
|
+
expect { subject }.to_not raise_error
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
context 'when arguments are INVALID' do
|
|
25
|
+
context 'when argument order is invalid' do
|
|
26
|
+
context 'when order is not an Integer' do
|
|
27
|
+
let(:order) { :not_an_integer }
|
|
28
|
+
|
|
29
|
+
it 'raises an error' do
|
|
30
|
+
expect { subject }.to raise_error(/Argument order is not an Integer/)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
context 'when order is negative' do
|
|
35
|
+
let(:order) { -1 }
|
|
36
|
+
|
|
37
|
+
it 'raises an error' do
|
|
38
|
+
expect { subject }.to raise_error "Argument order '#{order}' is not a a number from 0-n"
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
context 'when argument preprocessor_on is invalid' do
|
|
44
|
+
context 'when preprocessor_on is not true or false' do
|
|
45
|
+
let(:preprocessor_on) { :not_true_or_false }
|
|
46
|
+
|
|
47
|
+
it 'raises an error' do
|
|
48
|
+
expect { subject }.to raise_error "Argument value is not true or false: #{preprocessor_on}"
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
#.preprocess
|
|
56
|
+
describe '.preprocess' do
|
|
57
|
+
context 'when not overridden' do
|
|
58
|
+
it 'raises an error' do
|
|
59
|
+
expect { subject.class.preprocess word }.to raise_error LittleWeasel::Errors::MustOverrideError
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
#preprocessor_on
|
|
65
|
+
describe '#preprocessor_on' do
|
|
66
|
+
context 'when set to true' do
|
|
67
|
+
before do
|
|
68
|
+
subject.preprocessor_on = true
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'returns true' do
|
|
72
|
+
expect(subject.preprocessor_on).to eq true
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
context 'when set to false' do
|
|
77
|
+
before do
|
|
78
|
+
subject.preprocessor_on = false
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it 'returns false' do
|
|
82
|
+
expect(subject.preprocessor_on).to eq false
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
#preprocessor_on!
|
|
88
|
+
describe '#preprocessor_on!' do
|
|
89
|
+
before do
|
|
90
|
+
expect(subject.preprocessor_off?).to eq true
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
let(:preprocessor_on) { false }
|
|
94
|
+
|
|
95
|
+
it 'turns the preprocessor on' do
|
|
96
|
+
subject.preprocessor_on!
|
|
97
|
+
expect(subject.preprocessor_on).to eq true
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
#preprocessor_on?
|
|
102
|
+
describe '#preprocessor_on?' do
|
|
103
|
+
context 'when #preprocessor_on is true' do
|
|
104
|
+
it 'returns true' do
|
|
105
|
+
expect(subject.preprocessor_on?).to eq true
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
context 'when #preprocessor_on is false' do
|
|
110
|
+
let(:preprocessor_on) { false }
|
|
111
|
+
|
|
112
|
+
it 'returns false' do
|
|
113
|
+
expect(subject.preprocessor_on?).to eq false
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
#preprocess
|
|
119
|
+
describe '#preprocess' do
|
|
120
|
+
context 'when not overridden' do
|
|
121
|
+
it 'raises an error' do
|
|
122
|
+
expect { subject.preprocess 'x' }.to raise_error LittleWeasel::Errors::MustOverrideError
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
context 'when overridden' do
|
|
127
|
+
before do
|
|
128
|
+
allow(described_class).to receive(:preprocess?)
|
|
129
|
+
.and_return true
|
|
130
|
+
allow(described_class).to receive(:preprocess)
|
|
131
|
+
.and_return [true, 'preprocessed-word']
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
context 'when #preprocessor_on? is true' do
|
|
135
|
+
it 'calls .preprocess and returns a ProcessedWord object' do
|
|
136
|
+
expect(described_class).to receive(:preprocess)
|
|
137
|
+
expect(subject.preprocess word).to be_kind_of LittleWeasel::Preprocessors::PreprocessedWord
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
context 'when #preprocessor_on? is false' do
|
|
142
|
+
let(:preprocessor_on) { false }
|
|
143
|
+
|
|
144
|
+
it 'does NOT call .preprocess and returns a ProcessedWord object' do
|
|
145
|
+
expect(described_class).to_not receive(:preprocess)
|
|
146
|
+
expect(subject.preprocess word).to be_kind_of LittleWeasel::Preprocessors::PreprocessedWord
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
#preprocess?
|
|
154
|
+
describe '#preprocess?' do
|
|
155
|
+
let(:word) { 'word' }
|
|
156
|
+
|
|
157
|
+
it 'returns true by default' do
|
|
158
|
+
expect(subject.preprocess? word).to be true
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
context 'when #preprocess? returns true' do
|
|
162
|
+
before { allow(subject.class).to receive(:preprocess?).and_return(true) }
|
|
163
|
+
|
|
164
|
+
context 'when #preprocessor_on? is true' do
|
|
165
|
+
it_behaves_like 'the preprocessor matches and #preprocessor_on? is true'
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
context 'when #preprocessor_on? is false' do
|
|
169
|
+
let(:preprocessor_on) { false }
|
|
170
|
+
|
|
171
|
+
it_behaves_like 'the preprocessor matches and #preprocessor_on? is false'
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
context 'when #preprocess? returns false' do
|
|
176
|
+
before { allow(subject.class).to receive(:preprocess?).and_return(false) }
|
|
177
|
+
|
|
178
|
+
context 'when #preprocessor_on? is true' do
|
|
179
|
+
it_behaves_like 'the preprocessor DOES NOT match and #preprocessor_on? is true'
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
context 'when #preprocessor_on? is false' do
|
|
183
|
+
let(:preprocessor_on) { false }
|
|
184
|
+
|
|
185
|
+
it_behaves_like 'the preprocessor DOES NOT match and #preprocessor_on? is false'
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
#preprocessor_off?
|
|
191
|
+
describe '#preprocessor_off?' do
|
|
192
|
+
context 'when #preprocessor_on is false' do
|
|
193
|
+
let(:preprocessor_on) { false }
|
|
194
|
+
|
|
195
|
+
it 'returns true' do
|
|
196
|
+
expect(subject.preprocessor_off?).to eq true
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
context 'when #preprocessor_on is true' do
|
|
201
|
+
it 'returns false' do
|
|
202
|
+
expect(subject.preprocessor_off?).to eq false
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
#preprocessor_off!
|
|
208
|
+
describe '#preprocessor_off!' do
|
|
209
|
+
before do
|
|
210
|
+
expect(subject.preprocessor_on?).to eq true
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
it 'turns the preprocessor off' do
|
|
214
|
+
subject.preprocessor_off!
|
|
215
|
+
expect(subject.preprocessor_on).to eq false
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
end
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
RSpec.describe LittleWeasel::Preprocessors::WordPreprocessorValidatable, type: :module do
|
|
6
|
+
subject { MockSubject.new }
|
|
7
|
+
|
|
8
|
+
WordPreprocessorValidatable = described_class
|
|
9
|
+
|
|
10
|
+
class MockSubject
|
|
11
|
+
include WordPreprocessorValidatable
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class MockWordPreprocessor < LittleWeasel::Preprocessors::WordPreprocessor
|
|
15
|
+
def preprocess(word)
|
|
16
|
+
[true, "#{word}-preprocessed"]
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
let(:order) { 0 }
|
|
21
|
+
let(:preprocessor_on) { true }
|
|
22
|
+
let(:word_preprocessor) do
|
|
23
|
+
word_preprocessor = MockWordPreprocessor.new order: order
|
|
24
|
+
word_preprocessor.preprocessor_on = preprocessor_on
|
|
25
|
+
word_preprocessor
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
shared_examples 'an instance method is missing' do
|
|
29
|
+
before do
|
|
30
|
+
allow(word_preprocessor).to receive(:respond_to?).with(method).and_return(false)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'raises an error' do
|
|
34
|
+
expect { WordPreprocessorValidatable.validate_word_preprocessor word_preprocessor: word_preprocessor }.to raise_error expected_error_message
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
shared_examples 'a class method is missing' do
|
|
39
|
+
before do
|
|
40
|
+
allow(word_preprocessor.class).to receive(:respond_to?).with(method).and_return(false)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'raises an error' do
|
|
44
|
+
expect { WordPreprocessorValidatable.validate_word_preprocessor word_preprocessor: word_preprocessor }.to raise_error expected_error_message
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
#.validate_word_preprocessor
|
|
49
|
+
describe '.validate_word_preprocessor' do
|
|
50
|
+
before do
|
|
51
|
+
allow(word_preprocessor.class).to receive(:respond_to?).and_call_original
|
|
52
|
+
allow(word_preprocessor).to receive(:respond_to?).and_call_original
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
context 'when the object quacks right' do
|
|
56
|
+
it 'passes validation' do
|
|
57
|
+
expect { WordPreprocessorValidatable.validate_word_preprocessor word_preprocessor: word_preprocessor }.to_not raise_error
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context 'when the object DOES NOT quack right' do
|
|
62
|
+
let(:expected_error_message) { /Argument word_preprocessor: does not respond to/ }
|
|
63
|
+
|
|
64
|
+
context 'when a class method is missing' do
|
|
65
|
+
context 'when the class does not respond to .preprocess' do
|
|
66
|
+
let(:method) { :preprocess }
|
|
67
|
+
it_behaves_like 'a class method is missing'
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
context 'when the class does not respond to .preprocess?' do
|
|
71
|
+
let(:method) { :preprocess? }
|
|
72
|
+
it_behaves_like 'a class method is missing'
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
context 'when an instance method is missing' do
|
|
77
|
+
context 'when the object does not respond to #preprocess' do
|
|
78
|
+
let(:method) { :preprocess }
|
|
79
|
+
it_behaves_like 'an instance method is missing'
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
context 'when the object does not respond to #preprocess?' do
|
|
83
|
+
let(:method) { :preprocess? }
|
|
84
|
+
it_behaves_like 'an instance method is missing'
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
context 'when the object does not respond to #preprocessor_off?' do
|
|
88
|
+
let(:method) { :preprocessor_off? }
|
|
89
|
+
it_behaves_like 'an instance method is missing'
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
context 'when the object does not respond to #preprocessor_on' do
|
|
93
|
+
let(:method) { :preprocessor_on }
|
|
94
|
+
it_behaves_like 'an instance method is missing'
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
context 'when the object does not respond to #preprocessor_on=' do
|
|
98
|
+
let(:method) { :preprocessor_on= }
|
|
99
|
+
it_behaves_like 'an instance method is missing'
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
context 'when the object does not respond to #preprocessor_on?' do
|
|
103
|
+
let(:method) { :preprocessor_on? }
|
|
104
|
+
it_behaves_like 'an instance method is missing'
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
RSpec.describe LittleWeasel::Preprocessors::WordPreprocessorsValidatable, type: :module do
|
|
6
|
+
subject { MockSubject.new }
|
|
7
|
+
|
|
8
|
+
WordPreprocessorsValidatable = described_class
|
|
9
|
+
|
|
10
|
+
class MockSubject
|
|
11
|
+
include WordPreprocessorsValidatable
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
subject { MockSubject.new }
|
|
15
|
+
|
|
16
|
+
class MockWordPreprocessor < LittleWeasel::Preprocessors::WordPreprocessor
|
|
17
|
+
def initialize(order: 0)
|
|
18
|
+
super order: order
|
|
19
|
+
self.preprocessor_on = preprocessor_on
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
class << self
|
|
23
|
+
def preprocess(word) [true, "#{word}-0"]; end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
#.validate_word_preprocessors
|
|
28
|
+
describe '.validate_word_preprocessors' do
|
|
29
|
+
context 'when passing a blank Array' do
|
|
30
|
+
it 'passes validaton' do
|
|
31
|
+
expect { WordPreprocessorsValidatable.validate_word_preprocessors(word_preprocessors: []) }.to_not raise_error
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context 'when passing a an Array with valid word preprocessors' do
|
|
36
|
+
it 'passes validation' do
|
|
37
|
+
expect { WordPreprocessorsValidatable.validate_word_preprocessors(word_preprocessors: [MockWordPreprocessor.new]) }.to_not raise_error
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
context 'when passing an INVALID argument' do
|
|
42
|
+
context 'when passing an invalid Array' do
|
|
43
|
+
it 'raises an error' do
|
|
44
|
+
expect { WordPreprocessorsValidatable.validate_word_preprocessors(word_preprocessors: :not_an_array) }.to raise_error(/Argument word_preprocessors is not an Array/)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|