redcar 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/CHANGES +5 -0
  2. data/Rakefile +1 -2
  3. data/lib/redcar/installer.rb +2 -1
  4. data/lib/redcar.rb +2 -2
  5. data/plugins/project_search/vendor/lucene/CHANGELOG +147 -0
  6. data/plugins/project_search/vendor/lucene/CONTRIBUTORS +17 -0
  7. data/plugins/project_search/vendor/lucene/Gemfile +9 -0
  8. data/plugins/project_search/vendor/lucene/Gemfile.lock +33 -0
  9. data/plugins/project_search/vendor/lucene/LICENSE +19 -0
  10. data/plugins/project_search/vendor/lucene/README.rdoc +283 -0
  11. data/plugins/project_search/vendor/lucene/Rakefile +35 -0
  12. data/plugins/project_search/vendor/lucene/examples/active_model/serializers.rb +25 -0
  13. data/plugins/project_search/vendor/lucene/examples/active_model/validation.rb +26 -0
  14. data/plugins/project_search/vendor/lucene/examples/admin/Rakefile +4 -0
  15. data/plugins/project_search/vendor/lucene/examples/admin/admin.rb +29 -0
  16. data/plugins/project_search/vendor/lucene/examples/admin/public/jquery.js +4376 -0
  17. data/plugins/project_search/vendor/lucene/examples/admin/public/neo4j.css +153 -0
  18. data/plugins/project_search/vendor/lucene/examples/admin/public/neo_admin.js +18 -0
  19. data/plugins/project_search/vendor/lucene/examples/admin/spec/admin_spec.rb +26 -0
  20. data/plugins/project_search/vendor/lucene/examples/admin/views/index.erb +21 -0
  21. data/plugins/project_search/vendor/lucene/examples/filetree/README.rdoc +9 -0
  22. data/plugins/project_search/vendor/lucene/examples/filetree/app.rb +7 -0
  23. data/plugins/project_search/vendor/lucene/examples/filetree/batch.props +5 -0
  24. data/plugins/project_search/vendor/lucene/examples/filetree/features/step_definitions/add_steps.rb +121 -0
  25. data/plugins/project_search/vendor/lucene/examples/filetree/features/support/env.rb +30 -0
  26. data/plugins/project_search/vendor/lucene/examples/filetree/features/support/rspec_helper.rb +50 -0
  27. data/plugins/project_search/vendor/lucene/examples/filetree/features/treesizes.feature +19 -0
  28. data/plugins/project_search/vendor/lucene/examples/imdb/1_create_neo_db.rb +66 -0
  29. data/plugins/project_search/vendor/lucene/examples/imdb/2_index_db.rb +23 -0
  30. data/plugins/project_search/vendor/lucene/examples/imdb/README +12 -0
  31. data/plugins/project_search/vendor/lucene/examples/imdb/find_actors.rb +56 -0
  32. data/plugins/project_search/vendor/lucene/examples/imdb/install.sh +12 -0
  33. data/plugins/project_search/vendor/lucene/examples/imdb/model.rb +37 -0
  34. data/plugins/project_search/vendor/lucene/examples/railway/README +111 -0
  35. data/plugins/project_search/vendor/lucene/examples/railway/railnet-app.rb +31 -0
  36. data/plugins/project_search/vendor/lucene/examples/railway/railnet-data.rb +42 -0
  37. data/plugins/project_search/vendor/lucene/examples/rest/example.rb +41 -0
  38. data/plugins/project_search/vendor/lucene/examples/you_might_know/YouMightKnow.java +60 -0
  39. data/plugins/project_search/vendor/lucene/examples/you_might_know/all_simple_paths.rb +34 -0
  40. data/plugins/project_search/vendor/lucene/examples/you_might_know/nodes.rb +34 -0
  41. data/plugins/project_search/vendor/lucene/examples/you_might_know/you_might_know.rb +50 -0
  42. data/plugins/project_search/vendor/lucene/lib/lucene/config.rb +145 -0
  43. data/plugins/project_search/vendor/lucene/lib/lucene/document.rb +96 -0
  44. data/plugins/project_search/vendor/lucene/lib/lucene/field_info.rb +144 -0
  45. data/plugins/project_search/vendor/lucene/lib/lucene/hits.rb +54 -0
  46. data/plugins/project_search/vendor/lucene/lib/lucene/index.rb +267 -0
  47. data/plugins/project_search/vendor/lucene/lib/lucene/index_info.rb +146 -0
  48. data/plugins/project_search/vendor/lucene/lib/lucene/index_searcher.rb +157 -0
  49. data/plugins/project_search/vendor/lucene/lib/lucene/jars.rb +5 -0
  50. data/plugins/project_search/vendor/lucene/lib/lucene/query_dsl.rb +135 -0
  51. data/plugins/project_search/vendor/lucene/lib/lucene/transaction.rb +117 -0
  52. data/plugins/project_search/vendor/lucene/lib/lucene/version.rb +3 -0
  53. data/plugins/project_search/vendor/lucene/lib/lucene.rb +15 -0
  54. data/plugins/project_search/vendor/lucene/lucene.gemspec +23 -0
  55. data/plugins/project_search/vendor/lucene/spec/lucene/document_spec.rb +32 -0
  56. data/plugins/project_search/vendor/lucene/spec/lucene/field_info_spec.rb +70 -0
  57. data/plugins/project_search/vendor/lucene/spec/lucene/index_info_spec.rb +76 -0
  58. data/plugins/project_search/vendor/lucene/spec/lucene/index_spec.rb +643 -0
  59. data/plugins/project_search/vendor/lucene/spec/lucene/query_dsl_spec.rb +142 -0
  60. data/plugins/project_search/vendor/lucene/spec/lucene/sort_spec.rb +101 -0
  61. data/plugins/project_search/vendor/lucene/spec/lucene/spec_helper.rb +10 -0
  62. data/plugins/project_search/vendor/lucene/spec/lucene/transaction_spec.rb +118 -0
  63. metadata +62 -4
@@ -0,0 +1,643 @@
1
+ $LOAD_PATH << File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
+ $LOAD_PATH << File.expand_path(File.dirname(__FILE__) + "/..")
3
+ require 'lucene'
4
+ require 'lucene/spec_helper'
5
+
6
+
7
+
8
+ describe Index, '(one uncommited document)' do
9
+ before(:each) do
10
+ setup_lucene
11
+ @index = Index.new('my_index')
12
+ @index.clear
13
+ @index << {:id => '42', :name => 'andreas'}
14
+ end
15
+
16
+ it "has a to_s method with which says: index path and number of not commited documents" do
17
+ @index.to_s.should == "Index [path: 'my_index', 1 documents]"
18
+ end
19
+
20
+ it "should be empty after clear" do
21
+ # when
22
+ @index.clear
23
+
24
+ # then
25
+ @index.uncommited.size.should == 0
26
+ end
27
+
28
+ it "should be empty after commit" do
29
+ # when
30
+ @index.commit
31
+
32
+ # then
33
+ @index.uncommited.size.should == 0
34
+ end
35
+
36
+ it "contains one uncommited document" do
37
+ # then
38
+ @index.uncommited.size.should == 1
39
+ @index.uncommited['42'][:id].should == '42'
40
+ @index.uncommited['42'][:name].should == 'andreas'
41
+ end
42
+ end
43
+
44
+
45
+ describe Index, '(no uncommited documents)' do
46
+ before(:each) do
47
+ setup_lucene
48
+ @index = Index.new 'myindex'
49
+ @index.clear
50
+ end
51
+
52
+ it "has a to_s method with which says: index path and no uncommited documents" do
53
+ @index.to_s.should == "Index [path: 'myindex', 0 documents]"
54
+ end
55
+
56
+ it "has no uncommited documents" do
57
+ @index.uncommited.size.should == 0
58
+ end
59
+ end
60
+
61
+
62
+ describe Index, ".find (range)" do
63
+ before(:each) do
64
+ setup_lucene
65
+ @index = Index.new('some_index')
66
+ @index.field_infos[:id][:type] = Fixnum
67
+ @index.field_infos[:value][:type] = Fixnum
68
+ end
69
+
70
+ it "should find docs using an inclusive range query" do
71
+ # given
72
+ @docs = {}
73
+ for i in 1..5 do
74
+ @index << {:id => i, :value=>i}
75
+ @docs[i] = @index.uncommited[i]
76
+ end
77
+ @index.commit
78
+
79
+ # when
80
+ result = @index.find(:value => 2..4)
81
+
82
+ # then
83
+ result.size.should == 3
84
+ result.should include(@docs[2], @docs[3], @docs[4])
85
+ end
86
+
87
+ it "should find docs using an inclusive range query with padding 0's" do
88
+ # given
89
+ @index << {:id => 3, :value=>3}
90
+ @index << {:id => 30, :value=>30}
91
+ @index << {:id => 32, :value=>32}
92
+ @index << {:id => 100, :value=>100}
93
+ doc30 = @index.uncommited[30]
94
+ doc32 = @index.uncommited[32]
95
+ @index.commit
96
+
97
+ # when
98
+ result = @index.find(:value => 30..35)
99
+
100
+ # then
101
+ result.size.should == 2
102
+ result.should include(doc30, doc32)
103
+ end
104
+
105
+ end
106
+
107
+
108
+ describe Index, ".find (with TOKENIZED index)" do
109
+ before(:each) do
110
+ setup_lucene
111
+ @index = Index.new('my index')
112
+ @index.field_infos[:name][:tokenized] = true
113
+
114
+ @index << {:id => "1", :name => 'hej hopp', :name2=>'hej hopp'}
115
+ @index << {:id => "2", :name => 'hello world', :name2=>'hej hopp'}
116
+ @index << {:id => "3", :name => 'hello there', :name2=>'hej hopp'}
117
+ @index << {:id => "4", :name => ['hello', 'hej', '123']}
118
+ @doc1 = @index.uncommited["1"]
119
+ @doc2 = @index.uncommited["2"]
120
+ @doc3 = @index.uncommited["3"]
121
+ @doc4 = @index.uncommited["4"]
122
+ @index.commit
123
+ end
124
+
125
+ it "should find indexed documents using the tokenized field" do
126
+ result = @index.find(:name=>"hello")
127
+ result.size.should == 3
128
+ result.should include(@doc2, @doc3, @doc4)
129
+
130
+ result = @index.find(:name=>"world")
131
+ result.size.should == 1
132
+ result.should include(@doc2)
133
+ end
134
+
135
+ it "should find indexed documents using the tokenized field" do
136
+ result = @index.find("name:he*")
137
+ result.size.should == 4
138
+ result.should include(@doc1, @doc2, @doc3)
139
+ end
140
+
141
+ it "should not find stopwords like 'there'" do
142
+ result = @index.find(:name=>"there")
143
+ result.size.should == 0
144
+ end
145
+
146
+ it "should not find indexed documents using the untokenized field" do
147
+ result = @index.find(:name2=>"hello")
148
+ result.size.should == 0
149
+ end
150
+ end
151
+
152
+ describe Index, "#find (with string queries)" do
153
+ before(:each) do
154
+ setup_lucene
155
+ @index = Index.new('myindex')
156
+ @index.field_infos[:name] = FieldInfo.new(:store => true)
157
+ @index << {:id => "1", :name => 'name1', :value=>1, :group=>'a'}
158
+ @index << {:id => "2", :name => 'name2', :value=>2, :group=>'a'}
159
+ @index << {:id => "3", :name => 'name3', :value=>2, :group=>'b'}
160
+ @index << {:id => "4", :name => ['abc', 'def', '123']}
161
+ @doc1 = @index.uncommited["1"]
162
+ @doc2 = @index.uncommited["2"]
163
+ @doc3 = @index.uncommited["3"]
164
+ @doc4 = @index.uncommited["4"]
165
+ @index.commit
166
+ end
167
+
168
+
169
+ it "should find a doc by only using its id, index.find('1')" do
170
+ r = @index.find("1")
171
+ r.size.should == 1
172
+ r.should include(@doc1)
173
+ end
174
+
175
+ it "should find a doc with a specified field, index.find('name:\"name1\"')" do
176
+ r = @index.find("name:'name2'")
177
+ r.size.should == 1
178
+ r.should include(@doc2)
179
+ end
180
+
181
+ it "should find a doc with wildcard queries" do
182
+ r = @index.find("name:name*")
183
+ r.size.should == 3
184
+ r.should include(@doc2)
185
+ end
186
+
187
+ it "should find handle OR queries" do
188
+ r = @index.find('group:\"b\" OR name:\"name1\"')
189
+ r.size.should == 2
190
+ r.should include(@doc3, @doc1)
191
+ end
192
+
193
+ end
194
+
195
+
196
+ describe Index, ".find (exact match)" do
197
+ before(:each) do
198
+ setup_lucene
199
+ @index = Index.new('myindex')
200
+ @index.field_infos[:name] = FieldInfo.new(:store => true)
201
+ @index << {:id => "1", :name => 'name1', :value=>1, :group=>'a'}
202
+ @index << {:id => "2", :name => 'name2', :value=>2, :group=>'a'}
203
+ @index << {:id => "3", :name => 'name3', :value=>2, :group=>'b'}
204
+ @index << {:id => "4", :name => ['abc', 'def', '123']}
205
+ @doc1 = @index.uncommited["1"]
206
+ @doc2 = @index.uncommited["2"]
207
+ @doc3 = @index.uncommited["3"]
208
+ @doc4 = @index.uncommited["4"]
209
+ @index.commit
210
+ end
211
+
212
+ it "should find indexed documents using the id field" do
213
+ result = @index.find(:id=>"1")
214
+ result.size.should == 1
215
+ result.should include(@doc1)
216
+ end
217
+
218
+ it "should find indexed documents using any field" do
219
+ result = @index.find(:name=>"name1")
220
+ result.size.should == 1
221
+ result.should include(@doc1)
222
+
223
+ result = @index.find(:value=>1)
224
+ result.size.should == 1
225
+ result.should include(@doc1)
226
+ end
227
+
228
+ it "should find nothing if it does not exist" do
229
+ result = @index.find(:name=>"name")
230
+ result.should be_empty
231
+ end
232
+
233
+
234
+ it "should find several documents having the same property" do
235
+ result = @index.find(:value => 2)
236
+ result.size.should == 2
237
+ result.should include(@doc2, @doc3)
238
+ end
239
+
240
+ it "should find using several fields" do
241
+ result = @index.find(:value => 2, :group => 'a')
242
+ result.size.should == 1
243
+ result.should include(@doc2)
244
+ end
245
+
246
+ it "should find a document that has several values for the same key" do
247
+ result = @index.find(:name => 'def')
248
+ result.size.should == 1
249
+ result.should include(@doc4)
250
+
251
+ result = @index.find(:name => '123')
252
+ result.size.should == 1
253
+ result.should include(@doc4)
254
+
255
+ result = @index.find(:name => 'ojo')
256
+ result.size.should == 0
257
+ end
258
+
259
+ it "should return document containing the stored fields for that index" do
260
+ # when
261
+ result = @index.find(:id=>"1")
262
+
263
+ # then
264
+ doc = result[0]
265
+ doc.id.should == '1'
266
+ doc[:name].should == 'name1'
267
+ doc[:value].should be_nil # since its default FieldInfo has :store=>false
268
+ end
269
+
270
+ end
271
+
272
+ describe Index, "<< (add documents to be commited)" do
273
+ before(:each) do
274
+ setup_lucene
275
+ @index = Index.new('myindex')
276
+ @index.field_infos[:foo] = FieldInfo.new(:store => true)
277
+ end
278
+
279
+ it "converts all fields into strings" do
280
+ @index << {:id => 42, :foo => 1}
281
+ @index.uncommited['42'][:foo].should == '1'
282
+ end
283
+
284
+ it "can add several documents" do
285
+ @index << {:id => "1", :foo => 'a'} << {:id => "2", :foo => 'b'}
286
+
287
+ # then
288
+ @index.uncommited.size.should == 2
289
+ @index.uncommited['1'][:foo].should == 'a'
290
+ @index.uncommited['2'][:foo].should == 'b'
291
+ end
292
+
293
+ it "can have several values for the same key" do
294
+ @index << {:id => 42, :name => ['foo', 'bar', 'baaz']}
295
+ @index.uncommited['42'][:name].should == ['foo', 'bar', 'baaz']
296
+ end
297
+ end
298
+
299
+ describe Index, ".id_field" do
300
+ before(:each) do
301
+ setup_lucene
302
+ end
303
+
304
+ it "has a default" do
305
+ index = Index.new 'myindex'
306
+ index.id_field.should == :id
307
+ end
308
+
309
+ it "can have a specified one" do
310
+ index = Index.new('myindex')
311
+ index.field_infos.id_field = :my_id
312
+ index.id_field.should == :my_id
313
+ end
314
+
315
+ it "is used to find uncommited documents" do
316
+ # given
317
+ index = Index.new('myindex')
318
+ index.field_infos.id_field = :my_id
319
+ index << {:my_id => '123', :name=>"foo"}
320
+
321
+ # when then
322
+ index.uncommited['123'][:name].should == 'foo'
323
+ end
324
+
325
+ it "can be used to delete documents" do
326
+ # given
327
+ index = Index.new('myindex')
328
+ index.field_infos.id_field = :my_id
329
+ index.field_infos[:my_id][:type] = Fixnum
330
+ index << {:my_id => 123, :name=>"foo"}
331
+ index.commit
332
+ index.find(:name=>'foo').should_not be_empty
333
+
334
+ # when delete it
335
+ index.delete(123)
336
+ index.commit
337
+
338
+ # then
339
+ index.find(:name=>'foo').should be_empty
340
+ end
341
+
342
+ it "must be included in all documents" do
343
+ # given
344
+ index = Index.new('myindex')
345
+ index.field_infos.id_field = :my_id
346
+ # when not included
347
+ lambda {
348
+ index << {:id=>2, :name=>"foo"} # my_id missing
349
+ }.should raise_error # then it should raise an exception
350
+ end
351
+ end
352
+
353
+ describe Index, ".new" do
354
+ it "should not create a new instance if one already exists (singelton)" do
355
+ index1 = Index.new($INDEX_DIR)
356
+ index2 = Index.new($INDEX_DIR)
357
+ index1.object_id.should == index2.object_id
358
+ end
359
+
360
+ it "should be possible to create a new instance even if one already exists" do
361
+ index1 = Index.new($INDEX_DIR)
362
+ index1.clear
363
+ index2 = Index.new($INDEX_DIR)
364
+ index1.object_id.should_not == index2.object_id
365
+ end
366
+ end
367
+
368
+ describe Index, ".field_infos" do
369
+ before(:each) do
370
+ setup_lucene
371
+ @index = Index.new('myindex')
372
+ @index.clear
373
+ end
374
+
375
+ it "has a default value for the id_field - store => true" do
376
+ @index.field_infos[:id][:store].should == true
377
+ $LUCENE_LOGGER.level = Logger::INFO
378
+ end
379
+
380
+ it "has a default for unspecified fields" do
381
+ @index.field_infos[:foo].should == IndexInfo::DEFAULTS
382
+ end
383
+
384
+ it "should use a default for unspecified type, for example all fields has default :type => String" do
385
+ @index.field_infos[:value] = FieldInfo.new(:store => true, :foo => 1)
386
+
387
+ # should use default field info for unspecified
388
+ @index.field_infos[:value][:type].should == String
389
+ end
390
+
391
+ it "has a default that can be overridden" do
392
+ # given
393
+ @index.field_infos[:bar][:type] = Float
394
+ # then
395
+ @index.field_infos[:bar][:type].should == Float
396
+ @index.field_infos[:id][:type].should == String
397
+ @index.field_infos[:name][:type].should == String
398
+ end
399
+
400
+ it "can be used to convert properties" do
401
+ #given
402
+ @index.field_infos[:bar][:store] = true
403
+ @index.field_infos[:bar][:type] = Float
404
+ @index.field_infos[:id][:type] = Fixnum
405
+ @index.field_infos[:name][:store] = true
406
+
407
+ @index << {:id => 1, :bar => 3.14, :name => "andreas"}
408
+ @index.commit
409
+
410
+ # when
411
+ hits = @index.find(:name => 'andreas')
412
+
413
+ @index.field_infos[:id][:type].should == Fixnum
414
+ # then
415
+ hits.size.should == 1
416
+ hits[0][:id].should == 1
417
+ hits[0][:bar].should == 3.14
418
+ hits[0][:name].should == 'andreas'
419
+ end
420
+
421
+
422
+ it "can be used to convert and store Date field" do
423
+ #given
424
+ @index.field_infos[:since][:store] = true
425
+ @index.field_infos[:since][:type] = Date
426
+
427
+ @index << {:id => 1, :since => Date.new(2008, 3, 26)}
428
+ @index.commit
429
+
430
+ # when
431
+ hits = @index.find(:id => "1")
432
+
433
+ # then
434
+ hits.size.should == 1
435
+ hits[0][:since].should be_instance_of(Date)
436
+ hits[0][:since].year.should == 2008
437
+ hits[0][:since].month.should == 3
438
+ hits[0][:since].day.should == 26
439
+ end
440
+
441
+
442
+ it "can be used to convert and store DateTime field" do
443
+ #given
444
+ @index.field_infos[:since][:store] = true
445
+ @index.field_infos[:since][:type] = DateTime
446
+ date = DateTime.new(2008, 12, 18, 11, 4, 59)
447
+ @index << {:id => 1, :since => date}
448
+ @index.commit
449
+
450
+ # when
451
+ hits = @index.find(:id => "1")
452
+
453
+ # then
454
+ hits.size.should == 1
455
+ hits[0][:since].should be_instance_of(DateTime)
456
+ hits[0][:since].year.should == 2008
457
+ hits[0][:since].month.should == 12
458
+ hits[0][:since].day.should == 18
459
+ hits[0][:since].hour.should == 11
460
+ hits[0][:since].min.should == 4
461
+ hits[0][:since].sec.should == 59
462
+ end
463
+
464
+ end
465
+
466
+ describe Index, " when updating a document" do
467
+ before(:each) do
468
+ setup_lucene
469
+ @index = Index.new('myindex')
470
+ end
471
+
472
+ it "should remove the field if set to nil" do
473
+ # given
474
+ @index << {:id => 'a', :name=>'andreas'}
475
+ @index.commit
476
+ @index.find(:name => 'andreas').size.should == 1
477
+
478
+ # when
479
+ @index << {:id => 'a', :name=>nil}
480
+ @index.commit
481
+
482
+ # then
483
+ @index.find(:name => 'andreas').size.should == 0
484
+ end
485
+
486
+
487
+ it "should not find the old field if the field has been changed" do
488
+ # given
489
+ @index << {:id => 'a', :name=>'andreas'}
490
+ @index.commit
491
+ @index.find(:name => 'andreas').should_not be_empty
492
+
493
+ # when it change
494
+ @index << {:id => 'a', :name=>'foo'}
495
+ @index.commit
496
+
497
+ # then it can not be found
498
+ @index.find(:name => 'andreas').should be_empty
499
+ end
500
+
501
+ it "should not find a deleted document" do
502
+ # given
503
+ @index << {:id => 'a', :name=>'andreas'}
504
+ @index.commit
505
+ @index.find(:name => 'andreas').should_not be_empty
506
+
507
+ # when it is deleted
508
+ @index.delete('a')
509
+ @index.commit
510
+
511
+ # then it can not be found
512
+ @index.find(:name => 'andreas').should be_empty
513
+ end
514
+
515
+ it "should find documents that have the same properties" do
516
+ # given
517
+ @index << {:id => 'a', :name=>'bar'}
518
+ @index << {:id => 'a.1', :name=>'bar'}
519
+
520
+ @index.commit
521
+ res = @index.find(:name => 'bar')
522
+ res.size.should == 2
523
+ end
524
+
525
+
526
+ describe "Indexing with Dates" do
527
+ before(:each) do
528
+ setup_lucene
529
+ @index = Index.new('myindex')
530
+ @index.field_infos[:since][:store] = false
531
+ @index.field_infos[:since][:type] = Date
532
+
533
+ @index.field_infos[:born][:store] = false
534
+ @index.field_infos[:born][:type] = DateTime
535
+ end
536
+
537
+
538
+ it "can find an index using a date" do
539
+ #given
540
+ @index << {:id => 1, :since => Date.new(2008, 4, 26)}
541
+ @index.commit
542
+
543
+ # when
544
+ hits = @index.find(:since => Date.new(2008, 4, 26))
545
+
546
+ # then
547
+ hits.size.should == 1
548
+ hits[0][:id].should == '1'
549
+ end
550
+
551
+ it "can find an index using a Date range" do
552
+ #given
553
+ @index << {:id => 1, :since => Date.new(2008, 4, 26)}
554
+ @index.commit
555
+
556
+ # then
557
+ @index.find("since:[20080427 TO 20100203]").size.should == 0
558
+ @index.find("since:[20080422 TO 20080425]").size.should == 0
559
+ @index.find("since:{20080426 TO 20090425}").size.should == 0
560
+ @index.find("since:[20080426 TO 20090203]")[0][:id].should == '1'
561
+ @index.find("since:[20080425 TO 20080426]")[0][:id].should == '1'
562
+ @index.find("since:[20000425 TO 20200426]")[0][:id].should == '1'
563
+ end
564
+
565
+ it "can find an index using a DateTime range" do
566
+ #given
567
+ # only UTC times are supported
568
+ @index << {:id => 1, :born => DateTime.civil(2008, 4, 26, 15, 58, 02)}
569
+ @index.commit
570
+
571
+ # then
572
+ @index.find("born:[20080427 TO 20100203]").size.should == 0
573
+ @index.find("born:[20080422 TO 20080425]").size.should == 0
574
+ @index.find("born:[20080426 TO 20090203]")[0][:id].should == '1'
575
+ @index.find("born:[20080425 TO 20080427]")[0][:id].should == '1'
576
+ @index.find("born:[20000425 TO 20200426]")[0][:id].should == '1'
577
+
578
+ @index.find("born:[200804260000 TO 200804262359]")[0][:id].should == '1'
579
+ @index.find("born:[200804261500 TO 200804261600]")[0][:id].should == '1'
580
+ @index.find("born:[200804261557 TO 200804261559]")[0][:id].should == '1'
581
+ @index.find("born:[20080426155759 TO 20080426155804]")[0][:id].should == '1'
582
+ @index.find("born:[200804261559 TO 200804261601]").size.should == 0
583
+ @index.find("born:[200804261557 TO 200804261500]").size.should == 0
584
+ end
585
+
586
+ end
587
+ end
588
+
589
+
590
+ describe Index, " #analyzer" do
591
+ before(:each) do
592
+ setup_lucene
593
+ @index = Index.new('myindex')
594
+ end
595
+
596
+ it "should default to StandardAnalyzer" do
597
+ # @index.analyzer = :keyword
598
+
599
+ # given some a stop word
600
+ @index << {:id => 'a', :name=>'it'}
601
+ @index.commit
602
+
603
+ # then it should not found it with the standard default analyzer
604
+ @index.find("name:it").should be_empty
605
+ end
606
+
607
+ it "can be set to keyword analyzer for one field" do
608
+ @index.field_infos[:code][:analyzer] = :keyword
609
+
610
+ # given some a stop word
611
+ @index << {:id => 'a', :code=>'it'}
612
+ @index.commit
613
+
614
+ # then it should not found it with the standard default analyzer
615
+ @index.find("code:it").should_not be_empty
616
+ end
617
+
618
+
619
+ it "can be set to keyword analyzer for one field and simple analyzer for another field" do
620
+ @index.field_infos[:code][:analyzer] = :keyword
621
+ @index.field_infos[:w][:analyzer] = :whitespace
622
+ @index.field_infos[:w][:tokenized] = true
623
+
624
+ @index.field_infos[:s][:analyzer] = :simple
625
+ @index.field_infos[:s][:tokenized] = true
626
+
627
+ # given some a stop word
628
+ @index << {:id => 'a', :code=>'it', :w => "XY&Z Corporation - xyz@example.com", :s => "XY&Z Corporation - xyz@example.com"}
629
+ @index.commit
630
+
631
+ # then it should not found it with the standard default analyzer
632
+ @index.find("code:it").should_not be_empty
633
+ @index.find(:w => "Corporation").should_not be_empty
634
+ @index.find(:w => "corporation").should be_empty
635
+
636
+ @index.find(:w => "XY&Z").should_not be_empty
637
+ @index.find(:w => "XY").should be_empty
638
+
639
+ @index.find(:s => "XY&Z").should be_empty
640
+ @index.find(:s => "xy").should_not be_empty
641
+ end
642
+
643
+ end