elasticsearch-model 7.2.0 → 8.0.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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/README.md +22 -22
  4. data/Rakefile +7 -6
  5. data/elasticsearch-model.gemspec +5 -5
  6. data/examples/activerecord_associations.rb +1 -1
  7. data/examples/activerecord_custom_analyzer.rb +2 -2
  8. data/gemfiles/{6.0.gemfile → 6.1.gemfile} +6 -6
  9. data/gemfiles/{5.0.gemfile → 7.0.gemfile} +8 -7
  10. data/gemfiles/{3.0.gemfile → 7.1.gemfile} +9 -8
  11. data/lib/elasticsearch/model/adapter.rb +0 -2
  12. data/lib/elasticsearch/model/adapters/active_record.rb +0 -4
  13. data/lib/elasticsearch/model/adapters/default.rb +0 -4
  14. data/lib/elasticsearch/model/adapters/mongoid.rb +9 -11
  15. data/lib/elasticsearch/model/adapters/multiple.rb +0 -1
  16. data/lib/elasticsearch/model/importing.rb +1 -12
  17. data/lib/elasticsearch/model/indexing.rb +6 -19
  18. data/lib/elasticsearch/model/multimodel.rb +1 -10
  19. data/lib/elasticsearch/model/naming.rb +7 -58
  20. data/lib/elasticsearch/model/proxy.rb +6 -7
  21. data/lib/elasticsearch/model/response/result.rb +0 -6
  22. data/lib/elasticsearch/model/searching.rb +2 -3
  23. data/lib/elasticsearch/model/version.rb +1 -1
  24. data/lib/elasticsearch/model.rb +6 -3
  25. data/spec/elasticsearch/model/adapter_spec.rb +0 -11
  26. data/spec/elasticsearch/model/adapters/active_record/associations_spec.rb +48 -76
  27. data/spec/elasticsearch/model/adapters/active_record/basic_spec.rb +6 -78
  28. data/spec/elasticsearch/model/adapters/active_record/import_spec.rb +6 -2
  29. data/spec/elasticsearch/model/adapters/active_record/namespaced_model_spec.rb +1 -5
  30. data/spec/elasticsearch/model/adapters/active_record/pagination_spec.rb +0 -8
  31. data/spec/elasticsearch/model/adapters/active_record/parent_child_spec.rb +1 -4
  32. data/spec/elasticsearch/model/adapters/active_record/serialization_spec.rb +9 -11
  33. data/spec/elasticsearch/model/adapters/mongoid_spec.rb +1 -1
  34. data/spec/elasticsearch/model/adapters/multiple_spec.rb +1 -11
  35. data/spec/elasticsearch/model/importing_spec.rb +6 -35
  36. data/spec/elasticsearch/model/indexing_spec.rb +45 -170
  37. data/spec/elasticsearch/model/module_spec.rb +0 -1
  38. data/spec/elasticsearch/model/multimodel_spec.rb +2 -8
  39. data/spec/elasticsearch/model/naming_spec.rb +0 -68
  40. data/spec/elasticsearch/model/proxy_spec.rb +8 -2
  41. data/spec/elasticsearch/model/response/aggregations_spec.rb +4 -4
  42. data/spec/elasticsearch/model/response/base_spec.rb +0 -1
  43. data/spec/elasticsearch/model/response/pagination/kaminari_spec.rb +3 -4
  44. data/spec/elasticsearch/model/response/pagination/will_paginate_spec.rb +0 -1
  45. data/spec/elasticsearch/model/response/records_spec.rb +0 -1
  46. data/spec/elasticsearch/model/response/response_spec.rb +0 -1
  47. data/spec/elasticsearch/model/response/result_spec.rb +0 -17
  48. data/spec/elasticsearch/model/response/results_spec.rb +0 -1
  49. data/spec/elasticsearch/model/searching_search_request_spec.rb +5 -6
  50. data/spec/spec_helper.rb +9 -11
  51. data/spec/support/app/answer.rb +0 -1
  52. data/spec/support/app/article.rb +0 -2
  53. data/spec/support/app/article_no_type.rb +1 -1
  54. data/spec/support/app/namespaced_book.rb +0 -2
  55. data/spec/support/app/parent_and_child_searchable.rb +6 -4
  56. data/spec/support/app/question.rb +0 -1
  57. metadata +15 -16
  58. data/gemfiles/4.0.gemfile +0 -36
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 394cd3e2e2da51faa7db9c7843aa4b9e225199d3544491ccc2f6df35b5de721f
4
- data.tar.gz: b8ce93762fe83c40b40b14b5dc0a2a59f936c2a9ee20647ed95c99cab108b3d6
3
+ metadata.gz: 59f777d222c903faedd6455331f6d784114bda8c6bb5e5d135fd7bc3aaef6adc
4
+ data.tar.gz: eff30de335c6748463490b938dc583215939388b781f23b795b9549254c001b4
5
5
  SHA512:
6
- metadata.gz: d3fc6c1744793d2066084410900a1e7af07fdf4efd420ce11f2fac368b2a72563510a83b3eeb99773a8b5554087af32d1b0b702e3c00df3cd18a99dea29f1952
7
- data.tar.gz: 8b6a7603023357295b9b83aabf85bbc22cc04d527ebf9e1de48cd2de1212ff4c70060944ff964607bdb0e4a6b16c36b318c07793e9404bb8c889e940474f05fa
6
+ metadata.gz: 3a06372240d9f71e9549fb745ebed859dcd654ea1285b8081ab87edfcfac6f8cf912f9b94929f8ace1acef190407b517d8b55968615f6f368936f9d4f87f1e0d
7
+ data.tar.gz: 07b61d6418b834b044e5d85f744a1139d3c2b9808be6f0e3ce417f24b87f10f2a14cbfa368fee372d662d2f778c1858d63ddcef4b2ece7d70bb7dbe6404ec95d
data/Gemfile CHANGED
@@ -21,6 +21,7 @@ source 'https://rubygems.org'
21
21
  gemspec
22
22
 
23
23
  group :development, :testing do
24
+ gem 'debug' unless defined?(JRUBY_VERSION)
24
25
  gem 'pry-nav'
25
26
  gem 'rspec'
26
27
  end
data/README.md CHANGED
@@ -6,17 +6,19 @@ It aims to simplify integration of Ruby classes ("models"), commonly found e.g.
6
6
 
7
7
  ## Compatibility
8
8
 
9
- This library is compatible with Ruby 2.4 and higher.
9
+ This library is compatible with Ruby 3 and higher.
10
10
 
11
- The library version numbers follow the Elasticsearch major versions. The `master` branch is compatible with the latest Elasticsearch stack stable release.
11
+ The version numbers follow the Elasticsearch major versions. Currently the `main` branch is compatible with version `8.x` of the Elasticsearch stack.
12
12
 
13
- | Rubygem | | Elasticsearch |
14
- |:-------------:|:-:| :-----------: |
15
- | 0.1 | → | 1.x |
16
- | 2.x | → | 2.x |
17
- | 5.x | → | 5.x |
18
- | 6.x | → | 6.x |
19
- | master | → | 7.x |
13
+ | Rubygem | | Elasticsearch |
14
+ |:-------:|:-:|:-------------:|
15
+ | 0.1 | → | 1.x |
16
+ | 2.x | → | 2.x |
17
+ | 5.x | → | 5.x |
18
+ | 6.x | → | 6.x |
19
+ | 7.x | → | 7.x |
20
+ | 8.x | → | 8.x |
21
+ | main | → | 8.x |
20
22
 
21
23
  ## Installation
22
24
 
@@ -116,7 +118,7 @@ See the `Elasticsearch::Model` module documentation for technical information.
116
118
 
117
119
  ### The Elasticsearch client
118
120
 
119
- The module will set up a [client](https://github.com/elastic/elasticsearch-ruby/tree/master/elasticsearch),
121
+ The module will set up a [client](https://github.com/elastic/elasticsearch-ruby/tree/main/elasticsearch),
120
122
  connected to `localhost:9200`, by default. You can access and use it as any other `Elasticsearch::Client`:
121
123
 
122
124
  ```ruby
@@ -139,7 +141,7 @@ Elasticsearch::Model.client = Elasticsearch::Client.new log: true
139
141
  You might want to do this during your application bootstrap process, e.g. in a Rails initializer.
140
142
 
141
143
  Please refer to the
142
- [`elasticsearch-transport`](https://github.com/elastic/elasticsearch-ruby/tree/master/elasticsearch-transport)
144
+ [`elastic-transport`](https://github.com/elastic/elastic-transport-ruby/)
143
145
  library documentation for all the configuration options, and to the
144
146
  [`elasticsearch-api`](http://rubydoc.info/gems/elasticsearch-api) library documentation
145
147
  for information about the Ruby client API.
@@ -248,7 +250,7 @@ response.records.order(:title).to_a
248
250
  The `records` method returns the real instances of your model, which is useful when you want to access your
249
251
  model methods -- at the expense of slowing down your application, of course.
250
252
  In most cases, working with `results` coming from Elasticsearch is sufficient, and much faster. See the
251
- [`elasticsearch-rails`](https://github.com/elastic/elasticsearch-rails/tree/master/elasticsearch-rails)
253
+ [`elasticsearch-rails`](https://github.com/elastic/elasticsearch-rails/tree/main/elasticsearch-rails)
252
254
  library for more information about compatibility with the Ruby on Rails framework.
253
255
 
254
256
  When you want to access both the database `records` and search `results`, use the `each_with_hit`
@@ -267,8 +269,8 @@ It is possible to search across multiple models with the module method:
267
269
  ```ruby
268
270
  Elasticsearch::Model.search('fox', [Article, Comment]).results.to_a.map(&:to_hash)
269
271
  # => [
270
- # {"_index"=>"articles", "_type"=>"article", "_id"=>"1", "_score"=>0.35136628, "_source"=>...},
271
- # {"_index"=>"comments", "_type"=>"comment", "_id"=>"1", "_score"=>0.35136628, "_source"=>...}
272
+ # {"_index"=>"articles", "_id"=>"1", "_score"=>0.35136628, "_source"=>...},
273
+ # {"_index"=>"comments", "_id"=>"1", "_score"=>0.35136628, "_source"=>...}
272
274
  # ]
273
275
 
274
276
  Elasticsearch::Model.search('fox', [Article, Comment]).records.to_a
@@ -343,7 +345,7 @@ response.results.first.title
343
345
  # => "Quick brown fox"
344
346
  ```
345
347
 
346
- Also, you can use the [**`elasticsearch-dsl`**](https://github.com/elastic/elasticsearch-ruby/tree/master/elasticsearch-dsl) library, which provides a specialized Ruby API for the Elasticsearch Query DSL:
348
+ Also, you can use the [**`elasticsearch-dsl`**](https://github.com/elastic/elasticsearch-dsl-ruby) library, which provides a specialized Ruby API for the Elasticsearch Query DSL:
347
349
 
348
350
  ```ruby
349
351
  require 'elasticsearch/dsl'
@@ -413,13 +415,11 @@ Article.__elasticsearch__.create_index! force: true
413
415
  Article.__elasticsearch__.refresh_index!
414
416
  ```
415
417
 
416
- By default, index name and document type will be inferred from your class name,
417
- you can set it explicitly, however:
418
+ By default, index name will be inferred from your class name, you can set it explicitly, however:
418
419
 
419
420
  ```ruby
420
421
  class Article
421
422
  index_name "articles-#{Rails.env}"
422
- document_type "post"
423
423
  end
424
424
  ```
425
425
 
@@ -527,11 +527,11 @@ class Indexer
527
527
  case operation.to_s
528
528
  when /index/
529
529
  record = Article.find(record_id)
530
- Client.index index: 'articles', type: 'article', id: record.id, body: record.__elasticsearch__.as_indexed_json
530
+ Client.index index: 'articles', id: record.id, body: record.__elasticsearch__.as_indexed_json
531
531
  when /delete/
532
532
  begin
533
- Client.delete index: 'articles', type: 'article', id: record_id
534
- rescue Elasticsearch::Transport::Transport::Errors::NotFound
533
+ Client.delete index: 'articles', id: record_id
534
+ rescue Elastic::Transport::Transport::Errors::NotFound
535
535
  logger.debug "Article not found, ID: #{record_id}"
536
536
  end
537
537
  else raise ArgumentError, "Unknown operation '#{operation}'"
@@ -553,7 +553,7 @@ You'll see the job being processed in the console where you started the _Sidekiq
553
553
  Indexer JID-eb7e2daf389a1e5e83697128 DEBUG: ["index", "ID: 7"]
554
554
  Indexer JID-eb7e2daf389a1e5e83697128 INFO: PUT http://localhost:9200/articles/article/1 [status:200, request:0.004s, query:n/a]
555
555
  Indexer JID-eb7e2daf389a1e5e83697128 DEBUG: > {"id":1,"title":"Updated", ...}
556
- Indexer JID-eb7e2daf389a1e5e83697128 DEBUG: < {"ok":true,"_index":"articles","_type":"article","_id":"1","_version":6}
556
+ Indexer JID-eb7e2daf389a1e5e83697128 DEBUG: < {"ok":true,"_index":"articles","_id":"1","_version":6}
557
557
  Indexer JID-eb7e2daf389a1e5e83697128 INFO: done: 0.006 sec
558
558
  ```
559
559
 
data/Rakefile CHANGED
@@ -21,8 +21,7 @@ desc 'Run unit tests'
21
21
  task default: 'test:all'
22
22
  task test: 'test:all'
23
23
 
24
- gemfiles = ['5.0.gemfile', '6.0.gemfile']
25
- gemfiles << '4.0.gemfile' if RUBY_VERSION < '2.7'
24
+ gemfiles = ['6.1.gemfile', '7.0.gemfile']
26
25
  GEMFILES = gemfiles.freeze
27
26
 
28
27
  namespace :bundle do
@@ -47,16 +46,18 @@ end
47
46
  require 'rake/testtask'
48
47
  namespace :test do
49
48
  desc 'Run all tests. Optionally define env variable RAILS_VERSIONS. E.g. RAILS_VERSIONS=3.0,5.0'
50
- task :all, [:rails_versions] do |task, args|
51
- gemfiles = ENV['RAILS_VERSIONS'] ? ENV['RAILS_VERSIONS'].split(',').map {|v| "#{v}.gemfile"} : GEMFILES
49
+ task :all do |task, args|
50
+ gemfiles = ENV['RAILS_VERSIONS'] ? ENV['RAILS_VERSIONS'].split(',').map { |v| "#{v}.gemfile" } : GEMFILES
52
51
  puts '-' * 80
53
52
  gemfiles.each do |gemfile|
54
53
  puts "GEMFILE: #{gemfile}"
55
- sh "BUNDLE_GEMFILE='#{File.expand_path("../gemfiles/#{gemfile}", __FILE__)}' " +
56
- " bundle exec rspec"
54
+ sh "BUNDLE_GEMFILE='#{File.expand_path("../gemfiles/#{gemfile}", __FILE__)}' " \
55
+ ' bundle exec rspec'
57
56
  puts '-' * 80
58
57
  end
59
58
  end
59
+
60
+ task unit: :all
60
61
  end
61
62
 
62
63
  # ----- Documentation tasks ---------------------------------------------------
@@ -24,8 +24,8 @@ require 'elasticsearch/model/version'
24
24
  Gem::Specification.new do |s|
25
25
  s.name = 'elasticsearch-model'
26
26
  s.version = Elasticsearch::Model::VERSION
27
- s.authors = ['Karel Minarik']
28
- s.email = ['karel.minarik@elasticsearch.org']
27
+ s.authors = ['Elastic Client Library Maintainers']
28
+ s.email = ['client-libs@elastic.co']
29
29
  s.description = 'ActiveModel/Record integrations for Elasticsearch.'
30
30
  s.summary = 'ActiveModel/Record integrations for Elasticsearch.'
31
31
  s.homepage = 'https://github.com/elasticsearch/elasticsearch-rails/'
@@ -39,10 +39,10 @@ Gem::Specification.new do |s|
39
39
  s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
40
40
  s.rdoc_options = ['--charset=UTF-8']
41
41
 
42
- s.required_ruby_version = '>= 2.4'
42
+ s.required_ruby_version = '>= 3'
43
43
 
44
44
  s.add_dependency 'activesupport', '> 3'
45
- s.add_dependency 'elasticsearch', '~> 7'
45
+ s.add_dependency 'elasticsearch', '~> 8'
46
46
  s.add_dependency 'hashie'
47
47
 
48
48
  s.add_development_dependency 'activemodel', '> 3'
@@ -63,6 +63,6 @@ Gem::Specification.new do |s|
63
63
  unless defined?(JRUBY_VERSION)
64
64
  s.add_development_dependency 'oj'
65
65
  s.add_development_dependency 'ruby-prof'
66
- s.add_development_dependency 'sqlite3'
66
+ s.add_development_dependency 'sqlite3', '~> 1.4'
67
67
  end
68
68
  end
@@ -81,7 +81,7 @@ end
81
81
  # ----- Elasticsearch client setup ----------------------------------------------------------------
82
82
 
83
83
  Elasticsearch::Model.client = Elasticsearch::Client.new log: true
84
- Elasticsearch::Model.client.transport.transport.logger.formatter = proc { |s, d, p, m| "\e[2m#{m}\n\e[0m" }
84
+ Elasticsearch::Model.client.transport.logger.formatter = proc { |s, d, p, m| "\e[2m#{m}\n\e[0m" }
85
85
 
86
86
  # ----- Search integration ------------------------------------------------------------------------
87
87
 
@@ -37,8 +37,8 @@ ActiveRecord::Schema.define(version: 1) do
37
37
  end
38
38
  end
39
39
 
40
- Elasticsearch::Model.client.transport.transport.logger = ActiveSupport::Logger.new(STDOUT)
41
- Elasticsearch::Model.client.transport.transport.logger.formatter = lambda { |s, d, p, m| "#{m.ansi(:faint)}\n" }
40
+ Elasticsearch::Model.client.transport.logger = ActiveSupport::Logger.new(STDOUT)
41
+ Elasticsearch::Model.client.transport.logger.formatter = lambda { |s, d, p, m| "#{m.ansi(:faint)}\n" }
42
42
 
43
43
  class Article < ActiveRecord::Base
44
44
  include Elasticsearch::Model
@@ -20,17 +20,17 @@
20
20
  # $ BUNDLE_GEMFILE=./gemfiles/6.0.gemfile bundle install
21
21
  # $ BUNDLE_GEMFILE=./gemfiles/6.0.gemfile bundle exec rake test:integration
22
22
 
23
-
24
23
  source 'https://rubygems.org'
25
24
 
26
25
  gemspec path: '../'
27
26
 
28
- gem 'activemodel', '6.0.0'
29
- gem 'activerecord', '6.0.0'
30
- gem 'sqlite3' unless defined?(JRUBY_VERSION)
31
- #gem 'mongoid', '~> 6'
27
+ gem 'activemodel', '6.1'
28
+ gem 'activerecord', '6.1'
29
+ gem 'sqlite3', '~> 1.4' unless defined?(JRUBY_VERSION)
30
+ # gem 'mongoid', '~> 6'
32
31
 
33
32
  group :development, :testing do
34
- gem 'rspec'
33
+ gem 'debug'
35
34
  gem 'pry-nav'
35
+ gem 'rspec'
36
36
  end
@@ -17,19 +17,20 @@
17
17
 
18
18
  # Usage:
19
19
  #
20
- # $ BUNDLE_GEMFILE=./gemfiles/5.0.gemfile bundle install
21
- # $ BUNDLE_GEMFILE=./gemfiles/5.0.gemfile bundle exec rake test:integration
20
+ # $ BUNDLE_GEMFILE=./gemfiles/7.0.gemfile bundle install
21
+ # $ BUNDLE_GEMFILE=./gemfiles/7.0.gemfile bundle exec rake test:integration
22
22
 
23
23
  source 'https://rubygems.org'
24
24
 
25
25
  gemspec path: '../'
26
26
 
27
- gem 'activemodel', '~> 5'
28
- gem 'activerecord', '~> 5'
29
- gem 'sqlite3' unless defined?(JRUBY_VERSION)
30
- gem 'mongoid', '~> 6'
27
+ gem 'activemodel', '~> 7'
28
+ gem 'activerecord', '~> 7'
29
+ gem 'sqlite3', '~> 1.4' unless defined?(JRUBY_VERSION)
30
+ # gem 'mongoid', '~> 6'
31
31
 
32
32
  group :development, :testing do
33
- gem 'rspec'
33
+ gem 'debug'
34
34
  gem 'pry-nav'
35
+ gem 'rspec'
35
36
  end
@@ -17,19 +17,20 @@
17
17
 
18
18
  # Usage:
19
19
  #
20
- # $ BUNDLE_GEMFILE=./gemfiles/3.0.gemfile bundle install
21
- # $ BUNDLE_GEMFILE=./gemfiles/3.0.gemfile bundle exec rake test:integration
20
+ # $ BUNDLE_GEMFILE=./gemfiles/7.0.gemfile bundle install
21
+ # $ BUNDLE_GEMFILE=./gemfiles/7.0.gemfile bundle exec rake test:integration
22
22
 
23
23
  source 'https://rubygems.org'
24
24
 
25
25
  gemspec path: '../'
26
26
 
27
- gem 'activemodel', '>= 3.0'
28
- gem 'activerecord', '~> 3.2'
29
- gem 'mongoid', '>= 3.0'
30
- gem 'sqlite3', '> 1.3', '< 1.4' unless defined?(JRUBY_VERSION)
27
+ gem 'activemodel', '~> 7.1'
28
+ gem 'activerecord', '~> 7.1'
29
+ gem 'sqlite3', '~> 1.4' unless defined?(JRUBY_VERSION)
30
+ # gem 'mongoid', '~> 6'
31
31
 
32
32
  group :development, :testing do
33
- gem 'rspec'
33
+ gem 'debug'
34
34
  gem 'pry-nav'
35
- end
35
+ gem 'rspec'
36
+ end
@@ -17,7 +17,6 @@
17
17
 
18
18
  module Elasticsearch
19
19
  module Model
20
-
21
20
  # Contains an adapter which provides OxM-specific implementations for common behaviour:
22
21
  #
23
22
  # * {Adapter::Adapter#records_mixin Fetching records from the database}
@@ -29,7 +28,6 @@ module Elasticsearch
29
28
  # @see Elasticsearch::Model::Adapter::Mongoid
30
29
  #
31
30
  module Adapter
32
-
33
31
  # Returns an adapter based on the Ruby class passed
34
32
  #
35
33
  # @example Create an adapter for an ActiveRecord-based model
@@ -18,11 +18,9 @@
18
18
  module Elasticsearch
19
19
  module Model
20
20
  module Adapter
21
-
22
21
  # An adapter for ActiveRecord-based models
23
22
  #
24
23
  module ActiveRecord
25
-
26
24
  Adapter.register self,
27
25
  lambda { |klass| !!defined?(::ActiveRecord::Base) && klass.respond_to?(:ancestors) && klass.ancestors.include?(::ActiveRecord::Base) }
28
26
 
@@ -71,7 +69,6 @@ module Elasticsearch
71
69
  end
72
70
 
73
71
  module Callbacks
74
-
75
72
  # Handle index updates (creating, updating or deleting documents)
76
73
  # when the model changes, by hooking into the lifecycle
77
74
  #
@@ -87,7 +84,6 @@ module Elasticsearch
87
84
  end
88
85
 
89
86
  module Importing
90
-
91
87
  # Fetch batches of records from the database (used by the import method)
92
88
  #
93
89
  #
@@ -18,15 +18,12 @@
18
18
  module Elasticsearch
19
19
  module Model
20
20
  module Adapter
21
-
22
21
  # The default adapter for models which haven't one registered
23
22
  #
24
23
  module Default
25
-
26
24
  # Module for implementing methods and logic related to fetching records from the database
27
25
  #
28
26
  module Records
29
-
30
27
  # Return the collection of records fetched from the database
31
28
  #
32
29
  # By default uses `MyModel#find[1, 2, 3]`
@@ -60,7 +57,6 @@ module Elasticsearch
60
57
  raise NotImplemented, "Method not implemented for default adapter"
61
58
  end
62
59
  end
63
-
64
60
  end
65
61
  end
66
62
  end
@@ -18,18 +18,21 @@
18
18
  module Elasticsearch
19
19
  module Model
20
20
  module Adapter
21
-
22
21
  # An adapter for Mongoid-based models
23
22
  #
24
23
  # @see http://mongoid.org
25
24
  #
26
25
  module Mongoid
27
-
28
- Adapter.register self,
29
- lambda { |klass| !!defined?(::Mongoid::Document) && klass.respond_to?(:ancestors) && klass.ancestors.include?(::Mongoid::Document) }
26
+ Adapter.register(
27
+ self,
28
+ lambda do |klass|
29
+ !!defined?(::Mongoid::Document) &&
30
+ klass.respond_to?(:ancestors) &&
31
+ klass.ancestors.include?(::Mongoid::Document)
32
+ end
33
+ )
30
34
 
31
35
  module Records
32
-
33
36
  # Return a `Mongoid::Criteria` instance
34
37
  #
35
38
  def records
@@ -59,7 +62,6 @@ module Elasticsearch
59
62
  end
60
63
 
61
64
  module Callbacks
62
-
63
65
  # Handle index updates (creating, updating or deleting documents)
64
66
  # when the model changes, by hooking into the lifecycle
65
67
  #
@@ -73,7 +75,6 @@ module Elasticsearch
73
75
  end
74
76
 
75
77
  module Importing
76
-
77
78
  # Fetch batches of records from the database
78
79
  #
79
80
  # @see https://github.com/mongoid/mongoid/issues/1334
@@ -88,19 +89,16 @@ module Elasticsearch
88
89
  scope = all
89
90
  scope = scope.send(named_scope) if named_scope
90
91
  scope = query.is_a?(Proc) ? scope.class_exec(&query) : scope.where(query) if query
91
-
92
92
  scope.no_timeout.each_slice(batch_size) do |items|
93
93
  yield (preprocess ? self.__send__(preprocess, items) : items)
94
94
  end
95
95
  end
96
96
 
97
97
  def __transform
98
- lambda {|a| { index: { _id: a.id.to_s, data: a.as_indexed_json } }}
98
+ lambda { |a| { index: { _id: a.id.to_s, data: a.as_indexed_json } } }
99
99
  end
100
100
  end
101
-
102
101
  end
103
-
104
102
  end
105
103
  end
106
104
  end
@@ -18,7 +18,6 @@
18
18
  module Elasticsearch
19
19
  module Model
20
20
  module Adapter
21
-
22
21
  # An adapter to be used for deserializing results from multiple models,
23
22
  # retrieved through `Elasticsearch::Model.search`
24
23
  #
@@ -17,14 +17,12 @@
17
17
 
18
18
  module Elasticsearch
19
19
  module Model
20
-
21
20
  # Provides support for easily and efficiently importing large amounts of
22
21
  # records from the including class into the index.
23
22
  #
24
23
  # @see ClassMethods#import
25
24
  #
26
25
  module Importing
27
-
28
26
  # When included in a model, adds the importing methods.
29
27
  #
30
28
  # @example Import all records from the `Article` model
@@ -42,13 +40,12 @@ module Elasticsearch
42
40
  end
43
41
 
44
42
  module ClassMethods
45
-
46
43
  # Import all model records into the index
47
44
  #
48
45
  # The method will pick up correct strategy based on the `Importing` module
49
46
  # defined in the corresponding adapter.
50
47
  #
51
- # @param options [Hash] Options passed to the underlying `__find_in_batches`method
48
+ # @param options [Hash] Options passed to the underlying `__find_in_batches` method
52
49
  # @param block [Proc] Optional block to evaluate for each batch
53
50
  #
54
51
  # @yield [Hash] Gives the Hash with the Elasticsearch response to the block
@@ -62,7 +59,6 @@ module Elasticsearch
62
59
  # "index" => {
63
60
  # "error" => 'FAILED',
64
61
  # "_index" => "test",
65
- # "_type" => "_doc",
66
62
  # "_id" => '1',
67
63
  # "_version" => 1,
68
64
  # "result" => "foo",
@@ -141,7 +137,6 @@ module Elasticsearch
141
137
  errors = []
142
138
  refresh = options.delete(:refresh) || false
143
139
  target_index = options.delete(:index) || index_name
144
- target_type = options.delete(:type) || document_type
145
140
  transform = options.delete(:transform) || __transform
146
141
  pipeline = options.delete(:pipeline)
147
142
  return_value = options.delete(:return) || 'count'
@@ -161,14 +156,10 @@ module Elasticsearch
161
156
  __find_in_batches(options) do |batch|
162
157
  params = {
163
158
  index: target_index,
164
- type: target_type,
165
159
  body: __batch_to_bulk(batch, transform)
166
160
  }
167
-
168
161
  params[:pipeline] = pipeline if pipeline
169
-
170
162
  response = client.bulk params
171
-
172
163
  yield response if block_given?
173
164
 
174
165
  errors += response['items'].select { |k, v| k.values.first['error'] }
@@ -188,8 +179,6 @@ module Elasticsearch
188
179
  batch.map { |model| transform.call(model) }
189
180
  end
190
181
  end
191
-
192
182
  end
193
-
194
183
  end
195
184
  end
@@ -17,7 +17,6 @@
17
17
 
18
18
  module Elasticsearch
19
19
  module Model
20
-
21
20
  # Provides the necessary support to set up index options (mappings, settings)
22
21
  # as well as instance methods to create, update or delete documents in the index.
23
22
  #
@@ -29,7 +28,6 @@ module Elasticsearch
29
28
  # @see InstanceMethods#delete_document
30
29
  #
31
30
  module Indexing
32
-
33
31
  # Wraps the [index settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html)
34
32
  #
35
33
  class Settings
@@ -51,13 +49,11 @@ module Elasticsearch
51
49
  # Wraps the [index mappings](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html)
52
50
  #
53
51
  class Mappings
54
- attr_accessor :options, :type
52
+ attr_accessor :options
55
53
 
56
- # @private
57
54
  TYPES_WITH_EMBEDDED_PROPERTIES = %w(object nested)
58
55
 
59
- def initialize(type = nil, options={})
60
- @type = type
56
+ def initialize(options={})
61
57
  @options = options
62
58
  @mapping = {}
63
59
  end
@@ -87,11 +83,7 @@ module Elasticsearch
87
83
  end
88
84
 
89
85
  def to_hash
90
- if @type
91
- { @type.to_sym => @options.merge( properties: @mapping ) }
92
- else
93
- @options.merge( properties: @mapping )
94
- end
86
+ @options.merge( properties: @mapping )
95
87
  end
96
88
 
97
89
  def as_json(options={})
@@ -100,7 +92,6 @@ module Elasticsearch
100
92
  end
101
93
 
102
94
  module ClassMethods
103
-
104
95
  # Defines mappings for the index
105
96
  #
106
97
  # @example Define mapping for model
@@ -152,7 +143,7 @@ module Elasticsearch
152
143
  # when it doesn't already define them. Use the `__elasticsearch__` proxy otherwise.
153
144
  #
154
145
  def mapping(options={}, &block)
155
- @mapping ||= Mappings.new(document_type, options)
146
+ @mapping ||= Mappings.new(options)
156
147
 
157
148
  @mapping.options.update(options) unless options.empty?
158
149
 
@@ -290,7 +281,7 @@ module Elasticsearch
290
281
  self.client.indices.delete index: target_index
291
282
  rescue Exception => e
292
283
  if e.class.to_s =~ /NotFound/ && options[:force]
293
- client.transport.transport.logger.debug("[!!!] Index does not exist (#{e.class})") if client.transport.transport.logger
284
+ client.transport.logger.debug("[!!!] Index does not exist (#{e.class})") if client.transport.logger
294
285
  nil
295
286
  else
296
287
  raise e
@@ -317,7 +308,7 @@ module Elasticsearch
317
308
  self.client.indices.refresh index: target_index
318
309
  rescue Exception => e
319
310
  if e.class.to_s =~ /NotFound/ && options[:force]
320
- client.transport.transport.logger.debug("[!!!] Index does not exist (#{e.class})") if client.transport.transport.logger
311
+ client.transport.logger.debug("[!!!] Index does not exist (#{e.class})") if client.transport.logger
321
312
  nil
322
313
  else
323
314
  raise e
@@ -372,7 +363,6 @@ module Elasticsearch
372
363
  request = { index: index_name,
373
364
  id: id,
374
365
  body: document }
375
- request.merge!(type: document_type) if document_type
376
366
 
377
367
  client.index(request.merge!(options))
378
368
  end
@@ -393,7 +383,6 @@ module Elasticsearch
393
383
  def delete_document(options={})
394
384
  request = { index: index_name,
395
385
  id: self.id }
396
- request.merge!(type: document_type) if document_type
397
386
 
398
387
  client.delete(request.merge!(options))
399
388
  end
@@ -434,7 +423,6 @@ module Elasticsearch
434
423
  request = { index: index_name,
435
424
  id: self.id,
436
425
  body: { doc: attributes } }
437
- request.merge!(type: document_type) if document_type
438
426
 
439
427
  client.update(request.merge!(options))
440
428
  end
@@ -461,7 +449,6 @@ module Elasticsearch
461
449
  request = { index: index_name,
462
450
  id: self.id,
463
451
  body: { doc: attributes } }
464
- request.merge!(type: document_type) if document_type
465
452
 
466
453
  client.update(request.merge!(options))
467
454
  end
@@ -17,7 +17,6 @@
17
17
 
18
18
  module Elasticsearch
19
19
  module Model
20
-
21
20
  # Keeps a global registry of classes that include `Elasticsearch::Model`
22
21
  #
23
22
  class Registry
@@ -80,17 +79,9 @@ module Elasticsearch
80
79
  models.map { |m| m.index_name }
81
80
  end
82
81
 
83
- # Get an Array of document types used for retrieving documents when doing a search across multiple models
84
- #
85
- # @return [Array] the list of document types used for retrieving documents
86
- #
87
- def document_type
88
- models.map { |m| m.document_type }.compact.presence
89
- end
90
-
91
82
  # Get the client common for all models
92
83
  #
93
- # @return Elasticsearch::Transport::Client
84
+ # @return Elastic::Transport::Client
94
85
  #
95
86
  def client
96
87
  Elasticsearch::Model.client