LittleWeasel 3.0.0 → 4.0.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 (157) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +3 -0
  3. data/.idea/.rakeTasks +1 -1
  4. data/.idea/LittleWeasel.iml +5 -18
  5. data/.idea/workspace.xml +198 -109
  6. data/.reek.yml +17 -0
  7. data/.rspec +4 -2
  8. data/.rubocop.yml +187 -0
  9. data/.ruby-version +1 -0
  10. data/.yardopts +2 -0
  11. data/CHANGELOG.md +16 -0
  12. data/Gemfile +3 -1
  13. data/LittleWeasel.gemspec +31 -18
  14. data/README.md +408 -42
  15. data/Rakefile +296 -3
  16. data/lib/LittleWeasel.rb +5 -171
  17. data/lib/LittleWeasel/block_results.rb +81 -0
  18. data/lib/LittleWeasel/configure.rb +98 -0
  19. data/lib/LittleWeasel/dictionary.rb +125 -0
  20. data/lib/LittleWeasel/dictionary_key.rb +48 -0
  21. data/lib/LittleWeasel/dictionary_manager.rb +85 -0
  22. data/lib/LittleWeasel/errors/dictionary_file_already_loaded_error.rb +9 -0
  23. data/lib/LittleWeasel/errors/dictionary_file_empty_error.rb +8 -0
  24. data/lib/LittleWeasel/errors/dictionary_file_not_found_error.rb +8 -0
  25. data/lib/LittleWeasel/errors/dictionary_file_too_large_error.rb +16 -0
  26. data/lib/LittleWeasel/errors/language_required_error.rb +8 -0
  27. data/lib/LittleWeasel/errors/must_override_error.rb +8 -0
  28. data/lib/LittleWeasel/filters/en_us/currency_filter.rb +19 -0
  29. data/lib/LittleWeasel/filters/en_us/numeric_filter.rb +19 -0
  30. data/lib/LittleWeasel/filters/en_us/single_character_word_filter.rb +21 -0
  31. data/lib/LittleWeasel/filters/word_filter.rb +59 -0
  32. data/lib/LittleWeasel/filters/word_filter_managable.rb +80 -0
  33. data/lib/LittleWeasel/filters/word_filter_validatable.rb +31 -0
  34. data/lib/LittleWeasel/filters/word_filterable.rb +19 -0
  35. data/lib/LittleWeasel/filters/word_filters_validatable.rb +29 -0
  36. data/lib/LittleWeasel/metadata/dictionary_metadata.rb +145 -0
  37. data/lib/LittleWeasel/metadata/invalid_words_metadata.rb +134 -0
  38. data/lib/LittleWeasel/metadata/invalid_words_service_results.rb +45 -0
  39. data/lib/LittleWeasel/metadata/metadata_observable_validatable.rb +22 -0
  40. data/lib/LittleWeasel/metadata/metadata_observerable.rb +90 -0
  41. data/lib/LittleWeasel/metadata/metadatable.rb +136 -0
  42. data/lib/LittleWeasel/modules/class_name_to_symbol.rb +26 -0
  43. data/lib/LittleWeasel/modules/configurable.rb +26 -0
  44. data/lib/LittleWeasel/modules/deep_dup.rb +11 -0
  45. data/lib/LittleWeasel/modules/dictionary_cache_keys.rb +34 -0
  46. data/lib/LittleWeasel/modules/dictionary_cache_servicable.rb +26 -0
  47. data/lib/LittleWeasel/modules/dictionary_cache_validatable.rb +20 -0
  48. data/lib/LittleWeasel/modules/dictionary_creator_servicable.rb +27 -0
  49. data/lib/LittleWeasel/modules/dictionary_file_loader.rb +67 -0
  50. data/lib/LittleWeasel/modules/dictionary_key_validatable.rb +19 -0
  51. data/lib/LittleWeasel/modules/dictionary_keyable.rb +24 -0
  52. data/lib/LittleWeasel/modules/dictionary_loader_servicable.rb +27 -0
  53. data/lib/LittleWeasel/modules/dictionary_metadata_servicable.rb +29 -0
  54. data/lib/LittleWeasel/modules/dictionary_metadata_validatable.rb +17 -0
  55. data/lib/LittleWeasel/modules/dictionary_sourceable.rb +26 -0
  56. data/lib/LittleWeasel/modules/dictionary_validatable.rb +30 -0
  57. data/lib/LittleWeasel/modules/language.rb +23 -0
  58. data/lib/LittleWeasel/modules/language_validatable.rb +16 -0
  59. data/lib/LittleWeasel/modules/locale.rb +40 -0
  60. data/lib/LittleWeasel/modules/order_validatable.rb +18 -0
  61. data/lib/LittleWeasel/modules/orderable.rb +17 -0
  62. data/lib/LittleWeasel/modules/region.rb +23 -0
  63. data/lib/LittleWeasel/modules/region_validatable.rb +16 -0
  64. data/lib/LittleWeasel/modules/tag_validatable.rb +16 -0
  65. data/lib/LittleWeasel/modules/taggable.rb +31 -0
  66. data/lib/LittleWeasel/modules/word_results_validatable.rb +28 -0
  67. data/lib/LittleWeasel/preprocessors/en_us/capitalize_preprocessor.rb +22 -0
  68. data/lib/LittleWeasel/preprocessors/preprocessed_word.rb +28 -0
  69. data/lib/LittleWeasel/preprocessors/preprocessed_word_validatable.rb +55 -0
  70. data/lib/LittleWeasel/preprocessors/preprocessed_words.rb +55 -0
  71. data/lib/LittleWeasel/preprocessors/preprocessed_words_validatable.rb +27 -0
  72. data/lib/LittleWeasel/preprocessors/word_preprocessable.rb +19 -0
  73. data/lib/LittleWeasel/preprocessors/word_preprocessor.rb +122 -0
  74. data/lib/LittleWeasel/preprocessors/word_preprocessor_managable.rb +114 -0
  75. data/lib/LittleWeasel/preprocessors/word_preprocessor_validatable.rb +40 -0
  76. data/lib/LittleWeasel/preprocessors/word_preprocessors_validatable.rb +24 -0
  77. data/lib/LittleWeasel/services/dictionary_cache_service.rb +262 -0
  78. data/lib/LittleWeasel/services/dictionary_creator_service.rb +94 -0
  79. data/lib/LittleWeasel/services/dictionary_file_loader_service.rb +37 -0
  80. data/lib/LittleWeasel/services/dictionary_killer_service.rb +35 -0
  81. data/lib/LittleWeasel/services/dictionary_loader_service.rb +59 -0
  82. data/lib/LittleWeasel/services/dictionary_metadata_service.rb +114 -0
  83. data/lib/LittleWeasel/services/invalid_words_service.rb +59 -0
  84. data/lib/LittleWeasel/version.rb +3 -1
  85. data/lib/LittleWeasel/word_results.rb +146 -0
  86. data/spec/factories/dictionary.rb +43 -0
  87. data/spec/factories/dictionary_cache_service.rb +95 -0
  88. data/spec/factories/dictionary_creator_service.rb +16 -0
  89. data/spec/factories/dictionary_file_loader_service.rb +13 -0
  90. data/spec/factories/dictionary_hash.rb +39 -0
  91. data/spec/factories/dictionary_key.rb +14 -0
  92. data/spec/factories/dictionary_killer_service.rb +14 -0
  93. data/spec/factories/dictionary_loader_service.rb +14 -0
  94. data/spec/factories/dictionary_manager.rb +10 -0
  95. data/spec/factories/dictionary_metadata.rb +16 -0
  96. data/spec/factories/dictionary_metadata_service.rb +16 -0
  97. data/spec/factories/numeric_filter.rb +12 -0
  98. data/spec/factories/preprocessed_word.rb +16 -0
  99. data/spec/factories/preprocessed_words.rb +41 -0
  100. data/spec/factories/single_character_word_filter.rb +12 -0
  101. data/spec/factories/word_results.rb +16 -0
  102. data/spec/lib/LittleWeasel/block_results_spec.rb +248 -0
  103. data/spec/lib/LittleWeasel/configure_spec.rb +74 -0
  104. data/spec/lib/LittleWeasel/dictionary_key_spec.rb +118 -0
  105. data/spec/lib/LittleWeasel/dictionary_manager_spec.rb +116 -0
  106. data/spec/lib/LittleWeasel/dictionary_spec.rb +289 -0
  107. data/spec/lib/LittleWeasel/filters/en_us/currency_filter_spec.rb +80 -0
  108. data/spec/lib/LittleWeasel/filters/en_us/numeric_filter_spec.rb +66 -0
  109. data/spec/lib/LittleWeasel/filters/en_us/single_character_word_filter_spec.rb +58 -0
  110. data/spec/lib/LittleWeasel/filters/word_filter_managable_spec.rb +180 -0
  111. data/spec/lib/LittleWeasel/filters/word_filter_spec.rb +151 -0
  112. data/spec/lib/LittleWeasel/filters/word_filter_validatable_spec.rb +94 -0
  113. data/spec/lib/LittleWeasel/filters/word_filters_validatable_spec.rb +48 -0
  114. data/spec/lib/LittleWeasel/integraton_tests/dictionary_integration_spec.rb +201 -0
  115. data/spec/lib/LittleWeasel/metadata/dictionary_creator_servicable_spec.rb +54 -0
  116. data/spec/lib/LittleWeasel/metadata/dictionary_metadata_spec.rb +209 -0
  117. data/spec/lib/LittleWeasel/metadata/invalid_words_metadata_spec.rb +155 -0
  118. data/spec/lib/LittleWeasel/metadata/metadata_observerable_spec.rb +31 -0
  119. data/spec/lib/LittleWeasel/metadata/metadatable_spec.rb +35 -0
  120. data/spec/lib/LittleWeasel/modules/class_name_to_symbol_spec.rb +21 -0
  121. data/spec/lib/LittleWeasel/modules/dictionary_file_loader_spec.rb +125 -0
  122. data/spec/lib/LittleWeasel/modules/dictionary_sourceable_spec.rb +44 -0
  123. data/spec/lib/LittleWeasel/modules/language_spec.rb +52 -0
  124. data/spec/lib/LittleWeasel/modules/locale_spec.rb +140 -0
  125. data/spec/lib/LittleWeasel/modules/region_spec.rb +52 -0
  126. data/spec/lib/LittleWeasel/preprocessors/en_us/capitalize_preprocessor_spec.rb +34 -0
  127. data/spec/lib/LittleWeasel/preprocessors/preprocessed_word_spec.rb +105 -0
  128. data/spec/lib/LittleWeasel/preprocessors/preprocessed_word_validatable_spec.rb +143 -0
  129. data/spec/lib/LittleWeasel/preprocessors/preprocessed_words_spec.rb +77 -0
  130. data/spec/lib/LittleWeasel/preprocessors/preprocessed_words_validatable_spec.rb +58 -0
  131. data/spec/lib/LittleWeasel/preprocessors/word_preprocessor_managable_spec.rb +216 -0
  132. data/spec/lib/LittleWeasel/preprocessors/word_preprocessor_spec.rb +175 -0
  133. data/spec/lib/LittleWeasel/preprocessors/word_preprocessor_validatable_spec.rb +109 -0
  134. data/spec/lib/LittleWeasel/preprocessors/word_preprocessors_validatable_spec.rb +49 -0
  135. data/spec/lib/LittleWeasel/services/dictionary_cache_service_spec.rb +444 -0
  136. data/spec/lib/LittleWeasel/services/dictionary_creator_service_spec.rb +119 -0
  137. data/spec/lib/LittleWeasel/services/dictionary_file_loader_service_spec.rb +71 -0
  138. data/spec/lib/LittleWeasel/services/dictionary_loader_service_spec.rb +50 -0
  139. data/spec/lib/LittleWeasel/services/dictionary_metadata_service_spec.rb +279 -0
  140. data/spec/lib/LittleWeasel/word_results_spec.rb +275 -0
  141. data/spec/lib/LittleWeasel/workflow/workflow_spec.rb +20 -0
  142. data/spec/spec_helper.rb +117 -6
  143. data/spec/support/factory_bot.rb +15 -0
  144. data/spec/support/file_helpers.rb +32 -0
  145. data/spec/support/files/empty-dictionary.txt +0 -0
  146. data/{lib/dictionary → spec/support/files/en-US-big.txt} +262156 -31488
  147. data/spec/support/files/en-US-tagged.txt +26 -0
  148. data/spec/support/files/en-US.txt +26 -0
  149. data/spec/support/files/en.txt +26 -0
  150. data/spec/support/files/es-ES.txt +27 -0
  151. data/spec/support/files/es.txt +27 -0
  152. data/spec/support/general_helpers.rb +68 -0
  153. data/spec/support/shared_contexts.rb +108 -0
  154. data/spec/support/shared_examples.rb +105 -0
  155. metadata +415 -52
  156. data/.rbenv-version +0 -1
  157. data/spec/checker/checker_spec.rb +0 -237
@@ -0,0 +1,140 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe LittleWeasel::Modules::Locale, type: :module do
6
+ Locale = described_class
7
+
8
+ subject do
9
+ Class.new do
10
+ include Locale
11
+
12
+ attr_reader :language, :region
13
+
14
+ def initialize(language, region)
15
+ self.language = language
16
+ self.region = region
17
+ end
18
+
19
+ private
20
+
21
+ attr_writer :language, :region
22
+ end.new(language, region)
23
+ end
24
+
25
+ let(:language) {}
26
+ let(:region) {}
27
+
28
+ #.locale
29
+ describe '.locale' do
30
+ it 'adds the class method when included' do
31
+ expect(subject.class).to respond_to(:locale)
32
+ end
33
+
34
+ context 'with valid arguments' do
35
+ let(:language) { :en }
36
+ let(:region) { :us }
37
+
38
+ it 'returns the locale as a string' do
39
+ expect(subject.class.locale language: language, region: region).to eq 'en-US'
40
+ end
41
+ end
42
+
43
+ context 'with INVALID arguments' do
44
+ context 'with an invalid language' do
45
+ let(:language) {}
46
+ let(:region) { :us }
47
+
48
+ it 'raises an error' do
49
+ expect { subject.class.locale language: language, region: region }.to raise_error 'Argument language does not respond to :downcase'
50
+ end
51
+ end
52
+
53
+ context 'when region is nil' do
54
+ let(:language) { :en }
55
+ let(:region) {}
56
+
57
+ it 'returns the expected locale as a string' do
58
+ expect(subject.class.locale language: language, region: region).to eq language.downcase.to_s
59
+ end
60
+ end
61
+
62
+ context 'when region is invalid' do
63
+ let(:language) { :en }
64
+ let(:region) { 1 }
65
+
66
+ it 'raises an error' do
67
+ expect { subject.class.locale language: language, region: region }.to raise_error 'Argument region does not respond to :upcase'
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ #locale
74
+ describe '#locale' do
75
+ context 'with valid arguments' do
76
+ context 'with valid language' do
77
+ let(:language) { :en }
78
+
79
+ it 'returns the expected locale (language only)' do
80
+ expect(subject.locale).to eq 'en'
81
+ end
82
+ end
83
+
84
+ context 'with valid language and region' do
85
+ let(:language) { :en }
86
+ let(:region) { :us }
87
+
88
+ it 'returns the expected locale (language and region)' do
89
+ expect(subject.locale).to eq 'en-US'
90
+ end
91
+
92
+ describe 'normalizes language and region to the proper case' do
93
+ let(:language) { :EN }
94
+ let(:region) { :us }
95
+
96
+ it 'returns the expected locale with language lowercase and region uppercase' do
97
+ expect(subject.locale).to eq 'en-US'
98
+ end
99
+ end
100
+ end
101
+
102
+ context 'with valid language and nil region' do
103
+ let(:language) { :en }
104
+ let(:region) {}
105
+
106
+ it 'returns the expected locale (language only)' do
107
+ expect(subject.locale).to eq 'en'
108
+ end
109
+ end
110
+
111
+ context 'with valid language and blank region' do
112
+ let(:language) { :en }
113
+ let(:region) { '' }
114
+
115
+ it 'returns the expected locale (language only)' do
116
+ expect(subject.locale).to eq 'en'
117
+ end
118
+ end
119
+ end
120
+
121
+ context 'with invalid arguments' do
122
+ context 'with invalid language' do
123
+ let(:language) { 1 }
124
+
125
+ it 'raises an error' do
126
+ expect { subject.locale }.to raise_error 'Argument language does not respond to :downcase'
127
+ end
128
+ end
129
+
130
+ context 'with invalid region' do
131
+ let(:language) { :en }
132
+ let(:region) { 1 }
133
+
134
+ it 'raises an error' do
135
+ expect { subject.locale }.to raise_error 'Argument region does not respond to :upcase'
136
+ end
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe LittleWeasel::Modules::Region, type: :module do
6
+ Region = described_class
7
+
8
+ subject do
9
+ Class.new do
10
+ include Region
11
+
12
+ attr_reader :region
13
+
14
+ def initialize(region)
15
+ self.region = region
16
+ end
17
+
18
+ private
19
+
20
+ attr_writer :region
21
+ end.new(region)
22
+ end
23
+
24
+ let(:region) {}
25
+
26
+ #normalize_region
27
+ describe '#normalize_region' do
28
+ context 'with a non-nil region' do
29
+ context 'when passing a Symbol' do
30
+ let(:region) { :AbCdEfG }
31
+
32
+ it 'converts the region to a upper-case Symbol' do
33
+ expect(subject.normalize_region).to eq :ABCDEFG
34
+ end
35
+ end
36
+
37
+ context 'when passing a String' do
38
+ let(:region) { 'AbCdEfG' }
39
+
40
+ it 'converts the region to a upper-case String' do
41
+ expect(subject.normalize_region).to eq 'ABCDEFG'
42
+ end
43
+ end
44
+ end
45
+
46
+ context 'with a nil region' do
47
+ it 'returns nil' do
48
+ expect(subject.normalize_region).to be_nil
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literals: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe LittleWeasel::Preprocessors::EnUs::CapitalizePreprocessor do
6
+ subject { described_class.new }
7
+
8
+ #.new
9
+ describe '.new' do
10
+ it 'instantiates the object' do
11
+ expect { subject }.to_not raise_error
12
+ end
13
+
14
+ describe '#order' do
15
+ it 'sets #order to 0 by default' do
16
+ expect(subject.order).to eq 0
17
+ end
18
+ end
19
+
20
+ describe '#preprocessor_on' do
21
+ it 'sets #preprocessor_on to true by default' do
22
+ expect(subject.preprocessor_on).to eq true
23
+ end
24
+ end
25
+ end
26
+
27
+ #.preprocess
28
+ describe '.preprocess' do
29
+ it 'processes and capitalizes the word' do
30
+ expect(described_class.preprocess 'wOrD').to eq [true, 'Word']
31
+ expect(described_class.preprocess 'Word').to eq [true, 'Word']
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,105 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe LittleWeasel::Preprocessors::PreprocessedWord do
6
+ subject do
7
+ described_class.new(
8
+ original_word: original_word,
9
+ preprocessed_word: preprocessed_word,
10
+ preprocessor: preprocessor,
11
+ preprocessed: preprocessed,
12
+ preprocessor_order: preprocessor_order
13
+ )
14
+ end
15
+
16
+ let(:original_word) { :original_word }
17
+ let(:preprocessed_word) { :preprocessed_word }
18
+ let(:preprocessor) { :preprocessor }
19
+ let(:preprocessed) { true }
20
+ let(:preprocessor_order) { :preprocessor_order }
21
+
22
+ #.new
23
+ describe '.new' do
24
+ context 'initializes the attributes' do
25
+ describe '#original_word' do
26
+ it 'is initialized' do
27
+ expect(subject.original_word).to eq :original_word
28
+ end
29
+ end
30
+
31
+ describe '#preprocessed_word' do
32
+ it 'is initialized' do
33
+ expect(subject.preprocessed_word).to eq :preprocessed_word
34
+ end
35
+ end
36
+
37
+ describe '#preprocessor' do
38
+ it 'is initialized' do
39
+ expect(subject.preprocessor).to eq :preprocessor
40
+ end
41
+ end
42
+
43
+ describe '#preprocessor_order' do
44
+ it 'is initialized' do
45
+ expect(subject.preprocessor_order).to eq :preprocessor_order
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ # attributes
52
+ context 'attributes' do
53
+ describe 'original_word=' do
54
+ let(:changed_to) { :original_word_changed }
55
+
56
+ it 'sets the attribute' do
57
+ subject.original_word = changed_to
58
+ expect(subject.original_word).to eq changed_to
59
+ end
60
+ end
61
+
62
+ describe 'preprocessed_word=' do
63
+ let(:changed_to) { :preprocessed_word_changed }
64
+
65
+ it 'sets the attribute' do
66
+ subject.preprocessed_word = changed_to
67
+ expect(subject.preprocessed_word).to eq changed_to
68
+ end
69
+ end
70
+
71
+ describe 'preprocessor=' do
72
+ let(:changed_to) { :preprocessor_changed }
73
+
74
+ it 'sets the attribute' do
75
+ subject.preprocessor = changed_to
76
+ expect(subject.preprocessor).to eq changed_to
77
+ end
78
+ end
79
+
80
+ describe 'preprocessor_order=' do
81
+ let(:changed_to) { :preprocessor_order_changed }
82
+
83
+ it 'sets the attribute' do
84
+ subject.preprocessor_order = changed_to
85
+ expect(subject.preprocessor_order).to eq changed_to
86
+ end
87
+ end
88
+
89
+ describe '#preprocessed?' do
90
+ context 'when preprocessed is true' do
91
+ it 'returns true' do
92
+ expect(subject.preprocessed?).to eq true
93
+ end
94
+ end
95
+
96
+ context 'when preprocessed is false' do
97
+ let(:preprocessed) { false }
98
+
99
+ it 'returns false' do
100
+ expect(subject.preprocessed?).to eq false
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,143 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe LittleWeasel::Preprocessors::PreprocessedWordValidatable, type: :module do
6
+ PreprocessedWordValidatable = described_class
7
+
8
+ class MockSubject
9
+ include PreprocessedWordValidatable
10
+ end
11
+
12
+ subject do
13
+ MockSubject.new
14
+ end
15
+
16
+ before do
17
+ allow(preprocessed_word_object).to receive(:respond_to?).and_call_original
18
+ end
19
+
20
+ let(:preprocessed_word_object) do
21
+ create(:preprocessed_word,
22
+ original_word: original_word,
23
+ preprocessed: preprocessed,
24
+ preprocessed_word: preprocessed_word,
25
+ preprocessor: preprocessor,
26
+ preprocessor_order: preprocessor_order)
27
+ end
28
+ let(:original_word) { 'word' }
29
+ let(:preprocessed) { true }
30
+ let(:preprocessed_word) { 'preprocessed-word0'}
31
+ let(:preprocessor) { :preprocesor0 }
32
+ let(:preprocessor_order) { 0 }
33
+
34
+ #.validate_prepreprocessed_word
35
+ describe '.validate_prepreprocessed_word' do
36
+ context 'when the object is valid' do
37
+ it 'does not raise an error' do
38
+ expect { PreprocessedWordValidatable.validate_prepreprocessed_word(preprocessed_word: preprocessed_word_object) }.to_not raise_error
39
+ end
40
+ end
41
+
42
+ context 'when the object is INVALID' do
43
+ context 'when #original_word is missing' do
44
+ before { allow(preprocessed_word_object).to receive(:respond_to?).with(method).and_return(false) }
45
+ let(:method) { :original_word }
46
+
47
+ it 'raises an eror' do
48
+ expect { PreprocessedWordValidatable.validate_prepreprocessed_word(preprocessed_word: preprocessed_word_object) }.to raise_error(/Argument preprocessed_word: does not respond to.+#{method}/)
49
+ end
50
+ end
51
+
52
+ context 'when #original_word= is missing' do
53
+ before { allow(preprocessed_word_object).to receive(:respond_to?).with(method).and_return(false) }
54
+ let(:method) { :original_word= }
55
+
56
+ it 'raises an eror' do
57
+ expect { PreprocessedWordValidatable.validate_prepreprocessed_word(preprocessed_word: preprocessed_word_object) }.to raise_error(/Argument preprocessed_word: does not respond to.+#{method}/)
58
+ end
59
+ end
60
+
61
+ context 'when #preprocessed_word is missing' do
62
+ before { allow(preprocessed_word_object).to receive(:respond_to?).with(method).and_return(false) }
63
+ let(:method) { :preprocessed_word }
64
+
65
+ it 'raises an eror' do
66
+ expect { PreprocessedWordValidatable.validate_prepreprocessed_word(preprocessed_word: preprocessed_word_object) }.to raise_error(/Argument preprocessed_word: does not respond to.+#{method}/)
67
+ end
68
+ end
69
+
70
+ context 'when #preprocessed_word= is missing' do
71
+ before { allow(preprocessed_word_object).to receive(:respond_to?).with(method).and_return(false) }
72
+ let(:method) { :preprocessed_word= }
73
+
74
+ it 'raises an eror' do
75
+ expect { PreprocessedWordValidatable.validate_prepreprocessed_word(preprocessed_word: preprocessed_word_object) }.to raise_error(/Argument preprocessed_word: does not respond to.+#{method}/)
76
+ end
77
+ end
78
+
79
+ context 'when #preprocessed is missing' do
80
+ before { allow(preprocessed_word_object).to receive(:respond_to?).with(method).and_return(false) }
81
+ let(:method) { :preprocessed }
82
+
83
+ it 'raises an eror' do
84
+ expect { PreprocessedWordValidatable.validate_prepreprocessed_word(preprocessed_word: preprocessed_word_object) }.to raise_error(/Argument preprocessed_word: does not respond to.+#{method}/)
85
+ end
86
+ end
87
+
88
+ context 'when #preprocessed= is missing' do
89
+ before { allow(preprocessed_word_object).to receive(:respond_to?).with(method).and_return(false) }
90
+ let(:method) { :preprocessed= }
91
+
92
+ it 'raises an eror' do
93
+ expect { PreprocessedWordValidatable.validate_prepreprocessed_word(preprocessed_word: preprocessed_word_object) }.to raise_error(/Argument preprocessed_word: does not respond to.+#{method}/)
94
+ end
95
+ end
96
+
97
+ context 'when #preprocessed? is missing' do
98
+ before { allow(preprocessed_word_object).to receive(:respond_to?).with(method).and_return(false) }
99
+ let(:method) { :preprocessed? }
100
+
101
+ it 'raises an eror' do
102
+ expect { PreprocessedWordValidatable.validate_prepreprocessed_word(preprocessed_word: preprocessed_word_object) }.to raise_error(/Argument preprocessed_word: does not respond to.+#{method}/)
103
+ end
104
+ end
105
+
106
+ context 'when #preprocessor is missing' do
107
+ before { allow(preprocessed_word_object).to receive(:respond_to?).with(method).and_return(false) }
108
+ let(:method) { :preprocessor }
109
+
110
+ it 'raises an eror' do
111
+ expect { PreprocessedWordValidatable.validate_prepreprocessed_word(preprocessed_word: preprocessed_word_object) }.to raise_error(/Argument preprocessed_word: does not respond to.+#{method}/)
112
+ end
113
+ end
114
+
115
+ context 'when #preprocessor= is missing' do
116
+ before { allow(preprocessed_word_object).to receive(:respond_to?).with(method).and_return(false) }
117
+ let(:method) { :preprocessor= }
118
+
119
+ it 'raises an eror' do
120
+ expect { PreprocessedWordValidatable.validate_prepreprocessed_word(preprocessed_word: preprocessed_word_object) }.to raise_error(/Argument preprocessed_word: does not respond to.+#{method}/)
121
+ end
122
+ end
123
+
124
+ context 'when #preprocessor_order is missing' do
125
+ before { allow(preprocessed_word_object).to receive(:respond_to?).with(method).and_return(false) }
126
+ let(:method) { :preprocessor_order }
127
+
128
+ it 'raises an eror' do
129
+ expect { PreprocessedWordValidatable.validate_prepreprocessed_word(preprocessed_word: preprocessed_word_object) }.to raise_error(/Argument preprocessed_word: does not respond to.+#{method}/)
130
+ end
131
+ end
132
+
133
+ context 'when #preprocessor_order= is missing' do
134
+ before { allow(preprocessed_word_object).to receive(:respond_to?).with(method).and_return(false) }
135
+ let(:method) { :preprocessor_order= }
136
+
137
+ it 'raises an eror' do
138
+ expect { PreprocessedWordValidatable.validate_prepreprocessed_word(preprocessed_word: preprocessed_word_object) }.to raise_error(/Argument preprocessed_word: does not respond to.+#{method}/)
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end