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
@@ -10,20 +10,20 @@ describe ThinkingSphinx::ActiveRecord::Callbacks::DeleteCallbacks do
10
10
  let(:callbacks) { double('callbacks', :after_destroy => nil) }
11
11
 
12
12
  before :each do
13
- ThinkingSphinx::ActiveRecord::Callbacks::DeleteCallbacks.
14
- stub :new => callbacks
13
+ allow(ThinkingSphinx::ActiveRecord::Callbacks::DeleteCallbacks).
14
+ to receive_messages :new => callbacks
15
15
  end
16
16
 
17
17
  it "builds an object from the instance" do
18
- ThinkingSphinx::ActiveRecord::Callbacks::DeleteCallbacks.
19
- should_receive(:new).with(instance).and_return(callbacks)
18
+ expect(ThinkingSphinx::ActiveRecord::Callbacks::DeleteCallbacks).
19
+ to receive(:new).with(instance).and_return(callbacks)
20
20
 
21
21
  ThinkingSphinx::ActiveRecord::Callbacks::DeleteCallbacks.
22
22
  after_destroy(instance)
23
23
  end
24
24
 
25
25
  it "invokes after_destroy on the object" do
26
- callbacks.should_receive(:after_destroy)
26
+ expect(callbacks).to receive(:after_destroy)
27
27
 
28
28
  ThinkingSphinx::ActiveRecord::Callbacks::DeleteCallbacks.
29
29
  after_destroy(instance)
@@ -37,19 +37,19 @@ describe ThinkingSphinx::ActiveRecord::Callbacks::DeleteCallbacks do
37
37
  let(:instance) { double('instance', :id => 7, :new_record? => false) }
38
38
 
39
39
  before :each do
40
- ThinkingSphinx::IndexSet.stub :new => index_set
40
+ allow(ThinkingSphinx::IndexSet).to receive_messages :new => index_set
41
41
  end
42
42
 
43
43
  it "performs the deletion for the index and instance" do
44
- ThinkingSphinx::Deletion.should_receive(:perform).with(index, 7)
44
+ expect(ThinkingSphinx::Deletion).to receive(:perform).with(index, 7)
45
45
 
46
46
  callbacks.after_destroy
47
47
  end
48
48
 
49
49
  it "doesn't do anything if the instance is a new record" do
50
- instance.stub :new_record? => true
50
+ allow(instance).to receive_messages :new_record? => true
51
51
 
52
- ThinkingSphinx::Deletion.should_not_receive(:perform)
52
+ expect(ThinkingSphinx::Deletion).not_to receive(:perform)
53
53
 
54
54
  callbacks.after_destroy
55
55
  end
@@ -57,7 +57,7 @@ describe ThinkingSphinx::ActiveRecord::Callbacks::DeleteCallbacks do
57
57
  it 'does nothing if callbacks are suspended' do
58
58
  ThinkingSphinx::Callbacks.suspend!
59
59
 
60
- ThinkingSphinx::Deletion.should_not_receive(:perform)
60
+ expect(ThinkingSphinx::Deletion).not_to receive(:perform)
61
61
 
62
62
  callbacks.after_destroy
63
63
 
@@ -11,7 +11,7 @@ describe ThinkingSphinx::ActiveRecord::Callbacks::DeltaCallbacks do
11
11
  }
12
12
 
13
13
  before :each do
14
- ThinkingSphinx::Configuration.stub :instance => config
14
+ allow(ThinkingSphinx::Configuration).to receive_messages :instance => config
15
15
  end
16
16
 
17
17
  [:after_commit, :before_save].each do |callback|
@@ -19,20 +19,20 @@ describe ThinkingSphinx::ActiveRecord::Callbacks::DeltaCallbacks do
19
19
  let(:callbacks) { double('callbacks', callback => nil) }
20
20
 
21
21
  before :each do
22
- ThinkingSphinx::ActiveRecord::Callbacks::DeltaCallbacks.
23
- stub :new => callbacks
22
+ allow(ThinkingSphinx::ActiveRecord::Callbacks::DeltaCallbacks).
23
+ to receive_messages :new => callbacks
24
24
  end
25
25
 
26
26
  it "builds an object from the instance" do
27
- ThinkingSphinx::ActiveRecord::Callbacks::DeltaCallbacks.
28
- should_receive(:new).with(instance).and_return(callbacks)
27
+ expect(ThinkingSphinx::ActiveRecord::Callbacks::DeltaCallbacks).
28
+ to receive(:new).with(instance).and_return(callbacks)
29
29
 
30
30
  ThinkingSphinx::ActiveRecord::Callbacks::DeltaCallbacks.
31
31
  send(callback, instance)
32
32
  end
33
33
 
34
34
  it "invokes #{callback} on the object" do
35
- callbacks.should_receive(callback)
35
+ expect(callbacks).to receive(callback)
36
36
 
37
37
  ThinkingSphinx::ActiveRecord::Callbacks::DeltaCallbacks.
38
38
  send(callback, instance)
@@ -46,18 +46,18 @@ describe ThinkingSphinx::ActiveRecord::Callbacks::DeltaCallbacks do
46
46
  }
47
47
 
48
48
  before :each do
49
- config.stub :index_set_class => double(:new => [index])
49
+ allow(config).to receive_messages :index_set_class => double(:new => [index])
50
50
  end
51
51
 
52
52
  context 'without delta indices' do
53
53
  it "does not fire a delta index when no delta indices" do
54
- processor.should_not_receive(:index)
54
+ expect(processor).not_to receive(:index)
55
55
 
56
56
  callbacks.after_commit
57
57
  end
58
58
 
59
59
  it "does not delete the instance from any index" do
60
- processor.should_not_receive(:delete)
60
+ expect(processor).not_to receive(:delete)
61
61
 
62
62
  callbacks.after_commit
63
63
  end
@@ -70,53 +70,53 @@ describe ThinkingSphinx::ActiveRecord::Callbacks::DeltaCallbacks do
70
70
  :delta_processor => processor) }
71
71
 
72
72
  before :each do
73
- ThinkingSphinx::Deltas.stub :suspended? => false
73
+ allow(ThinkingSphinx::Deltas).to receive_messages :suspended? => false
74
74
 
75
- config.stub :index_set_class => double(
75
+ allow(config).to receive_messages :index_set_class => double(
76
76
  :new => [core_index, delta_index]
77
77
  )
78
78
  end
79
79
 
80
80
  it "only indexes delta indices" do
81
- processor.should_receive(:index).with(delta_index)
81
+ expect(processor).to receive(:index).with(delta_index)
82
82
 
83
83
  callbacks.after_commit
84
84
  end
85
85
 
86
86
  it "does not process delta indices when deltas are suspended" do
87
- ThinkingSphinx::Deltas.stub :suspended? => true
87
+ allow(ThinkingSphinx::Deltas).to receive_messages :suspended? => true
88
88
 
89
- processor.should_not_receive(:index)
89
+ expect(processor).not_to receive(:index)
90
90
 
91
91
  callbacks.after_commit
92
92
  end
93
93
 
94
94
  it "deletes the instance from the core index" do
95
- processor.should_receive(:delete).with(core_index, instance)
95
+ expect(processor).to receive(:delete).with(core_index, instance)
96
96
 
97
97
  callbacks.after_commit
98
98
  end
99
99
 
100
100
  it "does not index if model's delta flag is not true" do
101
- processor.stub :toggled? => false
101
+ allow(processor).to receive_messages :toggled? => false
102
102
 
103
- processor.should_not_receive(:index)
103
+ expect(processor).not_to receive(:index)
104
104
 
105
105
  callbacks.after_commit
106
106
  end
107
107
 
108
108
  it "does not delete if model's delta flag is not true" do
109
- processor.stub :toggled? => false
109
+ allow(processor).to receive_messages :toggled? => false
110
110
 
111
- processor.should_not_receive(:delete)
111
+ expect(processor).not_to receive(:delete)
112
112
 
113
113
  callbacks.after_commit
114
114
  end
115
115
 
116
116
  it "does not delete when deltas are suspended" do
117
- ThinkingSphinx::Deltas.stub :suspended? => true
117
+ allow(ThinkingSphinx::Deltas).to receive_messages :suspended? => true
118
118
 
119
- processor.should_not_receive(:delete)
119
+ expect(processor).not_to receive(:delete)
120
120
 
121
121
  callbacks.after_commit
122
122
  end
@@ -129,19 +129,42 @@ describe ThinkingSphinx::ActiveRecord::Callbacks::DeltaCallbacks do
129
129
  }
130
130
 
131
131
  before :each do
132
- config.stub :index_set_class => double(:new => [index])
132
+ allow(config).to receive_messages :index_set_class => double(:new => [index])
133
+ allow(instance).to receive_messages(
134
+ :changed? => true,
135
+ :new_record? => false
136
+ )
133
137
  end
134
138
 
135
139
  it "sets delta to true if there are delta indices" do
136
- processor.should_receive(:toggle).with(instance)
140
+ expect(processor).to receive(:toggle).with(instance)
137
141
 
138
142
  callbacks.before_save
139
143
  end
140
144
 
141
145
  it "does not try to set delta to true if there are no delta indices" do
142
- index.stub :delta? => false
146
+ allow(index).to receive_messages :delta? => false
147
+
148
+ expect(processor).not_to receive(:toggle)
149
+
150
+ callbacks.before_save
151
+ end
152
+
153
+ it "does not try to set delta to true if the instance is unchanged" do
154
+ allow(instance).to receive_messages :changed? => false
155
+
156
+ expect(processor).not_to receive(:toggle)
157
+
158
+ callbacks.before_save
159
+ end
160
+
161
+ it "does set delta to true if the instance is unchanged but new" do
162
+ allow(instance).to receive_messages(
163
+ :changed? => false,
164
+ :new_record? => true
165
+ )
143
166
 
144
- processor.should_not_receive(:toggle)
167
+ expect(processor).to receive(:toggle)
145
168
 
146
169
  callbacks.before_save
147
170
  end
@@ -30,7 +30,7 @@ describe ThinkingSphinx::ActiveRecord::Callbacks::UpdateCallbacks do
30
30
  stub_const 'ThinkingSphinx::Connection', double
31
31
  stub_const 'Riddle::Query', double(:update => 'SphinxQL')
32
32
 
33
- ThinkingSphinx::Connection.stub(:take).and_yield(connection)
33
+ allow(ThinkingSphinx::Connection).to receive(:take).and_yield(connection)
34
34
 
35
35
  source.attributes.replace([
36
36
  double(:name => 'foo', :updateable? => true,
@@ -40,41 +40,41 @@ describe ThinkingSphinx::ActiveRecord::Callbacks::UpdateCallbacks do
40
40
  double(:name => 'baz', :updateable? => false)
41
41
  ])
42
42
 
43
- instance.stub :changed => ['bar_column', 'baz'], :bar_column => 7
43
+ allow(instance).to receive_messages :changed => ['bar_column', 'baz'], :bar_column => 7
44
44
  end
45
45
 
46
46
  it "does not send any updates to Sphinx if updates are disabled" do
47
47
  configuration.settings['attribute_updates'] = false
48
48
 
49
- connection.should_not_receive(:execute)
49
+ expect(connection).not_to receive(:execute)
50
50
 
51
51
  callbacks.after_update
52
52
  end
53
53
 
54
54
  it "builds an update query with only updateable attributes that have changed" do
55
- Riddle::Query.should_receive(:update).
55
+ expect(Riddle::Query).to receive(:update).
56
56
  with('article_core', 3, 'bar' => 7).and_return('SphinxQL')
57
57
 
58
58
  callbacks.after_update
59
59
  end
60
60
 
61
61
  it "sends the update query through to Sphinx" do
62
- connection.should_receive(:execute).with('SphinxQL')
62
+ expect(connection).to receive(:execute).with('SphinxQL')
63
63
 
64
64
  callbacks.after_update
65
65
  end
66
66
 
67
67
  it "doesn't care if the update fails at Sphinx's end" do
68
- connection.stub(:execute).
68
+ allow(connection).to receive(:execute).
69
69
  and_raise(ThinkingSphinx::ConnectionError.new(''))
70
70
 
71
- lambda { callbacks.after_update }.should_not raise_error
71
+ expect { callbacks.after_update }.not_to raise_error
72
72
  end
73
73
 
74
74
  it 'does nothing if callbacks are suspended' do
75
75
  ThinkingSphinx::Callbacks.suspend!
76
76
 
77
- connection.should_not_receive(:execute)
77
+ expect(connection).not_to receive(:execute)
78
78
 
79
79
  callbacks.after_update
80
80
 
@@ -4,7 +4,7 @@ describe ThinkingSphinx::ActiveRecord::Column do
4
4
  describe '#__name' do
5
5
  it "returns the top item" do
6
6
  column = ThinkingSphinx::ActiveRecord::Column.new(:content)
7
- column.__name.should == :content
7
+ expect(column.__name).to eq(:content)
8
8
  end
9
9
  end
10
10
 
@@ -14,27 +14,27 @@ describe ThinkingSphinx::ActiveRecord::Column do
14
14
 
15
15
  it "returns itself when it's a string column" do
16
16
  column = ThinkingSphinx::ActiveRecord::Column.new('foo')
17
- column.__replace(base, replacements).collect(&:__path).
18
- should == [['foo']]
17
+ expect(column.__replace(base, replacements).collect(&:__path)).
18
+ to eq([['foo']])
19
19
  end
20
20
 
21
21
  it "returns itself when the base of the stack does not match" do
22
22
  column = ThinkingSphinx::ActiveRecord::Column.new(:b, :c)
23
- column.__replace(base, replacements).collect(&:__path).
24
- should == [[:b, :c]]
23
+ expect(column.__replace(base, replacements).collect(&:__path)).
24
+ to eq([[:b, :c]])
25
25
  end
26
26
 
27
27
  it "returns an array of new columns " do
28
28
  column = ThinkingSphinx::ActiveRecord::Column.new(:a, :b, :e)
29
- column.__replace(base, replacements).collect(&:__path).
30
- should == [[:a, :c, :e], [:a, :d, :e]]
29
+ expect(column.__replace(base, replacements).collect(&:__path)).
30
+ to eq([[:a, :c, :e], [:a, :d, :e]])
31
31
  end
32
32
  end
33
33
 
34
34
  describe '#__stack' do
35
35
  it "returns all but the top item" do
36
36
  column = ThinkingSphinx::ActiveRecord::Column.new(:users, :posts, :id)
37
- column.__stack.should == [:users, :posts]
37
+ expect(column.__stack).to eq([:users, :posts])
38
38
  end
39
39
  end
40
40
 
@@ -43,28 +43,28 @@ describe ThinkingSphinx::ActiveRecord::Column do
43
43
 
44
44
  it "shifts the current name to the stack" do
45
45
  column.email
46
- column.__stack.should == [:user]
46
+ expect(column.__stack).to eq([:user])
47
47
  end
48
48
 
49
49
  it "adds the new method call as the name" do
50
50
  column.email
51
- column.__name.should == :email
51
+ expect(column.__name).to eq(:email)
52
52
  end
53
53
 
54
54
  it "returns itself" do
55
- column.email.should == column
55
+ expect(column.email).to eq(column)
56
56
  end
57
57
  end
58
58
 
59
59
  describe '#string?' do
60
60
  it "is true when the name is a string" do
61
61
  column = ThinkingSphinx::ActiveRecord::Column.new('content')
62
- column.should be_a_string
62
+ expect(column).to be_a_string
63
63
  end
64
64
 
65
65
  it "is false when the name is a symbol" do
66
66
  column = ThinkingSphinx::ActiveRecord::Column.new(:content)
67
- column.should_not be_a_string
67
+ expect(column).not_to be_a_string
68
68
  end
69
69
  end
70
70
  end
@@ -15,22 +15,22 @@ describe ThinkingSphinx::ActiveRecord::ColumnSQLPresenter do
15
15
 
16
16
  before do
17
17
  stub_const 'Joiner::Path', double(:new => path)
18
- adapter.stub(:quote) { |arg| "`#{arg}`" }
18
+ allow(adapter).to receive(:quote) { |arg| "`#{arg}`" }
19
19
  end
20
20
 
21
21
  context "when there's no explicit db name" do
22
- before { associations.stub(:alias_for => 'table_name') }
22
+ before { allow(associations).to receive_messages(:alias_for => 'table_name') }
23
23
 
24
24
  it 'returns quoted table and column names' do
25
- presenter.with_table.should == '`table_name`.`column_name`'
25
+ expect(presenter.with_table).to eq('`table_name`.`column_name`')
26
26
  end
27
27
  end
28
28
 
29
29
  context 'when an eplicit db name is provided' do
30
- before { associations.stub(:alias_for => 'db_name.table_name') }
30
+ before { allow(associations).to receive_messages(:alias_for => 'db_name.table_name') }
31
31
 
32
32
  it 'returns properly quoted table name with column name' do
33
- presenter.with_table.should == '`db_name`.`table_name`.`column_name`'
33
+ expect(presenter.with_table).to eq('`db_name`.`table_name`.`column_name`')
34
34
  end
35
35
  end
36
36
  end
@@ -9,23 +9,23 @@ describe ThinkingSphinx::ActiveRecord::DatabaseAdapters::AbstractAdapter do
9
9
 
10
10
  describe '#quote' do
11
11
  it "uses the model's connection to quote columns" do
12
- connection.should_receive(:quote_column_name).with('foo')
12
+ expect(connection).to receive(:quote_column_name).with('foo')
13
13
 
14
14
  adapter.quote 'foo'
15
15
  end
16
16
 
17
17
  it "returns the quoted value" do
18
- connection.stub :quote_column_name => '"foo"'
18
+ allow(connection).to receive_messages :quote_column_name => '"foo"'
19
19
 
20
- adapter.quote('foo').should == '"foo"'
20
+ expect(adapter.quote('foo')).to eq('"foo"')
21
21
  end
22
22
  end
23
23
 
24
24
  describe '#quoted_table_name' do
25
25
  it "passes the method through to the model" do
26
- model.should_receive(:quoted_table_name).and_return('"articles"')
26
+ expect(model).to receive(:quoted_table_name).and_return('"articles"')
27
27
 
28
- adapter.quoted_table_name.should == '"articles"'
28
+ expect(adapter.quoted_table_name).to eq('"articles"')
29
29
  end
30
30
  end
31
31
  end
@@ -7,50 +7,50 @@ describe ThinkingSphinx::ActiveRecord::DatabaseAdapters::MySQLAdapter do
7
7
  let(:model) { double('model') }
8
8
 
9
9
  it "returns 1 for true" do
10
- adapter.boolean_value(true).should == 1
10
+ expect(adapter.boolean_value(true)).to eq(1)
11
11
  end
12
12
 
13
13
  it "returns 0 for false" do
14
- adapter.boolean_value(false).should == 0
14
+ expect(adapter.boolean_value(false)).to eq(0)
15
15
  end
16
16
 
17
17
  describe '#cast_to_string' do
18
18
  it "casts the clause to characters" do
19
- adapter.cast_to_string('foo').should == "CAST(foo AS char)"
19
+ expect(adapter.cast_to_string('foo')).to eq("CAST(foo AS char)")
20
20
  end
21
21
  end
22
22
 
23
23
  describe '#cast_to_timestamp' do
24
24
  it "converts to unix timestamps" do
25
- adapter.cast_to_timestamp('created_at').
26
- should == 'UNIX_TIMESTAMP(created_at)'
25
+ expect(adapter.cast_to_timestamp('created_at')).
26
+ to eq('UNIX_TIMESTAMP(created_at)')
27
27
  end
28
28
  end
29
29
 
30
30
  describe '#concatenate' do
31
31
  it "concatenates with the given separator" do
32
- adapter.concatenate('foo, bar, baz', ',').
33
- should == "CONCAT_WS(',', foo, bar, baz)"
32
+ expect(adapter.concatenate('foo, bar, baz', ',')).
33
+ to eq("CONCAT_WS(',', foo, bar, baz)")
34
34
  end
35
35
  end
36
36
 
37
37
  describe '#convert_nulls' do
38
38
  it "translates arguments to an IFNULL SQL call" do
39
- adapter.convert_nulls('id', 5).should == 'IFNULL(id, 5)'
39
+ expect(adapter.convert_nulls('id', 5)).to eq('IFNULL(id, 5)')
40
40
  end
41
41
  end
42
42
 
43
43
  describe '#convert_blank' do
44
44
  it "translates arguments to a COALESCE NULLIF SQL call" do
45
- adapter.convert_blank('id', 5).should == "COALESCE(NULLIF(id, ''), 5)"
45
+ expect(adapter.convert_blank('id', 5)).to eq("COALESCE(NULLIF(id, ''), 5)")
46
46
  end
47
47
  end
48
48
 
49
49
 
50
50
  describe '#group_concatenate' do
51
51
  it "group concatenates the clause with the given separator" do
52
- adapter.group_concatenate('foo', ',').
53
- should == "GROUP_CONCAT(DISTINCT foo SEPARATOR ',')"
52
+ expect(adapter.group_concatenate('foo', ',')).
53
+ to eq("GROUP_CONCAT(DISTINCT foo SEPARATOR ',')")
54
54
  end
55
55
  end
56
56
  end