sunspot 2.0.0 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (165) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.rspec +2 -0
  4. data/Appraisals +7 -0
  5. data/Gemfile +0 -2
  6. data/History.txt +10 -0
  7. data/lib/sunspot.rb +55 -17
  8. data/lib/sunspot/adapters.rb +68 -18
  9. data/lib/sunspot/batcher.rb +1 -1
  10. data/lib/sunspot/configuration.rb +4 -2
  11. data/lib/sunspot/data_extractor.rb +36 -6
  12. data/lib/sunspot/dsl.rb +4 -3
  13. data/lib/sunspot/dsl/adjustable.rb +2 -2
  14. data/lib/sunspot/dsl/field_query.rb +69 -16
  15. data/lib/sunspot/dsl/field_stats.rb +25 -0
  16. data/lib/sunspot/dsl/fields.rb +28 -8
  17. data/lib/sunspot/dsl/fulltext.rb +9 -1
  18. data/lib/sunspot/dsl/group.rb +118 -0
  19. data/lib/sunspot/dsl/paginatable.rb +4 -1
  20. data/lib/sunspot/dsl/scope.rb +19 -10
  21. data/lib/sunspot/dsl/search.rb +1 -1
  22. data/lib/sunspot/dsl/spellcheckable.rb +14 -0
  23. data/lib/sunspot/dsl/standard_query.rb +63 -35
  24. data/lib/sunspot/field.rb +76 -4
  25. data/lib/sunspot/field_factory.rb +60 -11
  26. data/lib/sunspot/indexer.rb +70 -18
  27. data/lib/sunspot/query.rb +5 -4
  28. data/lib/sunspot/query/abstract_field_facet.rb +0 -2
  29. data/lib/sunspot/query/abstract_fulltext.rb +76 -0
  30. data/lib/sunspot/query/abstract_json_field_facet.rb +70 -0
  31. data/lib/sunspot/query/bbox.rb +5 -1
  32. data/lib/sunspot/query/common_query.rb +31 -6
  33. data/lib/sunspot/query/composite_fulltext.rb +58 -8
  34. data/lib/sunspot/query/date_field_json_facet.rb +25 -0
  35. data/lib/sunspot/query/dismax.rb +25 -71
  36. data/lib/sunspot/query/field_json_facet.rb +19 -0
  37. data/lib/sunspot/query/field_list.rb +15 -0
  38. data/lib/sunspot/query/field_stats.rb +61 -0
  39. data/lib/sunspot/query/function_query.rb +1 -2
  40. data/lib/sunspot/query/geo.rb +1 -1
  41. data/lib/sunspot/query/geofilt.rb +8 -3
  42. data/lib/sunspot/query/group.rb +46 -0
  43. data/lib/sunspot/query/group_query.rb +17 -0
  44. data/lib/sunspot/query/join.rb +88 -0
  45. data/lib/sunspot/query/more_like_this.rb +1 -1
  46. data/lib/sunspot/query/pagination.rb +12 -4
  47. data/lib/sunspot/query/range_json_facet.rb +28 -0
  48. data/lib/sunspot/query/restriction.rb +99 -13
  49. data/lib/sunspot/query/sort.rb +41 -0
  50. data/lib/sunspot/query/sort_composite.rb +7 -0
  51. data/lib/sunspot/query/spellcheck.rb +19 -0
  52. data/lib/sunspot/query/standard_query.rb +24 -2
  53. data/lib/sunspot/query/text_field_boost.rb +1 -3
  54. data/lib/sunspot/schema.rb +12 -3
  55. data/lib/sunspot/search.rb +4 -2
  56. data/lib/sunspot/search/abstract_search.rb +93 -43
  57. data/lib/sunspot/search/cursor_paginated_collection.rb +32 -0
  58. data/lib/sunspot/search/field_facet.rb +4 -4
  59. data/lib/sunspot/search/field_json_facet.rb +33 -0
  60. data/lib/sunspot/search/field_stats.rb +21 -0
  61. data/lib/sunspot/search/hit.rb +6 -1
  62. data/lib/sunspot/search/hit_enumerable.rb +4 -1
  63. data/lib/sunspot/search/json_facet_row.rb +40 -0
  64. data/lib/sunspot/search/json_facet_stats.rb +23 -0
  65. data/lib/sunspot/search/paginated_collection.rb +1 -0
  66. data/lib/sunspot/search/query_group.rb +74 -0
  67. data/lib/sunspot/search/standard_search.rb +70 -3
  68. data/lib/sunspot/search/stats_facet.rb +25 -0
  69. data/lib/sunspot/search/stats_json_row.rb +82 -0
  70. data/lib/sunspot/search/stats_row.rb +68 -0
  71. data/lib/sunspot/session.rb +62 -37
  72. data/lib/sunspot/session_proxy/class_sharding_session_proxy.rb +6 -4
  73. data/lib/sunspot/session_proxy/id_sharding_session_proxy.rb +16 -8
  74. data/lib/sunspot/session_proxy/master_slave_session_proxy.rb +2 -2
  75. data/lib/sunspot/session_proxy/retry_5xx_session_proxy.rb +1 -1
  76. data/lib/sunspot/session_proxy/sharding_session_proxy.rb +4 -2
  77. data/lib/sunspot/session_proxy/silent_fail_session_proxy.rb +1 -1
  78. data/lib/sunspot/session_proxy/thread_local_session_proxy.rb +6 -4
  79. data/lib/sunspot/setup.rb +42 -0
  80. data/lib/sunspot/type.rb +20 -0
  81. data/lib/sunspot/util.rb +78 -14
  82. data/lib/sunspot/version.rb +1 -1
  83. data/spec/api/adapters_spec.rb +40 -15
  84. data/spec/api/batcher_spec.rb +15 -15
  85. data/spec/api/binding_spec.rb +3 -3
  86. data/spec/api/class_set_spec.rb +6 -6
  87. data/spec/api/data_extractor_spec.rb +39 -0
  88. data/spec/api/hit_enumerable_spec.rb +32 -9
  89. data/spec/api/indexer/attributes_spec.rb +35 -30
  90. data/spec/api/indexer/batch_spec.rb +8 -7
  91. data/spec/api/indexer/dynamic_fields_spec.rb +8 -8
  92. data/spec/api/indexer/fixed_fields_spec.rb +16 -11
  93. data/spec/api/indexer/fulltext_spec.rb +8 -8
  94. data/spec/api/indexer/removal_spec.rb +24 -14
  95. data/spec/api/indexer_spec.rb +2 -2
  96. data/spec/api/query/advanced_manipulation_examples.rb +3 -3
  97. data/spec/api/query/connectives_examples.rb +26 -14
  98. data/spec/api/query/dsl_spec.rb +24 -6
  99. data/spec/api/query/dynamic_fields_examples.rb +18 -18
  100. data/spec/api/query/faceting_examples.rb +80 -61
  101. data/spec/api/query/fulltext_examples.rb +194 -40
  102. data/spec/api/query/function_spec.rb +116 -13
  103. data/spec/api/query/geo_examples.rb +8 -12
  104. data/spec/api/query/group_spec.rb +27 -5
  105. data/spec/api/query/highlighting_examples.rb +26 -26
  106. data/spec/api/query/join_spec.rb +19 -0
  107. data/spec/api/query/more_like_this_spec.rb +40 -27
  108. data/spec/api/query/ordering_pagination_examples.rb +37 -23
  109. data/spec/api/query/scope_examples.rb +39 -39
  110. data/spec/api/query/spatial_examples.rb +3 -3
  111. data/spec/api/query/spellcheck_examples.rb +20 -0
  112. data/spec/api/query/standard_spec.rb +3 -1
  113. data/spec/api/query/stats_examples.rb +66 -0
  114. data/spec/api/query/text_field_scoping_examples.rb +5 -5
  115. data/spec/api/query/types_spec.rb +4 -4
  116. data/spec/api/search/cursor_paginated_collection_spec.rb +35 -0
  117. data/spec/api/search/dynamic_fields_spec.rb +4 -4
  118. data/spec/api/search/faceting_spec.rb +55 -52
  119. data/spec/api/search/highlighting_spec.rb +7 -7
  120. data/spec/api/search/hits_spec.rb +43 -29
  121. data/spec/api/search/paginated_collection_spec.rb +19 -18
  122. data/spec/api/search/results_spec.rb +13 -13
  123. data/spec/api/search/search_spec.rb +3 -3
  124. data/spec/api/search/stats_spec.rb +94 -0
  125. data/spec/api/session_proxy/class_sharding_session_proxy_spec.rb +23 -16
  126. data/spec/api/session_proxy/id_sharding_session_proxy_spec.rb +16 -4
  127. data/spec/api/session_proxy/master_slave_session_proxy_spec.rb +10 -6
  128. data/spec/api/session_proxy/retry_5xx_session_proxy_spec.rb +11 -11
  129. data/spec/api/session_proxy/sharding_session_proxy_spec.rb +15 -14
  130. data/spec/api/session_proxy/silent_fail_session_proxy_spec.rb +3 -3
  131. data/spec/api/session_proxy/spec_helper.rb +1 -1
  132. data/spec/api/session_proxy/thread_local_session_proxy_spec.rb +40 -26
  133. data/spec/api/session_spec.rb +78 -38
  134. data/spec/api/sunspot_spec.rb +7 -4
  135. data/spec/helpers/integration_helper.rb +11 -1
  136. data/spec/helpers/query_helper.rb +1 -1
  137. data/spec/helpers/search_helper.rb +30 -0
  138. data/spec/integration/atomic_updates_spec.rb +58 -0
  139. data/spec/integration/dynamic_fields_spec.rb +31 -20
  140. data/spec/integration/faceting_spec.rb +252 -39
  141. data/spec/integration/field_grouping_spec.rb +47 -15
  142. data/spec/integration/field_lists_spec.rb +57 -0
  143. data/spec/integration/geospatial_spec.rb +34 -8
  144. data/spec/integration/highlighting_spec.rb +8 -8
  145. data/spec/integration/indexing_spec.rb +7 -6
  146. data/spec/integration/join_spec.rb +45 -0
  147. data/spec/integration/keyword_search_spec.rb +68 -38
  148. data/spec/integration/local_search_spec.rb +4 -4
  149. data/spec/integration/more_like_this_spec.rb +7 -7
  150. data/spec/integration/scoped_search_spec.rb +193 -74
  151. data/spec/integration/spellcheck_spec.rb +119 -0
  152. data/spec/integration/stats_spec.rb +88 -0
  153. data/spec/integration/stored_fields_spec.rb +1 -1
  154. data/spec/integration/test_pagination.rb +4 -4
  155. data/spec/integration/unicode_spec.rb +1 -1
  156. data/spec/mocks/adapters.rb +36 -0
  157. data/spec/mocks/connection.rb +5 -3
  158. data/spec/mocks/photo.rb +32 -1
  159. data/spec/mocks/post.rb +18 -3
  160. data/spec/spec_helper.rb +13 -8
  161. data/sunspot.gemspec +6 -4
  162. data/tasks/rdoc.rake +22 -14
  163. metadata +101 -44
  164. data/lib/sunspot/dsl/field_group.rb +0 -57
  165. data/lib/sunspot/query/field_group.rb +0 -37
@@ -7,7 +7,7 @@ describe 'function query' do
7
7
  boost(function { :average_rating })
8
8
  end
9
9
  end
10
- connection.should have_last_search_including(:bf, 'average_rating_ft')
10
+ expect(connection).to have_last_search_including(:bf, 'average_rating_ft')
11
11
  end
12
12
 
13
13
  it "should send query to solr with boost function and boost amount" do
@@ -16,7 +16,7 @@ describe 'function query' do
16
16
  boost(function { :average_rating }^5)
17
17
  end
18
18
  end
19
- connection.should have_last_search_including(:bf, 'average_rating_ft^5')
19
+ expect(connection).to have_last_search_including(:bf, 'average_rating_ft^5')
20
20
  end
21
21
 
22
22
  it "should handle boost function with constant float" do
@@ -25,7 +25,7 @@ describe 'function query' do
25
25
  boost(function { 10.5 })
26
26
  end
27
27
  end
28
- connection.should have_last_search_including(:bf, '10.5')
28
+ expect(connection).to have_last_search_including(:bf, '10.5')
29
29
  end
30
30
 
31
31
  it "should handle boost function with constant float and boost amount" do
@@ -34,7 +34,7 @@ describe 'function query' do
34
34
  boost(function { 10.5 }^5)
35
35
  end
36
36
  end
37
- connection.should have_last_search_including(:bf, '10.5^5')
37
+ expect(connection).to have_last_search_including(:bf, '10.5^5')
38
38
  end
39
39
 
40
40
  it "should handle boost function with time literal" do
@@ -43,7 +43,7 @@ describe 'function query' do
43
43
  boost(function { Time.parse('2010-03-25 14:13:00 EDT') })
44
44
  end
45
45
  end
46
- connection.should have_last_search_including(:bf, '2010-03-25T18:13:00Z')
46
+ expect(connection).to have_last_search_including(:bf, '2010-03-25T18:13:00Z')
47
47
  end
48
48
 
49
49
  it "should handle arbitrary functions in a function query block" do
@@ -52,7 +52,7 @@ describe 'function query' do
52
52
  boost(function { product(:average_rating, 10) })
53
53
  end
54
54
  end
55
- connection.should have_last_search_including(:bf, 'product(average_rating_ft,10)')
55
+ expect(connection).to have_last_search_including(:bf, 'product(average_rating_ft,10)')
56
56
  end
57
57
 
58
58
  it "should handle the sub function in a function query block" do
@@ -61,7 +61,7 @@ describe 'function query' do
61
61
  boost(function { sub(:average_rating, 10) })
62
62
  end
63
63
  end
64
- connection.should have_last_search_including(:bf, 'sub(average_rating_ft,10)')
64
+ expect(connection).to have_last_search_including(:bf, 'sub(average_rating_ft,10)')
65
65
  end
66
66
 
67
67
  it "should handle boost amounts on function query block" do
@@ -70,7 +70,7 @@ describe 'function query' do
70
70
  boost(function { sub(:average_rating, 10)^5 })
71
71
  end
72
72
  end
73
- connection.should have_last_search_including(:bf, 'sub(average_rating_ft,10)^5')
73
+ expect(connection).to have_last_search_including(:bf, 'sub(average_rating_ft,10)^5')
74
74
  end
75
75
 
76
76
  it "should handle nested functions in a function query block" do
@@ -79,28 +79,131 @@ describe 'function query' do
79
79
  boost(function { product(:average_rating, sum(:average_rating, 20)) })
80
80
  end
81
81
  end
82
- connection.should have_last_search_including(:bf, 'product(average_rating_ft,sum(average_rating_ft,20))')
82
+ expect(connection).to have_last_search_including(:bf, 'product(average_rating_ft,sum(average_rating_ft,20))')
83
83
  end
84
84
 
85
85
  # TODO SOLR 1.5
86
86
  it "should raise ArgumentError if string literal passed" do
87
- lambda do
87
+ expect do
88
88
  session.search Post do
89
89
  keywords('pizza') do
90
90
  boost(function { "hello world" })
91
91
  end
92
92
  end
93
- end.should raise_error(ArgumentError)
93
+ end.to raise_error(ArgumentError)
94
94
  end
95
95
 
96
96
  it "should raise UnrecognizedFieldError if bogus field name passed" do
97
- lambda do
97
+ expect do
98
98
  session.search Post do
99
99
  keywords('pizza') do
100
100
  boost(function { :bogus })
101
101
  end
102
102
  end
103
- end.should raise_error(Sunspot::UnrecognizedFieldError)
103
+ end.to raise_error(Sunspot::UnrecognizedFieldError)
104
104
  end
105
+
106
+ it "should send query to solr with multiplicative boost function" do
107
+ session.search Post do
108
+ keywords('pizza') do
109
+ multiplicative_boost(function { :average_rating })
110
+ end
111
+ end
112
+ expect(connection).to have_last_search_including(:boost, 'average_rating_ft')
113
+ end
114
+
115
+ it "should send query to solr with multiplicative boost function and boost amount" do
116
+ session.search Post do
117
+ keywords('pizza') do
118
+ multiplicative_boost(function { :average_rating }^5)
119
+ end
120
+ end
121
+ expect(connection).to have_last_search_including(:boost, 'average_rating_ft^5')
122
+ end
123
+
124
+ it "should handle multiplicative boost function with constant float" do
125
+ session.search Post do
126
+ keywords('pizza') do
127
+ multiplicative_boost(function { 10.5 })
128
+ end
129
+ end
130
+ expect(connection).to have_last_search_including(:boost, '10.5')
131
+ end
132
+
133
+ it "should handle multiplicative boost function with constant float and boost amount" do
134
+ session.search Post do
135
+ keywords('pizza') do
136
+ multiplicative_boost(function { 10.5 }^5)
137
+ end
138
+ end
139
+ expect(connection).to have_last_search_including(:boost, '10.5^5')
140
+ end
141
+
142
+ it "should handle multiplicative boost function with time literal" do
143
+ session.search Post do
144
+ keywords('pizza') do
145
+ multiplicative_boost(function { Time.parse('2010-03-25 14:13:00 EDT') })
146
+ end
147
+ end
148
+ expect(connection).to have_last_search_including(:boost, '2010-03-25T18:13:00Z')
149
+ end
150
+
151
+ it "should handle arbitrary functions in a function query block" do
152
+ session.search Post do
153
+ keywords('pizza') do
154
+ multiplicative_boost(function { product(:average_rating, 10) })
155
+ end
156
+ end
157
+ expect(connection).to have_last_search_including(:boost, 'product(average_rating_ft,10)')
158
+ end
159
+
160
+ it "should handle the sub function in a multiplicative boost function query block" do
161
+ session.search Post do
162
+ keywords('pizza') do
163
+ multiplicative_boost(function { sub(:average_rating, 10) })
164
+ end
165
+ end
166
+ expect(connection).to have_last_search_including(:boost, 'sub(average_rating_ft,10)')
167
+ end
168
+
169
+ it "should handle boost amounts on multiplicative boost function query block" do
170
+ session.search Post do
171
+ keywords('pizza') do
172
+ multiplicative_boost(function { sub(:average_rating, 10)^5 })
173
+ end
174
+ end
175
+ expect(connection).to have_last_search_including(:boost, 'sub(average_rating_ft,10)^5')
176
+ end
177
+
178
+ it "should handle nested functions in a multiplicative boost function query block" do
179
+ session.search Post do
180
+ keywords('pizza') do
181
+ multiplicative_boost(function { product(:average_rating, sum(:average_rating, 20)) })
182
+ end
183
+ end
184
+ expect(connection).to have_last_search_including(:boost, 'product(average_rating_ft,sum(average_rating_ft,20))')
185
+ end
186
+
187
+ # TODO SOLR 1.5
188
+ it "should raise ArgumentError if string literal passed to multiplicative boost" do
189
+ expect do
190
+ session.search Post do
191
+ keywords('pizza') do
192
+ multiplicative_boost(function { "hello world" })
193
+ end
194
+ end
195
+ end.to raise_error(ArgumentError)
196
+ end
197
+
198
+ it "should raise UnrecognizedFieldError if bogus field name passed to multiplicative boost" do
199
+ expect do
200
+ session.search Post do
201
+ keywords('pizza') do
202
+ multiplicative_boost(function { :bogus })
203
+ end
204
+ end
205
+ end.to raise_error(Sunspot::UnrecognizedFieldError)
206
+ end
207
+
105
208
  end
106
209
 
@@ -5,35 +5,35 @@ shared_examples_for 'geohash query' do
5
5
  search do
6
6
  with(:coordinates).near(40.7, -73.5)
7
7
  end
8
- connection.should have_last_search_including(:q, build_geo_query)
8
+ expect(connection).to have_last_search_including(:q, build_geo_query)
9
9
  end
10
10
 
11
11
  it 'searches for nearby points with non-Float arguments' do
12
12
  search do
13
13
  with(:coordinates).near(BigDecimal.new('40.7'), BigDecimal.new('-73.5'))
14
14
  end
15
- connection.should have_last_search_including(:q, build_geo_query)
15
+ expect(connection).to have_last_search_including(:q, build_geo_query)
16
16
  end
17
17
 
18
18
  it 'searches for nearby points with given precision' do
19
19
  search do
20
20
  with(:coordinates).near(40.7, -73.5, :precision => 10)
21
21
  end
22
- connection.should have_last_search_including(:q, build_geo_query(:precision => 10))
22
+ expect(connection).to have_last_search_including(:q, build_geo_query(:precision => 10))
23
23
  end
24
24
 
25
25
  it 'searches for nearby points with given precision factor' do
26
26
  search do
27
27
  with(:coordinates).near(40.7, -73.5, :precision_factor => 1.5)
28
28
  end
29
- connection.should have_last_search_including(:q, build_geo_query(:precision_factor => 1.5))
29
+ expect(connection).to have_last_search_including(:q, build_geo_query(:precision_factor => 1.5))
30
30
  end
31
31
 
32
32
  it 'searches for nearby points with given boost' do
33
33
  search do
34
34
  with(:coordinates).near(40.7, -73.5, :boost => 2.0)
35
35
  end
36
- connection.should have_last_search_including(:q, build_geo_query(:boost => 2.0))
36
+ expect(connection).to have_last_search_including(:q, build_geo_query(:boost => 2.0))
37
37
  end
38
38
 
39
39
  it 'performs both dismax search and location search' do
@@ -41,12 +41,8 @@ shared_examples_for 'geohash query' do
41
41
  fulltext 'pizza', :fields => :title
42
42
  with(:coordinates).near(40.7, -73.5)
43
43
  end
44
- expected =
45
- "{!dismax fl='* score' qf='title_text'}pizza (#{build_geo_query})"
46
- connection.should have_last_search_including(
47
- :q,
48
- %Q(_query_:"{!dismax qf='title_text'}pizza" (#{build_geo_query}))
49
- )
44
+ expected = %Q((_query_:"{!edismax qf='title_text'}pizza" AND (#{build_geo_query})))
45
+ expect(connection).to have_last_search_including(:q, expected)
50
46
  end
51
47
 
52
48
  private
@@ -57,7 +53,7 @@ shared_examples_for 'geohash query' do
57
53
  boost = options[:boost] || 1.0
58
54
  hash = 'dr5xx3nytvgs'
59
55
  (precision..12).map do |i|
60
- phrase =
56
+ phrase =
61
57
  if i == 12 then hash
62
58
  else "#{hash[0, i]}*"
63
59
  end
@@ -1,13 +1,13 @@
1
1
  require File.expand_path('spec_helper', File.dirname(__FILE__))
2
2
 
3
- describe "field grouping" do
3
+ describe "grouping" do
4
4
  it "sends grouping parameters to solr" do
5
5
  session.search Post do
6
6
  group :title
7
7
  end
8
8
 
9
- connection.should have_last_search_including(:group, "true")
10
- connection.should have_last_search_including(:"group.field", "title_ss")
9
+ expect(connection).to have_last_search_including(:group, "true")
10
+ expect(connection).to have_last_search_including(:"group.field", "title_ss")
11
11
  end
12
12
 
13
13
  it "sends grouping limit parameters to solr" do
@@ -17,7 +17,7 @@ describe "field grouping" do
17
17
  end
18
18
  end
19
19
 
20
- connection.should have_last_search_including(:"group.limit", 2)
20
+ expect(connection).to have_last_search_including(:"group.limit", 2)
21
21
  end
22
22
 
23
23
  it "sends grouping sort parameters to solr" do
@@ -27,6 +27,28 @@ describe "field grouping" do
27
27
  end
28
28
  end
29
29
 
30
- connection.should have_last_search_including(:"group.sort", "average_rating_ft asc")
30
+ expect(connection).to have_last_search_including(:"group.sort", "average_rating_ft asc")
31
+ end
32
+
33
+ it "sends grouping field parameters to solr" do
34
+ session.search Post do
35
+ group do
36
+ field :title
37
+ end
38
+ end
39
+
40
+ expect(connection).to have_last_search_including(:"group.field", "title_ss")
41
+ end
42
+
43
+ it "sends grouping query parameters to solr" do
44
+ session.search Post do
45
+ group do
46
+ query 'category 1' do
47
+ with(:category_ids, 1)
48
+ end
49
+ end
50
+ end
51
+
52
+ expect(connection).to have_last_search_including(:"group.query", "category_ids_im:1")
31
53
  end
32
54
  end
@@ -3,21 +3,21 @@ shared_examples_for "query with highlighting support" do
3
3
  search do
4
4
  keywords 'test'
5
5
  end
6
- connection.should_not have_last_search_with(:hl)
6
+ expect(connection).not_to have_last_search_with(:hl)
7
7
  end
8
8
 
9
9
  it 'should enable highlighting when highlighting requested as keywords argument' do
10
10
  search do
11
11
  keywords 'test', :highlight => true
12
12
  end
13
- connection.should have_last_search_with(:hl => 'on')
13
+ expect(connection).to have_last_search_with(:hl => 'on')
14
14
  end
15
15
 
16
16
  it 'should not set highlight fields parameter if highlight fields are not passed' do
17
17
  search do
18
18
  keywords 'test', :highlight => true, :fields => [:title]
19
19
  end
20
- connection.should_not have_last_search_with(:'hl.fl')
20
+ expect(connection).not_to have_last_search_with(:'hl.fl')
21
21
  end
22
22
 
23
23
  it 'should enable highlighting on multiple fields when highlighting requested as array of fields via keywords argument' do
@@ -25,15 +25,15 @@ shared_examples_for "query with highlighting support" do
25
25
  keywords 'test', :highlight => [:title, :body]
26
26
  end
27
27
 
28
- connection.should have_last_search_with(:hl => 'on', :'hl.fl' => %w(title_text body_textsv))
28
+ expect(connection).to have_last_search_with(:hl => 'on', :'hl.fl' => %w(title_text body_textsv))
29
29
  end
30
30
 
31
31
  it 'should raise UnrecognizedFieldError if try to highlight unexisting field via keywords argument' do
32
- lambda {
32
+ expect {
33
33
  search do
34
34
  keywords 'test', :highlight => [:unknown_field]
35
35
  end
36
- }.should raise_error(Sunspot::UnrecognizedFieldError)
36
+ }.to raise_error(Sunspot::UnrecognizedFieldError)
37
37
  end
38
38
 
39
39
  it 'should enable highlighting on multiple fields when highlighting requested as list of fields via block call' do
@@ -43,7 +43,7 @@ shared_examples_for "query with highlighting support" do
43
43
  end
44
44
  end
45
45
 
46
- connection.should have_last_search_with(:hl => 'on', :'hl.fl' => %w(title_text body_textsv))
46
+ expect(connection).to have_last_search_with(:hl => 'on', :'hl.fl' => %w(title_text body_textsv))
47
47
  end
48
48
 
49
49
  it 'should enable highlighting on multiple fields for multiple search types' do
@@ -52,24 +52,24 @@ shared_examples_for "query with highlighting support" do
52
52
  highlight :body
53
53
  end
54
54
  end
55
- connection.searches.last[:'hl.fl'].to_set.should == Set['body_text', 'body_textsv']
55
+ expect(connection.searches.last[:'hl.fl'].to_set).to eq(Set['body_text', 'body_textsv'])
56
56
  end
57
57
 
58
58
  it 'should raise UnrecognizedFieldError if try to highlight unexisting field via block call' do
59
- lambda {
59
+ expect {
60
60
  search do
61
61
  keywords 'test' do
62
62
  highlight :unknown_field
63
63
  end
64
64
  end
65
- }.should raise_error(Sunspot::UnrecognizedFieldError)
65
+ }.to raise_error(Sunspot::UnrecognizedFieldError)
66
66
  end
67
67
 
68
68
  it 'should set internal formatting' do
69
69
  search do
70
70
  keywords 'test', :highlight => true
71
71
  end
72
- connection.should have_last_search_with(
72
+ expect(connection).to have_last_search_with(
73
73
  :"hl.simple.pre" => '@@@hl@@@',
74
74
  :"hl.simple.post" => '@@@endhl@@@'
75
75
  )
@@ -81,7 +81,7 @@ shared_examples_for "query with highlighting support" do
81
81
  highlight :title
82
82
  end
83
83
  end
84
- connection.should have_last_search_with(
84
+ expect(connection).to have_last_search_with(
85
85
  :"hl.fl" => %w(title_text)
86
86
  )
87
87
  end
@@ -90,7 +90,7 @@ shared_examples_for "query with highlighting support" do
90
90
  search do
91
91
  keywords 'test', :highlight => :body
92
92
  end
93
- connection.should have_last_search_with(
93
+ expect(connection).to have_last_search_with(
94
94
  :"hl.simple.pre" => '@@@hl@@@',
95
95
  :"hl.simple.post" => '@@@endhl@@@'
96
96
  )
@@ -102,7 +102,7 @@ shared_examples_for "query with highlighting support" do
102
102
  highlight :max_snippets => 3
103
103
  end
104
104
  end
105
- connection.should have_last_search_with(
105
+ expect(connection).to have_last_search_with(
106
106
  :"hl.snippets" => 3
107
107
  )
108
108
  end
@@ -113,7 +113,7 @@ shared_examples_for "query with highlighting support" do
113
113
  highlight :title, :max_snippets => 3
114
114
  end
115
115
  end
116
- connection.should have_last_search_with(
116
+ expect(connection).to have_last_search_with(
117
117
  :"hl.fl" => %w(title_text),
118
118
  :"f.title_text.hl.snippets" => 3
119
119
  )
@@ -125,7 +125,7 @@ shared_examples_for "query with highlighting support" do
125
125
  highlight :fragment_size => 200
126
126
  end
127
127
  end
128
- connection.should have_last_search_with(
128
+ expect(connection).to have_last_search_with(
129
129
  :"hl.fragsize" => 200
130
130
  )
131
131
  end
@@ -136,7 +136,7 @@ shared_examples_for "query with highlighting support" do
136
136
  highlight :title, :fragment_size => 200
137
137
  end
138
138
  end
139
- connection.should have_last_search_with(
139
+ expect(connection).to have_last_search_with(
140
140
  :"f.title_text.hl.fragsize" => 200
141
141
  )
142
142
  end
@@ -147,7 +147,7 @@ shared_examples_for "query with highlighting support" do
147
147
  highlight :merge_contiguous_fragments => true
148
148
  end
149
149
  end
150
- connection.should have_last_search_with(
150
+ expect(connection).to have_last_search_with(
151
151
  :"hl.mergeContiguous" => 'true'
152
152
  )
153
153
  end
@@ -158,7 +158,7 @@ shared_examples_for "query with highlighting support" do
158
158
  highlight :title, :merge_contiguous_fragments => true
159
159
  end
160
160
  end
161
- connection.should have_last_search_with(
161
+ expect(connection).to have_last_search_with(
162
162
  :"f.title_text.hl.mergeContiguous" => 'true'
163
163
  )
164
164
  end
@@ -169,7 +169,7 @@ shared_examples_for "query with highlighting support" do
169
169
  highlight :phrase_highlighter => true
170
170
  end
171
171
  end
172
- connection.should have_last_search_with(
172
+ expect(connection).to have_last_search_with(
173
173
  :"hl.usePhraseHighlighter" => 'true'
174
174
  )
175
175
  end
@@ -180,7 +180,7 @@ shared_examples_for "query with highlighting support" do
180
180
  highlight :title, :phrase_highlighter => true
181
181
  end
182
182
  end
183
- connection.should have_last_search_with(
183
+ expect(connection).to have_last_search_with(
184
184
  :"f.title_text.hl.usePhraseHighlighter" => 'true'
185
185
  )
186
186
  end
@@ -191,7 +191,7 @@ shared_examples_for "query with highlighting support" do
191
191
  highlight :phrase_highlighter => true, :require_field_match => true
192
192
  end
193
193
  end
194
- connection.should have_last_search_with(
194
+ expect(connection).to have_last_search_with(
195
195
  :"hl.requireFieldMatch" => 'true'
196
196
  )
197
197
  end
@@ -202,7 +202,7 @@ shared_examples_for "query with highlighting support" do
202
202
  highlight :title, :phrase_highlighter => true, :require_field_match => true
203
203
  end
204
204
  end
205
- connection.should have_last_search_with(
205
+ expect(connection).to have_last_search_with(
206
206
  :"f.title_text.hl.requireFieldMatch" => 'true'
207
207
  )
208
208
  end
@@ -214,7 +214,7 @@ shared_examples_for "query with highlighting support" do
214
214
  highlight :body, :max_snippets => 1
215
215
  end
216
216
  end
217
- connection.should have_last_search_with(
217
+ expect(connection).to have_last_search_with(
218
218
  :"hl.fl" => %w(title_text body_textsv),
219
219
  :"f.title_text.hl.snippets" => 2,
220
220
  :"f.body_textsv.hl.snippets" => 1
@@ -227,7 +227,7 @@ shared_examples_for "query with highlighting support" do
227
227
  highlight :title, :formatter => 'formatter'
228
228
  end
229
229
  end
230
- connection.should have_last_search_with(
230
+ expect(connection).to have_last_search_with(
231
231
  :"f.title_text.hl.formatter" => 'formatter'
232
232
  )
233
233
  end
@@ -238,7 +238,7 @@ shared_examples_for "query with highlighting support" do
238
238
  highlight :title, :fragmenter => 'example_fragmenter'
239
239
  end
240
240
  end
241
- connection.should have_last_search_with(
241
+ expect(connection).to have_last_search_with(
242
242
  :"f.title_text.hl.fragmenter" => 'example_fragmenter'
243
243
  )
244
244
  end