elasticsearch-persistence 7.2.1 → 8.0.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/README.md +4 -3
- data/Rakefile +8 -7
- data/elasticsearch-persistence.gemspec +32 -35
- data/examples/notes/application.rb +0 -1
- data/examples/notes/test.rb +1 -1
- data/lib/elasticsearch/persistence/repository/dsl.rb +0 -14
- data/lib/elasticsearch/persistence/repository/find.rb +1 -4
- data/lib/elasticsearch/persistence/repository/search.rb +2 -4
- data/lib/elasticsearch/persistence/repository/store.rb +6 -9
- data/lib/elasticsearch/persistence/repository.rb +1 -17
- data/lib/elasticsearch/persistence/version.rb +1 -1
- data/spec/repository/find_spec.rb +14 -91
- data/spec/repository/response/results_spec.rb +18 -17
- data/spec/repository/search_spec.rb +27 -153
- data/spec/repository/store_spec.rb +8 -48
- data/spec/repository_spec.rb +50 -145
- data/spec/spec_helper.rb +3 -2
- metadata +55 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52529282eff2e19449adc41cf88e72665a81eb448335bea3422e5e1e7581eee4
|
4
|
+
data.tar.gz: 28497c53094e055fced862f88d14f3e927ff36ffdccb26434dd6788a1d3dc40a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5bad96a3f1cfd9718c5421b235d085b1b40f7ddb5086a7e4e1202388383ea6a6818e005e3521d3cac8a498cc5509e2e4ce1c3195e28763eb1dd8eef12c7899f5
|
7
|
+
data.tar.gz: e97d49e8010f0f9e4bf184cb7fb4e76244247bb04893ab3cb60e164fa51527909a24eb417566ec5c561fb9665debe62b2c5cce16f8a50955355b6f4bf21b78ec
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -6,7 +6,7 @@ Persistence layer for Ruby domain objects in Elasticsearch, using the Repository
|
|
6
6
|
|
7
7
|
This library is compatible with Ruby 2.4 and higher.
|
8
8
|
|
9
|
-
The
|
9
|
+
The version numbers follow the Elasticsearch major versions. Currently the `main` branch is compatible with version `7.x` of the Elasticsearch stack. **We haven't tested and updated the code for Elasticsearch `8.0` yet**.
|
10
10
|
|
11
11
|
| Rubygem | | Elasticsearch |
|
12
12
|
|:-------------:|:-:| :-----------: |
|
@@ -14,6 +14,7 @@ The library version numbers follow the Elasticsearch major versions. The `main`
|
|
14
14
|
| 2.x | → | 2.x |
|
15
15
|
| 5.x | → | 5.x |
|
16
16
|
| 6.x | → | 6.x |
|
17
|
+
| 7.x | → | 7.x |
|
17
18
|
| main | → | 7.x |
|
18
19
|
|
19
20
|
## Installation
|
@@ -236,7 +237,7 @@ You can also override the default configuration with options passed to the initi
|
|
236
237
|
|
237
238
|
```ruby
|
238
239
|
client = Elasticsearch::Client.new(url: 'http://localhost:9250', log: true)
|
239
|
-
client.transport.
|
240
|
+
client.transport.logger.formatter = proc { |s, d, p, m| "\e[2m# #{m}\n\e[0m" }
|
240
241
|
repository = NoteRepository.new(client: client, index_name: 'notes_development')
|
241
242
|
|
242
243
|
repository.create_index!(force: true)
|
@@ -267,7 +268,7 @@ The repository uses the standard Elasticsearch [client](https://github.com/elast
|
|
267
268
|
```ruby
|
268
269
|
client = Elasticsearch::Client.new(url: 'http://search.server.org')
|
269
270
|
repository = NoteRepository.new(client: client)
|
270
|
-
repository.client.transport.
|
271
|
+
repository.client.transport.logger = Logger.new(STDERR)
|
271
272
|
repository.client
|
272
273
|
# => Elasticsearch::Client
|
273
274
|
|
data/Rakefile
CHANGED
@@ -15,11 +15,11 @@
|
|
15
15
|
# specific language governing permissions and limitations
|
16
16
|
# under the License.
|
17
17
|
|
18
|
-
require
|
18
|
+
require 'bundler/gem_tasks'
|
19
19
|
|
20
|
-
desc
|
21
|
-
task :
|
22
|
-
task :
|
20
|
+
desc 'Run unit tests'
|
21
|
+
task default: 'test:unit'
|
22
|
+
task test: 'test:unit'
|
23
23
|
|
24
24
|
# ----- Test tasks ------------------------------------------------------------
|
25
25
|
|
@@ -27,14 +27,15 @@ require 'rake/testtask'
|
|
27
27
|
require 'rspec/core/rake_task'
|
28
28
|
|
29
29
|
namespace :test do
|
30
|
-
|
31
30
|
RSpec::Core::RakeTask.new(:spec)
|
32
31
|
|
33
32
|
Rake::TestTask.new(:all) do |test|
|
34
33
|
test.verbose = false
|
35
34
|
test.warning = false
|
36
|
-
test.deps = [
|
35
|
+
test.deps = [:spec]
|
37
36
|
end
|
37
|
+
|
38
|
+
task unit: :spec
|
38
39
|
end
|
39
40
|
|
40
41
|
namespace :bundle do
|
@@ -65,6 +66,6 @@ if defined?(RUBY_VERSION) && RUBY_VERSION > '1.9'
|
|
65
66
|
cane.style_measure = 120
|
66
67
|
end
|
67
68
|
rescue LoadError
|
68
|
-
warn
|
69
|
+
warn 'cane not available, quality task not provided.'
|
69
70
|
end
|
70
71
|
end
|
@@ -16,52 +16,49 @@
|
|
16
16
|
# under the License.
|
17
17
|
|
18
18
|
# coding: utf-8
|
19
|
-
|
19
|
+
|
20
|
+
lib = File.expand_path('lib', __dir__)
|
20
21
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
21
22
|
require 'elasticsearch/persistence/version'
|
22
23
|
|
23
24
|
Gem::Specification.new do |s|
|
24
|
-
s.name =
|
25
|
+
s.name = 'elasticsearch-persistence'
|
25
26
|
s.version = Elasticsearch::Persistence::VERSION
|
26
|
-
s.authors = [
|
27
|
-
s.email = [
|
28
|
-
s.description =
|
29
|
-
s.summary =
|
30
|
-
s.homepage =
|
31
|
-
s.license =
|
27
|
+
s.authors = ['Elastic Client Library Maintainers']
|
28
|
+
s.email = ['client-libs@elastic.co']
|
29
|
+
s.description = 'Persistence layer for Ruby models and Elasticsearch.'
|
30
|
+
s.summary = 'Persistence layer for Ruby models and Elasticsearch.'
|
31
|
+
s.homepage = 'https://github.com/elasticsearch/elasticsearch-rails/'
|
32
|
+
s.license = 'Apache 2'
|
32
33
|
|
33
34
|
s.files = `git ls-files -z`.split("\x0")
|
34
35
|
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
35
36
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
36
|
-
s.require_paths = [
|
37
|
-
|
38
|
-
s.extra_rdoc_files = [ "README.md", "LICENSE.txt" ]
|
39
|
-
s.rdoc_options = [ "--charset=UTF-8" ]
|
40
|
-
|
41
|
-
s.required_ruby_version = ">= 1.9.3"
|
42
|
-
|
43
|
-
s.add_dependency "elasticsearch", '~> 7'
|
44
|
-
s.add_dependency "elasticsearch-model", '7.2.1'
|
45
|
-
s.add_dependency "activesupport", '> 4'
|
46
|
-
s.add_dependency "activemodel", '> 4'
|
47
|
-
s.add_dependency "hashie"
|
48
|
-
|
49
|
-
s.add_development_dependency "bundler"
|
50
|
-
s.add_development_dependency "rake", "~> 12"
|
37
|
+
s.require_paths = ['lib']
|
51
38
|
|
52
|
-
s.
|
39
|
+
s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
|
40
|
+
s.rdoc_options = ['--charset=UTF-8']
|
53
41
|
|
54
|
-
s.
|
42
|
+
s.required_ruby_version = '>= 3'
|
55
43
|
|
56
|
-
s.
|
57
|
-
s.
|
58
|
-
s.
|
59
|
-
s.
|
60
|
-
s.
|
61
|
-
s.add_development_dependency "yard"
|
62
|
-
s.add_development_dependency "ruby-prof" unless defined?(JRUBY_VERSION)
|
63
|
-
s.add_development_dependency "pry"
|
44
|
+
s.add_dependency 'activemodel', '> 4'
|
45
|
+
s.add_dependency 'activesupport', '> 4'
|
46
|
+
s.add_dependency 'elasticsearch', '~> 8'
|
47
|
+
s.add_dependency 'elasticsearch-model', '8.0.0.pre'
|
48
|
+
s.add_dependency 'hashie'
|
64
49
|
|
65
|
-
s.add_development_dependency
|
66
|
-
s.add_development_dependency
|
50
|
+
s.add_development_dependency 'bundler'
|
51
|
+
s.add_development_dependency 'cane'
|
52
|
+
s.add_development_dependency 'minitest'
|
53
|
+
s.add_development_dependency 'mocha'
|
54
|
+
s.add_development_dependency 'oj' unless defined?(JRUBY_VERSION)
|
55
|
+
s.add_development_dependency 'pry'
|
56
|
+
s.add_development_dependency 'rails', '> 4'
|
57
|
+
s.add_development_dependency 'rake', '~> 12'
|
58
|
+
s.add_development_dependency 'ruby-prof' unless defined?(JRUBY_VERSION)
|
59
|
+
s.add_development_dependency 'shoulda-context'
|
60
|
+
s.add_development_dependency 'simplecov'
|
61
|
+
s.add_development_dependency 'test-unit'
|
62
|
+
s.add_development_dependency 'turn'
|
63
|
+
s.add_development_dependency 'yard'
|
67
64
|
end
|
data/examples/notes/test.rb
CHANGED
@@ -90,7 +90,7 @@ class Elasticsearch::Persistence::ExampleApplicationTest < Test::Unit::TestCase
|
|
90
90
|
app.settings.repository.client = Elasticsearch::Client.new \
|
91
91
|
hosts: [{ host: 'localhost', port: ENV.fetch('TEST_CLUSTER_PORT', 9250)}],
|
92
92
|
log: true
|
93
|
-
app.settings.repository.client.transport.
|
93
|
+
app.settings.repository.client.transport.logger.formatter = proc { |s, d, p, m| "\e[2m#{m}\n\e[0m" }
|
94
94
|
app.settings.repository.create_index! force: true
|
95
95
|
app.settings.repository.client.cluster.health wait_for_status: 'yellow'
|
96
96
|
end
|
@@ -23,7 +23,6 @@ module Elasticsearch
|
|
23
23
|
#
|
24
24
|
# @since 6.0.0
|
25
25
|
module DSL
|
26
|
-
|
27
26
|
def self.included(base)
|
28
27
|
base.send(:extend, Elasticsearch::Model::Indexing::ClassMethods)
|
29
28
|
base.send(:extend, ClassMethods)
|
@@ -34,19 +33,6 @@ module Elasticsearch
|
|
34
33
|
#
|
35
34
|
# @since 6.0.0
|
36
35
|
module ClassMethods
|
37
|
-
|
38
|
-
# Get or set the class-level document type setting.
|
39
|
-
#
|
40
|
-
# @example
|
41
|
-
# MyRepository.document_type
|
42
|
-
#
|
43
|
-
# @return [ String, Symbol ] _type The repository's document type.
|
44
|
-
#
|
45
|
-
# @since 6.0.0
|
46
|
-
def document_type(_type = nil)
|
47
|
-
@document_type ||= _type
|
48
|
-
end
|
49
|
-
|
50
36
|
# Get or set the class-level index name setting.
|
51
37
|
#
|
52
38
|
# @example
|
@@ -64,7 +64,6 @@ module Elasticsearch
|
|
64
64
|
#
|
65
65
|
def exists?(id, options={})
|
66
66
|
request = { index: index_name, id: id }
|
67
|
-
request[:type] = document_type if document_type
|
68
67
|
client.exists(request.merge(options))
|
69
68
|
end
|
70
69
|
|
@@ -84,10 +83,9 @@ module Elasticsearch
|
|
84
83
|
#
|
85
84
|
def __find_one(id, options={})
|
86
85
|
request = { index: index_name, id: id }
|
87
|
-
request[:type] = document_type if document_type
|
88
86
|
document = client.get(request.merge(options))
|
89
87
|
deserialize(document)
|
90
|
-
rescue
|
88
|
+
rescue Elastic::Transport::Transport::Errors::NotFound => e
|
91
89
|
raise DocumentNotFound, e.message, caller
|
92
90
|
end
|
93
91
|
|
@@ -95,7 +93,6 @@ module Elasticsearch
|
|
95
93
|
#
|
96
94
|
def __find_many(ids, options={})
|
97
95
|
request = { index: index_name, body: { ids: ids } }
|
98
|
-
request[:type] = document_type if document_type
|
99
96
|
documents = client.mget(request.merge(options))
|
100
97
|
documents[DOCS].map do |document|
|
101
98
|
deserialize(document) if document[FOUND]
|
@@ -60,8 +60,7 @@ module Elasticsearch
|
|
60
60
|
# @return [Elasticsearch::Persistence::Repository::Response::Results]
|
61
61
|
#
|
62
62
|
def search(query_or_definition, options={})
|
63
|
-
request = { index: index_name
|
64
|
-
type: document_type }
|
63
|
+
request = { index: index_name }
|
65
64
|
if query_or_definition.respond_to?(:to_hash)
|
66
65
|
request[:body] = query_or_definition.to_hash
|
67
66
|
elsif query_or_definition.is_a?(String)
|
@@ -98,8 +97,7 @@ module Elasticsearch
|
|
98
97
|
#
|
99
98
|
def count(query_or_definition=nil, options={})
|
100
99
|
query_or_definition ||= { query: { match_all: {} } }
|
101
|
-
request = { index: index_name
|
102
|
-
type: document_type }
|
100
|
+
request = { index: index_name }
|
103
101
|
|
104
102
|
if query_or_definition.respond_to?(:to_hash)
|
105
103
|
request[:body] = query_or_definition.to_hash
|
@@ -27,7 +27,7 @@ module Elasticsearch
|
|
27
27
|
#
|
28
28
|
# @example
|
29
29
|
# repository.save(myobject)
|
30
|
-
# => {"_index"=>"...", "
|
30
|
+
# => {"_index"=>"...", "_id"=>"...", "_version"=>1, "created"=>true}
|
31
31
|
#
|
32
32
|
# @param [ Object ] document The document to save into Elasticsearch.
|
33
33
|
# @param [ Hash ] options The save request options.
|
@@ -40,7 +40,6 @@ module Elasticsearch
|
|
40
40
|
request = { index: index_name,
|
41
41
|
id: id,
|
42
42
|
body: serialized }
|
43
|
-
request[:type] = document_type if document_type
|
44
43
|
client.index(request.merge(options))
|
45
44
|
end
|
46
45
|
|
@@ -49,12 +48,12 @@ module Elasticsearch
|
|
49
48
|
# @example Update the document with partial data
|
50
49
|
#
|
51
50
|
# repository.update id: 1, title: 'UPDATED', tags: []
|
52
|
-
# # => {"_index"=>"...", "
|
51
|
+
# # => {"_index"=>"...", "_id"=>"1", "_version"=>2}
|
53
52
|
#
|
54
53
|
# @example Update the document with a script
|
55
54
|
#
|
56
55
|
# repository.update 1, script: 'ctx._source.views += 1'
|
57
|
-
# # => {"_index"=>"...", "
|
56
|
+
# # => {"_index"=>"...", "_id"=>"1", "_version"=>3}
|
58
57
|
#
|
59
58
|
# @param [ Object ] document_or_id The document to update or the id of the document to update.
|
60
59
|
# @param [ Hash ] options The update request options.
|
@@ -65,7 +64,6 @@ module Elasticsearch
|
|
65
64
|
if document_or_id.is_a?(String) || document_or_id.is_a?(Integer)
|
66
65
|
id = document_or_id
|
67
66
|
body = options
|
68
|
-
type = document_type
|
69
67
|
else
|
70
68
|
document = serialize(document_or_id)
|
71
69
|
id = __extract_id_from_document(document)
|
@@ -74,9 +72,8 @@ module Elasticsearch
|
|
74
72
|
else
|
75
73
|
body = { doc: document }.merge(options)
|
76
74
|
end
|
77
|
-
type = document.delete(:type) || document_type
|
78
75
|
end
|
79
|
-
client.update(index: index_name, id: id,
|
76
|
+
client.update(index: index_name, id: id, body: body)
|
80
77
|
end
|
81
78
|
|
82
79
|
# Remove the serialized object or document with specified ID from Elasticsearch
|
@@ -84,7 +81,7 @@ module Elasticsearch
|
|
84
81
|
# @example Remove the document with ID 1
|
85
82
|
#
|
86
83
|
# repository.delete(1)
|
87
|
-
# # => {"_index"=>"...", "
|
84
|
+
# # => {"_index"=>"...", "_id"=>"1", "_version"=>4}
|
88
85
|
#
|
89
86
|
# @param [ Object ] document_or_id The document to delete or the id of the document to delete.
|
90
87
|
# @param [ Hash ] options The delete request options.
|
@@ -98,7 +95,7 @@ module Elasticsearch
|
|
98
95
|
serialized = serialize(document_or_id)
|
99
96
|
id = __get_id_from_document(serialized)
|
100
97
|
end
|
101
|
-
client.delete({ index: index_name,
|
98
|
+
client.delete({ index: index_name, id: id }.merge(options))
|
102
99
|
end
|
103
100
|
end
|
104
101
|
end
|
@@ -58,7 +58,6 @@ module Elasticsearch
|
|
58
58
|
# @param [ Proc ] block A block to evaluate on the new repository instance.
|
59
59
|
#
|
60
60
|
# @option options [ Symbol, String ] :index_name The name of the index.
|
61
|
-
# @option options [ Symbol, String ] :document_type The type of documents persisted in this repository.
|
62
61
|
# @option options [ Symbol, String ] :client The client used to handle requests to and from Elasticsearch.
|
63
62
|
# @option options [ Symbol, String ] :klass The class used to instantiate an object when documents are
|
64
63
|
# deserialized. The default is nil, in which case the raw document will be returned as a Hash.
|
@@ -95,7 +94,6 @@ module Elasticsearch
|
|
95
94
|
# @param [ Hash ] options The options to use.
|
96
95
|
#
|
97
96
|
# @option options [ Symbol, String ] :index_name The name of the index.
|
98
|
-
# @option options [ Symbol, String ] :document_type The type of documents persisted in this repository.
|
99
97
|
# @option options [ Symbol, String ] :client The client used to handle requests to and from Elasticsearch.
|
100
98
|
# @option options [ Symbol, String ] :klass The class used to instantiate an object when documents are
|
101
99
|
# deserialized. The default is nil, in which case the raw document will be returned as a Hash.
|
@@ -121,19 +119,6 @@ module Elasticsearch
|
|
121
119
|
Elasticsearch::Client.new
|
122
120
|
end
|
123
121
|
|
124
|
-
# Get the document type used by the repository object.
|
125
|
-
#
|
126
|
-
# @example
|
127
|
-
# repository.document_type
|
128
|
-
#
|
129
|
-
# @return [ String, Symbol ] The repository's document type.
|
130
|
-
#
|
131
|
-
# @since 6.0.0
|
132
|
-
def document_type
|
133
|
-
@document_type ||= @options[:document_type] ||
|
134
|
-
__get_class_value(:document_type)
|
135
|
-
end
|
136
|
-
|
137
122
|
# Get the index name used by the repository.
|
138
123
|
#
|
139
124
|
# @example
|
@@ -180,7 +165,6 @@ module Elasticsearch
|
|
180
165
|
def mapping(*args)
|
181
166
|
@memoized_mapping ||= @options[:mapping] || (begin
|
182
167
|
if _mapping = __get_class_value(:mapping)
|
183
|
-
_mapping.instance_variable_set(:@type, document_type)
|
184
168
|
_mapping
|
185
169
|
end
|
186
170
|
end) || (super && @mapping)
|
@@ -229,7 +213,7 @@ module Elasticsearch
|
|
229
213
|
#
|
230
214
|
# @since 6.0.0
|
231
215
|
def inspect
|
232
|
-
"#<#{self.class}:0x#{object_id} index_name=#{index_name}
|
216
|
+
"#<#{self.class}:0x#{object_id} index_name=#{index_name} klass=#{klass}>"
|
233
217
|
end
|
234
218
|
|
235
219
|
private
|
@@ -18,7 +18,6 @@
|
|
18
18
|
require 'spec_helper'
|
19
19
|
|
20
20
|
describe Elasticsearch::Persistence::Repository::Find do
|
21
|
-
|
22
21
|
after do
|
23
22
|
begin; repository.delete_index!; rescue; end
|
24
23
|
end
|
@@ -28,9 +27,7 @@ describe Elasticsearch::Persistence::Repository::Find do
|
|
28
27
|
end
|
29
28
|
|
30
29
|
describe '#exists?' do
|
31
|
-
|
32
30
|
context 'when the document exists' do
|
33
|
-
|
34
31
|
let(:id) do
|
35
32
|
repository.save(a: 1)['_id']
|
36
33
|
end
|
@@ -41,30 +38,15 @@ describe Elasticsearch::Persistence::Repository::Find do
|
|
41
38
|
end
|
42
39
|
|
43
40
|
context 'when the document does not exist' do
|
44
|
-
|
45
41
|
it 'returns false' do
|
46
42
|
expect(repository.exists?('1')).to be(false)
|
47
43
|
end
|
48
44
|
end
|
49
|
-
|
50
|
-
context 'when options are provided' do
|
51
|
-
|
52
|
-
let(:id) do
|
53
|
-
repository.save(a: 1)['_id']
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'applies the options' do
|
57
|
-
expect(repository.exists?(id, type: 'other_type')).to be(false)
|
58
|
-
end
|
59
|
-
end
|
60
45
|
end
|
61
46
|
|
62
47
|
describe '#find' do
|
63
|
-
|
64
48
|
context 'when options are not provided' do
|
65
|
-
|
66
49
|
context 'when a single id is provided' do
|
67
|
-
|
68
50
|
let!(:id) do
|
69
51
|
repository.save(a: 1)['_id']
|
70
52
|
end
|
@@ -75,7 +57,6 @@ describe Elasticsearch::Persistence::Repository::Find do
|
|
75
57
|
end
|
76
58
|
|
77
59
|
context 'when an array of ids is provided' do
|
78
|
-
|
79
60
|
let!(:ids) do
|
80
61
|
3.times.collect do |i|
|
81
62
|
repository.save(a: i)['_id']
|
@@ -83,28 +64,30 @@ describe Elasticsearch::Persistence::Repository::Find do
|
|
83
64
|
end
|
84
65
|
|
85
66
|
it 'retrieves the documents' do
|
86
|
-
expect(repository.find(ids)).to eq([
|
87
|
-
|
88
|
-
|
67
|
+
expect(repository.find(ids)).to eq([
|
68
|
+
{ 'a' =>0 },
|
69
|
+
{ 'a' => 1 },
|
70
|
+
{ 'a' => 2 }
|
71
|
+
])
|
89
72
|
end
|
90
73
|
|
91
74
|
context 'when some documents are found and some are not' do
|
92
|
-
|
93
75
|
before do
|
94
76
|
ids[1] = 22
|
95
77
|
ids
|
96
78
|
end
|
97
79
|
|
98
80
|
it 'returns nil in the result list for the documents not found' do
|
99
|
-
expect(repository.find(ids)).to eq([
|
81
|
+
expect(repository.find(ids)).to eq([
|
82
|
+
{ 'a' =>0 },
|
100
83
|
nil,
|
101
|
-
{ 'a' => 2 }
|
84
|
+
{ 'a' => 2 }
|
85
|
+
])
|
102
86
|
end
|
103
87
|
end
|
104
88
|
end
|
105
89
|
|
106
90
|
context 'when multiple ids are provided' do
|
107
|
-
|
108
91
|
let!(:ids) do
|
109
92
|
3.times.collect do |i|
|
110
93
|
repository.save(a: i)['_id']
|
@@ -112,14 +95,15 @@ describe Elasticsearch::Persistence::Repository::Find do
|
|
112
95
|
end
|
113
96
|
|
114
97
|
it 'retrieves the documents' do
|
115
|
-
expect(repository.find(*ids)).to eq([
|
116
|
-
|
117
|
-
|
98
|
+
expect(repository.find(*ids)).to eq([
|
99
|
+
{ 'a' =>0 },
|
100
|
+
{ 'a' => 1 },
|
101
|
+
{ 'a' => 2 }
|
102
|
+
])
|
118
103
|
end
|
119
104
|
end
|
120
105
|
|
121
106
|
context 'when the document cannot be found' do
|
122
|
-
|
123
107
|
before do
|
124
108
|
begin; repository.create_index!; rescue; end
|
125
109
|
end
|
@@ -131,66 +115,5 @@ describe Elasticsearch::Persistence::Repository::Find do
|
|
131
115
|
end
|
132
116
|
end
|
133
117
|
end
|
134
|
-
|
135
|
-
context 'when options are provided' do
|
136
|
-
|
137
|
-
context 'when a single id is passed' do
|
138
|
-
|
139
|
-
let!(:id) do
|
140
|
-
repository.save(a: 1)['_id']
|
141
|
-
end
|
142
|
-
|
143
|
-
it 'applies the options' do
|
144
|
-
expect {
|
145
|
-
repository.find(id, type: 'none')
|
146
|
-
}.to raise_exception(Elasticsearch::Persistence::Repository::DocumentNotFound)
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
context 'when an array of ids is passed' do
|
151
|
-
|
152
|
-
let!(:ids) do
|
153
|
-
3.times.collect do |i|
|
154
|
-
repository.save(a: i)['_id']
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
it 'applies the options' do
|
159
|
-
expect(repository.find(ids, type: 'none')).to eq([nil, nil, nil])
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
context 'when multiple ids are passed' do
|
164
|
-
|
165
|
-
let!(:ids) do
|
166
|
-
3.times.collect do |i|
|
167
|
-
repository.save(a: i)['_id']
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
it 'applies the options' do
|
172
|
-
expect(repository.find(*ids, type: 'none')).to eq([nil, nil, nil])
|
173
|
-
end
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
context 'when a document_type is defined on the class' do
|
178
|
-
|
179
|
-
let(:repository) do
|
180
|
-
MyTestRepository.new(document_type:'other_type', client: DEFAULT_CLIENT, index_name: 'test')
|
181
|
-
end
|
182
|
-
|
183
|
-
let!(:ids) do
|
184
|
-
3.times.collect do |i|
|
185
|
-
repository.save(a: i)['_id']
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
it 'uses the document type in the query' do
|
190
|
-
expect(repository.find(ids)).to eq([{ 'a' =>0 },
|
191
|
-
{ 'a' => 1 },
|
192
|
-
{ 'a' => 2 }])
|
193
|
-
end
|
194
|
-
end
|
195
118
|
end
|
196
119
|
end
|
@@ -43,23 +43,24 @@ describe Elasticsearch::Persistence::Repository::Response::Results do
|
|
43
43
|
{ "took" => 2,
|
44
44
|
"timed_out" => false,
|
45
45
|
"_shards" => {"total" => 5, "successful" => 5, "failed" => 0},
|
46
|
-
"hits" =>
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
46
|
+
"hits" => {
|
47
|
+
"total" => 2,
|
48
|
+
"max_score" => 0.19,
|
49
|
+
"hits" => [
|
50
|
+
{
|
51
|
+
"_index" => "my_index",
|
52
|
+
"_id" => "1",
|
53
|
+
"_score" => 0.19,
|
54
|
+
"_source" => {"id" => 1, "title" => "Test 1"}
|
55
|
+
},
|
56
|
+
{
|
57
|
+
"_index" => "my_index",
|
58
|
+
"_id" => "2",
|
59
|
+
"_score" => 0.19,
|
60
|
+
"_source" => {"id" => 2, "title" => "Test 2"}
|
61
|
+
}
|
62
|
+
]
|
63
|
+
}
|
63
64
|
}
|
64
65
|
end
|
65
66
|
|