sunspot_matchers 1.3.0.2 → 2.0.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.
- data/.gitignore +1 -0
- data/Gemfile.lock +6 -8
- data/README.markdown +28 -18
- data/lib/sunspot_matchers/matchers.rb +20 -9
- data/lib/sunspot_matchers/test_helper.rb +6 -6
- data/lib/sunspot_matchers/version.rb +1 -1
- data/spec/sunspot_matchers_spec.rb +98 -70
- data/sunspot_matchers.gemspec +1 -1
- data/test/sunspot_matchers_test.rb +62 -62
- metadata +70 -91
@@ -2,9 +2,12 @@ require 'sunspot'
|
|
2
2
|
require 'sunspot_matchers'
|
3
3
|
require 'rspec'
|
4
4
|
|
5
|
-
class Post;
|
6
|
-
|
7
|
-
class
|
5
|
+
class Post;
|
6
|
+
end
|
7
|
+
class Blog;
|
8
|
+
end
|
9
|
+
class Person;
|
10
|
+
end
|
8
11
|
|
9
12
|
Sunspot.setup(Post) do
|
10
13
|
text :body
|
@@ -24,7 +27,7 @@ end
|
|
24
27
|
|
25
28
|
describe "Sunspot Matchers" do
|
26
29
|
include SunspotMatchers
|
27
|
-
|
30
|
+
|
28
31
|
before do
|
29
32
|
Sunspot.session = SunspotMatchers::SunspotSessionSpy.new(Sunspot.session)
|
30
33
|
end
|
@@ -75,10 +78,10 @@ describe "Sunspot Matchers" do
|
|
75
78
|
keywords 'great pizza'
|
76
79
|
keywords 'terrible pizza'
|
77
80
|
end
|
78
|
-
Sunspot.session.should have_search_params(:keywords
|
81
|
+
Sunspot.session.should have_search_params(:keywords) {
|
79
82
|
keywords 'great pizza'
|
80
83
|
keywords 'terrible pizza'
|
81
|
-
}
|
84
|
+
}
|
82
85
|
end
|
83
86
|
|
84
87
|
it "should work with any_param match" do
|
@@ -116,46 +119,46 @@ describe "Sunspot Matchers" do
|
|
116
119
|
with :author_name, 'Mark Twain'
|
117
120
|
with :author_name, 'John Twain'
|
118
121
|
end
|
119
|
-
Sunspot.session.should have_search_params(:with
|
122
|
+
Sunspot.session.should have_search_params(:with) {
|
120
123
|
with :author_name, 'Mark Twain'
|
121
124
|
with :author_name, 'John Twain'
|
122
|
-
}
|
125
|
+
}
|
123
126
|
end
|
124
127
|
|
125
128
|
it "should match for greater_than" do
|
126
129
|
Sunspot.search(Post) do
|
127
130
|
with(:category_ids).greater_than(1)
|
128
131
|
end
|
129
|
-
Sunspot.session.should have_search_params(:with
|
132
|
+
Sunspot.session.should have_search_params(:with) {
|
130
133
|
with(:category_ids).greater_than(1)
|
131
|
-
}
|
134
|
+
}
|
132
135
|
end
|
133
136
|
|
134
137
|
it "should match for less_than" do
|
135
138
|
Sunspot.search(Post) do
|
136
139
|
with(:category_ids).less_than(1)
|
137
140
|
end
|
138
|
-
Sunspot.session.should have_search_params(:with
|
141
|
+
Sunspot.session.should have_search_params(:with) {
|
139
142
|
with(:category_ids).less_than(1)
|
140
|
-
}
|
143
|
+
}
|
141
144
|
end
|
142
145
|
|
143
146
|
it "should match for range" do
|
144
147
|
Sunspot.search(Post) do
|
145
148
|
with :category_ids, 1..3
|
146
149
|
end
|
147
|
-
Sunspot.session.should have_search_params(:with
|
150
|
+
Sunspot.session.should have_search_params(:with) {
|
148
151
|
with :category_ids, 1..3
|
149
|
-
}
|
152
|
+
}
|
150
153
|
end
|
151
154
|
|
152
155
|
it "should match any_of" do
|
153
156
|
Sunspot.search(Post) do
|
154
|
-
with(:category_ids).any_of [1,2]
|
157
|
+
with(:category_ids).any_of [1, 2]
|
155
158
|
end
|
156
|
-
Sunspot.session.should have_search_params(:with
|
157
|
-
with(:category_ids).any_of [1,2]
|
158
|
-
}
|
159
|
+
Sunspot.session.should have_search_params(:with) {
|
160
|
+
with(:category_ids).any_of [1, 2]
|
161
|
+
}
|
159
162
|
end
|
160
163
|
|
161
164
|
it "should match any_of multiline" do
|
@@ -165,12 +168,12 @@ describe "Sunspot Matchers" do
|
|
165
168
|
with :category_ids, 2
|
166
169
|
end
|
167
170
|
end
|
168
|
-
Sunspot.session.should have_search_params(:with
|
171
|
+
Sunspot.session.should have_search_params(:with) {
|
169
172
|
any_of do
|
170
173
|
with :category_ids, 1
|
171
174
|
with :category_ids, 2
|
172
175
|
end
|
173
|
-
}
|
176
|
+
}
|
174
177
|
end
|
175
178
|
|
176
179
|
it "should match any_of and all_of" do
|
@@ -183,7 +186,7 @@ describe "Sunspot Matchers" do
|
|
183
186
|
end
|
184
187
|
end
|
185
188
|
end
|
186
|
-
Sunspot.session.should have_search_params(:with
|
189
|
+
Sunspot.session.should have_search_params(:with) {
|
187
190
|
any_of do
|
188
191
|
with :category_ids, 1
|
189
192
|
all_of do
|
@@ -191,7 +194,7 @@ describe "Sunspot Matchers" do
|
|
191
194
|
with :category_ids, 3
|
192
195
|
end
|
193
196
|
end
|
194
|
-
}
|
197
|
+
}
|
195
198
|
end
|
196
199
|
|
197
200
|
it "should work with any_param match" do
|
@@ -243,46 +246,46 @@ describe "Sunspot Matchers" do
|
|
243
246
|
without :author_name, 'Mark Twain'
|
244
247
|
without :author_name, 'John Twain'
|
245
248
|
end
|
246
|
-
Sunspot.session.should have_search_params(:without
|
249
|
+
Sunspot.session.should have_search_params(:without) {
|
247
250
|
without :author_name, 'Mark Twain'
|
248
251
|
without :author_name, 'John Twain'
|
249
|
-
}
|
252
|
+
}
|
250
253
|
end
|
251
254
|
|
252
255
|
it "should match for greater_than" do
|
253
256
|
Sunspot.search(Post) do
|
254
257
|
without(:category_ids).greater_than(1)
|
255
258
|
end
|
256
|
-
Sunspot.session.should have_search_params(:without
|
259
|
+
Sunspot.session.should have_search_params(:without) {
|
257
260
|
without(:category_ids).greater_than(1)
|
258
|
-
}
|
261
|
+
}
|
259
262
|
end
|
260
263
|
|
261
264
|
it "should match for less_than" do
|
262
265
|
Sunspot.search(Post) do
|
263
266
|
without(:category_ids).less_than(1)
|
264
267
|
end
|
265
|
-
Sunspot.session.should have_search_params(:without
|
268
|
+
Sunspot.session.should have_search_params(:without) {
|
266
269
|
without(:category_ids).less_than(1)
|
267
|
-
}
|
270
|
+
}
|
268
271
|
end
|
269
272
|
|
270
273
|
it "should match for range" do
|
271
274
|
Sunspot.search(Post) do
|
272
275
|
without :category_ids, 1..3
|
273
276
|
end
|
274
|
-
Sunspot.session.should have_search_params(:without
|
277
|
+
Sunspot.session.should have_search_params(:without) {
|
275
278
|
without :category_ids, 1..3
|
276
|
-
}
|
279
|
+
}
|
277
280
|
end
|
278
281
|
|
279
282
|
it "should match any_of" do
|
280
283
|
Sunspot.search(Post) do
|
281
|
-
without(:category_ids).any_of [1,2]
|
284
|
+
without(:category_ids).any_of [1, 2]
|
282
285
|
end
|
283
|
-
Sunspot.session.should have_search_params(:without
|
284
|
-
without(:category_ids).any_of [1,2]
|
285
|
-
}
|
286
|
+
Sunspot.session.should have_search_params(:without) {
|
287
|
+
without(:category_ids).any_of [1, 2]
|
288
|
+
}
|
286
289
|
end
|
287
290
|
|
288
291
|
it "should match any_of multiline" do
|
@@ -292,12 +295,12 @@ describe "Sunspot Matchers" do
|
|
292
295
|
without :category_ids, 2
|
293
296
|
end
|
294
297
|
end
|
295
|
-
Sunspot.session.should have_search_params(:without
|
298
|
+
Sunspot.session.should have_search_params(:without) {
|
296
299
|
any_of do
|
297
300
|
without :category_ids, 1
|
298
301
|
without :category_ids, 2
|
299
302
|
end
|
300
|
-
}
|
303
|
+
}
|
301
304
|
end
|
302
305
|
|
303
306
|
it "should match any_of and all_of" do
|
@@ -310,7 +313,7 @@ describe "Sunspot Matchers" do
|
|
310
313
|
end
|
311
314
|
end
|
312
315
|
end
|
313
|
-
Sunspot.session.should have_search_params(:without
|
316
|
+
Sunspot.session.should have_search_params(:without) {
|
314
317
|
any_of do
|
315
318
|
without :category_ids, 1
|
316
319
|
all_of do
|
@@ -318,7 +321,7 @@ describe "Sunspot Matchers" do
|
|
318
321
|
without :category_ids, 3
|
319
322
|
end
|
320
323
|
end
|
321
|
-
}
|
324
|
+
}
|
322
325
|
end
|
323
326
|
|
324
327
|
it "should work with any_param match" do
|
@@ -400,10 +403,10 @@ describe "Sunspot Matchers" do
|
|
400
403
|
order_by :published_at, :asc
|
401
404
|
order_by :average_rating, :asc
|
402
405
|
end
|
403
|
-
Sunspot.session.should have_search_params(:order_by
|
406
|
+
Sunspot.session.should have_search_params(:order_by) {
|
404
407
|
order_by :published_at, :asc
|
405
408
|
order_by :average_rating, :asc
|
406
|
-
}
|
409
|
+
}
|
407
410
|
end
|
408
411
|
|
409
412
|
it "should not match if multiple orderings are reversed" do
|
@@ -411,10 +414,10 @@ describe "Sunspot Matchers" do
|
|
411
414
|
order_by :average_rating, :asc
|
412
415
|
order_by :published_at, :asc
|
413
416
|
end
|
414
|
-
Sunspot.session.should_not have_search_params(:order_by
|
417
|
+
Sunspot.session.should_not have_search_params(:order_by) {
|
415
418
|
order_by :published_at, :asc
|
416
419
|
order_by :average_rating, :asc
|
417
|
-
}
|
420
|
+
}
|
418
421
|
end
|
419
422
|
|
420
423
|
it "should match when using random" do
|
@@ -422,10 +425,10 @@ describe "Sunspot Matchers" do
|
|
422
425
|
order_by :average_rating, :asc
|
423
426
|
order_by :random
|
424
427
|
end
|
425
|
-
Sunspot.session.should have_search_params(:order_by
|
428
|
+
Sunspot.session.should have_search_params(:order_by) {
|
426
429
|
order_by :average_rating, :asc
|
427
430
|
order_by :random
|
428
|
-
}
|
431
|
+
}
|
429
432
|
end
|
430
433
|
|
431
434
|
it "should not match when random is missing" do
|
@@ -433,9 +436,9 @@ describe "Sunspot Matchers" do
|
|
433
436
|
order_by :average_rating, :asc
|
434
437
|
order_by :random
|
435
438
|
end
|
436
|
-
Sunspot.session.should_not have_search_params(:order_by
|
439
|
+
Sunspot.session.should_not have_search_params(:order_by) {
|
437
440
|
order_by :average_rating, :asc
|
438
|
-
}
|
441
|
+
}
|
439
442
|
end
|
440
443
|
|
441
444
|
it "should match when using score" do
|
@@ -443,10 +446,10 @@ describe "Sunspot Matchers" do
|
|
443
446
|
order_by :average_rating, :asc
|
444
447
|
order_by :score
|
445
448
|
end
|
446
|
-
Sunspot.session.should have_search_params(:order_by
|
449
|
+
Sunspot.session.should have_search_params(:order_by) {
|
447
450
|
order_by :average_rating, :asc
|
448
451
|
order_by :score
|
449
|
-
}
|
452
|
+
}
|
450
453
|
end
|
451
454
|
|
452
455
|
it "should not match when score is missing" do
|
@@ -454,9 +457,9 @@ describe "Sunspot Matchers" do
|
|
454
457
|
order_by :average_rating, :asc
|
455
458
|
order_by :score
|
456
459
|
end
|
457
|
-
Sunspot.session.should_not have_search_params(:order_by
|
460
|
+
Sunspot.session.should_not have_search_params(:order_by) {
|
458
461
|
order_by :average_rating, :asc
|
459
|
-
}
|
462
|
+
}
|
460
463
|
end
|
461
464
|
|
462
465
|
it "should work with any_param match on direction" do
|
@@ -523,10 +526,10 @@ describe "Sunspot Matchers" do
|
|
523
526
|
category_filter = with(:category_ids, 2)
|
524
527
|
facet(:category_ids, :exclude => category_filter)
|
525
528
|
end
|
526
|
-
Sunspot.session.should have_search_params(:facet
|
529
|
+
Sunspot.session.should have_search_params(:facet) {
|
527
530
|
category_filter = with(:category_ids, 2)
|
528
531
|
facet(:category_ids, :exclude => category_filter)
|
529
|
-
}
|
532
|
+
}
|
530
533
|
end
|
531
534
|
end
|
532
535
|
|
@@ -542,7 +545,7 @@ describe "Sunspot Matchers" do
|
|
542
545
|
end
|
543
546
|
end
|
544
547
|
end
|
545
|
-
Sunspot.session.should have_search_params(:facet
|
548
|
+
Sunspot.session.should have_search_params(:facet) {
|
546
549
|
facet(:average_rating) do
|
547
550
|
row(1.0..2.0) do
|
548
551
|
with(:average_rating, 1.0..2.0)
|
@@ -551,7 +554,7 @@ describe "Sunspot Matchers" do
|
|
551
554
|
with(:average_rating, 2.0..3.0)
|
552
555
|
end
|
553
556
|
end
|
554
|
-
}
|
557
|
+
}
|
555
558
|
end
|
556
559
|
|
557
560
|
it "should not match if actual search is missing a facet" do
|
@@ -562,7 +565,7 @@ describe "Sunspot Matchers" do
|
|
562
565
|
end
|
563
566
|
end
|
564
567
|
end
|
565
|
-
Sunspot.session.should_not have_search_params(:facet
|
568
|
+
Sunspot.session.should_not have_search_params(:facet) {
|
566
569
|
facet(:average_rating) do
|
567
570
|
row(1.0..2.0) do
|
568
571
|
with(:average_rating, 1.0..2.0)
|
@@ -571,7 +574,7 @@ describe "Sunspot Matchers" do
|
|
571
574
|
with(:average_rating, 2.0..3.0)
|
572
575
|
end
|
573
576
|
end
|
574
|
-
}
|
577
|
+
}
|
575
578
|
end
|
576
579
|
|
577
580
|
it "should not match if facet query is different" do
|
@@ -585,7 +588,7 @@ describe "Sunspot Matchers" do
|
|
585
588
|
end
|
586
589
|
end
|
587
590
|
end
|
588
|
-
Sunspot.session.should_not have_search_params(:facet
|
591
|
+
Sunspot.session.should_not have_search_params(:facet) {
|
589
592
|
facet(:average_rating) do
|
590
593
|
row(1.0..2.0) do
|
591
594
|
with(:average_rating, 1.0..2.0)
|
@@ -594,7 +597,7 @@ describe "Sunspot Matchers" do
|
|
594
597
|
with(:average_rating, 2.0..4.0)
|
595
598
|
end
|
596
599
|
end
|
597
|
-
}
|
600
|
+
}
|
598
601
|
end
|
599
602
|
end
|
600
603
|
end
|
@@ -606,11 +609,11 @@ describe "Sunspot Matchers" do
|
|
606
609
|
boost_fields :body => 2.0
|
607
610
|
end
|
608
611
|
end
|
609
|
-
Sunspot.session.should have_search_params(:boost
|
612
|
+
Sunspot.session.should have_search_params(:boost) {
|
610
613
|
keywords 'great pizza' do
|
611
614
|
boost_fields :body => 2.0
|
612
615
|
end
|
613
|
-
}
|
616
|
+
}
|
614
617
|
end
|
615
618
|
|
616
619
|
it "should not match if field boost does not match" do
|
@@ -619,11 +622,11 @@ describe "Sunspot Matchers" do
|
|
619
622
|
boost_fields :body => 2.0
|
620
623
|
end
|
621
624
|
end
|
622
|
-
Sunspot.session.should_not have_search_params(:boost
|
625
|
+
Sunspot.session.should_not have_search_params(:boost) {
|
623
626
|
keywords 'great pizza' do
|
624
627
|
boost_fields :body => 3.0
|
625
628
|
end
|
626
|
-
}
|
629
|
+
}
|
627
630
|
end
|
628
631
|
|
629
632
|
it "should match if boost query matches" do
|
@@ -634,13 +637,13 @@ describe "Sunspot Matchers" do
|
|
634
637
|
end
|
635
638
|
end
|
636
639
|
end
|
637
|
-
Sunspot.session.should have_search_params(:boost
|
640
|
+
Sunspot.session.should have_search_params(:boost) {
|
638
641
|
keywords 'great pizza' do
|
639
642
|
boost(2.0) do
|
640
643
|
with :blog_id, 4
|
641
644
|
end
|
642
645
|
end
|
643
|
-
}
|
646
|
+
}
|
644
647
|
end
|
645
648
|
|
646
649
|
it "should not match if boost query does not match" do
|
@@ -651,13 +654,13 @@ describe "Sunspot Matchers" do
|
|
651
654
|
end
|
652
655
|
end
|
653
656
|
end
|
654
|
-
Sunspot.session.should_not have_search_params(:boost
|
657
|
+
Sunspot.session.should_not have_search_params(:boost) {
|
655
658
|
keywords 'great pizza' do
|
656
659
|
boost(2.0) do
|
657
660
|
with :blog_id, 5
|
658
661
|
end
|
659
662
|
end
|
660
|
-
}
|
663
|
+
}
|
661
664
|
end
|
662
665
|
|
663
666
|
it "should match if boost function matches" do
|
@@ -666,11 +669,11 @@ describe "Sunspot Matchers" do
|
|
666
669
|
boost(function { sum(:average_rating, product(:popularity, 10)) })
|
667
670
|
end
|
668
671
|
end
|
669
|
-
Sunspot.session.should have_search_params(:boost
|
672
|
+
Sunspot.session.should have_search_params(:boost) {
|
670
673
|
keywords 'great pizza' do
|
671
674
|
boost(function { sum(:average_rating, product(:popularity, 10)) })
|
672
675
|
end
|
673
|
-
}
|
676
|
+
}
|
674
677
|
end
|
675
678
|
|
676
679
|
it "should not match if boost function does not match" do
|
@@ -679,11 +682,28 @@ describe "Sunspot Matchers" do
|
|
679
682
|
boost(function { sum(:average_rating, product(:popularity, 10)) })
|
680
683
|
end
|
681
684
|
end
|
682
|
-
Sunspot.session.should_not have_search_params(:boost
|
685
|
+
Sunspot.session.should_not have_search_params(:boost) {
|
683
686
|
keywords 'great pizza' do
|
684
687
|
boost(function { sum(:average_rating, product(:popularity, 42)) })
|
685
688
|
end
|
686
|
-
}
|
689
|
+
}
|
690
|
+
end
|
691
|
+
end
|
692
|
+
|
693
|
+
describe "group matcher" do
|
694
|
+
it "should match if grouping a field" do
|
695
|
+
Sunspot.search(Post) do
|
696
|
+
keywords 'great pizza'
|
697
|
+
group :author_name
|
698
|
+
end
|
699
|
+
Sunspot.session.should have_search_params(:group, :author_name)
|
700
|
+
end
|
701
|
+
|
702
|
+
it "should match if grouping a field" do
|
703
|
+
Sunspot.search(Post) do
|
704
|
+
keywords 'great pizza'
|
705
|
+
end
|
706
|
+
Sunspot.session.should_not have_search_params(:group, :author_name)
|
687
707
|
end
|
688
708
|
end
|
689
709
|
|
@@ -728,8 +748,16 @@ describe "Sunspot Matchers" do
|
|
728
748
|
end
|
729
749
|
|
730
750
|
describe "have_searchable_field" do
|
751
|
+
context "it works with instances as well as classes" do
|
752
|
+
describe Post do
|
753
|
+
it { should have_searchable_field(:body) }
|
754
|
+
end
|
755
|
+
end
|
756
|
+
|
731
757
|
it "should succeed if the model has the given field" do
|
732
758
|
Post.should have_searchable_field(:body)
|
759
|
+
Post.should have_searchable_field(:author_name)
|
760
|
+
Post.should have_searchable_field(:blog_id)
|
733
761
|
end
|
734
762
|
|
735
763
|
it "should fail if the model does not have the given field" do
|
data/sunspot_matchers.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
|
17
17
|
s.add_development_dependency "bundler", ">= 1.0.0"
|
18
18
|
s.add_development_dependency "rspec", "~> 2.4.0"
|
19
|
-
s.add_development_dependency "sunspot", "~>
|
19
|
+
s.add_development_dependency "sunspot", "~> 2.0.0"
|
20
20
|
s.add_development_dependency "rake"
|
21
21
|
|
22
22
|
s.files = `git ls-files`.split("\n")
|