sunspot_rails 2.2.6 → 2.6.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 (65) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -2
  3. data/Appraisals +64 -0
  4. data/Gemfile +3 -0
  5. data/lib/sunspot/rails/configuration.rb +4 -0
  6. data/lib/sunspot/rails/request_lifecycle.rb +3 -1
  7. data/lib/sunspot/rails/searchable.rb +15 -7
  8. data/lib/sunspot/rails/solr_instrumentation.rb +2 -2
  9. data/lib/sunspot/rails/solr_logging.rb +5 -10
  10. data/lib/sunspot/rails/stub_session_proxy.rb +9 -2
  11. data/lib/sunspot/rails/tasks.rb +0 -1
  12. data/lib/sunspot/rails.rb +2 -0
  13. data/spec/configuration_spec.rb +77 -69
  14. data/spec/model_lifecycle_spec.rb +8 -8
  15. data/spec/model_spec.rb +72 -71
  16. data/spec/rails_app/app/controllers/application_controller.rb +4 -0
  17. data/spec/rails_app/app/controllers/posts_controller.rb +16 -0
  18. data/spec/{rails_template → rails_app}/app/models/author.rb +0 -2
  19. data/spec/{rails_template → rails_app}/app/models/blog.rb +0 -2
  20. data/spec/{rails_template → rails_app}/app/models/location.rb +0 -1
  21. data/spec/{rails_template → rails_app}/app/models/post.rb +0 -2
  22. data/spec/{rails_template → rails_app}/app/models/post_with_auto.rb +0 -2
  23. data/spec/{rails_template → rails_app}/app/models/post_with_default_scope.rb +0 -2
  24. data/spec/{rails_template → rails_app}/app/models/post_with_only_some_attributes_triggering_reindex.rb +0 -2
  25. data/spec/rails_app/config/application.rb +17 -0
  26. data/spec/rails_app/config/boot.rb +6 -0
  27. data/spec/rails_app/config/database.yml +5 -0
  28. data/spec/rails_app/config/environment.rb +5 -0
  29. data/spec/rails_app/config/environments/test.rb +41 -0
  30. data/spec/rails_app/config/initializers/rails_5_override.rb +1 -0
  31. data/spec/rails_app/config/initializers/secret_token.rb +1 -0
  32. data/spec/rails_app/config/initializers/session_store.rb +3 -0
  33. data/spec/{rails_template → rails_app}/config/sunspot.yml +2 -0
  34. data/spec/rails_app/config.ru +4 -0
  35. data/spec/rails_app/db/schema.rb +26 -0
  36. data/spec/rails_app/vendor/engines/test_engine/app/models/test_engine/rake_task_auto_load_test_model.rb +15 -0
  37. data/spec/rails_app/vendor/engines/test_engine/lib/test_engine/engine.rb +5 -0
  38. data/spec/rails_app/vendor/engines/test_engine/lib/test_engine.rb +4 -0
  39. data/spec/rake_task_spec.rb +9 -9
  40. data/spec/request_lifecycle_spec.rb +17 -21
  41. data/spec/schema.rb +8 -9
  42. data/spec/searchable_spec.rb +4 -4
  43. data/spec/server_spec.rb +7 -7
  44. data/spec/session_spec.rb +3 -3
  45. data/spec/shared_examples/indexed_after_save.rb +1 -1
  46. data/spec/shared_examples/not_indexed_after_save.rb +1 -1
  47. data/spec/spec_helper.rb +18 -51
  48. data/spec/stub_session_proxy_spec.rb +40 -36
  49. data/sunspot_rails.gemspec +15 -8
  50. metadata +102 -58
  51. data/dev_tasks/spec.rake +0 -97
  52. data/gemfiles/rails-3.0.0 +0 -21
  53. data/gemfiles/rails-3.1.0 +0 -21
  54. data/gemfiles/rails-3.2.0 +0 -21
  55. data/gemfiles/rails-4.0.0 +0 -25
  56. data/gemfiles/rails-4.1.0 +0 -24
  57. data/gemfiles/rails-4.2.0 +0 -24
  58. data/spec/rails_template/app/controllers/application_controller.rb +0 -10
  59. data/spec/rails_template/app/controllers/posts_controller.rb +0 -6
  60. data/spec/rails_template/config/database.yml +0 -11
  61. data/spec/rails_template/db/schema.rb +0 -27
  62. /data/{tmp → gemfiles}/.gitkeep +0 -0
  63. /data/spec/{rails_template → rails_app}/app/models/photo_post.rb +0 -0
  64. /data/spec/{rails_template → rails_app}/app/models/rake_task_auto_load_test_model.rb +0 -0
  65. /data/spec/{rails_template → rails_app}/config/routes.rb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e0ce283378203c1a9f3bdccf1670ee3f10ff7e55
4
- data.tar.gz: 9c888704f1b8150db2ec3f3f2c8f18caabb3b051
2
+ SHA256:
3
+ metadata.gz: 63d24337902829c8c14a7ea0d9f081c7392b457e0604ff78887ed67037fcedc5
4
+ data.tar.gz: 77c235ecfc5bc55c4758abece0d0336bc0c541bf6461d5f134b7bec57eec3c88
5
5
  SHA512:
6
- metadata.gz: 630ae3479120da9bc341c3a6b4a0bd5c170c44bbab0b00329901f871344ec07f59834c6d8b7dee519f7145b7478705a6c65391c9a91179da9a673e87871dba8d
7
- data.tar.gz: 6b8d86ad3397a93422b5eb67401aa682ebf2a498c7bef90e45d8eadf0479ff0a7839402f1555ed02b8c96d6260ec16d0a44a2e2ec8628ae0691674eabef0aad6
6
+ metadata.gz: a3a95a7312b3dd3b3402fee02ff137c85b357cf17c1babf7c98f5a37456515882d5e8978729d368b42fa67c4163d02704b7540f9878cd4dd9d09cde22f78f1b8
7
+ data.tar.gz: 3b031829d6bfac5ee89d7cc33ebc76375614e4ac21f9b1864b55d313a537d08a4ef96cd57d60cc41fabc5eca589a2e42052169172c77756adf382aac7e108dae
data/.gitignore CHANGED
@@ -3,5 +3,4 @@ doc
3
3
  pkg/*
4
4
  log
5
5
  .bundle
6
- tmp/*
7
- gemfiles/*.lock
6
+ gemfiles/*.gemfile*
data/Appraisals ADDED
@@ -0,0 +1,64 @@
1
+ ruby_version = Gem::Version.new(RUBY_VERSION)
2
+
3
+ if ruby_version < Gem::Version.new('2.2.0')
4
+ ['3.0.0', '3.1.0'].each do |rails_version|
5
+ appraise "rails-#{rails_version}" do
6
+ gem 'bundler', '>= 1.3.0', '< 2.0'
7
+ gem 'sunspot', path: File.expand_path('sunspot', ENV['SUNSPOT_LIB_HOME'])
8
+ gem 'sunspot_solr', path: File.expand_path('sunspot_solr', ENV['SUNSPOT_LIB_HOME'])
9
+ gem 'rails', "~> #{rails_version}"
10
+ gem 'progress_bar', '~> 1.0.5', require: false
11
+ gem 'rspec', '~> 3.4.0'
12
+ gem 'rspec-rails', '~> 3.4.0'
13
+ end
14
+ end
15
+ end
16
+
17
+ if ruby_version < Gem::Version.new('2.4.0')
18
+ appraise 'rails-3.2.0' do
19
+ gem 'bundler', '>= 1.3.0', '< 2.0'
20
+ gem 'sunspot', path: File.expand_path('sunspot', ENV['SUNSPOT_LIB_HOME'])
21
+ gem 'sunspot_solr', path: File.expand_path('sunspot_solr', ENV['SUNSPOT_LIB_HOME'])
22
+ gem 'rails', '~> 3.2.0'
23
+ gem 'progress_bar', '~> 1.0.5', require: false
24
+ gem 'test-unit', '~> 3.2.0'
25
+ gem 'rspec', '~> 3.4.0'
26
+ gem 'rspec-rails', '~> 3.4.0'
27
+ end
28
+
29
+ ['4.0.0', '4.1.0'].each do |rails_version|
30
+ appraise "rails-#{rails_version}" do
31
+ gem 'bundler', '>= 1.3.0', '< 2.0'
32
+ gem 'sunspot', path: File.expand_path('sunspot', ENV['SUNSPOT_LIB_HOME'])
33
+ gem 'sunspot_solr', path: File.expand_path('sunspot_solr', ENV['SUNSPOT_LIB_HOME'])
34
+ gem 'rails', "~> #{rails_version}"
35
+ gem 'progress_bar', '~> 1.0.5', require: false
36
+ gem 'rspec', '~> 3.4.0'
37
+ gem 'rspec-rails', '~> 3.4.0'
38
+ end
39
+ end
40
+ end
41
+
42
+ if ruby_version < Gem::Version.new('2.5.0')
43
+ appraise 'rails-4.2.0' do
44
+ gem 'bundler', '>= 1.3.0', '< 2.0'
45
+ gem 'sunspot', path: File.expand_path('sunspot', ENV['SUNSPOT_LIB_HOME'])
46
+ gem 'sunspot_solr', path: File.expand_path('sunspot_solr', ENV['SUNSPOT_LIB_HOME'])
47
+ gem 'rails', '~> 4.2.0'
48
+ gem 'progress_bar', '~> 1.0.5', require: false
49
+ gem 'rspec', '~> 3.4.0'
50
+ gem 'rspec-rails', '~> 3.4.0'
51
+ end
52
+ end
53
+
54
+ if ruby_version >= Gem::Version.new('2.2.0')
55
+ ['5.0.0', '5.1.0', '5.2.0'].each do |rails_version|
56
+ appraise "rails-#{rails_version}" do
57
+ gem 'sunspot', path: File.expand_path('sunspot', ENV['SUNSPOT_LIB_HOME'])
58
+ gem 'sunspot_solr', path: File.expand_path('sunspot_solr', ENV['SUNSPOT_LIB_HOME'])
59
+ gem 'rails', "~> #{rails_version}"
60
+ gem 'sprockets', '~> 3.0'
61
+ gem 'progress_bar', '~> 1.0.5', require: false
62
+ end
63
+ end
64
+ end
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
@@ -301,6 +301,10 @@ module Sunspot #:nodoc:
301
301
  @open_timeout ||= user_configuration_from_key('solr', 'open_timeout')
302
302
  end
303
303
 
304
+ def update_format
305
+ @update_format ||= user_configuration_from_key('solr', 'update_format')
306
+ end
307
+
304
308
  def proxy
305
309
  @proxy ||= user_configuration_from_key('solr', 'proxy')
306
310
  end
@@ -20,8 +20,10 @@ module Sunspot #:nodoc:
20
20
  # this case, since after_filter uses the inheritable_attribute
21
21
  # structure, the already-loaded subclasses don't get the filters. So,
22
22
  # the below ensures that all loaded controllers have the filter.
23
+ callback = ::Rails::VERSION::MAJOR > 3 ? :after_action : :after_filter
24
+
23
25
  loaded_controllers.each do |controller|
24
- controller.after_filter do
26
+ controller.send(callback) do
25
27
  if Sunspot::Rails.configuration.auto_commit_after_request?
26
28
  Sunspot.commit_if_dirty
27
29
  elsif Sunspot::Rails.configuration.auto_commit_after_delete_request?
@@ -99,9 +99,15 @@ module Sunspot #:nodoc:
99
99
 
100
100
  unless options[:auto_remove] == false
101
101
  # after_commit { |searchable| searchable.remove_from_index }, :on => :destroy
102
- __send__ Sunspot::Rails.configuration.auto_remove_callback,
103
- proc { |searchable| searchable.remove_from_index },
104
- :on => :destroy
102
+ # Only add the on filter if the callback supports it
103
+ if Sunspot::Rails.configuration.auto_remove_callback =~ /save|destroy|create/
104
+ __send__ Sunspot::Rails.configuration.auto_remove_callback,
105
+ proc { |searchable| searchable.remove_from_index }
106
+ else
107
+ __send__ Sunspot::Rails.configuration.auto_remove_callback,
108
+ proc { |searchable| searchable.remove_from_index },
109
+ :on => :destroy
110
+ end
105
111
  end
106
112
  options[:include] = Util::Array(options[:include])
107
113
 
@@ -258,7 +264,7 @@ module Sunspot #:nodoc:
258
264
 
259
265
  if options[:batch_size].to_i > 0
260
266
  batch_counter = 0
261
- self.includes(options[:include]).find_in_batches(options.slice(:batch_size, :start)) do |records|
267
+ self.includes(options[:include]).find_in_batches(**options.slice(:batch_size, :start)) do |records|
262
268
 
263
269
  solr_benchmark(options[:batch_size], batch_counter += 1) do
264
270
  Sunspot.index(records.select(&:indexable?))
@@ -281,7 +287,7 @@ module Sunspot #:nodoc:
281
287
  #
282
288
  # ==== Updates (passed as a hash)
283
289
  #
284
- # updates should be specified as a hash, where key - is the object ID
290
+ # updates should be specified as a hash, where key - is the object or the object ID
285
291
  # and values is hash with property name/values to be updated.
286
292
  #
287
293
  # ==== Examples
@@ -297,6 +303,8 @@ module Sunspot #:nodoc:
297
303
  #
298
304
  # # update single property
299
305
  # Post.atomic_update(post1.id => {description: 'New post description'})
306
+ # Or
307
+ # Post.atomic_update(post1 => {description: 'New post description'})
300
308
  #
301
309
  # ==== Notice
302
310
  # all non-stored properties in Solr index will be lost after update.
@@ -447,7 +455,7 @@ module Sunspot #:nodoc:
447
455
  # you only need to pass hash with property changes
448
456
  #
449
457
  def solr_atomic_update(updates = {})
450
- Sunspot.atomic_update(self.class, self.id => updates)
458
+ Sunspot.atomic_update(self.class, self => updates)
451
459
  end
452
460
 
453
461
  #
@@ -455,7 +463,7 @@ module Sunspot #:nodoc:
455
463
  # See #solr_atomic_update
456
464
  #
457
465
  def solr_atomic_update!(updates = {})
458
- Sunspot.atomic_update!(self.class, self.id => updates)
466
+ Sunspot.atomic_update!(self.class, self => updates)
459
467
  end
460
468
 
461
469
  #
@@ -4,10 +4,10 @@ module Sunspot
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
- alias_method_chain :send_and_receive, :as_instrumentation
7
+ alias_method :send_and_receive_without_as_instrumentation, :send_and_receive
8
+ alias_method :send_and_receive, :send_and_receive_with_as_instrumentation
8
9
  end
9
10
 
10
-
11
11
  def send_and_receive_with_as_instrumentation(path, opts)
12
12
  parameters = (opts[:params] || {})
13
13
  parameters.merge!(opts[:data]) if opts[:data].is_a? Hash
@@ -2,28 +2,21 @@ module Sunspot
2
2
  module Rails
3
3
  module SolrLogging
4
4
 
5
- class <<self
6
- def included(base)
7
- base.alias_method_chain :execute, :rails_logging
8
- end
9
- end
10
-
11
5
  COMMIT = %r{<commit/>}
12
6
 
13
- def execute_with_rails_logging(client, request_context)
7
+ def execute_with_rails_logging(request_context)
14
8
  body = (request_context[:data]||"").dup
15
9
  action = request_context[:path].capitalize
16
10
  if body =~ COMMIT
17
11
  action = "Commit"
18
12
  body = ""
19
13
  end
20
- body = body[0, 800] + '...' if body.length > 800
21
14
 
22
15
  # Make request and log.
23
16
  response = nil
24
17
  begin
25
18
  ms = Benchmark.ms do
26
- response = execute_without_rails_logging(client, request_context)
19
+ response = execute_without_rails_logging(request_context)
27
20
  end
28
21
  log_name = 'Solr %s (%.1fms)' % [action, ms]
29
22
  ::Rails.logger.debug(format_log_entry(log_name, body))
@@ -54,6 +47,8 @@ module Sunspot
54
47
  end
55
48
  end
56
49
 
57
- RSolr::Connection.module_eval do
50
+ RSolr::Client.class_eval do
58
51
  include Sunspot::Rails::SolrLogging
52
+ alias_method :execute_without_rails_logging, :execute
53
+ alias_method :execute, :execute_with_rails_logging
59
54
  end
@@ -44,6 +44,10 @@ module Sunspot
44
44
  def optimize
45
45
  end
46
46
 
47
+ def config
48
+ Sunspot::Configuration.build
49
+ end
50
+
47
51
  def dirty?
48
52
  false
49
53
  end
@@ -104,7 +108,7 @@ module Sunspot
104
108
  []
105
109
  end
106
110
 
107
- def facet(name)
111
+ def facet(name, dynamic_name = nil)
108
112
  FacetStub.new
109
113
  end
110
114
 
@@ -123,6 +127,9 @@ module Sunspot
123
127
  def execute
124
128
  self
125
129
  end
130
+
131
+ def spellcheck_collation
132
+ end
126
133
  end
127
134
 
128
135
 
@@ -219,7 +226,7 @@ module Sunspot
219
226
  []
220
227
  end
221
228
 
222
- def facet(name)
229
+ def facet(name, dynamic_name = nil)
223
230
  FacetStub.new
224
231
  end
225
232
 
@@ -31,7 +31,6 @@ namespace :sunspot do
31
31
  # Load all the application's models. Models which invoke 'searchable' will register themselves
32
32
  # in Sunspot.searchable.
33
33
  Rails.application.eager_load!
34
- Rails::Engine.subclasses.each{|engine| engine.instance.eager_load!}
35
34
 
36
35
  if args[:models].present?
37
36
  # Choose a specific subset of models, if requested
data/lib/sunspot/rails.rb CHANGED
@@ -53,6 +53,7 @@ module Sunspot #:nodoc:
53
53
  config.solr.read_timeout = sunspot_rails_configuration.read_timeout
54
54
  config.solr.open_timeout = sunspot_rails_configuration.open_timeout
55
55
  config.solr.proxy = sunspot_rails_configuration.proxy
56
+ config.solr.update_format = sunspot_rails_configuration.update_format
56
57
  config
57
58
  end
58
59
 
@@ -68,6 +69,7 @@ module Sunspot #:nodoc:
68
69
  config.solr.read_timeout = sunspot_rails_configuration.read_timeout
69
70
  config.solr.open_timeout = sunspot_rails_configuration.open_timeout
70
71
  config.solr.proxy = sunspot_rails_configuration.proxy
72
+ config.solr.update_format = sunspot_rails_configuration.update_format
71
73
  config
72
74
  end
73
75
  end