thinking-sphinx 3.2.0 → 3.3.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.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +6 -2
  3. data/Appraisals +13 -0
  4. data/Gemfile +2 -1
  5. data/HISTORY +19 -0
  6. data/README.textile +3 -2
  7. data/gemfiles/rails_3_2.gemfile +2 -1
  8. data/gemfiles/rails_4_0.gemfile +2 -1
  9. data/gemfiles/rails_4_1.gemfile +2 -1
  10. data/gemfiles/rails_4_2.gemfile +2 -1
  11. data/gemfiles/rails_5_0.gemfile +12 -0
  12. data/lib/thinking_sphinx.rb +2 -0
  13. data/lib/thinking_sphinx/active_record/attribute/type.rb +17 -3
  14. data/lib/thinking_sphinx/active_record/callbacks/delta_callbacks.rb +12 -4
  15. data/lib/thinking_sphinx/active_record/database_adapters.rb +1 -1
  16. data/lib/thinking_sphinx/active_record/sql_builder/query.rb +4 -0
  17. data/lib/thinking_sphinx/active_record/sql_source.rb +1 -1
  18. data/lib/thinking_sphinx/configuration.rb +3 -2
  19. data/lib/thinking_sphinx/connection.rb +23 -10
  20. data/lib/thinking_sphinx/deltas/index_job.rb +6 -2
  21. data/lib/thinking_sphinx/errors.rb +25 -0
  22. data/lib/thinking_sphinx/middlewares/active_record_translator.rb +14 -2
  23. data/lib/thinking_sphinx/railtie.rb +1 -1
  24. data/lib/thinking_sphinx/rake_interface.rb +71 -23
  25. data/lib/thinking_sphinx/real_time/callbacks/real_time_callbacks.rb +15 -7
  26. data/lib/thinking_sphinx/real_time/populator.rb +3 -3
  27. data/lib/thinking_sphinx/tasks.rb +7 -8
  28. data/lib/thinking_sphinx/wildcard.rb +1 -1
  29. data/spec/acceptance/association_scoping_spec.rb +5 -5
  30. data/spec/acceptance/attribute_access_spec.rb +4 -4
  31. data/spec/acceptance/attribute_updates_spec.rb +3 -3
  32. data/spec/acceptance/batch_searching_spec.rb +4 -4
  33. data/spec/acceptance/big_integers_spec.rb +6 -6
  34. data/spec/acceptance/connection_spec.rb +23 -0
  35. data/spec/acceptance/excerpts_spec.rb +8 -8
  36. data/spec/acceptance/facets_spec.rb +13 -13
  37. data/spec/acceptance/geosearching_spec.rb +8 -8
  38. data/spec/acceptance/grouping_by_attributes_spec.rb +10 -10
  39. data/spec/acceptance/index_options_spec.rb +16 -16
  40. data/spec/acceptance/indexing_spec.rb +3 -3
  41. data/spec/acceptance/paginating_search_results_spec.rb +3 -3
  42. data/spec/acceptance/real_time_updates_spec.rb +4 -4
  43. data/spec/acceptance/remove_deleted_records_spec.rb +12 -12
  44. data/spec/acceptance/search_counts_spec.rb +2 -2
  45. data/spec/acceptance/search_for_just_ids_spec.rb +2 -2
  46. data/spec/acceptance/searching_across_models_spec.rb +6 -6
  47. data/spec/acceptance/searching_across_schemas_spec.rb +10 -10
  48. data/spec/acceptance/searching_on_fields_spec.rb +9 -9
  49. data/spec/acceptance/searching_with_filters_spec.rb +16 -16
  50. data/spec/acceptance/searching_with_sti_spec.rb +9 -9
  51. data/spec/acceptance/searching_within_a_model_spec.rb +17 -17
  52. data/spec/acceptance/sorting_search_results_spec.rb +6 -6
  53. data/spec/acceptance/specifying_sql_spec.rb +62 -62
  54. data/spec/acceptance/sphinx_scopes_spec.rb +9 -9
  55. data/spec/acceptance/sql_deltas_spec.rb +7 -7
  56. data/spec/acceptance/support/database_cleaner.rb +1 -1
  57. data/spec/acceptance/support/sphinx_controller.rb +4 -1
  58. data/spec/acceptance/support/sphinx_helpers.rb +4 -0
  59. data/spec/acceptance/suspended_deltas_spec.rb +9 -9
  60. data/spec/internal/app/indices/article_index.rb +2 -2
  61. data/spec/internal/app/indices/book_index.rb +2 -1
  62. data/spec/internal/app/indices/product_index.rb +0 -2
  63. data/spec/internal/app/models/categorisation.rb +8 -1
  64. data/spec/spec_helper.rb +2 -0
  65. data/spec/support/json_column.rb +5 -1
  66. data/spec/support/multi_schema.rb +3 -1
  67. data/spec/support/sphinx_yaml_helpers.rb +1 -1
  68. data/spec/thinking_sphinx/active_record/association_spec.rb +1 -1
  69. data/spec/thinking_sphinx/active_record/attribute/type_spec.rb +41 -38
  70. data/spec/thinking_sphinx/active_record/base_spec.rb +29 -29
  71. data/spec/thinking_sphinx/active_record/callbacks/delete_callbacks_spec.rb +10 -10
  72. data/spec/thinking_sphinx/active_record/callbacks/delta_callbacks_spec.rb +48 -25
  73. data/spec/thinking_sphinx/active_record/callbacks/update_callbacks_spec.rb +8 -8
  74. data/spec/thinking_sphinx/active_record/column_spec.rb +13 -13
  75. data/spec/thinking_sphinx/active_record/column_sql_presenter_spec.rb +5 -5
  76. data/spec/thinking_sphinx/active_record/database_adapters/abstract_adapter_spec.rb +5 -5
  77. data/spec/thinking_sphinx/active_record/database_adapters/mysql_adapter_spec.rb +11 -11
  78. data/spec/thinking_sphinx/active_record/database_adapters/postgresql_adapter_spec.rb +13 -13
  79. data/spec/thinking_sphinx/active_record/database_adapters_spec.rb +48 -48
  80. data/spec/thinking_sphinx/active_record/field_spec.rb +7 -7
  81. data/spec/thinking_sphinx/active_record/filter_reflection_spec.rb +32 -32
  82. data/spec/thinking_sphinx/active_record/index_spec.rb +35 -36
  83. data/spec/thinking_sphinx/active_record/interpreter_spec.rb +51 -51
  84. data/spec/thinking_sphinx/active_record/polymorpher_spec.rb +14 -14
  85. data/spec/thinking_sphinx/active_record/property_sql_presenter_spec.rb +67 -67
  86. data/spec/thinking_sphinx/active_record/sql_builder_spec.rb +140 -140
  87. data/spec/thinking_sphinx/active_record/sql_source_spec.rb +97 -95
  88. data/spec/thinking_sphinx/configuration_spec.rb +81 -81
  89. data/spec/thinking_sphinx/connection_spec.rb +13 -13
  90. data/spec/thinking_sphinx/deletion_spec.rb +11 -11
  91. data/spec/thinking_sphinx/deltas/default_delta_spec.rb +20 -20
  92. data/spec/thinking_sphinx/deltas_spec.rb +12 -12
  93. data/spec/thinking_sphinx/errors_spec.rb +30 -30
  94. data/spec/thinking_sphinx/excerpter_spec.rb +7 -7
  95. data/spec/thinking_sphinx/facet_search_spec.rb +16 -16
  96. data/spec/thinking_sphinx/index_set_spec.rb +7 -7
  97. data/spec/thinking_sphinx/index_spec.rb +24 -24
  98. data/spec/thinking_sphinx/masks/pagination_mask_spec.rb +20 -20
  99. data/spec/thinking_sphinx/masks/scopes_mask_spec.rb +18 -18
  100. data/spec/thinking_sphinx/middlewares/active_record_translator_spec.rb +22 -22
  101. data/spec/thinking_sphinx/middlewares/geographer_spec.rb +9 -9
  102. data/spec/thinking_sphinx/middlewares/glazier_spec.rb +4 -4
  103. data/spec/thinking_sphinx/middlewares/inquirer_spec.rb +7 -7
  104. data/spec/thinking_sphinx/middlewares/sphinxql_spec.rb +53 -53
  105. data/spec/thinking_sphinx/middlewares/stale_id_checker_spec.rb +5 -5
  106. data/spec/thinking_sphinx/middlewares/stale_id_filter_spec.rb +15 -15
  107. data/spec/thinking_sphinx/panes/attributes_pane_spec.rb +1 -1
  108. data/spec/thinking_sphinx/panes/distance_pane_spec.rb +4 -4
  109. data/spec/thinking_sphinx/panes/excerpts_pane_spec.rb +5 -5
  110. data/spec/thinking_sphinx/panes/weight_pane_spec.rb +1 -1
  111. data/spec/thinking_sphinx/rake_interface_spec.rb +66 -53
  112. data/spec/thinking_sphinx/real_time/attribute_spec.rb +13 -13
  113. data/spec/thinking_sphinx/real_time/callbacks/real_time_callbacks_spec.rb +107 -23
  114. data/spec/thinking_sphinx/real_time/field_spec.rb +14 -14
  115. data/spec/thinking_sphinx/real_time/index_spec.rb +29 -30
  116. data/spec/thinking_sphinx/real_time/interpreter_spec.rb +30 -30
  117. data/spec/thinking_sphinx/scopes_spec.rb +5 -5
  118. data/spec/thinking_sphinx/search/glaze_spec.rb +15 -15
  119. data/spec/thinking_sphinx/search/query_spec.rb +10 -10
  120. data/spec/thinking_sphinx/search_spec.rb +28 -28
  121. data/spec/thinking_sphinx/wildcard_spec.rb +16 -11
  122. data/spec/thinking_sphinx_spec.rb +6 -6
  123. data/thinking-sphinx.gemspec +4 -4
  124. metadata +12 -9
@@ -13,38 +13,38 @@ describe ThinkingSphinx::ActiveRecord::SQLSource do
13
13
  let(:adapter) { double('adapter') }
14
14
 
15
15
  before :each do
16
- ThinkingSphinx::ActiveRecord::DatabaseAdapters::MySQLAdapter.
17
- stub!(:=== => true)
18
- ThinkingSphinx::ActiveRecord::DatabaseAdapters.
19
- stub!(:adapter_for => adapter)
16
+ allow(ThinkingSphinx::ActiveRecord::DatabaseAdapters::MySQLAdapter).
17
+ to receive_messages(:=== => true)
18
+ allow(ThinkingSphinx::ActiveRecord::DatabaseAdapters).
19
+ to receive_messages(:adapter_for => adapter)
20
20
  end
21
21
 
22
22
  describe '#adapter' do
23
23
  it "returns a database adapter for the model" do
24
- ThinkingSphinx::ActiveRecord::DatabaseAdapters.
25
- should_receive(:adapter_for).with(model).and_return(adapter)
24
+ expect(ThinkingSphinx::ActiveRecord::DatabaseAdapters).
25
+ to receive(:adapter_for).with(model).and_return(adapter)
26
26
 
27
- source.adapter.should == adapter
27
+ expect(source.adapter).to eq(adapter)
28
28
  end
29
29
  end
30
30
 
31
31
  describe '#attributes' do
32
32
  it "has the internal id attribute by default" do
33
- source.attributes.collect(&:name).should include('sphinx_internal_id')
33
+ expect(source.attributes.collect(&:name)).to include('sphinx_internal_id')
34
34
  end
35
35
 
36
36
  it "has the class name attribute by default" do
37
- source.attributes.collect(&:name).should include('sphinx_internal_class')
37
+ expect(source.attributes.collect(&:name)).to include('sphinx_internal_class')
38
38
  end
39
39
 
40
40
  it "has the internal deleted attribute by default" do
41
- source.attributes.collect(&:name).should include('sphinx_deleted')
41
+ expect(source.attributes.collect(&:name)).to include('sphinx_deleted')
42
42
  end
43
43
 
44
44
  it "marks the internal class attribute as a facet" do
45
- source.attributes.detect { |attribute|
45
+ expect(source.attributes.detect { |attribute|
46
46
  attribute.name == 'sphinx_internal_class'
47
- }.options[:facet].should be_true
47
+ }.options[:facet]).to be_truthy
48
48
  end
49
49
  end
50
50
 
@@ -64,18 +64,18 @@ describe ThinkingSphinx::ActiveRecord::SQLSource do
64
64
  }
65
65
 
66
66
  it "loads the processor with the adapter" do
67
- processor_class.should_receive(:try).with(:new, adapter, {}).
67
+ expect(processor_class).to receive(:try).with(:new, adapter, {}).
68
68
  and_return processor
69
69
 
70
70
  source.delta_processor
71
71
  end
72
72
 
73
73
  it "returns the given processor" do
74
- source.delta_processor.should == processor
74
+ expect(source.delta_processor).to eq(processor)
75
75
  end
76
76
 
77
77
  it "passes given options to the processor" do
78
- processor_class.should_receive(:try).with(:new, adapter, {:opt_key => :opt_value})
78
+ expect(processor_class).to receive(:try).with(:new, adapter, {:opt_key => :opt_value})
79
79
  source_with_options.delta_processor
80
80
  end
81
81
  end
@@ -86,7 +86,7 @@ describe ThinkingSphinx::ActiveRecord::SQLSource do
86
86
  :delta? => true,
87
87
  :primary_key => model.primary_key || :id
88
88
 
89
- source.should be_a_delta
89
+ expect(source).to be_a_delta
90
90
  end
91
91
  end
92
92
 
@@ -96,46 +96,46 @@ describe ThinkingSphinx::ActiveRecord::SQLSource do
96
96
  :disable_range? => true,
97
97
  :primary_key => model.primary_key || :id
98
98
 
99
- source.disable_range?.should be_true
99
+ expect(source.disable_range?).to be_truthy
100
100
  end
101
101
  end
102
102
 
103
103
  describe '#fields' do
104
104
  it "has the internal class field by default" do
105
- source.fields.collect(&:name).
106
- should include('sphinx_internal_class_name')
105
+ expect(source.fields.collect(&:name)).
106
+ to include('sphinx_internal_class_name')
107
107
  end
108
108
 
109
109
  it "sets the sphinx class field to use a string of the class name" do
110
- source.fields.detect { |field|
110
+ expect(source.fields.detect { |field|
111
111
  field.name == 'sphinx_internal_class_name'
112
- }.columns.first.__name.should == "'User'"
112
+ }.columns.first.__name).to eq("'User'")
113
113
  end
114
114
 
115
115
  it "uses the inheritance column if it exists for the sphinx class field" do
116
- adapter.stub :quoted_table_name => '"users"', :quote => '"type"'
117
- adapter.stub(:convert_blank) { |clause, default|
116
+ allow(adapter).to receive_messages :quoted_table_name => '"users"', :quote => '"type"'
117
+ allow(adapter).to receive(:convert_blank) { |clause, default|
118
118
  "coalesce(nullif(#{clause}, ''), #{default})"
119
119
  }
120
- model.stub :column_names => ['type'], :sti_name => 'User'
120
+ allow(model).to receive_messages :column_names => ['type'], :sti_name => 'User'
121
121
 
122
- source.fields.detect { |field|
122
+ expect(source.fields.detect { |field|
123
123
  field.name == 'sphinx_internal_class_name'
124
- }.columns.first.__name.
125
- should == "coalesce(nullif(\"users\".\"type\", ''), 'User')"
124
+ }.columns.first.__name).
125
+ to eq("coalesce(nullif(\"users\".\"type\", ''), 'User')")
126
126
  end
127
127
  end
128
128
 
129
129
  describe '#name' do
130
130
  it "defaults to the model name downcased with the given position" do
131
- source.name.should == 'user_3'
131
+ expect(source.name).to eq('user_3')
132
132
  end
133
133
 
134
134
  it "allows for custom names, but adds the position suffix" do
135
135
  source = ThinkingSphinx::ActiveRecord::SQLSource.new model,
136
136
  :name => 'people', :position => 2, :primary_key => model.primary_key || :id
137
137
 
138
- source.name.should == 'people_2'
138
+ expect(source.name).to eq('people_2')
139
139
  end
140
140
  end
141
141
 
@@ -144,19 +144,19 @@ describe ThinkingSphinx::ActiveRecord::SQLSource do
144
144
  source = ThinkingSphinx::ActiveRecord::SQLSource.new model,
145
145
  :offset => 12, :primary_key => model.primary_key || :id
146
146
 
147
- source.offset.should == 12
147
+ expect(source.offset).to eq(12)
148
148
  end
149
149
  end
150
150
 
151
151
  describe '#options' do
152
152
  it "defaults to having utf8? set to false" do
153
- source.options[:utf8?].should be_false
153
+ expect(source.options[:utf8?]).to be_falsey
154
154
  end
155
155
 
156
156
  it "sets utf8? to true if the database encoding is utf8" do
157
157
  db_config[:encoding] = 'utf8'
158
158
 
159
- source.options[:utf8?].should be_true
159
+ expect(source.options[:utf8?]).to be_truthy
160
160
  end
161
161
 
162
162
  describe "#primary key" do
@@ -182,34 +182,34 @@ describe ThinkingSphinx::ActiveRecord::SQLSource do
182
182
  let(:template) { double('template', :apply => true) }
183
183
 
184
184
  before :each do
185
- ThinkingSphinx::ActiveRecord::SQLBuilder.stub! :new => builder
186
- ThinkingSphinx::ActiveRecord::Attribute::SphinxPresenter.stub :new => presenter
187
- ThinkingSphinx::ActiveRecord::SQLSource::Template.stub :new => template
188
- ThinkingSphinx::Configuration.stub :instance => config
185
+ allow(ThinkingSphinx::ActiveRecord::SQLBuilder).to receive_messages :new => builder
186
+ allow(ThinkingSphinx::ActiveRecord::Attribute::SphinxPresenter).to receive_messages :new => presenter
187
+ allow(ThinkingSphinx::ActiveRecord::SQLSource::Template).to receive_messages :new => template
188
+ allow(ThinkingSphinx::Configuration).to receive_messages :instance => config
189
189
  end
190
190
 
191
191
  it "uses the builder's sql_query value" do
192
- builder.stub! :sql_query => 'select * from table'
192
+ allow(builder).to receive_messages :sql_query => 'select * from table'
193
193
 
194
194
  source.render
195
195
 
196
- source.sql_query.should == 'select * from table'
196
+ expect(source.sql_query).to eq('select * from table')
197
197
  end
198
198
 
199
199
  it "uses the builder's sql_query_range value" do
200
- builder.stub! :sql_query_range => 'select 0, 10 from table'
200
+ allow(builder).to receive_messages :sql_query_range => 'select 0, 10 from table'
201
201
 
202
202
  source.render
203
203
 
204
- source.sql_query_range.should == 'select 0, 10 from table'
204
+ expect(source.sql_query_range).to eq('select 0, 10 from table')
205
205
  end
206
206
 
207
207
  it "appends the builder's sql_query_pre value" do
208
- builder.stub! :sql_query_pre => ['Change Setting']
208
+ allow(builder).to receive_messages :sql_query_pre => ['Change Setting']
209
209
 
210
210
  source.render
211
211
 
212
- source.sql_query_pre.should == ['Change Setting']
212
+ expect(source.sql_query_pre).to eq(['Change Setting'])
213
213
  end
214
214
 
215
215
  it "adds fields with attributes to sql_field_string" do
@@ -218,7 +218,7 @@ describe ThinkingSphinx::ActiveRecord::SQLSource do
218
218
 
219
219
  source.render
220
220
 
221
- source.sql_field_string.should include('title')
221
+ expect(source.sql_field_string).to include('title')
222
222
  end
223
223
 
224
224
  it "adds any joined or file fields" do
@@ -227,7 +227,7 @@ describe ThinkingSphinx::ActiveRecord::SQLSource do
227
227
 
228
228
  source.render
229
229
 
230
- source.sql_file_field.should include('title')
230
+ expect(source.sql_file_field).to include('title')
231
231
  end
232
232
 
233
233
  it "adds wordcounted fields to sql_field_str2wordcount" do
@@ -236,11 +236,11 @@ describe ThinkingSphinx::ActiveRecord::SQLSource do
236
236
 
237
237
  source.render
238
238
 
239
- source.sql_field_str2wordcount.should include('title')
239
+ expect(source.sql_field_str2wordcount).to include('title')
240
240
  end
241
241
 
242
242
  it "adds any joined fields" do
243
- ThinkingSphinx::ActiveRecord::PropertyQuery.stub(
243
+ allow(ThinkingSphinx::ActiveRecord::PropertyQuery).to receive_messages(
244
244
  :new => double(:to_s => 'query for title')
245
245
  )
246
246
  source.fields << double('field', :name => 'title',
@@ -249,99 +249,99 @@ describe ThinkingSphinx::ActiveRecord::SQLSource do
249
249
 
250
250
  source.render
251
251
 
252
- source.sql_joined_field.should include('query for title')
252
+ expect(source.sql_joined_field).to include('query for title')
253
253
  end
254
254
 
255
255
  it "adds integer attributes to sql_attr_uint" do
256
256
  source.attributes << double('attribute')
257
- presenter.stub :declaration => 'count', :collection_type => :uint
257
+ allow(presenter).to receive_messages :declaration => 'count', :collection_type => :uint
258
258
 
259
259
  source.render
260
260
 
261
- source.sql_attr_uint.should include('count')
261
+ expect(source.sql_attr_uint).to include('count')
262
262
  end
263
263
 
264
264
  it "adds boolean attributes to sql_attr_bool" do
265
265
  source.attributes << double('attribute')
266
- presenter.stub :declaration => 'published', :collection_type => :bool
266
+ allow(presenter).to receive_messages :declaration => 'published', :collection_type => :bool
267
267
 
268
268
  source.render
269
269
 
270
- source.sql_attr_bool.should include('published')
270
+ expect(source.sql_attr_bool).to include('published')
271
271
  end
272
272
 
273
273
  it "adds string attributes to sql_attr_string" do
274
274
  source.attributes << double('attribute')
275
- presenter.stub :declaration => 'name', :collection_type => :string
275
+ allow(presenter).to receive_messages :declaration => 'name', :collection_type => :string
276
276
 
277
277
  source.render
278
278
 
279
- source.sql_attr_string.should include('name')
279
+ expect(source.sql_attr_string).to include('name')
280
280
  end
281
281
 
282
282
  it "adds timestamp attributes to sql_attr_timestamp" do
283
283
  source.attributes << double('attribute')
284
- presenter.stub :declaration => 'created_at',
284
+ allow(presenter).to receive_messages :declaration => 'created_at',
285
285
  :collection_type => :timestamp
286
286
 
287
287
  source.render
288
288
 
289
- source.sql_attr_timestamp.should include('created_at')
289
+ expect(source.sql_attr_timestamp).to include('created_at')
290
290
  end
291
291
 
292
292
  it "adds float attributes to sql_attr_float" do
293
293
  source.attributes << double('attribute')
294
- presenter.stub :declaration => 'rating', :collection_type => :float
294
+ allow(presenter).to receive_messages :declaration => 'rating', :collection_type => :float
295
295
 
296
296
  source.render
297
297
 
298
- source.sql_attr_float.should include('rating')
298
+ expect(source.sql_attr_float).to include('rating')
299
299
  end
300
300
 
301
301
  it "adds bigint attributes to sql_attr_bigint" do
302
302
  source.attributes << double('attribute')
303
- presenter.stub :declaration => 'super_id', :collection_type => :bigint
303
+ allow(presenter).to receive_messages :declaration => 'super_id', :collection_type => :bigint
304
304
 
305
305
  source.render
306
306
 
307
- source.sql_attr_bigint.should include('super_id')
307
+ expect(source.sql_attr_bigint).to include('super_id')
308
308
  end
309
309
 
310
310
  it "adds ordinal strings to sql_attr_str2ordinal" do
311
311
  source.attributes << double('attribute')
312
- presenter.stub :declaration => 'name', :collection_type => :str2ordinal
312
+ allow(presenter).to receive_messages :declaration => 'name', :collection_type => :str2ordinal
313
313
 
314
314
  source.render
315
315
 
316
- source.sql_attr_str2ordinal.should include('name')
316
+ expect(source.sql_attr_str2ordinal).to include('name')
317
317
  end
318
318
 
319
319
  it "adds multi-value attributes to sql_attr_multi" do
320
320
  source.attributes << double('attribute')
321
- presenter.stub :declaration => 'uint tag_ids from field',
321
+ allow(presenter).to receive_messages :declaration => 'uint tag_ids from field',
322
322
  :collection_type => :multi
323
323
 
324
324
  source.render
325
325
 
326
- source.sql_attr_multi.should include('uint tag_ids from field')
326
+ expect(source.sql_attr_multi).to include('uint tag_ids from field')
327
327
  end
328
328
 
329
329
  it "adds word count attributes to sql_attr_str2wordcount" do
330
330
  source.attributes << double('attribute')
331
- presenter.stub :declaration => 'name', :collection_type => :str2wordcount
331
+ allow(presenter).to receive_messages :declaration => 'name', :collection_type => :str2wordcount
332
332
 
333
333
  source.render
334
334
 
335
- source.sql_attr_str2wordcount.should include('name')
335
+ expect(source.sql_attr_str2wordcount).to include('name')
336
336
  end
337
337
 
338
338
  it "adds json attributes to sql_attr_json" do
339
339
  source.attributes << double('attribute')
340
- presenter.stub :declaration => 'json', :collection_type => :json
340
+ allow(presenter).to receive_messages :declaration => 'json', :collection_type => :json
341
341
 
342
342
  source.render
343
343
 
344
- source.sql_attr_json.should include('json')
344
+ expect(source.sql_attr_json).to include('json')
345
345
  end
346
346
 
347
347
  it "adds relevant settings from thinking_sphinx.yml" do
@@ -350,7 +350,7 @@ describe ThinkingSphinx::ActiveRecord::SQLSource do
350
350
 
351
351
  source.render
352
352
 
353
- source.mysql_ssl_cert.should == 'foo.cert'
353
+ expect(source.mysql_ssl_cert).to eq('foo.cert')
354
354
  end
355
355
  end
356
356
 
@@ -358,102 +358,104 @@ describe ThinkingSphinx::ActiveRecord::SQLSource do
358
358
  it "sets the sql_host setting from the model's database settings" do
359
359
  source.set_database_settings :host => '12.34.56.78'
360
360
 
361
- source.sql_host.should == '12.34.56.78'
361
+ expect(source.sql_host).to eq('12.34.56.78')
362
362
  end
363
363
 
364
364
  it "defaults sql_host to localhost if the model has no host" do
365
365
  source.set_database_settings :host => nil
366
366
 
367
- source.sql_host.should == 'localhost'
367
+ expect(source.sql_host).to eq('localhost')
368
368
  end
369
369
 
370
370
  it "sets the sql_user setting from the model's database settings" do
371
371
  source.set_database_settings :username => 'pat'
372
372
 
373
- source.sql_user.should == 'pat'
373
+ expect(source.sql_user).to eq('pat')
374
374
  end
375
375
 
376
376
  it "uses the user setting if username is not set in the model" do
377
377
  source.set_database_settings :username => nil, :user => 'pat'
378
378
 
379
- source.sql_user.should == 'pat'
379
+ expect(source.sql_user).to eq('pat')
380
380
  end
381
381
 
382
382
  it "sets the sql_pass setting from the model's database settings" do
383
383
  source.set_database_settings :password => 'swordfish'
384
384
 
385
- source.sql_pass.should == 'swordfish'
385
+ expect(source.sql_pass).to eq('swordfish')
386
386
  end
387
387
 
388
388
  it "escapes hashes in the password for sql_pass" do
389
389
  source.set_database_settings :password => 'sword#fish'
390
390
 
391
- source.sql_pass.should == 'sword\#fish'
391
+ expect(source.sql_pass).to eq('sword\#fish')
392
392
  end
393
393
 
394
394
  it "sets the sql_db setting from the model's database settings" do
395
395
  source.set_database_settings :database => 'rails_app'
396
396
 
397
- source.sql_db.should == 'rails_app'
397
+ expect(source.sql_db).to eq('rails_app')
398
398
  end
399
399
 
400
400
  it "sets the sql_port setting from the model's database settings" do
401
401
  source.set_database_settings :port => 5432
402
402
 
403
- source.sql_port.should == 5432
403
+ expect(source.sql_port).to eq(5432)
404
404
  end
405
405
 
406
406
  it "sets the sql_sock setting from the model's database settings" do
407
407
  source.set_database_settings :socket => '/unix/socket'
408
408
 
409
- source.sql_sock.should == '/unix/socket'
409
+ expect(source.sql_sock).to eq('/unix/socket')
410
410
  end
411
411
 
412
412
  it "sets the mysql_ssl_cert from the model's database settings" do
413
413
  source.set_database_settings :sslcert => '/path/to/cert.pem'
414
414
 
415
- source.mysql_ssl_cert.should eq '/path/to/cert.pem'
415
+ expect(source.mysql_ssl_cert).to eq '/path/to/cert.pem'
416
416
  end
417
417
 
418
418
  it "sets the mysql_ssl_key from the model's database settings" do
419
419
  source.set_database_settings :sslkey => '/path/to/key.pem'
420
420
 
421
- source.mysql_ssl_key.should eq '/path/to/key.pem'
421
+ expect(source.mysql_ssl_key).to eq '/path/to/key.pem'
422
422
  end
423
423
 
424
424
  it "sets the mysql_ssl_ca from the model's database settings" do
425
425
  source.set_database_settings :sslca => '/path/to/ca.pem'
426
426
 
427
- source.mysql_ssl_ca.should eq '/path/to/ca.pem'
427
+ expect(source.mysql_ssl_ca).to eq '/path/to/ca.pem'
428
428
  end
429
429
  end
430
430
 
431
431
  describe '#type' do
432
432
  it "is mysql when using the MySQL Adapter" do
433
- ThinkingSphinx::ActiveRecord::DatabaseAdapters::MySQLAdapter.
434
- stub!(:=== => true)
435
- ThinkingSphinx::ActiveRecord::DatabaseAdapters::PostgreSQLAdapter.
436
- stub!(:=== => false)
433
+ allow(ThinkingSphinx::ActiveRecord::DatabaseAdapters::MySQLAdapter).
434
+ to receive_messages(:=== => true)
435
+ allow(ThinkingSphinx::ActiveRecord::DatabaseAdapters::PostgreSQLAdapter).
436
+ to receive_messages(:=== => false)
437
437
 
438
- source.type.should == 'mysql'
438
+ expect(source.type).to eq('mysql')
439
439
  end
440
440
 
441
441
  it "is pgsql when using the PostgreSQL Adapter" do
442
- ThinkingSphinx::ActiveRecord::DatabaseAdapters::MySQLAdapter.
443
- stub!(:=== => false)
444
- ThinkingSphinx::ActiveRecord::DatabaseAdapters::PostgreSQLAdapter.
445
- stub!(:=== => true)
442
+ allow(ThinkingSphinx::ActiveRecord::DatabaseAdapters::MySQLAdapter).
443
+ to receive_messages(:=== => false)
444
+ allow(ThinkingSphinx::ActiveRecord::DatabaseAdapters::PostgreSQLAdapter).
445
+ to receive_messages(:=== => true)
446
446
 
447
- source.type.should == 'pgsql'
447
+ expect(source.type).to eq('pgsql')
448
448
  end
449
449
 
450
450
  it "raises an exception for any other adapter" do
451
- ThinkingSphinx::ActiveRecord::DatabaseAdapters::MySQLAdapter.
452
- stub!(:=== => false)
453
- ThinkingSphinx::ActiveRecord::DatabaseAdapters::PostgreSQLAdapter.
454
- stub!(:=== => false)
451
+ allow(ThinkingSphinx::ActiveRecord::DatabaseAdapters::MySQLAdapter).
452
+ to receive_messages(:=== => false)
453
+ allow(ThinkingSphinx::ActiveRecord::DatabaseAdapters::PostgreSQLAdapter).
454
+ to receive_messages(:=== => false)
455
455
 
456
- lambda { source.type }.should raise_error
456
+ expect { source.type }.to raise_error(
457
+ ThinkingSphinx::UnknownDatabaseAdapter
458
+ )
457
459
  end
458
460
  end
459
461
  end