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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -8
  3. data/README.md +7 -7
  4. data/lib/rom-elasticsearch.rb +2 -0
  5. data/lib/rom/elasticsearch.rb +3 -1
  6. data/lib/rom/elasticsearch/attribute.rb +2 -0
  7. data/lib/rom/elasticsearch/commands.rb +2 -0
  8. data/lib/rom/elasticsearch/dataset.rb +6 -0
  9. data/lib/rom/elasticsearch/errors.rb +2 -0
  10. data/lib/rom/elasticsearch/gateway.rb +2 -0
  11. data/lib/rom/elasticsearch/index_name.rb +2 -0
  12. data/lib/rom/elasticsearch/plugins/relation/query_dsl.rb +2 -0
  13. data/lib/rom/elasticsearch/query_methods.rb +2 -0
  14. data/lib/rom/elasticsearch/relation.rb +60 -0
  15. data/lib/rom/elasticsearch/relation/loaded.rb +2 -0
  16. data/lib/rom/elasticsearch/schema.rb +5 -1
  17. data/lib/rom/elasticsearch/scroll_methods.rb +40 -0
  18. data/lib/rom/elasticsearch/types.rb +7 -5
  19. data/lib/rom/elasticsearch/version.rb +3 -1
  20. metadata +18 -78
  21. data/.codeclimate.yml +0 -6
  22. data/.gitignore +0 -22
  23. data/.rspec +0 -3
  24. data/.travis.yml +0 -27
  25. data/.yardopts +0 -7
  26. data/CONTRIBUTING.md +0 -29
  27. data/Gemfile +0 -19
  28. data/Rakefile +0 -19
  29. data/docker-compose.yml +0 -7
  30. data/rom-elasticsearch.gemspec +0 -27
  31. data/spec/integration/rom/elasticsearch/relation/command_spec.rb +0 -47
  32. data/spec/integration/rom/elasticsearch/relation/multi_index_spec.rb +0 -60
  33. data/spec/integration/rom/elasticsearch/relation/schema_spec.rb +0 -25
  34. data/spec/shared/setup.rb +0 -16
  35. data/spec/shared/unit/user_fixtures.rb +0 -15
  36. data/spec/shared/unit/users.rb +0 -18
  37. data/spec/spec_helper.rb +0 -42
  38. data/spec/unit/rom/elasticsearch/dataset/body_spec.rb +0 -13
  39. data/spec/unit/rom/elasticsearch/dataset/delete_spec.rb +0 -17
  40. data/spec/unit/rom/elasticsearch/dataset/params_spec.rb +0 -13
  41. data/spec/unit/rom/elasticsearch/dataset/put_spec.rb +0 -14
  42. data/spec/unit/rom/elasticsearch/dataset/query_string_spec.rb +0 -12
  43. data/spec/unit/rom/elasticsearch/dataset/search_spec.rb +0 -20
  44. data/spec/unit/rom/elasticsearch/gateway_spec.rb +0 -10
  45. data/spec/unit/rom/elasticsearch/plugins/relation/query_dsl_spec.rb +0 -34
  46. data/spec/unit/rom/elasticsearch/relation/call_spec.rb +0 -22
  47. data/spec/unit/rom/elasticsearch/relation/create_index_spec.rb +0 -75
  48. data/spec/unit/rom/elasticsearch/relation/dataset_spec.rb +0 -51
  49. data/spec/unit/rom/elasticsearch/relation/delete_spec.rb +0 -32
  50. data/spec/unit/rom/elasticsearch/relation/get_spec.rb +0 -22
  51. data/spec/unit/rom/elasticsearch/relation/map_spec.rb +0 -18
  52. data/spec/unit/rom/elasticsearch/relation/order_spec.rb +0 -40
  53. data/spec/unit/rom/elasticsearch/relation/page_spec.rb +0 -20
  54. data/spec/unit/rom/elasticsearch/relation/pluck_spec.rb +0 -18
  55. data/spec/unit/rom/elasticsearch/relation/query_spec.rb +0 -18
  56. data/spec/unit/rom/elasticsearch/relation/query_string_spec.rb +0 -18
  57. data/spec/unit/rom/elasticsearch/relation/search_spec.rb +0 -18
  58. data/spec/unit/rom/elasticsearch/relation/to_a_spec.rb +0 -28
@@ -1,13 +0,0 @@
1
- RSpec.describe ROM::Elasticsearch::Dataset, '#params' 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 params' do
9
- new_ds = dataset.params(size: 100)
10
-
11
- expect(new_ds.params).to eql(size: 100, index: :users, type: :user)
12
- end
13
- end
@@ -1,14 +0,0 @@
1
- RSpec.describe ROM::Elasticsearch::Dataset, '#put' do
2
- subject(:dataset) do
3
- ROM::Elasticsearch::Dataset.new(client, params: { index: :users, type: :user })
4
- end
5
-
6
- include_context 'setup'
7
-
8
- it 'puts new data' do
9
- result = dataset.put(username: 'eve')
10
-
11
- expect(result['_id']).to_not be(nil)
12
- expect(result['result']).to eql('created')
13
- end
14
- end
@@ -1,12 +0,0 @@
1
- RSpec.describe ROM::Elasticsearch::Dataset, '#query_string' 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 data matching query string' do
9
- expect(dataset.query_string('username:alice').to_a).to eql([{'username' => 'alice'}])
10
- expect(dataset.query_string('username:nisse').to_a).to eql([])
11
- end
12
- end
@@ -1,20 +0,0 @@
1
- RSpec.describe ROM::Elasticsearch::Dataset, '#search' do
2
- subject(:dataset) do
3
- ROM::Elasticsearch::Dataset.new(client, params: { index: :users, type: :user })
4
- end
5
-
6
- include_context 'setup'
7
-
8
- before do
9
- dataset.put(username: 'eve')
10
- dataset.put(username: 'bob')
11
- dataset.put(username: 'alice')
12
-
13
- dataset.refresh
14
- end
15
-
16
- it 'returns data matching query options' do
17
- expect(dataset.search(query: {query_string: {query: 'username:eve'}}).to_a).
18
- to eql([{'username' => 'eve'}])
19
- end
20
- end
@@ -1,10 +0,0 @@
1
- require 'rom/lint/spec'
2
-
3
- RSpec.describe ROM::Elasticsearch::Gateway do
4
- let(:uri) { 'http://localhost:9200/rom-test' }
5
-
6
- it_behaves_like 'a rom gateway' do
7
- let(:identifier) { :elasticsearch }
8
- let(:gateway) { ROM::Elasticsearch::Gateway }
9
- end
10
- end
@@ -1,34 +0,0 @@
1
- require 'rom/elasticsearch/plugins/relation/query_dsl'
2
- require 'rom/elasticsearch/relation'
3
-
4
- RSpec.describe ROM::Elasticsearch::Relation, '#search' do
5
- subject(:relation) { relations[:users] }
6
-
7
- include_context 'setup'
8
-
9
- before do
10
- conf.relation(:users) do
11
- schema do
12
- attribute :id, ROM::Types::Int.meta(type: "integer")
13
- attribute :name, ROM::Types::Int.meta(type: "text")
14
- end
15
-
16
- use :query_dsl
17
- end
18
-
19
- relation.command(:create).(id: 1, name: 'Jane')
20
- relation.command(:create).(id: 2, name: 'John')
21
-
22
- relation.refresh
23
- end
24
-
25
- it 'builds a query using a block-based DSL' do
26
- result = relation.search do
27
- query do
28
- match name: 'Jane'
29
- end
30
- end
31
-
32
- expect(result.to_a).to eql([{ id: 1, name: 'Jane' }])
33
- end
34
- end
@@ -1,22 +0,0 @@
1
- require 'rom/elasticsearch/relation'
2
-
3
- RSpec.describe ROM::Elasticsearch::Relation, '#call' do
4
- subject(:relation) { relations[:users] }
5
-
6
- include_context 'users'
7
-
8
- before do
9
- relation.command(:create).(id: 1, name: 'Jane')
10
- relation.command(:create).(id: 2, name: 'John')
11
-
12
- relation.refresh
13
- end
14
-
15
- it 'returns loaded relation' do
16
- result = relation.call
17
-
18
- expect(result).to match_array([{ id: 1, name: 'Jane' }, { id: 2, name: 'John' }])
19
-
20
- expect(result.total_hits).to be(2)
21
- end
22
- end
@@ -1,75 +0,0 @@
1
- require 'rom/elasticsearch/relation'
2
-
3
- RSpec.describe ROM::Elasticsearch::Relation, '#create_index' do
4
- subject(:relation) { relations[:users] }
5
-
6
- include_context 'setup'
7
-
8
- context 'when custom :index is configured' do
9
- after do
10
- relation.delete_index
11
- end
12
-
13
- context 'with default settings' do
14
- before do
15
- conf.relation(:users) do
16
- schema do
17
- attribute :id, ROM::Elasticsearch::Types::ID
18
- attribute :name, ROM::Types::String
19
- end
20
- end
21
- end
22
-
23
- it 'creates an index' do
24
- relation.create_index
25
-
26
- expect(gateway.index?(:users)).to be(true)
27
- end
28
- end
29
-
30
- context 'with customized settings' do
31
- before do
32
- conf.relation(:users) do
33
- schema do
34
- attribute :id, ROM::Types::Int
35
- attribute :name, ROM::Types::String
36
- end
37
-
38
- index_settings number_of_shards: 2
39
- end
40
- end
41
-
42
- it 'creates an index' do
43
- relation.create_index
44
-
45
- expect(gateway.index?(:users)).to be(true)
46
- expect(relation.dataset.settings['number_of_shards']).to eql("2")
47
- end
48
- end
49
-
50
- context 'with customized attribute mappings' do
51
- before do
52
- conf.relation(:users) do
53
- schema do
54
- attribute :id, ROM::Elasticsearch::Types::ID
55
- attribute :name, ROM::Elasticsearch::Types.Keyword
56
- attribute :desc, ROM::Elasticsearch::Types.Text(analyzer: "snowball")
57
- end
58
-
59
- index_settings number_of_shards: 2
60
- end
61
- end
62
-
63
- it 'creates an index' do
64
- relation.create_index
65
-
66
- expect(gateway.index?(:users)).to be(true)
67
-
68
- expect(relation.dataset.mappings).
69
- to eql("properties" => {
70
- "name" => { "type" => "keyword" },
71
- "desc" => { "type" => "text", "analyzer" => "snowball" }})
72
- end
73
- end
74
- end
75
- end
@@ -1,51 +0,0 @@
1
- require 'rom/elasticsearch/relation'
2
-
3
- RSpec.describe ROM::Elasticsearch::Relation, '#dataset' do
4
- subject(:relation) { relations[:users] }
5
-
6
- include_context 'setup'
7
-
8
- context 'with default index settings' do
9
- before do
10
- conf.relation(:users) do
11
- schema do
12
- attribute :id, ROM::Types::Int
13
- attribute :name, ROM::Types::String
14
- end
15
- end
16
- end
17
-
18
- it 'sets up correct index name' do
19
- expect(relation.dataset.index).to eql(:users)
20
- end
21
-
22
- it 'sets up default index type' do
23
- expect(relation.dataset.type).to eql(:user)
24
- end
25
- end
26
-
27
- context 'overridding default dataset object' do
28
- let(:users) { relations[:users] }
29
-
30
- before do
31
- conf.relation(:users) do
32
- dataset do
33
- with(include_metadata: true)
34
- end
35
-
36
- schema do
37
- attribute :id, ROM::Types::Int
38
- attribute :name, ROM::Types::String
39
- attribute :_metadata, ROM::Types::Hash.symbolized(_index: 'string')
40
- end
41
- end
42
-
43
- users.create_index
44
- users.command(:create).call(id: 1, name: 'Jane')
45
- end
46
-
47
- it 'uses customized dataset' do
48
- expect(relation.to_a).to eql([{ id: 1, name: 'Jane', _metadata: { _index: 'users' } }])
49
- end
50
- end
51
- end
@@ -1,32 +0,0 @@
1
- require 'rom/elasticsearch/relation'
2
-
3
- RSpec.describe ROM::Elasticsearch::Relation, '#delete' do
4
- subject(:relation) { relations[:users] }
5
-
6
- include_context 'users'
7
-
8
- before do
9
- relation.command(:create).(id: 1, name: 'Jane')
10
- relation.command(:create).(id: 2, name: 'John')
11
-
12
- relation.refresh
13
- end
14
-
15
- it 'deletes all data' do
16
- relation.delete
17
-
18
- expect(relation.refresh.to_a).to be_empty
19
- end
20
-
21
- it 'deletes all data from a relation restricted by id' do
22
- relation.get(2).delete
23
-
24
- expect(relation.refresh.to_a).to eql([{ id: 1, name: 'Jane' }])
25
- end
26
-
27
- it 'deletes all data from a relation restricted by a query' do
28
- relation.query(match: { name: 'Jane' }).delete
29
-
30
- expect(relation.refresh.to_a).to eql([{ id: 2, name: 'John' }])
31
- end
32
- end
@@ -1,22 +0,0 @@
1
- require 'rom/elasticsearch/relation'
2
-
3
- RSpec.describe ROM::Elasticsearch::Relation, '#get' do
4
- subject(:relation) { relations[:users] }
5
-
6
- include_context 'users'
7
-
8
- before do
9
- relation.command(:create).(id: 1, name: 'Jane')
10
- relation.command(:create).(id: 2, name: 'John')
11
-
12
- relation.refresh
13
- end
14
-
15
- it 'returns user tuple by its id' do
16
- expect(relation.get(1).one).to eql(id: 1, name: 'Jane')
17
- end
18
-
19
- it 'raises search error' do
20
- expect { relation.get(12421).one }.to raise_error(ROM::Elasticsearch::SearchError)
21
- end
22
- end
@@ -1,18 +0,0 @@
1
- require 'rom/elasticsearch/relation'
2
-
3
- RSpec.describe ROM::Elasticsearch::Relation, '#map' do
4
- subject(:relation) { relations[:users] }
5
-
6
- include_context 'users'
7
-
8
- before do
9
- relation.command(:create).(id: 1, name: 'Jane')
10
- relation.command(:create).(id: 2, name: 'John')
11
-
12
- relation.refresh
13
- end
14
-
15
- it 'yields result tuples' do
16
- expect(relation.map { |t| t[:name] }).to match_array(%w[Jane John])
17
- end
18
- end
@@ -1,40 +0,0 @@
1
- require 'rom/elasticsearch/relation'
2
-
3
- RSpec.describe ROM::Elasticsearch::Relation, '#order' do
4
- subject(:relation) { relations[:users] }
5
-
6
- include_context 'users'
7
-
8
- before do
9
- relation.command(:create).(id: 1, name: 'John')
10
- relation.command(:create).(id: 2, name: 'Jane')
11
- relation.command(:create).(id: 3, name: 'Jade')
12
- relation.command(:create).(id: 4, name: 'Joe')
13
-
14
- relation.refresh
15
- end
16
-
17
- it 'with ascending direction' do
18
- result = relation.order(:id).to_a
19
-
20
- expect(result).
21
- to eql([
22
- { id: 1, name: 'John' },
23
- { id: 2, name: 'Jane' },
24
- { id: 3, name: 'Jade' },
25
- { id: 4, name: 'Joe' }
26
- ])
27
- end
28
-
29
- it 'with descending direction' do
30
- result = relation.order(relation[:id].desc).to_a
31
-
32
- expect(result).
33
- to eql([
34
- { id: 4, name: 'Joe' },
35
- { id: 3, name: 'Jade' },
36
- { id: 2, name: 'Jane' },
37
- { id: 1, name: 'John' }
38
- ])
39
- end
40
- end
@@ -1,20 +0,0 @@
1
- require 'rom/elasticsearch/relation'
2
-
3
- RSpec.describe ROM::Elasticsearch::Relation, '#page' do
4
- subject(:relation) { relations[:users].order(:id) }
5
-
6
- include_context 'users'
7
-
8
- before do
9
- relation.command(:create).(id: 1, name: 'Jane')
10
- relation.command(:create).(id: 2, name: 'John')
11
-
12
- relation.refresh
13
- end
14
-
15
- it 'returns relation with page set' do
16
- result = relation.per_page(1).page(2).to_a
17
-
18
- expect(result).to match_array([{ id: 2, name: 'John' }])
19
- end
20
- end
@@ -1,18 +0,0 @@
1
- require 'rom/elasticsearch/relation'
2
-
3
- RSpec.describe ROM::Elasticsearch::Relation, '#pluck' do
4
- subject(:relation) { relations[:users] }
5
-
6
- include_context 'users'
7
-
8
- before do
9
- relation.command(:create).(id: 1, name: 'Jane')
10
- relation.command(:create).(id: 2, name: 'John')
11
-
12
- relation.refresh
13
- end
14
-
15
- it 'returns an array with plucked values' do
16
- expect(relation.pluck(:name)).to match_array(%w[Jane John])
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- require 'rom/elasticsearch/relation'
2
-
3
- RSpec.describe ROM::Elasticsearch::Relation, '#query' do
4
- subject(:relation) { relations[:users] }
5
-
6
- include_context 'users'
7
-
8
- before do
9
- relation.command(:create).(id: 1, name: 'Jane')
10
- relation.command(:create).(id: 2, name: 'John')
11
-
12
- relation.refresh
13
- end
14
-
15
- it 'returns data matching query options' do
16
- expect(relation.query(match: { name: 'Jane' }).one).to eql(id: 1, name: 'Jane')
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- require 'rom/elasticsearch/relation'
2
-
3
- RSpec.describe ROM::Elasticsearch::Relation, '#query_string' do
4
- subject(:relation) { relations[:users] }
5
-
6
- include_context 'users'
7
-
8
- before do
9
- relation.command(:create).(id: 1, name: 'Jane')
10
- relation.command(:create).(id: 2, name: 'John')
11
-
12
- relation.refresh
13
- end
14
-
15
- it 'returns data matching query string' do
16
- expect(relation.query_string('name:Jane').one).to eql(id: 1, name: 'Jane')
17
- end
18
- end