thinking-sphinx 2.0.5 → 2.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. data/README.textile +7 -1
  2. data/features/searching_by_model.feature +24 -30
  3. data/features/step_definitions/common_steps.rb +5 -5
  4. data/features/thinking_sphinx/db/.gitignore +1 -0
  5. data/features/thinking_sphinx/db/fixtures/post_keywords.txt +1 -0
  6. data/spec/fixtures/data.sql +32 -0
  7. data/spec/fixtures/database.yml.default +3 -0
  8. data/spec/fixtures/models.rb +161 -0
  9. data/spec/fixtures/structure.sql +146 -0
  10. data/spec/spec_helper.rb +62 -0
  11. data/spec/sphinx_helper.rb +61 -0
  12. data/spec/support/rails.rb +18 -0
  13. data/spec/thinking_sphinx/active_record/delta_spec.rb +24 -24
  14. data/spec/thinking_sphinx/active_record/has_many_association_spec.rb +27 -0
  15. data/spec/thinking_sphinx/active_record/scopes_spec.rb +25 -25
  16. data/spec/thinking_sphinx/active_record_spec.rb +108 -107
  17. data/spec/thinking_sphinx/adapters/abstract_adapter_spec.rb +38 -38
  18. data/spec/thinking_sphinx/association_spec.rb +69 -35
  19. data/spec/thinking_sphinx/context_spec.rb +61 -64
  20. data/spec/thinking_sphinx/search_spec.rb +7 -0
  21. data/spec/thinking_sphinx_spec.rb +47 -46
  22. metadata +49 -141
  23. data/VERSION +0 -1
  24. data/lib/cucumber/thinking_sphinx/external_world.rb +0 -12
  25. data/lib/cucumber/thinking_sphinx/internal_world.rb +0 -127
  26. data/lib/cucumber/thinking_sphinx/sql_logger.rb +0 -20
  27. data/lib/thinking-sphinx.rb +0 -1
  28. data/lib/thinking_sphinx.rb +0 -301
  29. data/lib/thinking_sphinx/action_controller.rb +0 -31
  30. data/lib/thinking_sphinx/active_record.rb +0 -384
  31. data/lib/thinking_sphinx/active_record/attribute_updates.rb +0 -52
  32. data/lib/thinking_sphinx/active_record/delta.rb +0 -65
  33. data/lib/thinking_sphinx/active_record/has_many_association.rb +0 -36
  34. data/lib/thinking_sphinx/active_record/has_many_association_with_scopes.rb +0 -21
  35. data/lib/thinking_sphinx/active_record/log_subscriber.rb +0 -61
  36. data/lib/thinking_sphinx/active_record/scopes.rb +0 -93
  37. data/lib/thinking_sphinx/adapters/abstract_adapter.rb +0 -87
  38. data/lib/thinking_sphinx/adapters/mysql_adapter.rb +0 -62
  39. data/lib/thinking_sphinx/adapters/postgresql_adapter.rb +0 -157
  40. data/lib/thinking_sphinx/association.rb +0 -219
  41. data/lib/thinking_sphinx/attribute.rb +0 -396
  42. data/lib/thinking_sphinx/auto_version.rb +0 -38
  43. data/lib/thinking_sphinx/bundled_search.rb +0 -44
  44. data/lib/thinking_sphinx/class_facet.rb +0 -20
  45. data/lib/thinking_sphinx/configuration.rb +0 -339
  46. data/lib/thinking_sphinx/context.rb +0 -76
  47. data/lib/thinking_sphinx/core/string.rb +0 -15
  48. data/lib/thinking_sphinx/deltas.rb +0 -28
  49. data/lib/thinking_sphinx/deltas/default_delta.rb +0 -62
  50. data/lib/thinking_sphinx/deploy/capistrano.rb +0 -101
  51. data/lib/thinking_sphinx/excerpter.rb +0 -23
  52. data/lib/thinking_sphinx/facet.rb +0 -128
  53. data/lib/thinking_sphinx/facet_search.rb +0 -170
  54. data/lib/thinking_sphinx/field.rb +0 -98
  55. data/lib/thinking_sphinx/index.rb +0 -157
  56. data/lib/thinking_sphinx/index/builder.rb +0 -312
  57. data/lib/thinking_sphinx/index/faux_column.rb +0 -118
  58. data/lib/thinking_sphinx/join.rb +0 -37
  59. data/lib/thinking_sphinx/property.rb +0 -185
  60. data/lib/thinking_sphinx/railtie.rb +0 -46
  61. data/lib/thinking_sphinx/search.rb +0 -972
  62. data/lib/thinking_sphinx/search_methods.rb +0 -439
  63. data/lib/thinking_sphinx/sinatra.rb +0 -7
  64. data/lib/thinking_sphinx/source.rb +0 -194
  65. data/lib/thinking_sphinx/source/internal_properties.rb +0 -51
  66. data/lib/thinking_sphinx/source/sql.rb +0 -157
  67. data/lib/thinking_sphinx/tasks.rb +0 -130
  68. data/lib/thinking_sphinx/test.rb +0 -55
  69. data/tasks/distribution.rb +0 -33
  70. data/tasks/testing.rb +0 -80
@@ -7,137 +7,137 @@ end
7
7
  describe ThinkingSphinx::AbstractAdapter do
8
8
  describe '.detect' do
9
9
  let(:model) { stub('model') }
10
-
10
+
11
11
  it "returns a MysqlAdapter object for :mysql" do
12
12
  ThinkingSphinx::AbstractAdapter.stub(:adapter_for_model => :mysql)
13
-
13
+
14
14
  adapter = ThinkingSphinx::AbstractAdapter.detect(model)
15
15
  adapter.should be_a(ThinkingSphinx::MysqlAdapter)
16
16
  end
17
-
17
+
18
18
  it "returns a PostgreSQLAdapter object for :postgresql" do
19
19
  ThinkingSphinx::AbstractAdapter.stub(:adapter_for_model => :postgresql)
20
-
20
+
21
21
  adapter = ThinkingSphinx::AbstractAdapter.detect(model)
22
22
  adapter.should be_a(ThinkingSphinx::PostgreSQLAdapter)
23
23
  end
24
-
24
+
25
25
  it "instantiates the provided class if one is provided" do
26
26
  ThinkingSphinx::AbstractAdapter.stub(:adapter_for_model => CustomAdapter)
27
27
  CustomAdapter.should_receive(:new).and_return(stub('adapter'))
28
-
28
+
29
29
  ThinkingSphinx::AbstractAdapter.detect(model)
30
30
  end
31
-
31
+
32
32
  it "raises an exception for other responses" do
33
33
  ThinkingSphinx::AbstractAdapter.stub(:adapter_for_model => :sqlite)
34
-
34
+
35
35
  lambda {
36
36
  ThinkingSphinx::AbstractAdapter.detect(model)
37
37
  }.should raise_error
38
38
  end
39
39
  end
40
-
40
+
41
41
  describe '.adapter_for_model' do
42
42
  let(:model) { stub('model') }
43
-
43
+
44
44
  after :each do
45
45
  ThinkingSphinx.database_adapter = nil
46
46
  end
47
-
47
+
48
48
  it "translates strings to symbols" do
49
49
  ThinkingSphinx.database_adapter = 'foo'
50
-
50
+
51
51
  ThinkingSphinx::AbstractAdapter.adapter_for_model(model).should == :foo
52
52
  end
53
-
53
+
54
54
  it "passes through symbols unchanged" do
55
55
  ThinkingSphinx.database_adapter = :bar
56
-
56
+
57
57
  ThinkingSphinx::AbstractAdapter.adapter_for_model(model).should == :bar
58
58
  end
59
-
59
+
60
60
  it "returns standard_adapter_for_model if database_adapter is not set" do
61
61
  ThinkingSphinx.database_adapter = nil
62
62
  ThinkingSphinx::AbstractAdapter.stub!(:standard_adapter_for_model => :baz)
63
-
63
+
64
64
  ThinkingSphinx::AbstractAdapter.adapter_for_model(model).should == :baz
65
65
  end
66
-
66
+
67
67
  it "calls the lambda and returns it if one is provided" do
68
68
  ThinkingSphinx.database_adapter = lambda { |model| :foo }
69
-
69
+
70
70
  ThinkingSphinx::AbstractAdapter.adapter_for_model(model).should == :foo
71
71
  end
72
72
  end
73
-
73
+
74
74
  describe '.standard_adapter_for_model' do
75
75
  let(:klass) { stub('connection class') }
76
76
  let(:connection) { stub('connection', :class => klass) }
77
77
  let(:model) { stub('model', :connection => connection) }
78
-
78
+
79
79
  it "translates a normal MySQL adapter" do
80
80
  klass.stub(:name => 'ActiveRecord::ConnectionAdapters::MysqlAdapter')
81
-
81
+
82
82
  ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
83
83
  should == :mysql
84
84
  end
85
-
85
+
86
86
  it "translates a MySQL plus adapter" do
87
87
  klass.stub(:name => 'ActiveRecord::ConnectionAdapters::MysqlplusAdapter')
88
-
88
+
89
89
  ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
90
90
  should == :mysql
91
91
  end
92
-
92
+
93
93
  it "translates a MySQL2 adapter" do
94
94
  klass.stub(:name => 'ActiveRecord::ConnectionAdapters::Mysql2Adapter')
95
-
95
+
96
96
  ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
97
97
  should == :mysql
98
98
  end
99
-
99
+
100
100
  it "translates a NullDB adapter to MySQL" do
101
101
  klass.stub(:name => 'ActiveRecord::ConnectionAdapters::NullDBAdapter')
102
-
102
+
103
103
  ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
104
104
  should == :mysql
105
105
  end
106
-
106
+
107
107
  it "translates a normal PostgreSQL adapter" do
108
108
  klass.stub(:name => 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter')
109
-
109
+
110
110
  ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
111
111
  should == :postgresql
112
112
  end
113
-
113
+
114
114
  it "translates a JDBC MySQL adapter to MySQL" do
115
115
  klass.stub(:name => 'ActiveRecord::ConnectionAdapters::JdbcAdapter')
116
116
  connection.stub(:config => {:adapter => 'jdbcmysql'})
117
-
117
+
118
118
  ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
119
119
  should == :mysql
120
120
  end
121
-
121
+
122
122
  it "translates a JDBC PostgreSQL adapter to PostgreSQL" do
123
123
  klass.stub(:name => 'ActiveRecord::ConnectionAdapters::JdbcAdapter')
124
124
  connection.stub(:config => {:adapter => 'jdbcpostgresql'})
125
-
125
+
126
126
  ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
127
127
  should == :postgresql
128
128
  end
129
-
129
+
130
130
  it "returns other JDBC adapters without translation" do
131
131
  klass.stub(:name => 'ActiveRecord::ConnectionAdapters::JdbcAdapter')
132
132
  connection.stub(:config => {:adapter => 'jdbcmssql'})
133
-
133
+
134
134
  ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
135
- should == 'jdbcmssql'
135
+ should == :jdbcmssql
136
136
  end
137
-
137
+
138
138
  it "returns other unknown adapters without translation" do
139
139
  klass.stub(:name => 'ActiveRecord::ConnectionAdapters::FooAdapter')
140
-
140
+
141
141
  ThinkingSphinx::AbstractAdapter.standard_adapter_for_model(model).
142
142
  should == 'ActiveRecord::ConnectionAdapters::FooAdapter'
143
143
  end
@@ -14,7 +14,7 @@ describe ThinkingSphinx::Association do
14
14
  :active_record => 'AR'
15
15
  )
16
16
  @non_poly_reflection = stub('reflection', :name => 'non_polly')
17
-
17
+
18
18
  Person.stub!(:reflect_on_association => @normal_reflection)
19
19
  ThinkingSphinx::Association.stub!(
20
20
  :new => @normal_association,
@@ -25,58 +25,85 @@ describe ThinkingSphinx::Association do
25
25
  :new => @non_poly_reflection
26
26
  )
27
27
  end
28
-
28
+
29
29
  it "should return an empty array if no association exists" do
30
30
  Person.stub!(:reflect_on_association => nil)
31
-
31
+
32
32
  ThinkingSphinx::Association.children(Person, :assoc).should == []
33
33
  end
34
-
34
+
35
35
  it "should return a single association instance in an array if assocation isn't polymorphic" do
36
36
  ThinkingSphinx::Association.children(Person, :assoc).should == [@normal_association]
37
37
  end
38
-
38
+
39
39
  it "should return multiple association instances for polymorphic associations" do
40
40
  Person.stub!(:reflect_on_association => @poly_reflection)
41
-
41
+
42
42
  ThinkingSphinx::Association.children(Person, :assoc).should ==
43
43
  [@normal_association, @normal_association]
44
44
  end
45
-
45
+
46
46
  it "should generate non-polymorphic 'casted' associations for each polymorphic possibility" do
47
- Person.stub!(:reflect_on_association => @poly_reflection)
47
+ reflections = double('reflections', :[]= => nil)
48
+ Person.stub!(:reflections => reflections)
49
+
50
+ Person.should_receive(:reflect_on_association).once.
51
+ and_return(@poly_reflection)
52
+ reflections.should_receive(:[]).with(:polly_Person).twice.and_return(nil)
48
53
  ThinkingSphinx::Association.should_receive(:casted_options).with(
49
54
  Person, @poly_reflection
50
55
  ).twice
51
56
  ::ActiveRecord::Reflection::AssociationReflection.should_receive(:new).
52
- with(:has_many, :polly_Person, {:casted => :options}, "AR").twice
57
+ with(:has_many, :polly_Person, {:casted => :options}, "AR").twice.
58
+ and_return(@non_poly_reflection)
53
59
  ThinkingSphinx::Association.should_receive(:new).with(
54
60
  nil, @non_poly_reflection
55
61
  ).twice
56
-
62
+
63
+ ThinkingSphinx::Association.children(Person, :assoc)
64
+ end
65
+
66
+ it "should use existing non-polymorphic 'casted' associations" do
67
+ reflections = double('reflections', :[]= => nil)
68
+ Person.stub!(:reflections => reflections)
69
+
70
+ Person.stub!(:reflect_on_association).once.
71
+ and_return(@poly_reflection)
72
+ reflections.should_receive(:[]).with(:polly_Person).twice.
73
+ and_return(nil, @non_poly_reflection)
74
+ ThinkingSphinx::Association.should_receive(:casted_options).with(
75
+ Person, @poly_reflection
76
+ ).once
77
+ ::ActiveRecord::Reflection::AssociationReflection.should_receive(:new).
78
+ with(:has_many, :polly_Person, {:casted => :options}, "AR").once.
79
+ and_return(@non_poly_reflection)
80
+ ThinkingSphinx::Association.should_receive(:new).with(
81
+ nil, @non_poly_reflection
82
+ ).twice
83
+
57
84
  ThinkingSphinx::Association.children(Person, :assoc)
58
85
  end
59
86
  end
60
-
87
+
61
88
  describe '#children' do
62
89
  before :each do
63
90
  @reflection = stub('reflection', :klass => :klass)
64
91
  @association = ThinkingSphinx::Association.new(nil, @reflection)
65
92
  ThinkingSphinx::Association.stub!(:children => :result)
66
93
  end
67
-
94
+
68
95
  it "should return the children associations for the given association" do
69
96
  @association.children(:assoc).should == :result
70
97
  end
71
-
98
+
72
99
  it "should request children for the reflection klass" do
73
100
  ThinkingSphinx::Association.should_receive(:children).
74
101
  with(:klass, :assoc, @association)
75
-
102
+
76
103
  @association.children(:assoc)
77
104
  end
78
105
  end
79
-
106
+
80
107
  describe '#join_to' do
81
108
  before :each do
82
109
  @parent_join = stub('join assoc').as_null_object
@@ -84,59 +111,64 @@ describe ThinkingSphinx::Association do
84
111
  @parent = ThinkingSphinx::Association.new(nil, nil)
85
112
  @parent.stub!(:join_to => true, :join => nil)
86
113
  @base_join = stub('base join', :joins => [:a, :b, :c])
87
- ::ActiveRecord::Associations::ClassMethods::JoinDependency::JoinAssociation.stub!(:new => @join)
114
+
115
+ if ThinkingSphinx.rails_3_1?
116
+ ::ActiveRecord::Associations::JoinDependency::JoinAssociation.stub!(:new => @join)
117
+ else
118
+ ::ActiveRecord::Associations::ClassMethods::JoinDependency::JoinAssociation.stub!(:new => @join)
119
+ end
88
120
  end
89
-
121
+
90
122
  it "should call the parent's join_to if parent has no join" do
91
123
  @assoc = ThinkingSphinx::Association.new(@parent, :ref)
92
124
  @parent.should_receive(:join_to).with(@base_join)
93
-
125
+
94
126
  @assoc.join_to(@base_join)
95
127
  end
96
-
128
+
97
129
  it "should not call the parent's join_to if it already has a join" do
98
130
  @assoc = ThinkingSphinx::Association.new(@parent, :ref)
99
131
  @parent.stub!(:join => @parent_join)
100
132
  @parent.should_not_receive(:join_to)
101
-
133
+
102
134
  @assoc.join_to(@base_join)
103
135
  end
104
-
136
+
105
137
  it "should define the join association with a JoinAssociation instance" do
106
138
  @assoc = ThinkingSphinx::Association.new(@parent, :ref)
107
-
139
+
108
140
  @assoc.join_to(@base_join).should == @join
109
141
  @assoc.join.should == @join
110
142
  end
111
143
  end
112
-
144
+
113
145
  describe '#is_many?' do
114
146
  before :each do
115
147
  @parent = stub('assoc', :is_many? => :parent_is_many)
116
148
  @reflection = stub('reflection', :macro => :has_many)
117
149
  end
118
-
150
+
119
151
  it "should return true if association is either a has_many or a habtm" do
120
152
  association = ThinkingSphinx::Association.new(@parent, @reflection)
121
153
  association.is_many?.should be_true
122
-
154
+
123
155
  @reflection.stub!(:macro => :has_and_belongs_to_many)
124
156
  association.is_many?.should be_true
125
157
  end
126
-
158
+
127
159
  it "should return the parent value if not a has many or habtm and there is a parent" do
128
160
  association = ThinkingSphinx::Association.new(@parent, @reflection)
129
161
  @reflection.stub!(:macro => :belongs_to)
130
162
  association.is_many?.should == :parent_is_many
131
163
  end
132
-
164
+
133
165
  it "should return false if no parent and not a has many or habtm" do
134
166
  association = ThinkingSphinx::Association.new(nil, @reflection)
135
167
  @reflection.stub!(:macro => :belongs_to)
136
168
  association.is_many?.should be_false
137
169
  end
138
170
  end
139
-
171
+
140
172
  describe '#ancestors' do
141
173
  it "should return an array of associations - including all parents" do
142
174
  parent = stub('assoc', :ancestors => [:all, :ancestors])
@@ -144,7 +176,7 @@ describe ThinkingSphinx::Association do
144
176
  association.ancestors.should == [:all, :ancestors, association]
145
177
  end
146
178
  end
147
-
179
+
148
180
  describe '.polymorphic_classes' do
149
181
  it "should return all the polymorphic result types as classes" do
150
182
  Person.connection.stub!(:select_all => [
@@ -155,11 +187,12 @@ describe ThinkingSphinx::Association do
155
187
  :active_record => Person,
156
188
  :options => {:foreign_type => "person_type"}
157
189
  )
158
-
190
+ ref.stub!(:foreign_type => "person_type") if ThinkingSphinx.rails_3_1?
191
+
159
192
  ThinkingSphinx::Association.send(:polymorphic_classes, ref).should == [Person, Friendship]
160
193
  end
161
194
  end
162
-
195
+
163
196
  describe '.casted_options' do
164
197
  before :each do
165
198
  @options = {
@@ -168,8 +201,9 @@ describe ThinkingSphinx::Association do
168
201
  :polymorphic => true
169
202
  }
170
203
  @reflection = stub('assoc reflection', :options => @options)
204
+ @reflection.stub!(:foreign_type => "thing_type") if ThinkingSphinx.rails_3_1?
171
205
  end
172
-
206
+
173
207
  it "should return a new options set for a specific class" do
174
208
  ThinkingSphinx::Association.send(:casted_options, Person, @reflection).should == {
175
209
  :polymorphic => nil,
@@ -179,7 +213,7 @@ describe ThinkingSphinx::Association do
179
213
  :conditions => "::ts_join_alias::.`thing_type` = 'Person'"
180
214
  }
181
215
  end
182
-
216
+
183
217
  it "should append to existing Array of conditions" do
184
218
  @options[:conditions] = ["first condition"]
185
219
  ThinkingSphinx::Association.send(:casted_options, Person, @reflection).should == {
@@ -190,7 +224,7 @@ describe ThinkingSphinx::Association do
190
224
  :conditions => ["first condition", "::ts_join_alias::.`thing_type` = 'Person'"]
191
225
  }
192
226
  end
193
-
227
+
194
228
  it "should merge to an existing Hash of conditions" do
195
229
  @options[:conditions] = {"field" => "value"}
196
230
  ThinkingSphinx::Association.send(:casted_options, Person, @reflection).should == {
@@ -201,7 +235,7 @@ describe ThinkingSphinx::Association do
201
235
  :conditions => {"field" => "value", "thing_type" => "Person"}
202
236
  }
203
237
  end
204
-
238
+
205
239
  it "should append to an existing String of conditions" do
206
240
  @options[:conditions] = "first condition"
207
241
  ThinkingSphinx::Association.send(:casted_options, Person, @reflection).should == {
@@ -1,128 +1,125 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ThinkingSphinx::Context do
4
- before :each do
5
- @context = ThinkingSphinx::Context.new
6
- end
7
-
4
+ let(:ts_context) { ThinkingSphinx::Context.new }
5
+
8
6
  describe '#prepare' do
9
- before :each do
10
- @config = ThinkingSphinx::Configuration.instance
11
- @config.model_directories = ['']
7
+ let(:config) { ThinkingSphinx::Configuration.instance }
8
+ let(:file_name) { 'a.rb' }
9
+ let(:model_name_lower) { 'a' }
10
+ let(:class_name) { 'A' }
12
11
 
13
- @file_name = 'a.rb'
14
- @model_name_lower = 'a'
15
- @class_name = 'A'
12
+ before :each do
13
+ config.model_directories = ['']
16
14
 
17
- @file_name.stub!(:gsub).and_return(@model_name_lower)
18
- @model_name_lower.stub!(:camelize).and_return(@class_name)
19
- Dir.stub(:[]).and_return([@file_name])
15
+ file_name.stub!(:gsub).and_return(model_name_lower)
16
+ model_name_lower.stub!(:camelize).and_return(class_name)
17
+ Dir.stub(:[]).and_return([file_name])
20
18
  end
21
19
 
22
20
  it "should load the files by guessing the file name" do
23
- @class_name.should_receive(:constantize).and_return(true)
21
+ class_name.should_receive(:constantize).and_return(true)
24
22
 
25
- @context.prepare
23
+ ts_context.prepare
26
24
  end
27
25
 
28
26
  it "should not raise errors if the model name is nil" do
29
- @file_name.stub!(:gsub).and_return(nil)
27
+ file_name.stub!(:gsub).and_return(nil)
30
28
 
31
29
  lambda {
32
- @context.prepare
30
+ ts_context.prepare
33
31
  }.should_not raise_error
34
32
  end
35
33
 
36
34
  it "should not raise errors if the file name does not represent a class name" do
37
- @class_name.should_receive(:constantize).and_raise(NameError)
35
+ class_name.should_receive(:constantize).and_raise(NameError)
38
36
 
39
37
  lambda {
40
- @context.prepare
38
+ ts_context.prepare
41
39
  }.should_not raise_error
42
40
  end
43
41
 
44
42
  # Fails in Ruby 1.9 (or maybe it's an RSpec update). Not sure why.
45
43
  it "should retry if the first pass fails and contains a directory" do
46
- @model_name_lower.stub!(:gsub!).and_return(true, nil)
47
- @class_name.stub(:constantize).and_raise(LoadError)
48
- @model_name_lower.should_receive(:camelize).twice
44
+ class_name.stub(:constantize).and_raise(LoadError)
45
+ model_name_lower.should_receive(:gsub!).twice.and_return(true, nil)
49
46
 
50
47
  lambda {
51
- @context.prepare
48
+ ts_context.prepare
52
49
  }.should_not raise_error
53
50
  end
54
51
 
55
52
  it "should catch database errors with a warning" do
56
- @class_name.should_receive(:constantize).and_raise(Mysql::Error)
53
+ class_name.should_receive(:constantize).and_raise(Mysql2::Error)
57
54
  STDERR.stub!(:puts => '')
58
55
  STDERR.should_receive(:puts).with('Warning: Error loading a.rb:')
59
-
56
+
60
57
  lambda {
61
- @context.prepare
58
+ ts_context.prepare
62
59
  }.should_not raise_error
63
- end
64
-
60
+ end unless RUBY_PLATFORM == 'java'
61
+
65
62
  it "should not load models if they're explicitly set in the configuration" do
66
- @config.indexed_models = ['Alpha', 'Beta']
67
- @context.prepare
68
-
69
- @context.indexed_models.should == ['Alpha', 'Beta']
63
+ config.indexed_models = ['Alpha', 'Beta']
64
+ ts_context.prepare
65
+
66
+ ts_context.indexed_models.should == ['Alpha', 'Beta']
70
67
  end
71
68
  end
72
-
69
+
73
70
  describe '#define_indexes' do
74
71
  it "should call define_indexes on all known indexed models" do
75
- @context.stub!(:indexed_models => ['Alpha', 'Beta'])
72
+ ts_context.stub!(:indexed_models => ['Alpha', 'Beta'])
76
73
  Alpha.should_receive(:define_indexes)
77
74
  Beta.should_receive(:define_indexes)
78
-
79
- @context.define_indexes
75
+
76
+ ts_context.define_indexes
80
77
  end
81
78
  end
82
-
79
+
83
80
  describe '#add_indexed_model' do
84
81
  before :each do
85
- @context.indexed_models.clear
82
+ ts_context.indexed_models.clear
86
83
  end
87
-
84
+
88
85
  it "should add the model to the collection" do
89
- @context.add_indexed_model 'Alpha'
90
-
91
- @context.indexed_models.should == ['Alpha']
86
+ ts_context.add_indexed_model 'Alpha'
87
+
88
+ ts_context.indexed_models.should == ['Alpha']
92
89
  end
93
-
90
+
94
91
  it "should not duplicate models in the collection" do
95
- @context.add_indexed_model 'Alpha'
96
- @context.add_indexed_model 'Alpha'
97
-
98
- @context.indexed_models.should == ['Alpha']
92
+ ts_context.add_indexed_model 'Alpha'
93
+ ts_context.add_indexed_model 'Alpha'
94
+
95
+ ts_context.indexed_models.should == ['Alpha']
99
96
  end
100
-
97
+
101
98
  it "should keep the collection in alphabetical order" do
102
- @context.add_indexed_model 'Beta'
103
- @context.add_indexed_model 'Alpha'
104
-
105
- @context.indexed_models.should == ['Alpha', 'Beta']
99
+ ts_context.add_indexed_model 'Beta'
100
+ ts_context.add_indexed_model 'Alpha'
101
+
102
+ ts_context.indexed_models.should == ['Alpha', 'Beta']
106
103
  end
107
-
104
+
108
105
  it "should translate classes to their names" do
109
- @context.add_indexed_model Alpha
110
-
111
- @context.indexed_models.should == ['Alpha']
106
+ ts_context.add_indexed_model Alpha
107
+
108
+ ts_context.indexed_models.should == ['Alpha']
112
109
  end
113
110
  end
114
-
111
+
115
112
  describe '#superclass_indexed_models' do
116
113
  it "should return indexed model names" do
117
- @context.stub!(:indexed_models => ['Alpha', 'Beta'])
118
-
119
- @context.superclass_indexed_models.should == ['Alpha', 'Beta']
114
+ ts_context.stub!(:indexed_models => ['Alpha', 'Beta'])
115
+
116
+ ts_context.superclass_indexed_models.should == ['Alpha', 'Beta']
120
117
  end
121
-
118
+
122
119
  it "should not include classes which have indexed superclasses" do
123
- @context.stub!(:indexed_models => ['Parent', 'Person'])
124
-
125
- @context.superclass_indexed_models.should == ['Person']
120
+ ts_context.stub!(:indexed_models => ['Parent', 'Person'])
121
+
122
+ ts_context.superclass_indexed_models.should == ['Person']
126
123
  end
127
124
  end
128
125
  end