rom-elasticsearch 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -8
- data/README.md +7 -7
- data/lib/rom-elasticsearch.rb +2 -0
- data/lib/rom/elasticsearch.rb +3 -1
- data/lib/rom/elasticsearch/attribute.rb +2 -0
- data/lib/rom/elasticsearch/commands.rb +2 -0
- data/lib/rom/elasticsearch/dataset.rb +6 -0
- data/lib/rom/elasticsearch/errors.rb +2 -0
- data/lib/rom/elasticsearch/gateway.rb +2 -0
- data/lib/rom/elasticsearch/index_name.rb +2 -0
- data/lib/rom/elasticsearch/plugins/relation/query_dsl.rb +2 -0
- data/lib/rom/elasticsearch/query_methods.rb +2 -0
- data/lib/rom/elasticsearch/relation.rb +60 -0
- data/lib/rom/elasticsearch/relation/loaded.rb +2 -0
- data/lib/rom/elasticsearch/schema.rb +5 -1
- data/lib/rom/elasticsearch/scroll_methods.rb +40 -0
- data/lib/rom/elasticsearch/types.rb +7 -5
- data/lib/rom/elasticsearch/version.rb +3 -1
- metadata +18 -78
- data/.codeclimate.yml +0 -6
- data/.gitignore +0 -22
- data/.rspec +0 -3
- data/.travis.yml +0 -27
- data/.yardopts +0 -7
- data/CONTRIBUTING.md +0 -29
- data/Gemfile +0 -19
- data/Rakefile +0 -19
- data/docker-compose.yml +0 -7
- data/rom-elasticsearch.gemspec +0 -27
- data/spec/integration/rom/elasticsearch/relation/command_spec.rb +0 -47
- data/spec/integration/rom/elasticsearch/relation/multi_index_spec.rb +0 -60
- data/spec/integration/rom/elasticsearch/relation/schema_spec.rb +0 -25
- data/spec/shared/setup.rb +0 -16
- data/spec/shared/unit/user_fixtures.rb +0 -15
- data/spec/shared/unit/users.rb +0 -18
- data/spec/spec_helper.rb +0 -42
- data/spec/unit/rom/elasticsearch/dataset/body_spec.rb +0 -13
- data/spec/unit/rom/elasticsearch/dataset/delete_spec.rb +0 -17
- data/spec/unit/rom/elasticsearch/dataset/params_spec.rb +0 -13
- data/spec/unit/rom/elasticsearch/dataset/put_spec.rb +0 -14
- data/spec/unit/rom/elasticsearch/dataset/query_string_spec.rb +0 -12
- data/spec/unit/rom/elasticsearch/dataset/search_spec.rb +0 -20
- data/spec/unit/rom/elasticsearch/gateway_spec.rb +0 -10
- data/spec/unit/rom/elasticsearch/plugins/relation/query_dsl_spec.rb +0 -34
- data/spec/unit/rom/elasticsearch/relation/call_spec.rb +0 -22
- data/spec/unit/rom/elasticsearch/relation/create_index_spec.rb +0 -75
- data/spec/unit/rom/elasticsearch/relation/dataset_spec.rb +0 -51
- data/spec/unit/rom/elasticsearch/relation/delete_spec.rb +0 -32
- data/spec/unit/rom/elasticsearch/relation/get_spec.rb +0 -22
- data/spec/unit/rom/elasticsearch/relation/map_spec.rb +0 -18
- data/spec/unit/rom/elasticsearch/relation/order_spec.rb +0 -40
- data/spec/unit/rom/elasticsearch/relation/page_spec.rb +0 -20
- data/spec/unit/rom/elasticsearch/relation/pluck_spec.rb +0 -18
- data/spec/unit/rom/elasticsearch/relation/query_spec.rb +0 -18
- data/spec/unit/rom/elasticsearch/relation/query_string_spec.rb +0 -18
- data/spec/unit/rom/elasticsearch/relation/search_spec.rb +0 -18
- data/spec/unit/rom/elasticsearch/relation/to_a_spec.rb +0 -28
data/.codeclimate.yml
DELETED
data/.gitignore
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
*.gem
|
2
|
-
*.rbc
|
3
|
-
.bundle
|
4
|
-
.config
|
5
|
-
.yardoc
|
6
|
-
Gemfile.lock
|
7
|
-
InstalledFiles
|
8
|
-
_yardoc
|
9
|
-
coverage
|
10
|
-
doc/
|
11
|
-
lib/bundler/man
|
12
|
-
pkg
|
13
|
-
rdoc
|
14
|
-
spec/reports
|
15
|
-
test/tmp
|
16
|
-
test/version_tmp
|
17
|
-
tmp
|
18
|
-
*.bundle
|
19
|
-
*.so
|
20
|
-
*.o
|
21
|
-
*.a
|
22
|
-
mkmf.log
|
data/.rspec
DELETED
data/.travis.yml
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
sudo: false
|
3
|
-
cache: bundler
|
4
|
-
before_install: gem update --system
|
5
|
-
services:
|
6
|
-
- elasticsearch
|
7
|
-
bundler_args: --without yard guard benchmarks tools
|
8
|
-
before_script:
|
9
|
-
- curl -XPUT http://localhost:9200/rom-test
|
10
|
-
after_success:
|
11
|
-
- '[ -d coverage ] && bundle exec codeclimate-test-reporter'
|
12
|
-
script: "bundle exec rake ci"
|
13
|
-
rvm:
|
14
|
-
- 2.5.0
|
15
|
-
- 2.4.3
|
16
|
-
- 2.3.6
|
17
|
-
- jruby-9.1.12.0
|
18
|
-
env:
|
19
|
-
global:
|
20
|
-
- COVERAGE='true'
|
21
|
-
notifications:
|
22
|
-
webhooks:
|
23
|
-
urls:
|
24
|
-
- https://webhooks.gitter.im/e/39e1225f489f38b0bd09
|
25
|
-
on_success: change
|
26
|
-
on_failure: always
|
27
|
-
on_start: false
|
data/.yardopts
DELETED
data/CONTRIBUTING.md
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
# Issue Guidelines
|
2
|
-
|
3
|
-
## Reporting bugs
|
4
|
-
|
5
|
-
If you found a bug, report an issue and describe what's the expected behavior versus what actually happens. If the bug causes a crash, attach a full backtrace. If possible, a reproduction script showing the problem is highly appreciated.
|
6
|
-
|
7
|
-
## Reporting feature requests
|
8
|
-
|
9
|
-
Report a feature request **only after discussing it first on [discourse.rom-rb.org](https://discourse.rom-rb.org)** where it was accepted. Please provide a concise description of the feature, don't link to a discussion thread, and instead summarize what was discussed.
|
10
|
-
|
11
|
-
## Reporting questions, support requests, ideas, concerns etc.
|
12
|
-
|
13
|
-
**PLEASE DON'T** - use [discourse.rom-rb.org](http://discourse.rom-rb.org) instead.
|
14
|
-
|
15
|
-
# Pull Request Guidelines
|
16
|
-
|
17
|
-
A Pull Request will only be accepted if it addresses a specific issue that was reported previously, or fixes typos, mistakes in documentation etc.
|
18
|
-
|
19
|
-
Other requirements:
|
20
|
-
|
21
|
-
1) Do not open a pull request if you can't provide tests along with it. If you have problems writing tests, ask for help in the related issue.
|
22
|
-
2) Follow the style conventions of the surrounding code. In most cases, this is standard ruby style.
|
23
|
-
3) Add API documentation if it's a new feature
|
24
|
-
4) Update API documentation if it changes an existing feature
|
25
|
-
5) Bonus points for sending a PR to [github.com/rom-rb/rom-rb.org](https://github.com/rom-rb/rom-rb.org) which updates user documentation and guides
|
26
|
-
|
27
|
-
# Asking for help
|
28
|
-
|
29
|
-
If these guidelines aren't helpful, and you're stuck, please post a message on [discourse.rom-rb.org](https://discourse.rom-rb.org).
|
data/Gemfile
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
# Specify your gem's dependencies in rom-elasticsearch.gemspec
|
4
|
-
gemspec
|
5
|
-
|
6
|
-
gem 'rom', git: 'https://github.com/rom-rb/rom', branch: 'master' do
|
7
|
-
gem 'rom-core'
|
8
|
-
gem 'rom-mapper'
|
9
|
-
end
|
10
|
-
|
11
|
-
gem 'codeclimate-test-reporter', require: false
|
12
|
-
gem 'simplecov', require: false
|
13
|
-
|
14
|
-
gem 'byebug', platform: :mri
|
15
|
-
gem 'elasticsearch-dsl'
|
16
|
-
|
17
|
-
group :tools do
|
18
|
-
gem 'kramdown' # for yard
|
19
|
-
end
|
data/Rakefile
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
2
|
-
require "rspec/core/rake_task"
|
3
|
-
|
4
|
-
RSpec::Core::RakeTask.new(:spec)
|
5
|
-
task default: [:ci]
|
6
|
-
|
7
|
-
desc "Run CI tasks"
|
8
|
-
task ci: [:spec]
|
9
|
-
|
10
|
-
begin
|
11
|
-
require "rubocop/rake_task"
|
12
|
-
|
13
|
-
Rake::Task[:default].enhance [:rubocop]
|
14
|
-
|
15
|
-
RuboCop::RakeTask.new do |task|
|
16
|
-
task.options << "--display-cop-names"
|
17
|
-
end
|
18
|
-
rescue LoadError
|
19
|
-
end
|
data/docker-compose.yml
DELETED
data/rom-elasticsearch.gemspec
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'rom/elasticsearch/version'
|
5
|
-
|
6
|
-
Gem::Specification.new do |spec|
|
7
|
-
spec.name = 'rom-elasticsearch'
|
8
|
-
spec.version = ROM::Elasticsearch::VERSION
|
9
|
-
spec.authors = ['Hannes Nevalainen', 'Piotr Solnica']
|
10
|
-
spec.email = ['hannes.nevalainen@me.com', 'piotr.solnica+oss@gmail.com']
|
11
|
-
spec.summary = %q{ROM adapter for Elasticsearch}
|
12
|
-
spec.description = %q{}
|
13
|
-
spec.homepage = 'http://rom-rb.org'
|
14
|
-
spec.license = 'MIT'
|
15
|
-
|
16
|
-
spec.files = `git ls-files -z`.split("\x0")
|
17
|
-
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = ['lib']
|
20
|
-
|
21
|
-
spec.add_runtime_dependency 'rom-core', '~> 4.1'
|
22
|
-
spec.add_runtime_dependency 'elasticsearch', '~> 6.0'
|
23
|
-
|
24
|
-
spec.add_development_dependency 'bundler', '~> 1.6'
|
25
|
-
spec.add_development_dependency 'rake'
|
26
|
-
spec.add_development_dependency 'rspec'
|
27
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
RSpec.describe ROM::Elasticsearch::Relation, '#command' do
|
2
|
-
subject(:relation) { relations[:users] }
|
3
|
-
|
4
|
-
include_context 'setup'
|
5
|
-
|
6
|
-
before do
|
7
|
-
conf.relation(:users) do
|
8
|
-
schema(:users) do
|
9
|
-
attribute :id, ROM::Elasticsearch::Types::ID
|
10
|
-
attribute :name, ROM::Types::String
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe ':create' do
|
16
|
-
it 'returns a create command' do
|
17
|
-
command = relation.command(:create, result: :one)
|
18
|
-
|
19
|
-
expect(command.call(id: 1, name: 'Jane')).to eql(id: 1, name: 'Jane')
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'applies input function' do
|
23
|
-
command = relation.command(:create, result: :one)
|
24
|
-
|
25
|
-
input = double(:user, to_hash: { id: 1, name: 'Jane' })
|
26
|
-
|
27
|
-
expect(command.call(input)).to eql(id: 1, name: 'Jane')
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe ':delete' do
|
32
|
-
before do
|
33
|
-
relation.command(:create).call(id: 1, name: 'Jane')
|
34
|
-
relation.command(:create).call(id: 2, name: 'John')
|
35
|
-
|
36
|
-
relation.refresh
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'deletes matching data' do
|
40
|
-
relation.get(2).command(:delete).call
|
41
|
-
|
42
|
-
relation.refresh
|
43
|
-
|
44
|
-
expect(relation.to_a).to eql([{ id: 1, name: 'Jane' }])
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
RSpec.describe ROM::Elasticsearch::Relation, '.schema' do
|
2
|
-
subject(:relation) { relations[:search] }
|
3
|
-
|
4
|
-
include_context 'setup'
|
5
|
-
|
6
|
-
let(:posts) { relations[:posts] }
|
7
|
-
let(:pages) { relations[:pages] }
|
8
|
-
|
9
|
-
before do
|
10
|
-
conf.relation(:posts) do
|
11
|
-
schema(:posts) do
|
12
|
-
attribute :id, ROM::Elasticsearch::Types::ID
|
13
|
-
attribute :title, ROM::Elasticsearch::Types.Text
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
conf.relation(:pages) do
|
18
|
-
schema(:pages) do
|
19
|
-
attribute :id, ROM::Elasticsearch::Types::ID
|
20
|
-
attribute :title, ROM::Elasticsearch::Types.Text
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
conf.relation(:search) do
|
25
|
-
multi_index_types %i[post page]
|
26
|
-
|
27
|
-
schema(multi: true) do
|
28
|
-
attribute :id, ROM::Elasticsearch::Types::ID
|
29
|
-
attribute :title, ROM::Elasticsearch::Types.Text
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
posts.create_index
|
34
|
-
pages.create_index
|
35
|
-
end
|
36
|
-
|
37
|
-
after do
|
38
|
-
posts.delete_index
|
39
|
-
pages.delete_index
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'search through specified indices' do
|
43
|
-
posts.command(:create).call(id: 1, title: 'Post 1')
|
44
|
-
posts.command(:create).call(id: 2, title: 'Post 2')
|
45
|
-
|
46
|
-
pages.command(:create).call(id: 1, title: 'Page 1')
|
47
|
-
pages.command(:create).call(id: 2, title: 'Page 2')
|
48
|
-
|
49
|
-
posts.refresh
|
50
|
-
pages.refresh
|
51
|
-
|
52
|
-
result = relation.query(match: { title: 'Post'})
|
53
|
-
|
54
|
-
expect(result.to_a).to eql([{ id: 1, title: 'Post 1'}, { id: 2, title: 'Post 2'}])
|
55
|
-
|
56
|
-
result = relation.query(match: { title: '1'})
|
57
|
-
|
58
|
-
expect(result.to_a).to eql([{ id: 1, title: 'Page 1'}, { id: 1, title: 'Post 1'}])
|
59
|
-
end
|
60
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
RSpec.describe ROM::Elasticsearch::Relation, '.schema' do
|
2
|
-
subject(:relation) { relations[:users] }
|
3
|
-
|
4
|
-
include_context 'setup'
|
5
|
-
|
6
|
-
before do
|
7
|
-
conf.relation(:users) do
|
8
|
-
schema(:users) do
|
9
|
-
attribute :id, ROM::Elasticsearch::Types::ID
|
10
|
-
attribute :name, ROM::Elasticsearch::Types.Text, read: ROM::Types.Constructor(Symbol, &:to_sym)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'defines read/write types' do
|
16
|
-
relation.create_index
|
17
|
-
|
18
|
-
relation.command(:create).call(id: 1, name: 'Jane')
|
19
|
-
|
20
|
-
user = relation.get(1).one
|
21
|
-
|
22
|
-
expect(user[:id]).to be(1)
|
23
|
-
expect(user[:name]).to be(:Jane)
|
24
|
-
end
|
25
|
-
end
|
data/spec/shared/setup.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
RSpec.shared_context 'setup' do
|
2
|
-
let(:uri) { "http://127.0.0.1:9200" }
|
3
|
-
|
4
|
-
let(:conf) { ROM::Configuration.new(:elasticsearch, uri) }
|
5
|
-
let(:container) { ROM.container(conf) }
|
6
|
-
|
7
|
-
let(:gateway) { conf.gateways[:default] }
|
8
|
-
let(:client) { gateway.client }
|
9
|
-
|
10
|
-
let(:relations) { container[:relations] }
|
11
|
-
let(:commands) { container[:commands] }
|
12
|
-
|
13
|
-
after do
|
14
|
-
client.indices.delete(index: :users) if gateway.index?(:users)
|
15
|
-
end
|
16
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
RSpec.shared_context 'user fixtures' do
|
2
|
-
include_context 'setup'
|
3
|
-
|
4
|
-
before do
|
5
|
-
dataset.put(username: 'eve')
|
6
|
-
dataset.put(username: 'bob')
|
7
|
-
dataset.put(username: 'alice')
|
8
|
-
|
9
|
-
dataset.refresh
|
10
|
-
end
|
11
|
-
|
12
|
-
after do
|
13
|
-
gateway[:users].refresh.delete
|
14
|
-
end
|
15
|
-
end
|
data/spec/shared/unit/users.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
RSpec.shared_context 'users' do
|
2
|
-
include_context 'setup'
|
3
|
-
|
4
|
-
before do
|
5
|
-
conf.relation(:users) do
|
6
|
-
schema(:users) do
|
7
|
-
attribute :id, ROM::Types::Int
|
8
|
-
attribute :name, ROM::Types::String
|
9
|
-
|
10
|
-
primary_key :id
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
after do
|
16
|
-
gateway[:users].refresh.delete
|
17
|
-
end
|
18
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'bundler'
|
2
|
-
Bundler.setup
|
3
|
-
|
4
|
-
if RUBY_ENGINE == 'ruby' && ENV['COVERAGE'] == 'true'
|
5
|
-
require 'yaml'
|
6
|
-
rubies = YAML.load(File.read(File.join(__dir__, '..', '.travis.yml')))['rvm']
|
7
|
-
latest_mri = rubies.select { |v| v =~ /\A\d+\.\d+.\d+\z/ }.max
|
8
|
-
|
9
|
-
if RUBY_VERSION == latest_mri
|
10
|
-
require 'simplecov'
|
11
|
-
SimpleCov.start do
|
12
|
-
add_filter '/spec/'
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
begin
|
18
|
-
require 'byebug'
|
19
|
-
rescue LoadError
|
20
|
-
end
|
21
|
-
|
22
|
-
require 'rom-elasticsearch'
|
23
|
-
|
24
|
-
SPEC_ROOT = Pathname(__FILE__).dirname
|
25
|
-
|
26
|
-
Dir[SPEC_ROOT.join('shared/**/*.rb')].each { |f| require f }
|
27
|
-
|
28
|
-
RSpec.configure do |config|
|
29
|
-
config.disable_monkey_patching!
|
30
|
-
|
31
|
-
# elasticsearch-dsl warnings are killing me - solnic
|
32
|
-
config.warnings = false
|
33
|
-
|
34
|
-
config.before do
|
35
|
-
module Test
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
config.after do
|
40
|
-
Object.send(:remove_const, :Test)
|
41
|
-
end
|
42
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
RSpec.describe ROM::Elasticsearch::Dataset, '#body' do
|
2
|
-
subject(:dataset) do
|
3
|
-
ROM::Elasticsearch::Dataset.new(client, params: { index: :users, type: :user })
|
4
|
-
end
|
5
|
-
|
6
|
-
include_context 'user fixtures'
|
7
|
-
|
8
|
-
it 'returns a new dataset with updated body' do
|
9
|
-
new_ds = dataset.body(id: 1)
|
10
|
-
|
11
|
-
expect(new_ds.body).to eql(id: 1)
|
12
|
-
end
|
13
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
RSpec.describe ROM::Elasticsearch::Dataset, '#delete' do
|
2
|
-
subject(:dataset) do
|
3
|
-
ROM::Elasticsearch::Dataset.new(client, params: { index: :users, type: :user })
|
4
|
-
end
|
5
|
-
|
6
|
-
include_context 'user fixtures'
|
7
|
-
|
8
|
-
it 'deletes data' do
|
9
|
-
expect(dataset.to_a.size).to eql(3)
|
10
|
-
|
11
|
-
dataset.refresh.delete
|
12
|
-
|
13
|
-
dataset.refresh
|
14
|
-
|
15
|
-
expect(dataset.to_a.size).to eql(0)
|
16
|
-
end
|
17
|
-
end
|