sunspot_rails 2.2.7 → 2.2.8

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 (56) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -2
  3. data/Appraisals +60 -0
  4. data/Gemfile +3 -0
  5. data/gemfiles/.gitkeep +0 -0
  6. data/lib/sunspot/rails/solr_logging.rb +3 -3
  7. data/spec/configuration_spec.rb +67 -67
  8. data/spec/model_lifecycle_spec.rb +8 -8
  9. data/spec/model_spec.rb +72 -71
  10. data/spec/rails_app/app/controllers/application_controller.rb +4 -0
  11. data/spec/rails_app/app/controllers/posts_controller.rb +16 -0
  12. data/spec/{rails_template → rails_app}/app/models/author.rb +0 -0
  13. data/spec/{rails_template → rails_app}/app/models/blog.rb +0 -0
  14. data/spec/{rails_template → rails_app}/app/models/location.rb +0 -0
  15. data/spec/{rails_template → rails_app}/app/models/photo_post.rb +0 -0
  16. data/spec/{rails_template → rails_app}/app/models/post.rb +0 -0
  17. data/spec/{rails_template → rails_app}/app/models/post_with_auto.rb +0 -0
  18. data/spec/{rails_template → rails_app}/app/models/post_with_default_scope.rb +0 -0
  19. data/spec/{rails_template → rails_app}/app/models/post_with_only_some_attributes_triggering_reindex.rb +0 -0
  20. data/spec/{rails_template → rails_app}/app/models/rake_task_auto_load_test_model.rb +0 -0
  21. data/spec/rails_app/config.ru +4 -0
  22. data/spec/rails_app/config/application.rb +14 -0
  23. data/spec/rails_app/config/boot.rb +6 -0
  24. data/spec/rails_app/config/database.yml +5 -0
  25. data/spec/rails_app/config/environment.rb +5 -0
  26. data/spec/rails_app/config/environments/test.rb +38 -0
  27. data/spec/{rails_template → rails_app}/config/initializers/rails_5_override.rb +0 -0
  28. data/spec/rails_app/config/initializers/secret_token.rb +1 -0
  29. data/spec/rails_app/config/initializers/session_store.rb +3 -0
  30. data/spec/{rails_template → rails_app}/config/routes.rb +0 -0
  31. data/spec/{rails_template → rails_app}/config/sunspot.yml +0 -0
  32. data/spec/rails_app/db/schema.rb +26 -0
  33. data/spec/rake_task_spec.rb +8 -8
  34. data/spec/request_lifecycle_spec.rb +12 -16
  35. data/spec/schema.rb +8 -9
  36. data/spec/searchable_spec.rb +4 -4
  37. data/spec/server_spec.rb +7 -7
  38. data/spec/session_spec.rb +3 -3
  39. data/spec/shared_examples/indexed_after_save.rb +1 -1
  40. data/spec/shared_examples/not_indexed_after_save.rb +1 -1
  41. data/spec/spec_helper.rb +18 -51
  42. data/spec/stub_session_proxy_spec.rb +36 -36
  43. data/sunspot_rails.gemspec +6 -3
  44. metadata +94 -58
  45. data/dev_tasks/spec.rake +0 -97
  46. data/gemfiles/rails-3.0.0 +0 -21
  47. data/gemfiles/rails-3.1.0 +0 -21
  48. data/gemfiles/rails-3.2.0 +0 -21
  49. data/gemfiles/rails-4.0.0 +0 -25
  50. data/gemfiles/rails-4.1.0 +0 -24
  51. data/gemfiles/rails-4.2.0 +0 -24
  52. data/gemfiles/rails-5.0 +0 -20
  53. data/spec/rails_template/app/controllers/application_controller.rb +0 -10
  54. data/spec/rails_template/app/controllers/posts_controller.rb +0 -6
  55. data/spec/rails_template/config/database.yml +0 -11
  56. data/spec/rails_template/db/schema.rb +0 -27
@@ -0,0 +1,4 @@
1
+ class ApplicationController < ActionController::Base
2
+ helper :all
3
+ protect_from_forgery
4
+ end
@@ -0,0 +1,16 @@
1
+ class PostsController < ApplicationController
2
+ def create
3
+ PostWithAuto.create(permitted_params[:post])
4
+ head(:ok)
5
+ end
6
+
7
+ private
8
+
9
+ def permitted_params
10
+ if ::Rails::VERSION::MAJOR >= 4
11
+ params.permit! # ActionController::Parameters
12
+ else
13
+ params
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,4 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require ::File.expand_path('../config/environment', __FILE__)
4
+ run RailsApp::Application
@@ -0,0 +1,14 @@
1
+ require File.expand_path('../boot', __FILE__)
2
+
3
+ require 'rails/all'
4
+
5
+ Bundler.require(:default, Rails.env) if defined?(Bundler)
6
+
7
+ module RailsApp
8
+ class Application < Rails::Application
9
+ config.encoding = 'utf-8'
10
+
11
+ # Configure sensitive parameters which will be filtered from the log file.
12
+ config.filter_parameters += [:password]
13
+ end
14
+ end
@@ -0,0 +1,6 @@
1
+ require 'rubygems'
2
+
3
+ # Set up gems listed in the Gemfile.
4
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
5
+
6
+ require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
@@ -0,0 +1,5 @@
1
+ test:
2
+ adapter: sqlite3
3
+ database: ':memory:'
4
+ pool: 5
5
+ timeout: 5000
@@ -0,0 +1,5 @@
1
+ # Load the rails application
2
+ require File.expand_path('../application', __FILE__)
3
+
4
+ # Initialize the rails application
5
+ RailsApp::Application.initialize!
@@ -0,0 +1,38 @@
1
+ RailsApp::Application.configure do
2
+ # Settings specified here will take precedence over those in config/application.rb
3
+
4
+ # The test environment is used exclusively to run your application's
5
+ # test suite. You never need to work with it otherwise. Remember that
6
+ # your test database is "scratch space" for the test suite and is wiped
7
+ # and recreated between test runs. Don't rely on the data there!
8
+ config.cache_classes = true
9
+
10
+ # Eager load code on boot. This eager loads most of Rails and
11
+ # your application in memory, allowing both thread web servers
12
+ # and those relying on copy on write to perform better.
13
+ # Rake tasks automatically ignore this option for performance.
14
+ config.eager_load = true
15
+
16
+ # Show full error reports and disable caching
17
+ config.consider_all_requests_local = true
18
+ config.action_controller.perform_caching = false
19
+
20
+ # Raise exceptions instead of rendering exception templates
21
+ config.action_dispatch.show_exceptions = false
22
+
23
+ # Disable request forgery protection in test environment
24
+ config.action_controller.allow_forgery_protection = false
25
+
26
+ # Tell Action Mailer not to deliver emails to the real world.
27
+ # The :test delivery method accumulates sent emails in the
28
+ # ActionMailer::Base.deliveries array.
29
+ config.action_mailer.delivery_method = :test
30
+
31
+ # Use SQL instead of Active Record's schema dumper when creating the test database.
32
+ # This is necessary if your schema can't be completely dumped by the schema dumper,
33
+ # like if you have constraints or database-specific column types
34
+ # config.active_record.schema_format = :sql
35
+
36
+ # Print deprecation notices to the stderr
37
+ config.active_support.deprecation = :stderr
38
+ end
@@ -0,0 +1 @@
1
+ Rails.application.config.secret_key_base = '_secret_key_base_'
@@ -0,0 +1,3 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ Rails.application.config.session_store :cookie_store, :key => '_rails_app_session'
@@ -0,0 +1,26 @@
1
+ ActiveRecord::Schema.define(version: 0) do
2
+ create_table :posts, force: :cascade do |t|
3
+ t.string :title
4
+ t.string :type
5
+ t.integer :location_id
6
+ t.text :body
7
+ t.references :blog
8
+ t.timestamps null: true
9
+ end
10
+
11
+ create_table :locations, force: :cascade do |t|
12
+ t.float :lat
13
+ t.float :lng
14
+ end
15
+
16
+ create_table :blogs, force: :cascade do |t|
17
+ t.string :name
18
+ t.string :subdomain
19
+ t.timestamps null: true
20
+ end
21
+
22
+ create_table :writers, force: :cascade, primary_key: :writer_id do |t|
23
+ t.string :name
24
+ t.timestamps null: true
25
+ end
26
+ end
@@ -12,27 +12,27 @@ describe 'sunspot namespace rake task' do
12
12
  run_rake_task("sunspot:reindex", '', '', true)
13
13
 
14
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')
15
+ expect(Sunspot.searchable.collect(&:name)).to include('RakeTaskAutoLoadTestModel')
16
16
  end
17
17
 
18
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)
19
+ expect(Post).to receive(:solr_reindex)
20
+ expect(Author).to receive(:solr_reindex)
21
+ expect(Blog).not_to receive(:solr_reindex)
22
22
 
23
23
  run_rake_task("sunspot:reindex", '', "Post Author", true)
24
24
  end
25
25
 
26
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)
27
+ expect(Post).to receive(:solr_reindex)
28
+ expect(Author).to receive(:solr_reindex)
29
+ expect(Blog).not_to receive(:solr_reindex)
30
30
 
31
31
  run_rake_task("sunspot:reindex", '', "Post+Author", true)
32
32
  end
33
33
 
34
34
  it "should raise exception when all tables of sunspot models are empty" do
35
- STDOUT.should_receive(:puts).with("You have no data in the database. Reindexing does nothing here.")
35
+ expect(STDOUT).to receive(:puts).with("You have no data in the database. Reindexing does nothing here.")
36
36
  empty_tables
37
37
  run_rake_task("sunspot:reindex")
38
38
  end
@@ -15,26 +15,22 @@ describe PostsController, :type => :controller do
15
15
  Sunspot::Rails.configuration = nil
16
16
  end
17
17
 
18
- unless respond_to?(:describes)
19
- controller_name :posts # RSpec 1
20
- end
21
-
22
18
  it 'should automatically commit after each action if specified' do
23
19
  @configuration.user_configuration = { 'auto_commit_after_request' => true }
24
- Sunspot.should_receive(:commit_if_dirty)
25
- post :create, :post => { :title => 'Test 1' }
20
+ expect(Sunspot).to receive(:commit_if_dirty)
21
+ post :create, :params => { :post => { :title => 'Test 1' } }
26
22
  end
27
23
 
28
24
  it 'should not commit, if configuration is set to false' do
29
25
  @configuration.user_configuration = { 'auto_commit_after_request' => false }
30
- Sunspot.should_not_receive(:commit_if_dirty)
31
- post :create, :post => { :title => 'Test 1' }
26
+ expect(Sunspot).not_to receive(:commit_if_dirty)
27
+ post :create, :params => { :post => { :title => 'Test 1' } }
32
28
  end
33
29
 
34
30
  it 'should commit if configuration is not specified' do
35
31
  @configuration.user_configuration = {}
36
- Sunspot.should_receive(:commit_if_dirty)
37
- post :create, :post => { :title => 'Test 1' }
32
+ expect(Sunspot).to receive(:commit_if_dirty)
33
+ post :create, :params => { :post => { :title => 'Test 1' } }
38
34
  end
39
35
 
40
36
  ### auto_commit_if_delete_dirty
@@ -42,20 +38,20 @@ describe PostsController, :type => :controller do
42
38
  it 'should automatically commit after each delete if specified' do
43
39
  @configuration.user_configuration = { 'auto_commit_after_request' => false,
44
40
  'auto_commit_after_delete_request' => true }
45
- Sunspot.should_receive(:commit_if_delete_dirty)
46
- post :create, :post => { :title => 'Test 1' }
41
+ expect(Sunspot).to receive(:commit_if_delete_dirty)
42
+ post :create, :params => { :post => { :title => 'Test 1' } }
47
43
  end
48
44
 
49
45
  it 'should not automatically commit on delete if configuration is set to false' do
50
46
  @configuration.user_configuration = { 'auto_commit_after_request' => false,
51
47
  'auto_commit_after_delete_request' => false }
52
- Sunspot.should_not_receive(:commit_if_delete_dirty)
53
- post :create, :post => { :title => 'Test 1' }
48
+ expect(Sunspot).not_to receive(:commit_if_delete_dirty)
49
+ post :create, :params => { :post => { :title => 'Test 1' } }
54
50
  end
55
51
 
56
52
  it 'should not automatically commit on delete if configuration is not specified' do
57
53
  @configuration.user_configuration = { 'auto_commit_after_request' => false }
58
- Sunspot.should_not_receive(:commit_if_delete_dirty)
59
- post :create, :post => { :title => 'Test 1' }
54
+ expect(Sunspot).not_to receive(:commit_if_delete_dirty)
55
+ post :create, :params => { :post => { :title => 'Test 1' } }
60
56
  end
61
57
  end
@@ -1,27 +1,26 @@
1
- ActiveRecord::Schema.define(:version => 0) do
2
- create_table :posts, :force => true do |t|
1
+ ActiveRecord::Schema.define(version: 0) do
2
+ create_table :posts, force: true do |t|
3
3
  t.string :title
4
4
  t.string :type
5
5
  t.integer :location_id
6
6
  t.text :body
7
7
  t.references :blog
8
- t.timestamps
8
+ t.timestamps null: true
9
9
  end
10
10
 
11
- create_table :locations, :force => true do |t|
11
+ create_table :locations, force: true do |t|
12
12
  t.float :lat
13
13
  t.float :lng
14
14
  end
15
15
 
16
- create_table :blogs, :force => true do |t|
16
+ create_table :blogs, force: true do |t|
17
17
  t.string :name
18
18
  t.string :subdomain
19
- t.timestamps
19
+ t.timestamps null: true
20
20
  end
21
21
 
22
- create_table :writers, :force => true, :primary_key => :writer_id do |t|
22
+ create_table :writers, force: true, primary_key: :writer_id do |t|
23
23
  t.string :name
24
- t.timestamps
24
+ t.timestamps null: true
25
25
  end
26
-
27
26
  end
@@ -6,10 +6,10 @@ describe Sunspot::Rails::Searchable do
6
6
  # Rspec runs tests in random order, causing this test to fail on occasion unless we ensure the models have loaded.
7
7
  Author; Blog; Post;
8
8
 
9
- Sunspot.searchable.should_not be_empty
10
- Sunspot.searchable.should include(Author)
11
- Sunspot.searchable.should include(Blog)
12
- Sunspot.searchable.should include(Post)
9
+ expect(Sunspot.searchable).not_to be_empty
10
+ expect(Sunspot.searchable).to include(Author)
11
+ expect(Sunspot.searchable).to include(Blog)
12
+ expect(Sunspot.searchable).to include(Post)
13
13
  end
14
14
  end
15
15
  end
@@ -4,28 +4,28 @@ describe Sunspot::Rails::Server do
4
4
  before :each do
5
5
  @server = Sunspot::Rails::Server.new
6
6
  @config = Sunspot::Rails::Configuration.new
7
- @server.stub(:configuration){ @config }
7
+ allow(@server).to receive(:configuration){ @config }
8
8
  @solr_home = File.join(@config.solr_home)
9
9
  end
10
10
 
11
11
  it "sets the correct Solr home" do
12
- @server.solr_home.should == @solr_home
12
+ expect(@server.solr_home).to eq(@solr_home)
13
13
  end
14
14
 
15
15
  it "sets the correct Solr PID path" do
16
- @server.pid_path.should == File.join(@server.pid_dir, 'sunspot-solr-test.pid')
16
+ expect(@server.pid_path).to eq(File.join(@server.pid_dir, 'sunspot-solr-test.pid'))
17
17
  end
18
18
 
19
19
  it "sets the correct port" do
20
- @server.port.should == 8983
20
+ expect(@server.port).to eq(8983)
21
21
  end
22
22
 
23
23
  it "sets the log level using configuration" do
24
- @config.stub(:log_level){ 'WARNING' }
25
- @server.log_level.should == "WARNING"
24
+ allow(@config).to receive(:log_level){ 'WARNING' }
25
+ expect(@server.log_level).to eq("WARNING")
26
26
  end
27
27
 
28
28
  it "sets the correct log file" do
29
- @server.log_file.should == File.join(Rails.root, 'log', 'sunspot-solr-test.log')
29
+ expect(@server.log_file).to eq(File.join(Rails.root, 'log', 'sunspot-solr-test.log'))
30
30
  end
31
31
  end
@@ -19,7 +19,7 @@ describe 'Sunspot::Rails session' do
19
19
 
20
20
  # There should be no items in the queue with the same object_id
21
21
  object_ids = sessions.map(&:object_id)
22
- object_ids.uniq.should == object_ids
22
+ expect(object_ids.uniq).to eq(object_ids)
23
23
  end
24
24
 
25
25
  it 'should create a separate master/slave session if configured' do
@@ -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
+ allow(::Rails).to receive(:env).and_return("config_disabled_test")
35
35
  end
36
36
 
37
37
  after do
@@ -39,7 +39,7 @@ describe 'Sunspot::Rails session' do
39
39
  end
40
40
 
41
41
  it 'sets the session proxy as a stub' do
42
- Sunspot::Rails.build_session.should be_a_kind_of(Sunspot::Rails::StubSessionProxy)
42
+ expect(Sunspot::Rails.build_session).to be_a_kind_of(Sunspot::Rails::StubSessionProxy)
43
43
  end
44
44
  end
45
45
 
@@ -3,6 +3,6 @@ shared_examples_for 'indexed after save' do
3
3
  subject.save!
4
4
  Sunspot.commit
5
5
 
6
- subject.class.search.results.should include(subject)
6
+ expect(subject.class.search.results).to include(subject)
7
7
  end
8
8
  end
@@ -3,6 +3,6 @@ shared_examples_for 'not indexed after save' do
3
3
  subject.save!
4
4
  Sunspot.commit
5
5
 
6
- subject.class.search.results.should_not include(subject)
6
+ expect(subject.class.search.results).not_to include(subject)
7
7
  end
8
8
  end
@@ -1,75 +1,42 @@
1
- # This file is copied to spec/ when you run 'rails generate rspec:install'
2
1
  ENV["RAILS_ENV"] ||= 'test'
3
- if rsolr_version = ENV['RSOLR_GEM_VERSION']
4
- STDERR.puts("Forcing RSolr version #{rsolr_version}")
5
- gem "rsolr", rsolr_version
6
- end
7
-
8
- # Require the Database-specific gems
9
- ENV['DB'] ||= 'sqlite'
10
- Bundler.require(ENV['DB'])
11
2
 
12
- require File.expand_path('config/environment', ENV['RAILS_ROOT'])
3
+ require File.expand_path('config/environment', File.expand_path('../rails_app', __FILE__))
4
+ require File.expand_path('../../lib/sunspot_rails', __FILE__)
13
5
  require 'rspec/rails'
14
- require 'rspec/autorun'
15
- require File.join('sunspot', 'rails', 'solr_logging')
16
6
 
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 }
7
+ if RSolr::VERSION >= '2'
8
+ require File.join('sunspot', 'rails', 'solr_logging')
9
+ end
25
10
 
26
11
  # Load all shared examples
27
- Dir[File.expand_path("shared_examples/*.rb", File.dirname(__FILE__))].each {|f| require f}
12
+ Dir[File.expand_path("shared_examples/*.rb", File.dirname(__FILE__))].each { |f| require f }
28
13
 
29
14
  # Load the schema
30
- load File.join(ENV['RAILS_ROOT'], 'db', 'schema.rb')
15
+ load File.join(File.expand_path('../rails_app', __FILE__), 'db', 'schema.rb')
31
16
 
32
17
  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
18
  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
19
  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"
20
+ config.order = 'random'
21
+ config.infer_spec_type_from_file_location!
59
22
 
60
23
  config.before(:each) do
61
24
  empty_tables
62
25
  Sunspot.remove_all!
63
- end
26
+ end
64
27
  end
65
28
 
66
29
  def empty_tables
67
- ActiveRecord::Base.connection.tables.each do |table_name|
30
+ sources = if Rails::VERSION::MAJOR > 4
31
+ ActiveRecord::Base.connection.data_sources
32
+ else
33
+ ActiveRecord::Base.connection.tables
34
+ end
35
+ sources.each do |table_name|
68
36
  ActiveRecord::Base.connection.execute("DELETE FROM #{table_name}") unless table_name == 'schema_migrations'
69
37
  end
70
38
  end
71
39
 
72
- # COMPATIBILITY: Rails 4 has deprecated the 'scoped' method in favour of 'all'
73
40
  def relation(clazz)
74
- ::Rails.version >= '4' ? clazz.all : clazz.scoped
75
- end
41
+ Rails::VERSION::MAJOR >= 4 ? clazz.all : clazz.scoped
42
+ end