picky 3.0.1 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|