sunspot_rails 2.0.0 → 2.1.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 (35) hide show
  1. data/History.txt +6 -1
  2. data/README.rdoc +0 -26
  3. data/dev_tasks/spec.rake +15 -24
  4. data/gemfiles/{rails-2.3.16 → rails-3.0.0} +11 -5
  5. data/gemfiles/{rails-3.0.20 → rails-3.1.0} +11 -4
  6. data/gemfiles/{rails-3.1.10 → rails-3.2.0} +11 -4
  7. data/gemfiles/rails-4.0.0 +20 -0
  8. data/generators/sunspot/templates/sunspot.yml +7 -4
  9. data/lib/generators/sunspot_rails/install/templates/config/sunspot.yml +4 -0
  10. data/lib/sunspot/rails/adapters.rb +12 -11
  11. data/lib/sunspot/rails/configuration.rb +2 -2
  12. data/lib/sunspot/rails/log_subscriber.rb +11 -6
  13. data/lib/sunspot/rails/railtie.rb +1 -1
  14. data/lib/sunspot/rails/searchable.rb +10 -15
  15. data/lib/sunspot/rails/solr_instrumentation.rb +7 -5
  16. data/lib/sunspot/rails/solr_logging.rb +2 -5
  17. data/lib/sunspot/rails/stub_session_proxy.rb +14 -0
  18. data/lib/sunspot/rails/tasks.rb +47 -42
  19. data/lib/sunspot_rails.rb +2 -7
  20. data/spec/configuration_spec.rb +10 -10
  21. data/spec/model_spec.rb +38 -29
  22. data/spec/rails_template/app/models/post_with_default_scope.rb +3 -1
  23. data/spec/rails_template/app/models/rake_task_auto_load_test_model.rb +13 -0
  24. data/spec/rails_template/config/database.yml +11 -0
  25. data/spec/rails_template/config/routes.rb +3 -9
  26. data/spec/rake_task_spec.rb +40 -0
  27. data/spec/searchable_spec.rb +3 -0
  28. data/spec/session_spec.rb +1 -1
  29. data/spec/spec_helper.rb +59 -32
  30. data/spec/stub_session_proxy_spec.rb +8 -4
  31. data/sunspot_rails.gemspec +1 -0
  32. metadata +42 -22
  33. data/gemfiles/rails-3.2.11 +0 -12
  34. data/spec/rails_template/config/boot.rb +0 -127
  35. data/spec/rails_template/config/preinitializer.rb +0 -22
@@ -82,10 +82,16 @@ module Sunspot
82
82
  0
83
83
  end
84
84
 
85
+ def facets
86
+ []
87
+ end
88
+
85
89
  def facet(name)
90
+ FacetStub.new
86
91
  end
87
92
 
88
93
  def dynamic_facet(name)
94
+ FacetStub.new
89
95
  end
90
96
 
91
97
  def execute
@@ -140,6 +146,14 @@ module Sunspot
140
146
  end
141
147
 
142
148
  end
149
+
150
+ class FacetStub
151
+
152
+ def rows
153
+ []
154
+ end
155
+
156
+ end
143
157
 
144
158
  end
145
159
  end
@@ -14,55 +14,60 @@ namespace :sunspot do
14
14
  # $ rake sunspot:reindex[1000,Post] # reindex only the Post model in
15
15
  # # batchs of 1000
16
16
  # $ rake sunspot:reindex[,Post+Author] # reindex Post and Author model
17
- task :reindex, [:batch_size, :models] => [:environment] do |t, args|
18
- puts "*Note: the reindex task will remove your current indexes and start from scratch."
19
- puts "If you have a large dataset, reindexing can take a very long time, possibly weeks."
20
- puts "This is not encouraged if you have anywhere near or over 1 million rows."
21
- puts "Are you sure you want to drop your indexes and completely reindex? (y/n)"
22
- answer = STDIN.gets.chomp
23
- return false if answer == "n"
24
-
17
+ task :reindex, [:batch_size, :models, :silence] => [:environment] do |t, args|
25
18
  # Retry once or gracefully fail for a 5xx error so we don't break reindexing
26
- Sunspot.session = Sunspot::SessionProxy::Retry5xxSessionProxy.new(Sunspot.session)
27
-
28
- # Set up general options for reindexing
29
- reindex_options = { :batch_commit => false }
19
+ with_session(Sunspot::SessionProxy::Retry5xxSessionProxy.new(Sunspot.session)) do
30
20
 
31
- case args[:batch_size]
32
- when 'false'
33
- reindex_options[:batch_size] = nil
34
- when /^\d+$/
35
- reindex_options[:batch_size] = args[:batch_size].to_i if args[:batch_size].to_i > 0
36
- end
21
+ # Set up general options for reindexing
22
+ reindex_options = { :batch_commit => false }
37
23
 
38
- # Load all the application's models. Models which invoke 'searchable' will register themselves
39
- # in Sunspot.searchable.
40
- Dir.glob(Rails.root.join('app/models/**/*.rb')).each { |path| require path }
41
-
42
- # By default, reindex all searchable models
43
- sunspot_models = Sunspot.searchable
24
+ case args[:batch_size]
25
+ when 'false'
26
+ reindex_options[:batch_size] = nil
27
+ when /^\d+$/
28
+ reindex_options[:batch_size] = args[:batch_size].to_i if args[:batch_size].to_i > 0
29
+ end
44
30
 
45
- # Choose a specific subset of models, if requested
46
- if args[:models]
47
- model_names = args[:models].split('+')
48
- sunspot_models = model_names.map{ |m| m.constantize }
49
- end
31
+ # Load all the application's models. Models which invoke 'searchable' will register themselves
32
+ # in Sunspot.searchable.
33
+ Rails.application.eager_load!
34
+
35
+ if args[:models].present?
36
+ # Choose a specific subset of models, if requested
37
+ model_names = args[:models].split(/[+ ]/)
38
+ sunspot_models = model_names.map{ |m| m.constantize }
39
+ else
40
+ # By default, reindex all searchable models
41
+ sunspot_models = Sunspot.searchable
42
+ end
50
43
 
51
- # Set up progress_bar to, ah, report progress
52
- begin
53
- require 'progress_bar'
54
- total_documents = sunspot_models.map { | m | m.count }.sum
55
- reindex_options[:progress_bar] = ProgressBar.new(total_documents)
56
- rescue LoadError => e
57
- $stdout.puts "Skipping progress bar: for progress reporting, add gem 'progress_bar' to your Gemfile"
58
- rescue Exception => e
59
- $stderr.puts "Error using progress bar: #{e.message}"
44
+ # Set up progress_bar to, ah, report progress unless the user has chosen to silence output
45
+ begin
46
+ require 'progress_bar'
47
+ total_documents = sunspot_models.map { | m | m.count }.sum
48
+ reindex_options[:progress_bar] = ProgressBar.new(total_documents)
49
+ rescue LoadError => e
50
+ $stdout.puts "Skipping progress bar: for progress reporting, add gem 'progress_bar' to your Gemfile"
51
+ rescue Exception => e
52
+ $stderr.puts "Error using progress bar: #{e.message}"
53
+ end unless args[:silence]
54
+
55
+ # Finally, invoke the class-level solr_reindex on each model
56
+ sunspot_models.each do |model|
57
+ model.solr_reindex(reindex_options)
58
+ end
60
59
  end
60
+ end
61
61
 
62
- # Finally, invoke the class-level solr_reindex on each model
63
- sunspot_models.each do |model|
64
- model.solr_reindex(reindex_options)
65
- end
62
+ # Swaps sunspot sessions for the duration of the block
63
+ # Ensures the session is returned to normal in case this task is called from within the rails app
64
+ # and not just a one-off from the command line
65
+ def with_session(new_session)
66
+ original_session = Sunspot.session
67
+ Sunspot.session = new_session
68
+ yield
69
+ ensure
70
+ Sunspot.session = original_session
66
71
  end
67
72
 
68
73
  def sunspot_solr_in_load_path?
data/lib/sunspot_rails.rb CHANGED
@@ -1,12 +1,7 @@
1
1
  # This needs to be loaded before sunspot/search/paginated_collection
2
2
  # or #to_json gets defined in Object breaking delegation to Array via
3
3
  # method_missing
4
- require 'active_support/core_ext/object/to_json' if ::Rails.version >= '3'
4
+ require 'active_support/core_ext/object/to_json'
5
5
 
6
6
  require 'sunspot/rails'
7
-
8
- if ::Rails.version >= '3'
9
- require 'sunspot/rails/railtie'
10
- else
11
- require 'sunspot/rails/init'
12
- end
7
+ require 'sunspot/rails/railtie'
@@ -2,7 +2,7 @@ require File.expand_path('spec_helper', File.dirname(__FILE__))
2
2
 
3
3
  describe Sunspot::Rails::Configuration, "default values without a sunspot.yml" do
4
4
  before(:each) do
5
- File.stub!(:exist?).and_return(false) # simulate sunspot.yml not existing
5
+ File.stub(:exist?).and_return(false) # simulate sunspot.yml not existing
6
6
  @config = Sunspot::Rails::Configuration.new
7
7
  end
8
8
 
@@ -11,27 +11,27 @@ describe Sunspot::Rails::Configuration, "default values without a sunspot.yml" d
11
11
  end
12
12
 
13
13
  it "should handle the 'path' property when not set" do
14
- @config.path.should == '/solr'
14
+ @config.path.should == '/solr/default'
15
15
  end
16
16
 
17
17
  describe "port" do
18
18
  it "should default to port 8981 in test" do
19
- ::Rails.stub!(:env => 'test')
19
+ ::Rails.stub(:env => 'test')
20
20
  @config = Sunspot::Rails::Configuration.new
21
21
  @config.port.should == 8981
22
22
  end
23
23
  it "should default to port 8982 in development" do
24
- ::Rails.stub!(:env => 'development')
24
+ ::Rails.stub(:env => 'development')
25
25
  @config = Sunspot::Rails::Configuration.new
26
26
  @config.port.should == 8982
27
27
  end
28
28
  it "should default to 8983 in production" do
29
- ::Rails.stub!(:env => 'production')
29
+ ::Rails.stub(:env => 'production')
30
30
  @config = Sunspot::Rails::Configuration.new
31
31
  @config.port.should == 8983
32
32
  end
33
33
  it "should generally default to 8983" do
34
- ::Rails.stub!(:env => 'staging')
34
+ ::Rails.stub(:env => 'staging')
35
35
  @config = Sunspot::Rails::Configuration.new
36
36
  @config.port.should == 8983
37
37
  end
@@ -88,7 +88,7 @@ end
88
88
 
89
89
  describe Sunspot::Rails::Configuration, "user provided sunspot.yml" do
90
90
  before(:each) do
91
- ::Rails.stub!(:env => 'config_test')
91
+ ::Rails.stub(:env => 'config_test')
92
92
  @config = Sunspot::Rails::Configuration.new
93
93
  end
94
94
 
@@ -145,7 +145,7 @@ end
145
145
 
146
146
  describe Sunspot::Rails::Configuration, "with disabled: true in sunspot.yml" do
147
147
  before(:each) do
148
- ::Rails.stub!(:env => 'config_disabled_test')
148
+ ::Rails.stub(:env => 'config_disabled_test')
149
149
  @config = Sunspot::Rails::Configuration.new
150
150
  end
151
151
 
@@ -160,7 +160,7 @@ describe Sunspot::Rails::Configuration, "with ENV['SOLR_URL'] overriding sunspot
160
160
  end
161
161
 
162
162
  before(:each) do
163
- ::Rails.stub!(:env => 'config_test')
163
+ ::Rails.stub(:env => 'config_test')
164
164
  @config = Sunspot::Rails::Configuration.new
165
165
  end
166
166
 
@@ -187,7 +187,7 @@ describe Sunspot::Rails::Configuration, "with ENV['WEBSOLR_URL'] overriding suns
187
187
  end
188
188
 
189
189
  before(:each) do
190
- ::Rails.stub!(:env => 'config_test')
190
+ ::Rails.stub(:env => 'config_test')
191
191
  @config = Sunspot::Rails::Configuration.new
192
192
  end
193
193
 
data/spec/model_spec.rb CHANGED
@@ -119,46 +119,50 @@ describe 'ActiveRecord mixin' do
119
119
  with :title, 'Bogus Post'
120
120
  end.results.should be_empty
121
121
  end
122
-
123
- it 'should use the include option on the data accessor when specified' do
124
- Post.should_receive(:all).with(hash_including(:include => [:blog])).and_return([@post])
125
- Post.search do
126
- with :title, 'Test Post'
127
- data_accessor_for(Post).include = [:blog]
128
- end.results.should == [@post]
122
+
123
+ it 'should not allow bogus options to search' do
124
+ lambda { Post.search(:bogus => :option) }.should raise_error(ArgumentError)
129
125
  end
130
126
 
131
127
  it 'should pass :include option from search call to data accessor' do
132
- Post.should_receive(:all).with(hash_including(:include => [:blog])).and_return([@post])
133
- Post.search(:include => [:blog]) do
128
+ Post.search(:include => [:location]) do
134
129
  with :title, 'Test Post'
135
- end.results.should == [@post]
130
+ end.data_accessor_for(Post).include.should == [:location]
136
131
  end
137
132
 
138
- it 'should use the select option from search call to data accessor' do
139
- Post.should_receive(:all).with(hash_including(:select => 'title, published_at')).and_return([@post])
140
- Post.search(:select => 'title, published_at') do
133
+ it 'should use the include option on the data accessor when specified' do
134
+ @post.update_attribute(:location, Location.create)
135
+ post = Post.search do
141
136
  with :title, 'Test Post'
142
- end.results.should == [@post]
143
- end
137
+ data_accessor_for(Post).include = [:location]
138
+ end.results.first
144
139
 
145
- it 'should not allow bogus options to search' do
146
- lambda { Post.search(:bogus => :option) }.should raise_error(ArgumentError)
140
+ (Rails.version >= '3.1' ? post.association(:location).loaded? : post.loaded_location?).should be_true # Rails 3.1 removed "loaded_#{association}" method
141
+ end
142
+
143
+ it 'should use the select option from search call to data accessor' do
144
+ Post.search(:select => 'id, title, body') do
145
+ with :title, 'Test Post'
146
+ end.data_accessor_for(Post).select.should == 'id, title, body'
147
147
  end
148
148
 
149
149
  it 'should use the select option on the data accessor when specified' do
150
- Post.should_receive(:all).with(hash_including(:select => 'title, published_at')).and_return([@post])
151
150
  Post.search do
152
151
  with :title, 'Test Post'
153
- data_accessor_for(Post).select = [:title, :published_at]
154
- end.results.should == [@post]
152
+ data_accessor_for(Post).select = 'id, title, body'
153
+ end.results.first.attribute_names.sort.should == ['body', 'id', 'title']
155
154
  end
156
155
 
157
156
  it 'should not use the select option on the data accessor when not specified' do
158
- Post.should_receive(:all).with(hash_not_including(:select)).and_return([@post])
159
157
  Post.search do
160
158
  with :title, 'Test Post'
161
- end.results.should == [@post]
159
+ end.results.first.attribute_names.should == Post.first.attribute_names
160
+ end
161
+
162
+ it 'should accept an array as a select option' do
163
+ Post.search(:select => ['id', 'title', 'body']) do
164
+ with :title, 'Test Post'
165
+ end.results.first.attribute_names.sort.should == ['body', 'id', 'title']
162
166
  end
163
167
 
164
168
  it 'should gracefully handle nonexistent records' do
@@ -286,15 +290,20 @@ describe 'ActiveRecord mixin' do
286
290
  @posts = Array.new(2) { Post.create }
287
291
  end
288
292
 
289
- describe "when not using batches" do
290
-
291
- it "should select all if the batch_size is nil" do
292
- Post.should_receive(:all).with(:include => []).and_return([])
293
- Post.reindex(:batch_size => nil)
294
- end
293
+ it "should use batches if the batch_size is specified" do
294
+ relation(Post).class.any_instance.should_receive(:find_in_batches)
295
+ Post.reindex(:batch_size => 50)
296
+ end
295
297
 
298
+ it "should select all if the batch_size isn't greater than 0" do
299
+ relation(Post).class.any_instance.should_not_receive(:find_in_batches)
300
+ Post.reindex(:batch_size => nil)
301
+ Post.reindex(:batch_size => 0)
302
+ end
303
+
304
+ describe "when not using batches" do
296
305
  it "should search for models with includes" do
297
- Post.should_receive(:all).with(:include => :author).and_return([])
306
+ Post.should_receive(:includes).with(:author).and_return(relation(Post))
298
307
  Post.reindex(:batch_size => nil, :include => :author)
299
308
  end
300
309
 
@@ -5,7 +5,9 @@ class PostWithDefaultScope < ActiveRecord::Base
5
5
 
6
6
  attr_accessible :title, :type, :location_id, :body, :blog
7
7
 
8
- default_scope :order => :title
8
+ def self.default_scope
9
+ order(:title)
10
+ end
9
11
 
10
12
  searchable :auto_index => false, :auto_remove => false do
11
13
  string :title
@@ -0,0 +1,13 @@
1
+ # This model should not be used for any test other than the spec test that
2
+ # checks if all models are loaded. We don't want to pre-load this model in
3
+ # another test because we're checking to see if it will be auto-loaded by
4
+ # the reindex task
5
+ class RakeTaskAutoLoadTestModel < ActiveRecord::Base
6
+ def self.table_name
7
+ 'posts'
8
+ end
9
+
10
+ searchable do
11
+ string :name
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ <% if ENV['DB'] == 'postgres' %>
2
+ test:
3
+ adapter: postgresql
4
+ database: sunspot_test
5
+ <% elsif ENV['DB'] == 'sqlite' %>
6
+ test:
7
+ adapter: sqlite3
8
+ database: db/test.sqlite3
9
+ pool: 5
10
+ timeout: 5000
11
+ <% end %>
@@ -1,9 +1,3 @@
1
- if Rails::VERSION::MAJOR == 2
2
- ActionController::Routing::Routes.draw do |map|
3
- map.resources :posts, :only => :create
4
- end
5
- elsif Rails::VERSION::MAJOR == 3
6
- Rails.application.routes.draw do
7
- resources :posts, :only => :create
8
- end
9
- end
1
+ Rails.application.routes.draw do
2
+ resources :posts, :only => :create
3
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+ require 'rake'
3
+
4
+ describe 'sunspot namespace rake task' do
5
+ before :all do
6
+ require "#{Rails.root}/../../lib/sunspot/rails/tasks"
7
+ Rake::Task.define_task(:environment)
8
+ end
9
+
10
+ describe 'sunspot:reindex' do
11
+ it "should reindex all models if none are specified" do
12
+ run_rake_task("sunspot:reindex", '', '', true)
13
+
14
+ # This model should not be used by any other test and therefore should only be loaded by this test
15
+ Sunspot.searchable.collect(&:name).should include('RakeTaskAutoLoadTestModel')
16
+ end
17
+
18
+ it "should accept a space delimited list of models to reindex" do
19
+ Post.should_receive(:solr_reindex)
20
+ Author.should_receive(:solr_reindex)
21
+ Blog.should_not_receive(:solr_reindex)
22
+
23
+ run_rake_task("sunspot:reindex", '', "Post Author", true)
24
+ end
25
+
26
+ it "should accept a plus delimited list of models to reindex" do
27
+ Post.should_receive(:solr_reindex)
28
+ Author.should_receive(:solr_reindex)
29
+ Blog.should_not_receive(:solr_reindex)
30
+
31
+ run_rake_task("sunspot:reindex", '', "Post+Author", true)
32
+ end
33
+ end
34
+ end
35
+
36
+ def run_rake_task(task_name, *task_args)
37
+ task = Rake::Task[task_name.to_s]
38
+ task.reenable
39
+ task.invoke(*task_args) # Invoke but skip the reindex warning
40
+ end
@@ -3,6 +3,9 @@ require File.expand_path('spec_helper', File.dirname(__FILE__))
3
3
  describe Sunspot::Rails::Searchable do
4
4
  describe '#searchable' do
5
5
  it "should register models with Sunspot.searchable (via Sunspot.setup)" do
6
+ # Rspec runs tests in random order, causing this test to fail on occasion unless we ensure the models have loaded.
7
+ Author; Blog; Post;
8
+
6
9
  Sunspot.searchable.should_not be_empty
7
10
  Sunspot.searchable.should include(Author)
8
11
  Sunspot.searchable.should include(Blog)
data/spec/session_spec.rb CHANGED
@@ -31,7 +31,7 @@ describe 'Sunspot::Rails session' do
31
31
  context 'disabled' do
32
32
  before do
33
33
  Sunspot::Rails.reset
34
- ::Rails.stub!(:env).and_return("config_disabled_test")
34
+ ::Rails.stub(:env).and_return("config_disabled_test")
35
35
  end
36
36
 
37
37
  after do
data/spec/spec_helper.rb CHANGED
@@ -1,48 +1,75 @@
1
- ENV['RAILS_ENV'] = 'test'
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ ENV["RAILS_ENV"] ||= 'test'
2
3
  if rsolr_version = ENV['RSOLR_GEM_VERSION']
3
4
  STDERR.puts("Forcing RSolr version #{rsolr_version}")
4
5
  gem "rsolr", rsolr_version
5
6
  end
6
7
 
7
- require File.expand_path('config/environment', ENV['RAILS_ROOT'])
8
+ # Require the Database-specific gems
9
+ ENV['DB'] ||= 'sqlite'
10
+ Bundler.require(ENV['DB'])
8
11
 
9
- begin
10
- require 'rspec'
11
- require 'rspec/rails'
12
- rescue LoadError => e
13
- require 'spec'
14
- require 'spec/rails'
15
- end
16
- require 'rake'
12
+ require File.expand_path('config/environment', ENV['RAILS_ROOT'])
13
+ require 'rspec/rails'
14
+ require 'rspec/autorun'
17
15
  require File.join('sunspot', 'rails', 'solr_logging')
18
16
 
19
- def load_schema
20
- stdout = $stdout
21
- $stdout = StringIO.new # suppress output while building the schema
22
- load File.join(ENV['RAILS_ROOT'], 'db', 'schema.rb')
23
- $stdout = stdout
24
- end
25
-
26
- def silence_stderr(&block)
27
- stderr = $stderr
28
- $stderr = StringIO.new
29
- yield
30
- $stderr = stderr
31
- end
32
-
33
- rspec =
34
- begin
35
- RSpec
36
- rescue NameError, ArgumentError
37
- Spec::Runner
38
- end
17
+ # Requires supporting ruby files with custom matchers and macros, etc, in
18
+ # spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
19
+ # run as spec files by default. This means that files in spec/support that end
20
+ # in _spec.rb will both be required and run as specs, causing the specs to be
21
+ # run twice. It is recommended that you do not name files matching this glob to
22
+ # end with _spec.rb. You can configure this pattern with with the --pattern
23
+ # option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
24
+ Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
39
25
 
40
26
  # Load all shared examples
41
27
  Dir[File.expand_path("shared_examples/*.rb", File.dirname(__FILE__))].each {|f| require f}
42
28
 
43
- rspec.configure do |config|
29
+ # Load the schema
30
+ load File.join(ENV['RAILS_ROOT'], 'db', 'schema.rb')
31
+
32
+ RSpec.configure do |config|
33
+ # ## Mock Framework
34
+ #
35
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
36
+ #
37
+ # config.mock_with :mocha
38
+ # config.mock_with :flexmock
39
+ # config.mock_with :rr
40
+
41
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
42
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
43
+
44
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
45
+ # examples within a transaction, remove the following line or assign false
46
+ # instead of true.
47
+ config.use_transactional_fixtures = true
48
+
49
+ # If true, the base class of anonymous controllers will be inferred
50
+ # automatically. This will be the default behavior in future versions of
51
+ # rspec-rails.
52
+ config.infer_base_class_for_anonymous_controllers = false
53
+
54
+ # Run specs in random order to surface order dependencies. If you find an
55
+ # order dependency and want to debug it, you can fix the order by providing
56
+ # the seed, which is printed after each run.
57
+ # --seed 1234
58
+ config.order = "random"
59
+
44
60
  config.before(:each) do
45
- load_schema
61
+ empty_tables
46
62
  Sunspot.remove_all!
63
+ end
64
+ end
65
+
66
+ def empty_tables
67
+ ActiveRecord::Base.connection.tables.each do |table_name|
68
+ ActiveRecord::Base.connection.execute("DELETE FROM #{table_name}") unless table_name == 'schema_migrations'
47
69
  end
48
70
  end
71
+
72
+ # COMPATIBILITY: Rails 4 has deprecated the 'scoped' method in favour of 'all'
73
+ def relation(clazz)
74
+ ::Rails.version >= '4' ? clazz.all : clazz.scoped
75
+ end