picky 3.0.1 → 3.1.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.
- data/lib/picky/application.rb +12 -12
- data/lib/picky/backends/backend.rb +17 -0
- data/lib/picky/{backend → backends}/file/basic.rb +1 -1
- data/lib/picky/{backend → backends}/file/json.rb +1 -1
- data/lib/picky/{backend → backends}/file/marshal.rb +1 -1
- data/lib/picky/{backend → backends}/file/text.rb +1 -1
- data/lib/picky/backends/memory.rb +53 -0
- data/lib/picky/{backend → backends}/redis/basic.rb +9 -14
- data/lib/picky/backends/redis/float_hash.rb +26 -0
- data/lib/picky/{backend → backends}/redis/list_hash.rb +7 -11
- data/lib/picky/{backend → backends}/redis/string_hash.rb +7 -11
- data/lib/picky/backends/redis.rb +87 -0
- data/lib/picky/bundle.rb +107 -11
- data/lib/picky/category.rb +5 -5
- data/lib/picky/index.rb +329 -0
- data/lib/picky/index_indexed.rb +31 -0
- data/lib/picky/index_indexing.rb +161 -0
- data/lib/picky/indexed/bundle.rb +112 -0
- data/lib/picky/indexed/wrappers/exact_first.rb +1 -1
- data/lib/picky/indexers/parallel.rb +2 -1
- data/lib/picky/indexers/serial.rb +2 -1
- data/lib/picky/indexes_indexing.rb +1 -1
- data/lib/picky/indexing/bundle.rb +188 -0
- data/lib/picky/indexing/wrappers/category/location.rb +1 -1
- data/lib/picky/interfaces/live_parameters.rb +8 -8
- data/lib/picky/loader.rb +24 -38
- data/lib/picky/migrations/from_30_to_31.rb +61 -0
- data/lib/picky/query/allocation.rb +10 -5
- data/lib/picky/query/combinations.rb +70 -0
- data/lib/picky/query/indexes.rb +8 -7
- data/lib/picky/query/indexes_check.rb +47 -0
- data/lib/picky/query/token.rb +16 -29
- data/lib/picky/query/tokens.rb +4 -20
- data/lib/picky/search.rb +51 -58
- data/lib/picky/tokenizer.rb +231 -0
- data/lib/picky/tokenizers/location.rb +1 -1
- data/lib/tasks/try.rake +4 -12
- data/lib/tasks/try.rb +37 -0
- data/spec/lib/application_spec.rb +5 -5
- data/spec/lib/{backend → backends}/file/basic_spec.rb +2 -2
- data/spec/lib/{backend → backends}/file/json_spec.rb +2 -2
- data/spec/lib/{backend → backends}/file/marshal_spec.rb +2 -2
- data/spec/lib/{backend → backends}/file/text_spec.rb +1 -1
- data/spec/lib/backends/memory_spec.rb +77 -0
- data/spec/lib/{backend → backends}/redis/basic_spec.rb +19 -21
- data/spec/lib/backends/redis/float_hash_spec.rb +38 -0
- data/spec/lib/backends/redis/list_hash_spec.rb +27 -0
- data/spec/lib/backends/redis/string_hash_spec.rb +38 -0
- data/spec/lib/backends/redis_spec.rb +79 -0
- data/spec/lib/categories_indexed_spec.rb +3 -3
- data/spec/lib/category_indexed_spec.rb +6 -6
- data/spec/lib/category_indexing_spec.rb +1 -1
- data/spec/lib/category_spec.rb +1 -1
- data/spec/lib/frontend_adapters/rack_spec.rb +2 -2
- data/spec/lib/{indexes/index_indexed_spec.rb → index_indexed_spec.rb} +1 -1
- data/spec/lib/{indexes/index_indexing_spec.rb → index_indexing_spec.rb} +1 -1
- data/spec/lib/{indexes/index_spec.rb → index_spec.rb} +1 -1
- data/spec/lib/indexed/{bundle/memory_spec.rb → memory_spec.rb} +18 -18
- data/spec/lib/indexed/wrappers/exact_first_spec.rb +2 -2
- data/spec/lib/indexing/{bundle/memory_partial_generation_speed_spec.rb → bundle_partial_generation_speed_spec.rb} +3 -3
- data/spec/lib/indexing/bundle_spec.rb +302 -0
- data/spec/lib/query/allocation_spec.rb +21 -11
- data/spec/lib/query/combination_spec.rb +2 -2
- data/spec/lib/query/{combinations/base_spec.rb → combinations_spec.rb} +1 -1
- data/spec/lib/query/indexes_check_spec.rb +25 -0
- data/spec/lib/query/indexes_spec.rb +5 -1
- data/spec/lib/query/token_spec.rb +18 -20
- data/spec/lib/query/tokens_spec.rb +14 -65
- data/spec/lib/search_spec.rb +36 -37
- data/spec/lib/tasks/try_spec.rb +51 -0
- data/spec/lib/{tokenizers/base_spec.rb → tokenizer_spec.rb} +15 -44
- metadata +64 -81
- data/lib/picky/backend/base.rb +0 -121
- data/lib/picky/backend/files.rb +0 -28
- data/lib/picky/backend/redis.rb +0 -44
- data/lib/picky/indexed/bundle/base.rb +0 -47
- data/lib/picky/indexed/bundle/memory.rb +0 -88
- data/lib/picky/indexed/bundle/redis.rb +0 -91
- data/lib/picky/indexes/index.rb +0 -328
- data/lib/picky/indexes/index_indexed.rb +0 -35
- data/lib/picky/indexes/index_indexing.rb +0 -165
- data/lib/picky/indexes/memory.rb +0 -20
- data/lib/picky/indexes/redis.rb +0 -20
- data/lib/picky/indexing/bundle/base.rb +0 -242
- data/lib/picky/indexing/bundle/memory.rb +0 -26
- data/lib/picky/indexing/bundle/redis.rb +0 -26
- data/lib/picky/query/combinations/base.rb +0 -74
- data/lib/picky/query/combinations/memory.rb +0 -52
- data/lib/picky/query/combinations/redis.rb +0 -90
- data/lib/picky/query.rb +0 -6
- data/lib/picky/tokenizers/base.rb +0 -231
- data/lib/picky/tokenizers/index.rb +0 -34
- data/lib/picky/tokenizers/query.rb +0 -61
- data/spec/lib/backend/files_spec.rb +0 -189
- data/spec/lib/backend/redis/list_hash_spec.rb +0 -40
- data/spec/lib/backend/redis/string_hash_spec.rb +0 -47
- data/spec/lib/backend/redis_spec.rb +0 -170
- data/spec/lib/indexed/bundle/redis_spec.rb +0 -41
- data/spec/lib/indexes/redis_spec.rb +0 -15
- data/spec/lib/indexing/bundle/base_spec.rb +0 -38
- data/spec/lib/indexing/bundle/memory_spec.rb +0 -287
- data/spec/lib/indexing/bundle/redis_spec.rb +0 -283
- data/spec/lib/query/combinations/memory_spec.rb +0 -158
- data/spec/lib/query/combinations/redis_spec.rb +0 -172
- data/spec/lib/tokenizers/index_spec.rb +0 -69
- data/spec/lib/tokenizers/query_spec.rb +0 -121
@@ -0,0 +1,302 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Picky::Indexing::Bundle do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@index = Picky::Index.new :some_index
|
7
|
+
@category = Picky::Category.new :some_category, @index
|
8
|
+
@similarity = Picky::Similarity::DoubleMetaphone.new 3
|
9
|
+
end
|
10
|
+
let(:bundle) { described_class.new :some_name, @category, Picky::Backends::Memory.new, :some_weights, :some_partial, @similarity }
|
11
|
+
|
12
|
+
describe 'identifier' do
|
13
|
+
it 'is correct' do
|
14
|
+
bundle.identifier.should == 'test:some_index:some_category:some_name'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'similar' do
|
19
|
+
before(:each) do
|
20
|
+
bundle.similarity = @similarity.generate_from( :dragon => [1,2,3], :dargon => [4,5,6] )
|
21
|
+
end
|
22
|
+
it 'returns the right similars (not itself)' do
|
23
|
+
bundle.similar(:dragon).should == [:dargon]
|
24
|
+
end
|
25
|
+
it 'returns the right similars' do
|
26
|
+
bundle.similar(:trkn).should == [:dragon, :dargon]
|
27
|
+
end
|
28
|
+
it 'performs' do
|
29
|
+
performance_of { bundle.similar(:dragon) }.should < 0.000075
|
30
|
+
end
|
31
|
+
it 'performs' do
|
32
|
+
performance_of { bundle.similar(:trkn) }.should < 0.00006
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe 'raise_cache_missing' do
|
37
|
+
it 'does something' do
|
38
|
+
expect {
|
39
|
+
bundle.raise_cache_missing :similarity
|
40
|
+
}.to raise_error("Error: The similarity cache for test:some_index:some_category:some_name is missing.")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe 'warn_cache_small' do
|
45
|
+
it 'warns the user' do
|
46
|
+
bundle.should_receive(:warn).once.with "Warning: similarity cache for test:some_index:some_category:some_name smaller than 16 bytes."
|
47
|
+
|
48
|
+
bundle.warn_cache_small :similarity
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe 'identifier' do
|
53
|
+
it 'should return a specific identifier' do
|
54
|
+
bundle.identifier.should == 'test:some_index:some_category:some_name'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe 'initialize_index_for' do
|
59
|
+
context 'token not yet assigned' do
|
60
|
+
before(:each) do
|
61
|
+
bundle.stub! :index => {}
|
62
|
+
end
|
63
|
+
it 'should assign it an empty array' do
|
64
|
+
bundle.initialize_inverted_index_for :some_token
|
65
|
+
|
66
|
+
bundle.inverted[:some_token].should == []
|
67
|
+
end
|
68
|
+
end
|
69
|
+
context 'token already assigned' do
|
70
|
+
before(:each) do
|
71
|
+
bundle.stub! :index => { :some_token => :already_assigned }
|
72
|
+
end
|
73
|
+
it 'should not assign it anymore' do
|
74
|
+
bundle.initialize_inverted_index_for :some_token
|
75
|
+
|
76
|
+
bundle.index[:some_token].should == :already_assigned
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe 'retrieve' do
|
82
|
+
before(:each) do
|
83
|
+
prepared = stub :prepared
|
84
|
+
prepared.should_receive(:retrieve).once.and_yield ' 1234', :some_token
|
85
|
+
bundle.stub! :prepared => prepared
|
86
|
+
|
87
|
+
@ary = stub :ary
|
88
|
+
inverted = stub :inverted, :[] => @ary
|
89
|
+
bundle.stub! :inverted => inverted
|
90
|
+
end
|
91
|
+
context 'id key format' do
|
92
|
+
before(:each) do
|
93
|
+
@category.stub! :key_format => :to_i
|
94
|
+
end
|
95
|
+
it 'should call the other methods correctly' do
|
96
|
+
@ary.should_receive(:<<).once.with 1234
|
97
|
+
|
98
|
+
bundle.retrieve
|
99
|
+
end
|
100
|
+
end
|
101
|
+
context 'other key format' do
|
102
|
+
before(:each) do
|
103
|
+
@category.stub! :key_format => :strip
|
104
|
+
end
|
105
|
+
it 'should call the other methods correctly' do
|
106
|
+
@ary.should_receive(:<<).once.with '1234'
|
107
|
+
|
108
|
+
bundle.retrieve
|
109
|
+
end
|
110
|
+
end
|
111
|
+
context 'no key format - default' do
|
112
|
+
before(:each) do
|
113
|
+
@category.stub! :key_format => nil
|
114
|
+
end
|
115
|
+
it 'should call the other methods correctly' do
|
116
|
+
@ary.should_receive(:<<).once.with 1234
|
117
|
+
|
118
|
+
bundle.retrieve
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
describe 'load_from_index_file' do
|
124
|
+
it 'should call two methods in order' do
|
125
|
+
bundle.should_receive(:load_from_prepared_index_generation_message).once.ordered
|
126
|
+
bundle.should_receive(:clear).once.ordered
|
127
|
+
bundle.should_receive(:retrieve).once.ordered
|
128
|
+
|
129
|
+
bundle.load_from_prepared_index_file
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe 'generate_derived' do
|
134
|
+
it 'should call two methods in order' do
|
135
|
+
bundle.should_receive(:generate_weights).once.ordered
|
136
|
+
bundle.should_receive(:generate_similarity).once.ordered
|
137
|
+
|
138
|
+
bundle.generate_derived
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
describe 'generate_caches_from_memory' do
|
143
|
+
it 'should call two methods in order' do
|
144
|
+
bundle.should_receive(:cache_from_memory_generation_message).once.ordered
|
145
|
+
bundle.should_receive(:generate_derived).once.ordered
|
146
|
+
|
147
|
+
bundle.generate_caches_from_memory
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
describe 'generate_caches_from_source' do
|
152
|
+
it 'should call two methods in order' do
|
153
|
+
bundle.should_receive(:load_from_prepared_index_file).once.ordered
|
154
|
+
bundle.should_receive(:generate_caches_from_memory).once.ordered
|
155
|
+
|
156
|
+
bundle.generate_caches_from_source
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
describe 'dump' do
|
161
|
+
it 'should trigger dumps' do
|
162
|
+
bundle.stub! :timed_exclaim
|
163
|
+
|
164
|
+
bundle.should_receive(:dump_inverted).once.with
|
165
|
+
bundle.should_receive(:dump_weights).once.with
|
166
|
+
bundle.should_receive(:dump_similarity).once.with
|
167
|
+
bundle.should_receive(:dump_configuration).once.with
|
168
|
+
|
169
|
+
bundle.dump
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
describe 'raise_unless_cache_exists' do
|
174
|
+
it "calls methods in order" do
|
175
|
+
bundle.should_receive(:raise_unless_index_exists).once.ordered
|
176
|
+
bundle.should_receive(:raise_unless_similarity_exists).once.ordered
|
177
|
+
|
178
|
+
bundle.raise_unless_cache_exists
|
179
|
+
end
|
180
|
+
end
|
181
|
+
describe 'raise_unless_index_exists' do
|
182
|
+
context 'partial strategy saved' do
|
183
|
+
before(:each) do
|
184
|
+
strategy = stub :strategy, :saved? => true
|
185
|
+
bundle.stub! :partial_strategy => strategy
|
186
|
+
end
|
187
|
+
it "calls the methods in order" do
|
188
|
+
bundle.should_receive(:warn_if_index_small).once.ordered
|
189
|
+
bundle.should_receive(:raise_unless_index_ok).once.ordered
|
190
|
+
|
191
|
+
bundle.raise_unless_index_exists
|
192
|
+
end
|
193
|
+
end
|
194
|
+
context 'partial strategy not saved' do
|
195
|
+
before(:each) do
|
196
|
+
strategy = stub :strategy, :saved? => false
|
197
|
+
bundle.stub! :partial_strategy => strategy
|
198
|
+
end
|
199
|
+
it "calls nothing" do
|
200
|
+
bundle.should_receive(:warn_if_index_small).never
|
201
|
+
bundle.should_receive(:raise_unless_index_ok).never
|
202
|
+
|
203
|
+
bundle.raise_unless_index_exists
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
describe 'raise_unless_similarity_exists' do
|
208
|
+
context 'similarity strategy saved' do
|
209
|
+
before(:each) do
|
210
|
+
strategy = stub :strategy, :saved? => true
|
211
|
+
bundle.stub! :similarity_strategy => strategy
|
212
|
+
end
|
213
|
+
it "calls the methods in order" do
|
214
|
+
bundle.should_receive(:warn_if_similarity_small).once.ordered
|
215
|
+
bundle.should_receive(:raise_unless_similarity_ok).once.ordered
|
216
|
+
|
217
|
+
bundle.raise_unless_similarity_exists
|
218
|
+
end
|
219
|
+
end
|
220
|
+
context 'similarity strategy not saved' do
|
221
|
+
before(:each) do
|
222
|
+
strategy = stub :strategy, :saved? => false
|
223
|
+
bundle.stub! :similarity_strategy => strategy
|
224
|
+
end
|
225
|
+
it "calls nothing" do
|
226
|
+
bundle.should_receive(:warn_if_similarity_small).never
|
227
|
+
bundle.should_receive(:raise_unless_similarity_ok).never
|
228
|
+
|
229
|
+
bundle.raise_unless_similarity_exists
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
describe 'warn_if_similarity_small' do
|
234
|
+
context "files similarity cache small" do
|
235
|
+
before(:each) do
|
236
|
+
bundle.stub! :backend_similarity => stub(:backend_similarity, :cache_small? => true)
|
237
|
+
end
|
238
|
+
it "warns" do
|
239
|
+
bundle.should_receive(:warn_cache_small).once.with :similarity
|
240
|
+
|
241
|
+
bundle.warn_if_similarity_small
|
242
|
+
end
|
243
|
+
end
|
244
|
+
context "files similarity cache not small" do
|
245
|
+
before(:each) do
|
246
|
+
bundle.stub! :backend_similarity => stub(:backend_similarity, :cache_small? => false)
|
247
|
+
end
|
248
|
+
it "does not warn" do
|
249
|
+
bundle.should_receive(:warn_cache_small).never
|
250
|
+
|
251
|
+
bundle.warn_if_similarity_small
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|
255
|
+
describe 'raise_unless_similarity_ok' do
|
256
|
+
context "files similarity cache ok" do
|
257
|
+
before(:each) do
|
258
|
+
bundle.stub! :backend_similarity => stub(:backend_similarity, :cache_ok? => true)
|
259
|
+
end
|
260
|
+
it "warns" do
|
261
|
+
bundle.should_receive(:raise_cache_missing).never
|
262
|
+
|
263
|
+
bundle.raise_unless_similarity_ok
|
264
|
+
end
|
265
|
+
end
|
266
|
+
context "files similarity cache not ok" do
|
267
|
+
before(:each) do
|
268
|
+
bundle.stub! :backend_similarity => stub(:backend_similarity, :cache_ok? => false)
|
269
|
+
end
|
270
|
+
it "does not warn" do
|
271
|
+
bundle.should_receive(:raise_cache_missing).once.with :similarity
|
272
|
+
|
273
|
+
bundle.raise_unless_similarity_ok
|
274
|
+
end
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
describe 'initialization' do
|
279
|
+
it 'should initialize the index correctly' do
|
280
|
+
bundle.inverted.should == {}
|
281
|
+
end
|
282
|
+
it 'should initialize the weights index correctly' do
|
283
|
+
bundle.weights.should == {}
|
284
|
+
end
|
285
|
+
it 'should initialize the similarity index correctly' do
|
286
|
+
bundle.similarity.should == {}
|
287
|
+
end
|
288
|
+
it 'should initialize the configuration correctly' do
|
289
|
+
bundle.configuration.should == {}
|
290
|
+
end
|
291
|
+
# it 'should initialize the partial strategy correctly' do
|
292
|
+
# bundle.partial_strategy.should == @partial
|
293
|
+
# end
|
294
|
+
# it 'should initialize the weights strategy correctly' do
|
295
|
+
# bundle.weights_strategy.should == @weights
|
296
|
+
# end
|
297
|
+
it 'should initialize the similarity strategy correctly' do
|
298
|
+
bundle.similarity_strategy.should == @similarity
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
end
|
@@ -3,8 +3,10 @@ require 'spec_helper'
|
|
3
3
|
describe Picky::Query::Allocation do
|
4
4
|
|
5
5
|
before(:each) do
|
6
|
+
@backend = stub :backend
|
7
|
+
@index = stub :index, :result_identifier => :some_result_identifier, :backend => @backend
|
6
8
|
@combinations = stub :combinations
|
7
|
-
@allocation
|
9
|
+
@allocation = described_class.new @index, @combinations
|
8
10
|
end
|
9
11
|
|
10
12
|
describe "eql?" do
|
@@ -130,11 +132,13 @@ describe Picky::Query::Allocation do
|
|
130
132
|
describe 'to_result' do
|
131
133
|
context 'with few combinations' do
|
132
134
|
before(:each) do
|
133
|
-
@allocation = described_class.new stub(:combinations, :
|
135
|
+
@allocation = described_class.new @index, stub(:combinations, :to_result => [:some_result])
|
134
136
|
@allocation.instance_variable_set :@score, :some_score
|
135
137
|
end
|
136
138
|
context 'with ids' do
|
137
139
|
it 'should output an array of information' do
|
140
|
+
@backend.stub! :ids => [1,2,3]
|
141
|
+
|
138
142
|
@allocation.process! 20, 0
|
139
143
|
|
140
144
|
@allocation.to_result.should == [:some_result_identifier, :some_score, 3, [:some_result], [1, 2, 3]]
|
@@ -143,12 +147,14 @@ describe Picky::Query::Allocation do
|
|
143
147
|
end
|
144
148
|
context 'with results' do
|
145
149
|
before(:each) do
|
146
|
-
combinations = stub :combinations, :
|
147
|
-
@allocation = described_class.new
|
150
|
+
combinations = stub :combinations, :to_result => [:some_result1, :some_result2]
|
151
|
+
@allocation = described_class.new @index, combinations
|
148
152
|
@allocation.instance_variable_set :@score, :some_score
|
149
153
|
end
|
150
154
|
context 'with ids' do
|
151
155
|
it 'should output an array of information' do
|
156
|
+
@backend.stub! :ids => [1,2,3]
|
157
|
+
|
152
158
|
@allocation.process! 20, 0
|
153
159
|
|
154
160
|
@allocation.to_result.should == [:some_result_identifier, :some_score, 3, [:some_result1, :some_result2], [1, 2, 3]]
|
@@ -157,10 +163,12 @@ describe Picky::Query::Allocation do
|
|
157
163
|
end
|
158
164
|
context 'without results' do
|
159
165
|
before(:each) do
|
160
|
-
@allocation = described_class.new stub(:combinations, :
|
166
|
+
@allocation = described_class.new @index, stub(:combinations, :to_result => [])
|
161
167
|
@allocation.instance_variable_set :@score, :some_score
|
162
168
|
end
|
163
169
|
it 'should return nil' do
|
170
|
+
@backend.stub! :ids => []
|
171
|
+
|
164
172
|
@allocation.process! 20, 0
|
165
173
|
|
166
174
|
@allocation.to_result.should == nil
|
@@ -170,10 +178,12 @@ describe Picky::Query::Allocation do
|
|
170
178
|
|
171
179
|
describe 'to_json' do
|
172
180
|
before(:each) do
|
173
|
-
@allocation = described_class.new stub(:combination, :
|
181
|
+
@allocation = described_class.new @index, stub(:combination, :to_result => [:some_result1, :some_result2])
|
174
182
|
@allocation.instance_variable_set :@score, :some_score
|
175
183
|
end
|
176
184
|
it 'should output the correct json string' do
|
185
|
+
@backend.stub! :ids => [1,2,3,4,5,6,7]
|
186
|
+
|
177
187
|
@allocation.process! 20, 0
|
178
188
|
|
179
189
|
@allocation.to_json.should == '["some_result_identifier","some_score",7,["some_result1","some_result2"],[1,2,3,4,5,6,7]]'
|
@@ -190,9 +200,9 @@ describe Picky::Query::Allocation do
|
|
190
200
|
|
191
201
|
describe "<=>" do
|
192
202
|
it "should sort higher first" do
|
193
|
-
first = described_class.new []
|
203
|
+
first = described_class.new @index, []
|
194
204
|
first.instance_variable_set :@score, 20
|
195
|
-
second = described_class.new []
|
205
|
+
second = described_class.new @index, []
|
196
206
|
second.instance_variable_set :@score, 10
|
197
207
|
|
198
208
|
first.<=>(second).should == -1
|
@@ -201,11 +211,11 @@ describe Picky::Query::Allocation do
|
|
201
211
|
|
202
212
|
describe "sort!" do
|
203
213
|
it "should sort correctly" do
|
204
|
-
first = described_class.new
|
214
|
+
first = described_class.new @index, :whatever
|
205
215
|
first.instance_variable_set :@score, 20
|
206
|
-
second = described_class.new
|
216
|
+
second = described_class.new @index, :whatever
|
207
217
|
second.instance_variable_set :@score, 10
|
208
|
-
third = described_class.new
|
218
|
+
third = described_class.new @index, :whatever
|
209
219
|
third.instance_variable_set :@score, 5
|
210
220
|
|
211
221
|
allocations = [second, third, first]
|
@@ -6,7 +6,7 @@ describe Picky::Query::Combination do
|
|
6
6
|
|
7
7
|
before(:each) do
|
8
8
|
@bundle = stub :bundle, :identifier => :bundle_name
|
9
|
-
@token = Picky::Query::Token.processed('some_text~')
|
9
|
+
@token = Picky::Query::Token.processed('some_text~', 'Some Original~')
|
10
10
|
@category = stub :category, :bundle_for => @bundle, :name => :some_category_name
|
11
11
|
|
12
12
|
@combination = described_class.new @token, @category
|
@@ -41,7 +41,7 @@ describe Picky::Query::Combination do
|
|
41
41
|
describe 'to_result' do
|
42
42
|
context 'functional with qualifier' do
|
43
43
|
before(:each) do
|
44
|
-
token = Picky::
|
44
|
+
token = Picky::Query::Token.processed 'name:blä~', 'Blä~'
|
45
45
|
|
46
46
|
@combination = Picky::Query::Combination.new token, @category
|
47
47
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Picky::Query::IndexesCheck do
|
4
|
+
|
5
|
+
describe 'check_backend_types' do
|
6
|
+
before(:each) do
|
7
|
+
@redis = stub :redis, :backend => Picky::Backends::Redis.new
|
8
|
+
@memory = stub :memory, :backend => Picky::Backends::Memory.new
|
9
|
+
end
|
10
|
+
it 'does not raise on the same type' do
|
11
|
+
described_class.check_backend_types [@redis, @redis]
|
12
|
+
end
|
13
|
+
it 'raises on multiple types' do
|
14
|
+
expect do
|
15
|
+
described_class.check_backend_types [@redis, @memory]
|
16
|
+
end.to raise_error(Picky::Query::DifferentTypesError)
|
17
|
+
end
|
18
|
+
it 'raises with the right message on multiple types' do
|
19
|
+
expect do
|
20
|
+
described_class.check_backend_types [@redis, @memory]
|
21
|
+
end.to raise_error("Currently it isn't possible to mix Indexes with backends Picky::Backends::Redis and Picky::Backends::Memory in the same Search instance.")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -5,10 +5,10 @@ describe Picky::Query::Token do
|
|
5
5
|
|
6
6
|
describe '==' do
|
7
7
|
it 'is equal if the originals are equal' do
|
8
|
-
described_class.processed('similar~').should == described_class.processed('similar~')
|
8
|
+
described_class.processed('similar~', 'Similar~').should == described_class.processed('similar~', 'Similar~')
|
9
9
|
end
|
10
10
|
it 'is not equal if the originals are not equal' do
|
11
|
-
described_class.processed('similar~').should_not == described_class.processed('similar')
|
11
|
+
described_class.processed('similar~', 'Similar~').should_not == described_class.processed('similar', 'Similar')
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -17,7 +17,7 @@ describe Picky::Query::Token do
|
|
17
17
|
@bundle = stub :bundle, :similar => [:array, :of, :similar]
|
18
18
|
@category = stub :category, :bundle_for => @bundle
|
19
19
|
|
20
|
-
@token = described_class.processed 'similar~'
|
20
|
+
@token = described_class.processed 'similar~', 'Similar~'
|
21
21
|
end
|
22
22
|
it 'returns the right next tokens' do
|
23
23
|
next_token = @token.next_similar_token @category
|
@@ -40,7 +40,7 @@ describe Picky::Query::Token do
|
|
40
40
|
before(:each) do
|
41
41
|
@bundle.stub! :similar => [:array, :of, :similar]
|
42
42
|
|
43
|
-
@token = described_class.processed 'similar~'
|
43
|
+
@token = described_class.processed 'similar~', 'Similar'
|
44
44
|
end
|
45
45
|
it 'should have a certain original text' do
|
46
46
|
@token.next_similar @bundle
|
@@ -54,7 +54,7 @@ describe Picky::Query::Token do
|
|
54
54
|
before(:each) do
|
55
55
|
@bundle.stub! :similar => [:array, :of, :similar]
|
56
56
|
|
57
|
-
@token = described_class.processed 'similar~'
|
57
|
+
@token = described_class.processed 'similar~', 'Similar'
|
58
58
|
end
|
59
59
|
it 'generates all similar' do
|
60
60
|
@token.next_similar(@bundle).should == :array
|
@@ -77,7 +77,7 @@ describe Picky::Query::Token do
|
|
77
77
|
before(:each) do
|
78
78
|
@bundle.stub! :similar => [:array, :of, :similar]
|
79
79
|
|
80
|
-
@token = described_class.processed 'nonsimilar'
|
80
|
+
@token = described_class.processed 'nonsimilar', 'Nonsimilar'
|
81
81
|
end
|
82
82
|
it 'generates all similar' do
|
83
83
|
@token.next_similar(@bundle).should == nil
|
@@ -95,7 +95,7 @@ describe Picky::Query::Token do
|
|
95
95
|
before(:each) do
|
96
96
|
@bundle = stub :bundle
|
97
97
|
|
98
|
-
@token = described_class.processed 'flarb~'
|
98
|
+
@token = described_class.processed 'flarb~', 'FLARB~'
|
99
99
|
end
|
100
100
|
context "with similar" do
|
101
101
|
before(:each) do
|
@@ -177,10 +177,10 @@ describe Picky::Query::Token do
|
|
177
177
|
|
178
178
|
describe 'processed' do
|
179
179
|
it 'should return a new token' do
|
180
|
-
described_class.processed('some text').should be_kind_of(described_class)
|
180
|
+
described_class.processed('some text', 'SOME TEXT').should be_kind_of(described_class)
|
181
181
|
end
|
182
182
|
it 'generates a token' do
|
183
|
-
described_class.processed('some text').class.should == described_class
|
183
|
+
described_class.processed('some text', 'SOME TEXT').class.should == described_class
|
184
184
|
end
|
185
185
|
end
|
186
186
|
|
@@ -191,8 +191,6 @@ describe Picky::Query::Token do
|
|
191
191
|
end
|
192
192
|
it 'should have an order' do
|
193
193
|
token.should_receive(:qualify).once.ordered
|
194
|
-
token.should_receive(:extract_original).once.ordered
|
195
|
-
token.should_receive(:downcase).once.ordered
|
196
194
|
token.should_receive(:partialize).once.ordered
|
197
195
|
token.should_receive(:similarize).once.ordered
|
198
196
|
token.should_receive(:remove_illegals).once.ordered
|
@@ -205,7 +203,7 @@ describe Picky::Query::Token do
|
|
205
203
|
describe 'partial?' do
|
206
204
|
context 'similar, partial' do
|
207
205
|
before(:each) do
|
208
|
-
@token = described_class.processed 'similar~'
|
206
|
+
@token = described_class.processed 'similar~', 'Similar~'
|
209
207
|
@token.partial = true
|
210
208
|
end
|
211
209
|
it 'should be false' do
|
@@ -214,7 +212,7 @@ describe Picky::Query::Token do
|
|
214
212
|
end
|
215
213
|
context 'similar, not partial' do
|
216
214
|
before(:each) do
|
217
|
-
@token = described_class.processed 'similar~'
|
215
|
+
@token = described_class.processed 'similar~', 'Similar~'
|
218
216
|
end
|
219
217
|
it 'should be false' do
|
220
218
|
@token.partial?.should == false
|
@@ -222,7 +220,7 @@ describe Picky::Query::Token do
|
|
222
220
|
end
|
223
221
|
context 'not similar, partial' do
|
224
222
|
before(:each) do
|
225
|
-
@token = described_class.processed 'not similar'
|
223
|
+
@token = described_class.processed 'not similar', 'NOT SIMILAR'
|
226
224
|
@token.partial = true
|
227
225
|
end
|
228
226
|
it 'should be true' do
|
@@ -231,7 +229,7 @@ describe Picky::Query::Token do
|
|
231
229
|
end
|
232
230
|
context 'not similar, not partial' do
|
233
231
|
before(:each) do
|
234
|
-
@token = described_class.processed 'not similar'
|
232
|
+
@token = described_class.processed 'not similar', 'NOT SIMILAR'
|
235
233
|
end
|
236
234
|
it 'should be nil' do
|
237
235
|
@token.partial?.should == nil
|
@@ -241,12 +239,12 @@ describe Picky::Query::Token do
|
|
241
239
|
|
242
240
|
describe 'similar' do
|
243
241
|
it 'should not change the original with the text' do
|
244
|
-
token = described_class.processed "bla~"
|
242
|
+
token = described_class.processed "bla~", 'BLA~'
|
245
243
|
token.text.should_not == token.original
|
246
244
|
end
|
247
245
|
def self.it_should_have_similarity text, expected_similarity_value
|
248
246
|
it "should have #{ "no" unless expected_similarity_value } similarity for '#{text}'" do
|
249
|
-
described_class.processed(text).similar?.should == expected_similarity_value
|
247
|
+
described_class.processed(text, text.upcase).similar?.should == expected_similarity_value
|
250
248
|
end
|
251
249
|
end
|
252
250
|
it_should_have_similarity 'name:', nil
|
@@ -266,7 +264,7 @@ describe Picky::Query::Token do
|
|
266
264
|
|
267
265
|
describe 'special cases' do
|
268
266
|
it 'should be blank on ""' do
|
269
|
-
token = described_class.processed '""'
|
267
|
+
token = described_class.processed '""', '""'
|
270
268
|
|
271
269
|
token.should be_blank
|
272
270
|
end
|
@@ -274,9 +272,9 @@ describe Picky::Query::Token do
|
|
274
272
|
|
275
273
|
describe "original" do
|
276
274
|
it "should keep the original text even when processed" do
|
277
|
-
token = described_class.processed "I'm the original
|
275
|
+
token = described_class.processed "I'm the processed text.", "I'm the original text."
|
278
276
|
|
279
|
-
token.original.should == "I'm the original
|
277
|
+
token.original.should == "I'm the original text."
|
280
278
|
end
|
281
279
|
end
|
282
280
|
|