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
@@ -12,15 +12,15 @@ describe ThinkingSphinx::RealTime::Interpreter do
12
12
  let(:instance) { double('interpreter', :translate! => true) }
13
13
 
14
14
  it "creates a new interpreter instance with the given block and index" do
15
- ThinkingSphinx::RealTime::Interpreter.should_receive(:new).
15
+ expect(ThinkingSphinx::RealTime::Interpreter).to receive(:new).
16
16
  with(index, block).and_return(instance)
17
17
 
18
18
  ThinkingSphinx::RealTime::Interpreter.translate! index, block
19
19
  end
20
20
 
21
21
  it "calls translate! on the instance" do
22
- ThinkingSphinx::RealTime::Interpreter.stub!(:new => instance)
23
- instance.should_receive(:translate!)
22
+ allow(ThinkingSphinx::RealTime::Interpreter).to receive_messages(:new => instance)
23
+ expect(instance).to receive(:translate!)
24
24
 
25
25
  ThinkingSphinx::RealTime::Interpreter.translate! index, block
26
26
  end
@@ -31,18 +31,18 @@ describe ThinkingSphinx::RealTime::Interpreter do
31
31
  let(:attribute) { double('attribute') }
32
32
 
33
33
  before :each do
34
- ThinkingSphinx::RealTime::Attribute.stub! :new => attribute
34
+ allow(ThinkingSphinx::RealTime::Attribute).to receive_messages :new => attribute
35
35
  end
36
36
 
37
37
  it "creates a new attribute with the provided column" do
38
- ThinkingSphinx::RealTime::Attribute.should_receive(:new).
38
+ expect(ThinkingSphinx::RealTime::Attribute).to receive(:new).
39
39
  with(column, {}).and_return(attribute)
40
40
 
41
41
  instance.has column
42
42
  end
43
43
 
44
44
  it "passes through options to the attribute" do
45
- ThinkingSphinx::RealTime::Attribute.should_receive(:new).
45
+ expect(ThinkingSphinx::RealTime::Attribute).to receive(:new).
46
46
  with(column, :as => :other_name).and_return(attribute)
47
47
 
48
48
  instance.has column, :as => :other_name
@@ -51,15 +51,15 @@ describe ThinkingSphinx::RealTime::Interpreter do
51
51
  it "adds an attribute to the index" do
52
52
  instance.has column
53
53
 
54
- index.attributes.should include(attribute)
54
+ expect(index.attributes).to include(attribute)
55
55
  end
56
56
 
57
57
  it "adds multiple attributes when passed multiple columns" do
58
58
  instance.has column, column
59
59
 
60
- index.attributes.select { |saved_attribute|
60
+ expect(index.attributes.select { |saved_attribute|
61
61
  saved_attribute == attribute
62
- }.length.should == 2
62
+ }.length).to eq(2)
63
63
  end
64
64
  end
65
65
 
@@ -68,18 +68,18 @@ describe ThinkingSphinx::RealTime::Interpreter do
68
68
  let(:field) { double('field') }
69
69
 
70
70
  before :each do
71
- ThinkingSphinx::RealTime::Field.stub! :new => field
71
+ allow(ThinkingSphinx::RealTime::Field).to receive_messages :new => field
72
72
  end
73
73
 
74
74
  it "creates a new field with the provided column" do
75
- ThinkingSphinx::RealTime::Field.should_receive(:new).
75
+ expect(ThinkingSphinx::RealTime::Field).to receive(:new).
76
76
  with(column, {}).and_return(field)
77
77
 
78
78
  instance.indexes column
79
79
  end
80
80
 
81
81
  it "passes through options to the field" do
82
- ThinkingSphinx::RealTime::Field.should_receive(:new).
82
+ expect(ThinkingSphinx::RealTime::Field).to receive(:new).
83
83
  with(column, :as => :other_name).and_return(field)
84
84
 
85
85
  instance.indexes column, :as => :other_name
@@ -88,28 +88,28 @@ describe ThinkingSphinx::RealTime::Interpreter do
88
88
  it "adds a field to the index" do
89
89
  instance.indexes column
90
90
 
91
- index.fields.should include(field)
91
+ expect(index.fields).to include(field)
92
92
  end
93
93
 
94
94
  it "adds multiple fields when passed multiple columns" do
95
95
  instance.indexes column, column
96
96
 
97
- index.fields.select { |saved_field|
97
+ expect(index.fields.select { |saved_field|
98
98
  saved_field == field
99
- }.length.should == 2
99
+ }.length).to eq(2)
100
100
  end
101
101
 
102
102
  context 'sortable' do
103
103
  let(:attribute) { double('attribute') }
104
104
 
105
105
  before :each do
106
- ThinkingSphinx::RealTime::Attribute.stub! :new => attribute
106
+ allow(ThinkingSphinx::RealTime::Attribute).to receive_messages :new => attribute
107
107
 
108
- column.stub :__name => :col
108
+ allow(column).to receive_messages :__name => :col
109
109
  end
110
110
 
111
111
  it "adds the _sort suffix to the field's name" do
112
- ThinkingSphinx::RealTime::Attribute.should_receive(:new).
112
+ expect(ThinkingSphinx::RealTime::Attribute).to receive(:new).
113
113
  with(column, :as => :col_sort, :type => :string).
114
114
  and_return(attribute)
115
115
 
@@ -117,7 +117,7 @@ describe ThinkingSphinx::RealTime::Interpreter do
117
117
  end
118
118
 
119
119
  it "respects given aliases" do
120
- ThinkingSphinx::RealTime::Attribute.should_receive(:new).
120
+ expect(ThinkingSphinx::RealTime::Attribute).to receive(:new).
121
121
  with(column, :as => :other_sort, :type => :string).
122
122
  and_return(attribute)
123
123
 
@@ -125,7 +125,7 @@ describe ThinkingSphinx::RealTime::Interpreter do
125
125
  end
126
126
 
127
127
  it "respects symbols instead of columns" do
128
- ThinkingSphinx::RealTime::Attribute.should_receive(:new).
128
+ expect(ThinkingSphinx::RealTime::Attribute).to receive(:new).
129
129
  with(:title, :as => :title_sort, :type => :string).
130
130
  and_return(attribute)
131
131
 
@@ -135,7 +135,7 @@ describe ThinkingSphinx::RealTime::Interpreter do
135
135
  it "adds an attribute to the index" do
136
136
  instance.indexes column, :sortable => true
137
137
 
138
- index.attributes.should include(attribute)
138
+ expect(index.attributes).to include(attribute)
139
139
  end
140
140
  end
141
141
  end
@@ -144,15 +144,15 @@ describe ThinkingSphinx::RealTime::Interpreter do
144
144
  let(:column) { double('column') }
145
145
 
146
146
  before :each do
147
- ThinkingSphinx::ActiveRecord::Column.stub!(:new => column)
147
+ allow(ThinkingSphinx::ActiveRecord::Column).to receive_messages(:new => column)
148
148
  end
149
149
 
150
150
  it "returns a new column for the given method" do
151
- instance.id.should == column
151
+ expect(instance.id).to eq(column)
152
152
  end
153
153
 
154
154
  it "should initialise the column with the method name and arguments" do
155
- ThinkingSphinx::ActiveRecord::Column.should_receive(:new).
155
+ expect(ThinkingSphinx::ActiveRecord::Column).to receive(:new).
156
156
  with(:users, :posts, :subject).and_return(column)
157
157
 
158
158
  instance.users(:posts, :subject)
@@ -161,7 +161,7 @@ describe ThinkingSphinx::RealTime::Interpreter do
161
161
 
162
162
  describe '#scope' do
163
163
  it "passes the scope block through to the index" do
164
- index.should_receive(:scope=).with(instance_of(Proc))
164
+ expect(index).to receive(:scope=).with(instance_of(Proc))
165
165
 
166
166
  instance.scope { :foo }
167
167
  end
@@ -169,18 +169,18 @@ describe ThinkingSphinx::RealTime::Interpreter do
169
169
 
170
170
  describe '#set_property' do
171
171
  before :each do
172
- index.class.stub :settings => [:morphology]
172
+ allow(index.class).to receive_messages :settings => [:morphology]
173
173
  end
174
174
 
175
175
  it 'saves other settings as index options' do
176
176
  instance.set_property :field_weights => {:name => 10}
177
177
 
178
- index.options[:field_weights].should == {:name => 10}
178
+ expect(index.options[:field_weights]).to eq({:name => 10})
179
179
  end
180
180
 
181
181
  context 'index settings' do
182
182
  it "sets the provided setting" do
183
- index.should_receive(:morphology=).with('stem_en')
183
+ expect(index).to receive(:morphology=).with('stem_en')
184
184
 
185
185
  instance.set_property :morphology => 'stem_en'
186
186
  end
@@ -194,8 +194,8 @@ describe ThinkingSphinx::RealTime::Interpreter do
194
194
  }
195
195
 
196
196
  interpreter = ThinkingSphinx::RealTime::Interpreter.new index, block
197
- interpreter.translate!.
198
- should == interpreter.__id__
197
+ expect(interpreter.translate!).
198
+ to eq(interpreter.__id__)
199
199
  end
200
200
  end
201
201
  end
@@ -17,29 +17,29 @@ describe ThinkingSphinx::Scopes do
17
17
  end
18
18
 
19
19
  it "creates new search" do
20
- model.foo.class.should == ThinkingSphinx::Search
20
+ expect(model.foo.class).to eq(ThinkingSphinx::Search)
21
21
  end
22
22
 
23
23
  it "passes block result to constructor" do
24
- model.foo.options[:with].should == {:foo => :bar}
24
+ expect(model.foo.options[:with]).to eq({:foo => :bar})
25
25
  end
26
26
 
27
27
  it "passes non-scopes through to the standard method error call" do
28
- lambda { model.bar }.should raise_error(NoMethodError)
28
+ expect { model.bar }.to raise_error(NoMethodError)
29
29
  end
30
30
  end
31
31
 
32
32
  describe '#sphinx_scope' do
33
33
  it "saves the given block with a name" do
34
34
  model.sphinx_scope(:foo) { 27 }
35
- model.sphinx_scopes[:foo].call.should == 27
35
+ expect(model.sphinx_scopes[:foo].call).to eq(27)
36
36
  end
37
37
  end
38
38
 
39
39
  describe '#default_sphinx_scope' do
40
40
  it "gets and sets the default scope depending on the argument" do
41
41
  model.default_sphinx_scope :foo
42
- model.default_sphinx_scope.should == :foo
42
+ expect(model.default_sphinx_scope).to eq(:foo)
43
43
  end
44
44
  end
45
45
  end
@@ -12,11 +12,11 @@ describe ThinkingSphinx::Search::Glaze do
12
12
 
13
13
  describe '#!=' do
14
14
  it "is true for objects that don't match" do
15
- (glaze != double('foo')).should be_true
15
+ expect(glaze != double('foo')).to be_truthy
16
16
  end
17
17
 
18
18
  it "is false when the underlying object is a match" do
19
- (glaze != object).should be_false
19
+ expect(glaze != object).to be_falsey
20
20
  end
21
21
  end
22
22
 
@@ -28,50 +28,50 @@ describe ThinkingSphinx::Search::Glaze do
28
28
  let(:pane_two) { double('pane two', :foo => 'two', :bar => 'two') }
29
29
 
30
30
  before :each do
31
- klass.stub(:new).and_return(pane_one, pane_two)
31
+ allow(klass).to receive(:new).and_return(pane_one, pane_two)
32
32
  end
33
33
 
34
34
  it "respects objects existing methods" do
35
- object.stub :foo => 'original'
35
+ allow(object).to receive_messages :foo => 'original'
36
36
 
37
- glaze.foo.should == 'original'
37
+ expect(glaze.foo).to eq('original')
38
38
  end
39
39
 
40
40
  it "uses the first pane that responds to the method" do
41
- glaze.foo.should == 'one'
42
- glaze.bar.should == 'two'
41
+ expect(glaze.foo).to eq('one')
42
+ expect(glaze.bar).to eq('two')
43
43
  end
44
44
 
45
45
  it "raises the method missing error otherwise" do
46
- object.stub :respond_to? => false
47
- object.stub(:baz).and_raise(NoMethodError)
46
+ allow(object).to receive_messages :respond_to? => false
47
+ allow(object).to receive(:baz).and_raise(NoMethodError)
48
48
 
49
- lambda { glaze.baz }.should raise_error(NoMethodError)
49
+ expect { glaze.baz }.to raise_error(NoMethodError)
50
50
  end
51
51
  end
52
52
 
53
53
  describe '#respond_to?' do
54
54
  it "responds to underlying object methods" do
55
- object.stub :foo => true
55
+ allow(object).to receive_messages :foo => true
56
56
 
57
- glaze.respond_to?(:foo).should be_true
57
+ expect(glaze.respond_to?(:foo)).to be_truthy
58
58
  end
59
59
 
60
60
  it "responds to underlying pane methods" do
61
61
  pane = double('Pane Class', :new => double('pane', :bar => true))
62
62
  glaze = ThinkingSphinx::Search::Glaze.new context, object, raw, [pane]
63
63
 
64
- glaze.respond_to?(:bar).should be_true
64
+ expect(glaze.respond_to?(:bar)).to be_truthy
65
65
  end
66
66
 
67
67
  it "does not to respond to methods that don't exist" do
68
- glaze.respond_to?(:something).should be_false
68
+ expect(glaze.respond_to?(:something)).to be_falsey
69
69
  end
70
70
  end
71
71
 
72
72
  describe '#unglazed' do
73
73
  it "returns the original object" do
74
- glaze.unglazed.should == object
74
+ expect(glaze.unglazed).to eq(object)
75
75
  end
76
76
  end
77
77
  end
@@ -14,30 +14,30 @@ describe ThinkingSphinx::Search::Query do
14
14
  it "passes through the keyword as provided" do
15
15
  query = ThinkingSphinx::Search::Query.new 'pancakes'
16
16
 
17
- query.to_s.should == 'pancakes'
17
+ expect(query.to_s).to eq('pancakes')
18
18
  end
19
19
 
20
20
  it "pairs fields and keywords for given conditions" do
21
21
  query = ThinkingSphinx::Search::Query.new '', :title => 'pancakes'
22
22
 
23
- query.to_s.should == '@title pancakes'
23
+ expect(query.to_s).to eq('@title pancakes')
24
24
  end
25
25
 
26
26
  it "combines both keywords and conditions" do
27
27
  query = ThinkingSphinx::Search::Query.new 'tasty', :title => 'pancakes'
28
28
 
29
- query.to_s.should == 'tasty @title pancakes'
29
+ expect(query.to_s).to eq('tasty @title pancakes')
30
30
  end
31
31
 
32
32
  it "automatically stars keywords if requested" do
33
- ThinkingSphinx::Query.should_receive(:wildcard).with('cake', true).
33
+ expect(ThinkingSphinx::Query).to receive(:wildcard).with('cake', true).
34
34
  and_return('*cake*')
35
35
 
36
36
  ThinkingSphinx::Search::Query.new('cake', {}, true).to_s
37
37
  end
38
38
 
39
39
  it "automatically stars condition keywords if requested" do
40
- ThinkingSphinx::Query.should_receive(:wildcard).with('pan', true).
40
+ expect(ThinkingSphinx::Query).to receive(:wildcard).with('pan', true).
41
41
  and_return('*pan*')
42
42
 
43
43
  ThinkingSphinx::Search::Query.new('', {:title => 'pan'}, true).to_s
@@ -47,32 +47,32 @@ describe ThinkingSphinx::Search::Query do
47
47
  query = ThinkingSphinx::Search::Query.new '',
48
48
  {:sphinx_internal_class_name => 'article'}, true
49
49
 
50
- query.to_s.should == '@sphinx_internal_class_name article'
50
+ expect(query.to_s).to eq('@sphinx_internal_class_name article')
51
51
  end
52
52
 
53
53
  it "handles null values by removing them from the conditions hash" do
54
54
  query = ThinkingSphinx::Search::Query.new '', :title => nil
55
55
 
56
- query.to_s.should == ''
56
+ expect(query.to_s).to eq('')
57
57
  end
58
58
 
59
59
  it "handles empty string values by removing them from the conditions hash" do
60
60
  query = ThinkingSphinx::Search::Query.new '', :title => ''
61
61
 
62
- query.to_s.should == ''
62
+ expect(query.to_s).to eq('')
63
63
  end
64
64
 
65
65
  it "handles nil queries" do
66
66
  query = ThinkingSphinx::Search::Query.new nil, {}
67
67
 
68
- query.to_s.should == ''
68
+ expect(query.to_s).to eq('')
69
69
  end
70
70
 
71
71
  it "allows mixing of blank and non-blank conditions" do
72
72
  query = ThinkingSphinx::Search::Query.new 'tasty', :title => 'pancakes',
73
73
  :ingredients => nil
74
74
 
75
- query.to_s.should == 'tasty @title pancakes'
75
+ expect(query.to_s).to eq('tasty @title pancakes')
76
76
  end
77
77
  end
78
78
  end
@@ -34,26 +34,26 @@ describe ThinkingSphinx::Search do
34
34
  end
35
35
 
36
36
  before :each do
37
- ThinkingSphinx::Search::Context.stub :new => context
37
+ allow(ThinkingSphinx::Search::Context).to receive_messages :new => context
38
38
 
39
39
  stub_const 'ThinkingSphinx::Middlewares::DEFAULT', stack
40
40
  end
41
41
 
42
42
  describe '#current_page' do
43
43
  it "should return 1 by default" do
44
- search.current_page.should == 1
44
+ expect(search.current_page).to eq(1)
45
45
  end
46
46
 
47
47
  it "should handle string page values" do
48
- ThinkingSphinx::Search.new(:page => '2').current_page.should == 2
48
+ expect(ThinkingSphinx::Search.new(:page => '2').current_page).to eq(2)
49
49
  end
50
50
 
51
51
  it "should handle empty string page values" do
52
- ThinkingSphinx::Search.new(:page => '').current_page.should == 1
52
+ expect(ThinkingSphinx::Search.new(:page => '').current_page).to eq(1)
53
53
  end
54
54
 
55
55
  it "should return the requested page" do
56
- ThinkingSphinx::Search.new(:page => 10).current_page.should == 10
56
+ expect(ThinkingSphinx::Search.new(:page => 10).current_page).to eq(10)
57
57
  end
58
58
  end
59
59
 
@@ -61,25 +61,25 @@ describe ThinkingSphinx::Search do
61
61
  it "returns false if there is anything in the data set" do
62
62
  context[:results] << double
63
63
 
64
- search.should_not be_empty
64
+ expect(search).not_to be_empty
65
65
  end
66
66
 
67
67
  it "returns true if the data set is empty" do
68
68
  context[:results].clear
69
69
 
70
- search.should be_empty
70
+ expect(search).to be_empty
71
71
  end
72
72
  end
73
73
 
74
74
  describe '#initialize' do
75
75
  it "lazily loads by default" do
76
- stack.should_not_receive(:call)
76
+ expect(stack).not_to receive(:call)
77
77
 
78
78
  ThinkingSphinx::Search.new
79
79
  end
80
80
 
81
81
  it "should automatically populate when :populate is set to true" do
82
- stack.should_receive(:call).and_return(true)
82
+ expect(stack).to receive(:call).and_return(true)
83
83
 
84
84
  ThinkingSphinx::Search.new(:populate => true)
85
85
  end
@@ -87,74 +87,74 @@ describe ThinkingSphinx::Search do
87
87
 
88
88
  describe '#offset' do
89
89
  it "should default to 0" do
90
- search.offset.should == 0
90
+ expect(search.offset).to eq(0)
91
91
  end
92
92
 
93
93
  it "should increase by the per_page value for each page in" do
94
- ThinkingSphinx::Search.new(:per_page => 25, :page => 2).offset.
95
- should == 25
94
+ expect(ThinkingSphinx::Search.new(:per_page => 25, :page => 2).offset).
95
+ to eq(25)
96
96
  end
97
97
 
98
98
  it "should prioritise explicit :offset over calculated if given" do
99
- ThinkingSphinx::Search.new(:offset => 5).offset.should == 5
99
+ expect(ThinkingSphinx::Search.new(:offset => 5).offset).to eq(5)
100
100
  end
101
101
  end
102
102
 
103
103
  describe '#page' do
104
104
  it "sets the current page" do
105
105
  search.page(3)
106
- search.current_page.should == 3
106
+ expect(search.current_page).to eq(3)
107
107
  end
108
108
 
109
109
  it "returns the search object" do
110
- search.page(2).should == search
110
+ expect(search.page(2)).to eq(search)
111
111
  end
112
112
  end
113
113
 
114
114
  describe '#per' do
115
115
  it "sets the current per_page value" do
116
116
  search.per(29)
117
- search.per_page.should == 29
117
+ expect(search.per_page).to eq(29)
118
118
  end
119
119
 
120
120
  it "returns the search object" do
121
- search.per(29).should == search
121
+ expect(search.per(29)).to eq(search)
122
122
  end
123
123
  end
124
124
 
125
125
  describe '#per_page' do
126
126
  it "defaults to 20" do
127
- search.per_page.should == 20
127
+ expect(search.per_page).to eq(20)
128
128
  end
129
129
 
130
130
  it "is set as part of the search options" do
131
- ThinkingSphinx::Search.new(:per_page => 10).per_page.should == 10
131
+ expect(ThinkingSphinx::Search.new(:per_page => 10).per_page).to eq(10)
132
132
  end
133
133
 
134
134
  it "should prioritise :limit over :per_page if given" do
135
- ThinkingSphinx::Search.new(:per_page => 30, :limit => 40).per_page.
136
- should == 40
135
+ expect(ThinkingSphinx::Search.new(:per_page => 30, :limit => 40).per_page).
136
+ to eq(40)
137
137
  end
138
138
 
139
139
  it "should allow for string arguments" do
140
- ThinkingSphinx::Search.new(:per_page => '10').per_page.should == 10
140
+ expect(ThinkingSphinx::Search.new(:per_page => '10').per_page).to eq(10)
141
141
  end
142
142
 
143
143
  it "allows setting of the per_page value" do
144
144
  search.per_page(24)
145
- search.per_page.should == 24
145
+ expect(search.per_page).to eq(24)
146
146
  end
147
147
  end
148
148
 
149
149
  describe '#populate' do
150
150
  it "runs the middleware" do
151
- stack.should_receive(:call).with([context]).and_return(true)
151
+ expect(stack).to receive(:call).with([context]).and_return(true)
152
152
 
153
153
  search.populate
154
154
  end
155
155
 
156
156
  it "does not retrieve results twice" do
157
- stack.should_receive(:call).with([context]).once.and_return(true)
157
+ expect(stack).to receive(:call).with([context]).once.and_return(true)
158
158
 
159
159
  search.populate
160
160
  search.populate
@@ -163,11 +163,11 @@ describe ThinkingSphinx::Search do
163
163
 
164
164
  describe '#respond_to?' do
165
165
  it "should respond to Array methods" do
166
- search.respond_to?(:each).should be_true
166
+ expect(search.respond_to?(:each)).to be_truthy
167
167
  end
168
168
 
169
169
  it "should respond to Search methods" do
170
- search.respond_to?(:per_page).should be_true
170
+ expect(search.respond_to?(:per_page)).to be_truthy
171
171
  end
172
172
 
173
173
  it "should return true for methods delegated to pagination mask by method_missing" do
@@ -196,7 +196,7 @@ describe ThinkingSphinx::Search do
196
196
 
197
197
  context[:results] << glazed
198
198
 
199
- search.to_a.first.__id__.should == unglazed.__id__
199
+ expect(search.to_a.first.__id__).to eq(unglazed.__id__)
200
200
  end
201
201
  end
202
202