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
@@ -2,114 +2,133 @@ shared_examples_for "facetable query" do
2
2
  describe 'on fields' do
3
3
  it 'does not turn faceting on if no facet requested' do
4
4
  search
5
- connection.should_not have_last_search_with('facet')
5
+ expect(connection).not_to have_last_search_with('facet')
6
6
  end
7
7
 
8
8
  it 'turns faceting on if facet is requested' do
9
9
  search do
10
10
  facet :category_ids
11
11
  end
12
- connection.should have_last_search_with(:facet => 'true')
12
+ expect(connection).to have_last_search_with(:facet => 'true')
13
13
  end
14
14
 
15
15
  it 'requests single field facet' do
16
16
  search do
17
17
  facet :category_ids
18
18
  end
19
- connection.should have_last_search_with(:"facet.field" => %w(category_ids_im))
19
+ expect(connection).to have_last_search_with(:"facet.field" => %w(category_ids_im))
20
20
  end
21
21
 
22
22
  it 'requests multiple field facets' do
23
23
  search do
24
24
  facet :category_ids, :blog_id
25
25
  end
26
- connection.should have_last_search_with(:"facet.field" => %w(category_ids_im blog_id_i))
26
+ expect(connection).to have_last_search_with(:"facet.field" => %w(category_ids_im blog_id_i))
27
27
  end
28
28
 
29
29
  it 'sets facet sort by count' do
30
30
  search do
31
31
  facet :category_ids, :sort => :count
32
32
  end
33
- connection.should have_last_search_with(:"f.category_ids_im.facet.sort" => 'true')
33
+ expect(connection).to have_last_search_with(:"f.category_ids_im.facet.sort" => 'true')
34
34
  end
35
35
 
36
36
  it 'sets facet sort by index' do
37
37
  search do
38
38
  facet :category_ids, :sort => :index
39
39
  end
40
- connection.should have_last_search_with(:"f.category_ids_im.facet.sort" => 'false')
40
+ expect(connection).to have_last_search_with(:"f.category_ids_im.facet.sort" => 'false')
41
41
  end
42
42
 
43
43
  it 'raises ArgumentError if bogus facet sort provided' do
44
- lambda do
44
+ expect do
45
45
  search do
46
46
  facet :category_ids, :sort => :sideways
47
47
  end
48
- end.should raise_error(ArgumentError)
48
+ end.to raise_error(ArgumentError)
49
49
  end
50
50
 
51
51
  it 'sets the facet limit' do
52
52
  search do
53
53
  facet :category_ids, :limit => 10
54
54
  end
55
- connection.should have_last_search_with(:"f.category_ids_im.facet.limit" => 10)
55
+ expect(connection).to have_last_search_with(:"f.category_ids_im.facet.limit" => 10)
56
56
  end
57
57
 
58
58
  it 'sets the facet offset' do
59
59
  search do
60
60
  facet :category_ids, :offset => 10
61
61
  end
62
- connection.should have_last_search_with(:"f.category_ids_im.facet.offset" => 10)
62
+ expect(connection).to have_last_search_with(:"f.category_ids_im.facet.offset" => 10)
63
63
  end
64
64
 
65
65
  it 'sets the facet minimum count' do
66
66
  search do
67
67
  facet :category_ids, :minimum_count => 5
68
68
  end
69
- connection.should have_last_search_with(:"f.category_ids_im.facet.mincount" => 5)
69
+ expect(connection).to have_last_search_with(:"f.category_ids_im.facet.mincount" => 5)
70
70
  end
71
71
 
72
72
  it 'sets the facet minimum count to zero if zeros are allowed' do
73
73
  search do
74
74
  facet :category_ids, :zeros => true
75
75
  end
76
- connection.should have_last_search_with(:"f.category_ids_im.facet.mincount" => 0)
76
+ expect(connection).to have_last_search_with(:"f.category_ids_im.facet.mincount" => 0)
77
77
  end
78
78
 
79
79
  it 'sets the facet minimum count to one by default' do
80
80
  search do
81
81
  facet :category_ids
82
82
  end
83
- connection.should have_last_search_with(:"f.category_ids_im.facet.mincount" => 1)
83
+ expect(connection).to have_last_search_with(:"f.category_ids_im.facet.mincount" => 1)
84
84
  end
85
85
 
86
86
  it 'sets the facet prefix' do
87
87
  search do
88
88
  facet :title, :prefix => 'Test'
89
89
  end
90
- connection.should have_last_search_with(:"f.title_ss.facet.prefix" => 'Test')
90
+ expect(connection).to have_last_search_with(:"f.title_ss.facet.prefix" => 'Test')
91
91
  end
92
92
 
93
93
  it 'sends a query facet for :any extra' do
94
94
  search do
95
95
  facet :category_ids, :extra => :any
96
96
  end
97
- connection.should have_last_search_with(:"facet.query" => "category_ids_im:[* TO *]")
97
+ expect(connection).to have_last_search_with(:"facet.query" => "category_ids_im:[* TO *]")
98
98
  end
99
99
 
100
100
  it 'sends a query facet for :none extra' do
101
101
  search do
102
102
  facet :category_ids, :extra => :none
103
103
  end
104
- connection.should have_last_search_with(:"facet.query" => "-category_ids_im:[* TO *]")
104
+ expect(connection).to have_last_search_with(:"facet.query" => "-category_ids_im:[* TO *]")
105
105
  end
106
106
 
107
107
  it 'raises an ArgumentError if bogus extra is passed' do
108
- lambda do
108
+ expect do
109
109
  search do
110
110
  facet :category_ids, :extra => :bogus
111
111
  end
112
- end.should raise_error(ArgumentError)
112
+ end.to raise_error(ArgumentError)
113
+ end
114
+
115
+ it 'tags and excludes a geofilt in a field facet' do
116
+ search do
117
+ post_geo = with(:coordinates_new).in_radius(32, -68, 1)
118
+ facet(:coordinates_new, :exclude => post_geo) do
119
+ row(0..10) do
120
+ with(:coordinates_new).in_radius(32, -68, 10)
121
+ end
122
+ end
123
+ end
124
+ if connection.searches.last.has_key?(:"mlt.fl")
125
+ filter_tag = get_filter_tag('_query_:"{!geofilt sfield=coordinates_new_ll pt=32,-68 d=1}"')
126
+ else
127
+ filter_tag = get_filter_tag('{!geofilt sfield=coordinates_new_ll pt=32,-68 d=1}')
128
+ end
129
+ expect(connection).to have_last_search_with(
130
+ :"facet.query" => "{!ex=#{filter_tag}}_query_:\"{!geofilt sfield=coordinates_new_ll pt=32,-68 d=10}\""
131
+ )
113
132
  end
114
133
 
115
134
  it 'tags and excludes a scope filter in a field facet' do
@@ -118,7 +137,7 @@ shared_examples_for "facetable query" do
118
137
  facet(:blog_id, :exclude => blog_filter)
119
138
  end
120
139
  filter_tag = get_filter_tag('blog_id_i:1')
121
- connection.should have_last_search_with(
140
+ expect(connection).to have_last_search_with(
122
141
  :"facet.field" => %W({!ex=#{filter_tag}}blog_id_i)
123
142
  )
124
143
  end
@@ -132,7 +151,7 @@ shared_examples_for "facetable query" do
132
151
  facet(:blog_id, :exclude => blog_filter)
133
152
  end
134
153
  filter_tag = get_filter_tag('(blog_id_i:1 OR blog_id_i:2)')
135
- connection.should have_last_search_with(
154
+ expect(connection).to have_last_search_with(
136
155
  :"facet.field" => %W({!ex=#{filter_tag}}blog_id_i)
137
156
  )
138
157
  end
@@ -146,7 +165,7 @@ shared_examples_for "facetable query" do
146
165
  filter_tags = %w(blog_id_i:1 category_ids_im:2).map do |phrase|
147
166
  get_filter_tag(phrase)
148
167
  end.join(',')
149
- connection.should have_last_search_with(
168
+ expect(connection).to have_last_search_with(
150
169
  :"facet.field" => %W({!ex=#{filter_tags}}blog_id_i)
151
170
  )
152
171
  end
@@ -155,39 +174,39 @@ shared_examples_for "facetable query" do
155
174
  search do
156
175
  with(:blog_id, 1)
157
176
  end
158
- connection.should have_last_search_including(:fq, "blog_id_i:1")
177
+ expect(connection).to have_last_search_including(:fq, "blog_id_i:1")
159
178
  end
160
179
 
161
180
  it 'names a field facet' do
162
181
  search do
163
182
  facet(:blog_id, :name => :blog)
164
183
  end
165
- connection.should have_last_search_including(:"facet.field", "{!key=blog}blog_id_i")
184
+ expect(connection).to have_last_search_including(:"facet.field", "{!key=blog}blog_id_i")
166
185
  end
167
186
 
168
187
  it 'uses the custom field facet name in facet option parameters' do
169
188
  search do
170
189
  facet(:blog_id, :name => :blog, :sort => :count)
171
190
  end
172
- connection.should have_last_search_with(:"f.blog.facet.sort" => 'true')
191
+ expect(connection).to have_last_search_with(:"f.blog.facet.sort" => 'true')
173
192
  end
174
193
 
175
194
  it 'raises an ArgumentError if exclusion attempted on a restricted field facet' do
176
- lambda do
195
+ expect do
177
196
  search do
178
197
  blog_filter = with(:blog_id, 1)
179
198
  facet(:blog_id, :only => 1, :exclude => blog_filter)
180
199
  end
181
- end.should raise_error(ArgumentError)
200
+ end.to raise_error(ArgumentError)
182
201
  end
183
202
 
184
203
  it 'raises an ArgumentError if exclusion attempted on a facet with :extra' do
185
- lambda do
204
+ expect do
186
205
  search do
187
206
  blog_filter = with(:blog_id, 1)
188
207
  facet(:blog_id, :extra => :all, :exclude => blog_filter)
189
208
  end
190
- end.should raise_error(ArgumentError)
209
+ end.to raise_error(ArgumentError)
191
210
  end
192
211
  end
193
212
 
@@ -201,21 +220,21 @@ shared_examples_for "facetable query" do
201
220
  search do |query|
202
221
  query.facet :published_at
203
222
  end
204
- connection.should_not have_last_search_with(:"facet.date")
223
+ expect(connection).not_to have_last_search_with(:"facet.date")
205
224
  end
206
225
 
207
226
  it 'sets the facet to a date facet if time range is specified' do
208
227
  search do |query|
209
228
  query.facet :published_at, :time_range => @time_range
210
229
  end
211
- connection.should have_last_search_with(:"facet.date" => ['published_at_dt'])
230
+ expect(connection).to have_last_search_with(:"facet.date" => ['published_at_dt'])
212
231
  end
213
232
 
214
233
  it 'sets the facet start and end' do
215
234
  search do |query|
216
235
  query.facet :published_at, :time_range => @time_range
217
236
  end
218
- connection.should have_last_search_with(
237
+ expect(connection).to have_last_search_with(
219
238
  :"f.published_at_dt.facet.date.start" => '2009-06-01T04:00:00Z',
220
239
  :"f.published_at_dt.facet.date.end" => '2009-07-01T04:00:00Z'
221
240
  )
@@ -225,22 +244,22 @@ shared_examples_for "facetable query" do
225
244
  search do |query|
226
245
  query.facet :published_at, :time_range => @time_range
227
246
  end
228
- connection.should have_last_search_with(:"f.published_at_dt.facet.date.gap" => "+86400SECONDS")
247
+ expect(connection).to have_last_search_with(:"f.published_at_dt.facet.date.gap" => "+86400SECONDS")
229
248
  end
230
249
 
231
250
  it 'uses custom time interval' do
232
251
  search do |query|
233
252
  query.facet :published_at, :time_range => @time_range, :time_interval => 3600
234
253
  end
235
- connection.should have_last_search_with(:"f.published_at_dt.facet.date.gap" => "+3600SECONDS")
254
+ expect(connection).to have_last_search_with(:"f.published_at_dt.facet.date.gap" => "+3600SECONDS")
236
255
  end
237
256
 
238
257
  it 'does not allow date faceting on a non-date field' do
239
- lambda do
258
+ expect do
240
259
  search do |query|
241
260
  query.facet :blog_id, :time_range => @time_range
242
261
  end
243
- end.should raise_error(ArgumentError)
262
+ end.to raise_error(ArgumentError)
244
263
  end
245
264
  end
246
265
 
@@ -253,21 +272,21 @@ shared_examples_for "facetable query" do
253
272
  search do |query|
254
273
  query.facet :average_rating
255
274
  end
256
- connection.should_not have_last_search_with(:"facet.range")
275
+ expect(connection).not_to have_last_search_with(:"facet.range")
257
276
  end
258
277
 
259
278
  it 'sets the facet to a range facet if the range is specified' do
260
279
  search do |query|
261
280
  query.facet :average_rating, :range => @range
262
281
  end
263
- connection.should have_last_search_with(:"facet.range" => ['average_rating_ft'])
282
+ expect(connection).to have_last_search_with(:"facet.range" => ['average_rating_ft'])
264
283
  end
265
284
 
266
285
  it 'sets the facet start and end' do
267
286
  search do |query|
268
287
  query.facet :average_rating, :range => @range
269
288
  end
270
- connection.should have_last_search_with(
289
+ expect(connection).to have_last_search_with(
271
290
  :"f.average_rating_ft.facet.range.start" => '2.0',
272
291
  :"f.average_rating_ft.facet.range.end" => '4.0'
273
292
  )
@@ -277,14 +296,14 @@ shared_examples_for "facetable query" do
277
296
  search do |query|
278
297
  query.facet :average_rating, :range => @range
279
298
  end
280
- connection.should have_last_search_with(:"f.average_rating_ft.facet.range.gap" => "10")
299
+ expect(connection).to have_last_search_with(:"f.average_rating_ft.facet.range.gap" => "10")
281
300
  end
282
301
 
283
302
  it 'uses custom range interval' do
284
303
  search do |query|
285
304
  query.facet :average_rating, :range => @range, :range_interval => 1
286
305
  end
287
- connection.should have_last_search_with(:"f.average_rating_ft.facet.range.gap" => "1")
306
+ expect(connection).to have_last_search_with(:"f.average_rating_ft.facet.range.gap" => "1")
288
307
  end
289
308
 
290
309
  it 'tags and excludes a scope filter in a range facet' do
@@ -293,7 +312,7 @@ shared_examples_for "facetable query" do
293
312
  query.facet(:average_rating, :range => @range, :exclude => blog_filter)
294
313
  end
295
314
  filter_tag = get_filter_tag('blog_id_i:1')
296
- connection.should have_last_search_with(
315
+ expect(connection).to have_last_search_with(
297
316
  :"facet.range" => %W({!ex=#{filter_tag}}average_rating_ft)
298
317
  )
299
318
  end
@@ -302,15 +321,15 @@ shared_examples_for "facetable query" do
302
321
  search do |query|
303
322
  query.facet :average_rating, :range => @range, :include => :edge
304
323
  end
305
- connection.should have_last_search_with(:"f.average_rating_ft.facet.range.include" => "edge")
324
+ expect(connection).to have_last_search_with(:"f.average_rating_ft.facet.range.include" => "edge")
306
325
  end
307
326
 
308
327
  it 'does not allow date faceting on a non-continuous field' do
309
- lambda do
328
+ expect do
310
329
  search do |query|
311
330
  query.facet :title, :range => @range
312
331
  end
313
- end.should raise_error(ArgumentError)
332
+ end.to raise_error(ArgumentError)
314
333
  end
315
334
  end
316
335
 
@@ -323,7 +342,7 @@ shared_examples_for "facetable query" do
323
342
  end
324
343
  end
325
344
  end
326
- connection.should have_last_search_with(:facet => 'true')
345
+ expect(connection).to have_last_search_with(:facet => 'true')
327
346
  end
328
347
 
329
348
  it 'facets by query' do
@@ -334,7 +353,7 @@ shared_examples_for "facetable query" do
334
353
  end
335
354
  end
336
355
  end
337
- connection.should have_last_search_with(:"facet.query" => 'average_rating_ft:[4\.0 TO 5\.0]')
356
+ expect(connection).to have_last_search_with(:"facet.query" => 'average_rating_ft:[4\.0 TO 5\.0]')
338
357
  end
339
358
 
340
359
  it 'requests multiple query facets' do
@@ -348,7 +367,7 @@ shared_examples_for "facetable query" do
348
367
  end
349
368
  end
350
369
  end
351
- connection.should have_last_search_with(
370
+ expect(connection).to have_last_search_with(
352
371
  :"facet.query" => [
353
372
  'average_rating_ft:[3\.0 TO 4\.0]',
354
373
  'average_rating_ft:[4\.0 TO 5\.0]'
@@ -365,7 +384,7 @@ shared_examples_for "facetable query" do
365
384
  end
366
385
  end
367
386
  end
368
- connection.should have_last_search_with(
387
+ expect(connection).to have_last_search_with(
369
388
  :"facet.query" => '(category_ids_im:1 AND blog_id_i:2)'
370
389
  )
371
390
  end
@@ -381,7 +400,7 @@ shared_examples_for "facetable query" do
381
400
  end
382
401
  end
383
402
  end
384
- connection.should have_last_search_with(
403
+ expect(connection).to have_last_search_with(
385
404
  :"facet.query" => '(category_ids_im:1 OR blog_id_i:2)'
386
405
  )
387
406
  end
@@ -390,7 +409,7 @@ shared_examples_for "facetable query" do
390
409
  search do
391
410
  facet :category_ids, :only => [1, 3]
392
411
  end
393
- connection.should have_last_search_with(
412
+ expect(connection).to have_last_search_with(
394
413
  :"facet.query" => ['category_ids_im:1', 'category_ids_im:3']
395
414
  )
396
415
  end
@@ -399,7 +418,7 @@ shared_examples_for "facetable query" do
399
418
  search do
400
419
  facet :published_at, :only => [Time.utc(2009, 8, 28, 15, 33), Time.utc(2008,8, 28, 15, 33)]
401
420
  end
402
- connection.should have_last_search_with(
421
+ expect(connection).to have_last_search_with(
403
422
  :"facet.query" => [
404
423
  'published_at_dt:2009\-08\-28T15\:33\:00Z',
405
424
  'published_at_dt:2008\-08\-28T15\:33\:00Z'
@@ -411,7 +430,7 @@ shared_examples_for "facetable query" do
411
430
  search do
412
431
  facet(:foo) {}
413
432
  end
414
- connection.should_not have_last_search_with(:"facet.query")
433
+ expect(connection).not_to have_last_search_with(:"facet.query")
415
434
  end
416
435
 
417
436
  it 'ignores facet query row with no restrictions' do
@@ -423,7 +442,7 @@ shared_examples_for "facetable query" do
423
442
  row(:baz) {}
424
443
  end
425
444
  end
426
- connection.searches.last[:"facet.query"].should be_a(String)
445
+ expect(connection.searches.last[:"facet.query"]).to be_a(String)
427
446
  end
428
447
 
429
448
  it 'tags and excludes a scope filter in a query facet' do
@@ -436,7 +455,7 @@ shared_examples_for "facetable query" do
436
455
  end
437
456
  end
438
457
  filter_tag = get_filter_tag('blog_id_i:1')
439
- connection.should have_last_search_with(
458
+ expect(connection).to have_last_search_with(
440
459
  :"facet.query" => "{!ex=#{filter_tag}}category_ids_im:1"
441
460
  )
442
461
  end
@@ -454,7 +473,7 @@ shared_examples_for "facetable query" do
454
473
  end
455
474
  end
456
475
  filter_tag = get_filter_tag('(blog_id_i:1 OR blog_id_i:2)')
457
- connection.should have_last_search_with(
476
+ expect(connection).to have_last_search_with(
458
477
  :"facet.query" => "{!ex=#{filter_tag}}category_ids_im:1"
459
478
  )
460
479
  end
@@ -472,7 +491,7 @@ shared_examples_for "facetable query" do
472
491
  filter_tags = %w(blog_id_i:1 category_ids_im:2).map do |phrase|
473
492
  get_filter_tag(phrase)
474
493
  end.join(',')
475
- connection.should have_last_search_with(
494
+ expect(connection).to have_last_search_with(
476
495
  :"facet.query" => "{!ex=#{filter_tags}}category_ids_im:1"
477
496
  )
478
497
  end
@@ -484,25 +503,25 @@ shared_examples_for "facetable query" do
484
503
  row(:bar) {}
485
504
  end
486
505
  end
487
- connection.should_not have_last_search_with(:"facet.query")
506
+ expect(connection).not_to have_last_search_with(:"facet.query")
488
507
  end
489
508
 
490
509
  it 'does not allow 0 arguments to facet method with block' do
491
- lambda do
510
+ expect do
492
511
  search do
493
512
  facet do
494
513
  end
495
514
  end
496
- end.should raise_error(ArgumentError)
515
+ end.to raise_error(ArgumentError)
497
516
  end
498
517
 
499
518
  it 'does not allow more than 1 argument to facet method with block' do
500
- lambda do
519
+ expect do
501
520
  search do
502
521
  facet :foo, :bar do
503
522
  end
504
523
  end
505
- end.should raise_error(ArgumentError)
524
+ end.to raise_error(ArgumentError)
506
525
  end
507
526
  end
508
527
  end