chewy 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +5 -13
  2. data/.travis.yml +3 -2
  3. data/CHANGELOG.md +28 -2
  4. data/README.md +156 -7
  5. data/filters +6 -4
  6. data/lib/chewy/index.rb +114 -18
  7. data/lib/chewy/index/actions.rb +117 -14
  8. data/lib/chewy/index/aliases.rb +21 -0
  9. data/lib/chewy/query.rb +5 -5
  10. data/lib/chewy/query/compose.rb +59 -0
  11. data/lib/chewy/query/criteria.rb +8 -55
  12. data/lib/chewy/query/{context.rb → filters.rb} +60 -7
  13. data/lib/chewy/query/loading.rb +1 -1
  14. data/lib/chewy/query/nodes/has_child.rb +14 -0
  15. data/lib/chewy/query/nodes/has_parent.rb +14 -0
  16. data/lib/chewy/query/nodes/has_relation.rb +61 -0
  17. data/lib/chewy/query/nodes/match_all.rb +11 -0
  18. data/lib/chewy/railtie.rb +2 -2
  19. data/lib/chewy/rspec/update_index.rb +1 -0
  20. data/lib/chewy/type.rb +1 -1
  21. data/lib/chewy/type/adapter/active_record.rb +28 -12
  22. data/lib/chewy/type/adapter/object.rb +12 -2
  23. data/lib/chewy/type/import.rb +60 -20
  24. data/lib/chewy/type/wrapper.rb +1 -1
  25. data/lib/chewy/version.rb +1 -1
  26. data/lib/tasks/chewy.rake +41 -8
  27. data/spec/chewy/index/actions_spec.rb +282 -2
  28. data/spec/chewy/index/aliases_spec.rb +50 -0
  29. data/spec/chewy/index_spec.rb +64 -0
  30. data/spec/chewy/query/criteria_spec.rb +11 -11
  31. data/spec/chewy/query/{context_spec.rb → filters_spec.rb} +2 -2
  32. data/spec/chewy/query/loading_spec.rb +5 -3
  33. data/spec/chewy/query/nodes/and_spec.rb +1 -1
  34. data/spec/chewy/query/nodes/bool_spec.rb +1 -1
  35. data/spec/chewy/query/nodes/equal_spec.rb +1 -1
  36. data/spec/chewy/query/nodes/exists_spec.rb +1 -1
  37. data/spec/chewy/query/nodes/has_child_spec.rb +40 -0
  38. data/spec/chewy/query/nodes/has_parent_spec.rb +40 -0
  39. data/spec/chewy/query/nodes/match_all_spec.rb +11 -0
  40. data/spec/chewy/query/nodes/missing_spec.rb +1 -1
  41. data/spec/chewy/query/nodes/not_spec.rb +1 -1
  42. data/spec/chewy/query/nodes/or_spec.rb +1 -1
  43. data/spec/chewy/query/nodes/prefix_spec.rb +1 -1
  44. data/spec/chewy/query/nodes/query_spec.rb +1 -1
  45. data/spec/chewy/query/nodes/range_spec.rb +1 -1
  46. data/spec/chewy/query/nodes/raw_spec.rb +1 -1
  47. data/spec/chewy/query/nodes/regexp_spec.rb +1 -1
  48. data/spec/chewy/query/nodes/script_spec.rb +1 -1
  49. data/spec/chewy/query/pagination_spec.rb +7 -7
  50. data/spec/chewy/query_spec.rb +60 -0
  51. data/spec/chewy/type/adapter/active_record_spec.rb +68 -9
  52. data/spec/chewy/type/adapter/object_spec.rb +18 -0
  53. data/spec/chewy/type/import_spec.rb +87 -2
  54. data/spec/spec_helper.rb +1 -0
  55. metadata +47 -33
@@ -164,4 +164,64 @@ describe Chewy::Query do
164
164
  specify { subject.filter { name == 'name' }.merge(query.filter { age == 42 }).criteria.filters
165
165
  .should == [{term: {'name' => 'name'}}, {term: {'age' => 42}}] }
166
166
  end
167
+
168
+ describe 'to_a' do
169
+ before { stub_model(:city) }
170
+ let(:cities) { 3.times.map { |i| City.create! name: "name#{i}", rating: i } }
171
+
172
+ context do
173
+ before do
174
+ stub_index(:cities) do
175
+ define_type :city do
176
+ field :name
177
+ field :rating, type: 'integer'
178
+ field :nested, type: 'object', value: ->{ {name: name} }
179
+ end
180
+ end.tap(&:create!)
181
+ end
182
+
183
+ before { CitiesIndex::City.import cities }
184
+
185
+ specify { CitiesIndex.order(:rating).first.should be_a CitiesIndex::City }
186
+ specify { CitiesIndex.order(:rating).first.name.should == 'name0' }
187
+ specify { CitiesIndex.order(:rating).first.rating.should == 0 }
188
+ specify { CitiesIndex.order(:rating).first.nested.should == {'name' => 'name0'} }
189
+ specify { CitiesIndex.order(:rating).first.id.should == cities.first.id.to_s }
190
+
191
+ specify { CitiesIndex.order(:rating).only(:name).first.name.should == 'name0' }
192
+ specify { CitiesIndex.order(:rating).only(:name).first.rating.should be_nil }
193
+ specify { CitiesIndex.order(:rating).only(:nested).first.nested.should == {'name' => 'name0'} }
194
+
195
+ specify { CitiesIndex.order(:rating).first._score.should be_nil }
196
+ specify { CitiesIndex.all.first._score.should be > 0 }
197
+ specify { CitiesIndex.query(match: {name: 'name0'}).first._score.should be > 0 }
198
+
199
+ specify { CitiesIndex.order(:rating).first._explanation.should be_nil }
200
+ specify { CitiesIndex.order(:rating).explain.first._explanation.should be_present }
201
+ end
202
+
203
+ context 'sourceless' do
204
+ before do
205
+ stub_index(:cities) do
206
+ define_type :city do
207
+ root _source: {enabled: false} do
208
+ field :name
209
+ field :rating, type: 'integer'
210
+ field :nested, type: 'object', value: ->{ {name: name} }
211
+ end
212
+ end
213
+ end.tap(&:create!)
214
+ end
215
+ before { CitiesIndex::City.import cities }
216
+
217
+ specify { CitiesIndex.order(:rating).first.should be_a CitiesIndex::City }
218
+ specify { CitiesIndex.order(:rating).first.name.should be_nil }
219
+ specify { CitiesIndex.order(:rating).first.rating.should be_nil }
220
+ specify { CitiesIndex.order(:rating).first.nested.should be_nil }
221
+
222
+ specify { CitiesIndex.order(:rating).only(:name).first.name.should be_nil }
223
+ specify { CitiesIndex.order(:rating).only(:name).first.rating.should be_nil }
224
+ specify { CitiesIndex.order(:rating).only(:nested).first.nested.should be_nil }
225
+ end
226
+ end
167
227
  end
@@ -22,9 +22,6 @@ describe Chewy::Type::Adapter::ActiveRecord do
22
22
  result
23
23
  end
24
24
 
25
- specify { subject.import(3.times.map { |i| City.create! }) { |data| true }.should be_true }
26
- specify { subject.import(3.times.map { |i| City.create! }) { |data| false }.should be_false }
27
-
28
25
  context do
29
26
  let!(:cities) { 3.times.map { |i| City.create! } }
30
27
  let!(:deleted) { 3.times.map { |i| City.create!.tap(&:destroy!) } }
@@ -83,20 +80,82 @@ describe Chewy::Type::Adapter::ActiveRecord do
83
80
  {delete: [cities.last.id] + deleted.first(1).map(&:id)},
84
81
  {delete: deleted.last(1).map(&:id)}] }
85
82
  end
83
+
84
+ context 'error handling' do
85
+ let!(:cities) { 3.times.map { |i| City.create! } }
86
+ let!(:deleted) { 2.times.map { |i| City.create!.tap(&:destroy!) } }
87
+ let(:ids) { (cities + deleted).map(&:id) }
88
+ subject { described_class.new(City) }
89
+
90
+ let(:data_comparer) do
91
+ ->(id, data) { object = (data[:index] || data[:delete]).first; (object.try(:id) || object) != id }
92
+ end
93
+
94
+ context 'implicit scope' do
95
+ specify { subject.import { |data| true }.should be_true }
96
+ specify { subject.import { |data| false }.should be_false }
97
+ specify { subject.import(batch_size: 1, &data_comparer.curry[cities[0].id]).should be_false }
98
+ specify { subject.import(batch_size: 1, &data_comparer.curry[cities[1].id]).should be_false }
99
+ specify { subject.import(batch_size: 1, &data_comparer.curry[cities[2].id]).should be_false }
100
+ specify { subject.import(batch_size: 1, &data_comparer.curry[deleted[0].id]).should be_true }
101
+ specify { subject.import(batch_size: 1, &data_comparer.curry[deleted[1].id]).should be_true }
102
+ end
103
+
104
+ context 'explicit scope' do
105
+ let(:scope) { City.where(id: ids) }
106
+
107
+ specify { subject.import(scope) { |data| true }.should be_true }
108
+ specify { subject.import(scope) { |data| false }.should be_false }
109
+ specify { subject.import(scope, batch_size: 1, &data_comparer.curry[cities[0].id]).should be_false }
110
+ specify { subject.import(scope, batch_size: 1, &data_comparer.curry[cities[1].id]).should be_false }
111
+ specify { subject.import(scope, batch_size: 1, &data_comparer.curry[cities[2].id]).should be_false }
112
+ specify { subject.import(scope, batch_size: 1, &data_comparer.curry[deleted[0].id]).should be_true }
113
+ specify { subject.import(scope, batch_size: 1, &data_comparer.curry[deleted[1].id]).should be_true }
114
+ end
115
+
116
+ context 'objects' do
117
+ specify { subject.import(cities + deleted) { |data| true }.should be_true }
118
+ specify { subject.import(cities + deleted) { |data| false }.should be_false }
119
+ specify { subject.import(cities + deleted, batch_size: 1, &data_comparer.curry[cities[0].id]).should be_false }
120
+ specify { subject.import(cities + deleted, batch_size: 1, &data_comparer.curry[cities[1].id]).should be_false }
121
+ specify { subject.import(cities + deleted, batch_size: 1, &data_comparer.curry[cities[2].id]).should be_false }
122
+ specify { subject.import(cities + deleted, batch_size: 1, &data_comparer.curry[deleted[0].id]).should be_false }
123
+ specify { subject.import(cities + deleted, batch_size: 1, &data_comparer.curry[deleted[1].id]).should be_false }
124
+ end
125
+
126
+ context 'ids' do
127
+ specify { subject.import(ids) { |data| true }.should be_true }
128
+ specify { subject.import(ids) { |data| false }.should be_false }
129
+ specify { subject.import(ids, batch_size: 1, &data_comparer.curry[cities[0].id]).should be_false }
130
+ specify { subject.import(ids, batch_size: 1, &data_comparer.curry[cities[1].id]).should be_false }
131
+ specify { subject.import(ids, batch_size: 1, &data_comparer.curry[cities[2].id]).should be_false }
132
+ specify { subject.import(ids, batch_size: 1, &data_comparer.curry[deleted[0].id]).should be_false }
133
+ specify { subject.import(ids, batch_size: 1, &data_comparer.curry[deleted[1].id]).should be_false }
134
+ end
135
+ end
86
136
  end
87
137
 
88
138
  describe '#load' do
89
139
  let!(:cities) { 3.times.map { |i| City.create!(country_id: i/2) } }
90
140
  let!(:deleted) { 2.times.map { |i| City.create!.tap(&:destroy!) } }
141
+
142
+ let(:type) { double(type_name: 'user') }
143
+
91
144
  subject { described_class.new(City) }
92
145
 
93
- specify { subject.load(cities.map { |c| double(id: c.id) }).should == cities }
94
- specify { subject.load(cities.map { |c| double(id: c.id) }.reverse).should == cities.reverse }
95
- specify { subject.load(deleted.map { |c| double(id: c.id) }).should == [nil, nil] }
96
- specify { subject.load((cities + deleted).map { |c| double(id: c.id) }).should == [*cities, nil, nil] }
97
- specify { subject.load(cities.map { |c| double(id: c.id) }, scope: ->(_) { where(country_id: 0) })
146
+ specify { subject.load(cities.map { |c| double(id: c.id) }, _type: type).should == cities }
147
+ specify { subject.load(cities.map { |c| double(id: c.id) }.reverse, _type: type).should == cities.reverse }
148
+ specify { subject.load(deleted.map { |c| double(id: c.id) }, _type: type).should == [nil, nil] }
149
+ specify { subject.load((cities + deleted).map { |c| double(id: c.id) }, _type: type).should == [*cities, nil, nil] }
150
+ specify { subject.load(cities.map { |c| double(id: c.id) }, _type: type, scope: ->{ where(country_id: 0) })
98
151
  .should == cities.first(2) + [nil] }
99
- specify { subject.load(cities.map { |c| double(id: c.id) }, scope: City.where(country_id: 1))
152
+ specify { subject.load(cities.map { |c| double(id: c.id) },
153
+ _type: type, scope: ->{ where(country_id: 0) }, user: {scope: ->{ where(country_id: 1)}})
100
154
  .should == [nil, nil] + cities.last(1) }
155
+ specify { subject.load(cities.map { |c| double(id: c.id) }, _type: type, scope: City.where(country_id: 1))
156
+ .should == [nil, nil] + cities.last(1) }
157
+ specify { subject.load(cities.map { |c| double(id: c.id) },
158
+ _type: type, scope: City.where(country_id: 1), user: {scope: ->{ where(country_id: 0)}})
159
+ .should == cities.first(2) + [nil] }
101
160
  end
102
161
  end
@@ -53,6 +53,24 @@ describe Chewy::Type::Adapter::Object do
53
53
  specify { import(products).should == [{index: products}] }
54
54
  specify { expect { import(products, non_product) {} }.to raise_error }
55
55
  end
56
+
57
+ context 'error handling' do
58
+ let(:products) { 3.times.map { |i| double.tap { |product| product.stub(rating: i.next) } } }
59
+ let(:deleted) { 2.times.map { |i| double(destroyed?: true, rating: i + 4) } }
60
+ subject { described_class.new('product') }
61
+
62
+ let(:data_comparer) do
63
+ ->(n, data) { (data[:index] || data[:delete]).first.rating != n }
64
+ end
65
+
66
+ specify { subject.import(products, deleted) { |data| true }.should be_true }
67
+ specify { subject.import(products, deleted) { |data| false }.should be_false }
68
+ specify { subject.import(products, deleted, batch_size: 1, &data_comparer.curry[1]).should be_false }
69
+ specify { subject.import(products, deleted, batch_size: 1, &data_comparer.curry[2]).should be_false }
70
+ specify { subject.import(products, deleted, batch_size: 1, &data_comparer.curry[3]).should be_false }
71
+ specify { subject.import(products, deleted, batch_size: 1, &data_comparer.curry[4]).should be_false }
72
+ specify { subject.import(products, deleted, batch_size: 1, &data_comparer.curry[5]).should be_false }
73
+ end
56
74
  end
57
75
 
58
76
  describe '#load' do
@@ -3,6 +3,8 @@ require 'spec_helper'
3
3
  describe Chewy::Type::Import do
4
4
  include ClassHelpers
5
5
 
6
+ before { Chewy.client.indices.delete }
7
+
6
8
  before do
7
9
  stub_model(:city)
8
10
  end
@@ -18,6 +20,10 @@ describe Chewy::Type::Import do
18
20
  let!(:dummy_cities) { 3.times.map { |i| City.create(name: "name#{i}") } }
19
21
  let(:city) { CitiesIndex::City }
20
22
 
23
+ describe '.bulk' do
24
+
25
+ end
26
+
21
27
  describe '.import' do
22
28
  specify { city.import.should be_true }
23
29
  specify { city.import([]).should be_true }
@@ -48,11 +54,11 @@ describe Chewy::Type::Import do
48
54
  specify do
49
55
  dummy_cities.first.destroy
50
56
  expect(CitiesIndex.client).to receive(:bulk).with(hash_including(
51
- body: [{delete: {_index: 'cities', _type: 'city', _id: dummy_cities.first.id}}]
57
+ body: [{delete: {_id: dummy_cities.first.id}}]
52
58
  ))
53
59
  dummy_cities.from(1).each.with_index do |c, i|
54
60
  expect(CitiesIndex.client).to receive(:bulk).with(hash_including(
55
- body: [{index: {_id: c.id, _index: 'cities', _type: 'city', data: {'name' => "name#{i+1}"}}}]
61
+ body: [{index: {_id: c.id, data: {'name' => "name#{i+1}"}}}]
56
62
  ))
57
63
  end
58
64
  city.import dummy_cities.map(&:id), batch_size: 1
@@ -92,6 +98,85 @@ describe Chewy::Type::Import do
92
98
  city.import dummy_cities
93
99
  outer_payload.should == {type: CitiesIndex::City, import: {delete: 1, index: 2}}
94
100
  end
101
+
102
+ specify do
103
+ outer_payload = nil
104
+ ActiveSupport::Notifications.subscribe('import_objects.chewy') do |name, start, finish, id, payload|
105
+ outer_payload = payload
106
+ end
107
+
108
+ dummy_cities.first.destroy
109
+ city.import dummy_cities, batch_size: 1
110
+ outer_payload.should == {type: CitiesIndex::City, import: {delete: 1, index: 2}}
111
+ end
112
+
113
+ specify do
114
+ outer_payload = nil
115
+ ActiveSupport::Notifications.subscribe('import_objects.chewy') do |name, start, finish, id, payload|
116
+ outer_payload = payload
117
+ end
118
+
119
+ city.import dummy_cities, batch_size: 1
120
+ outer_payload.should == {type: CitiesIndex::City, import: {index: 3}}
121
+ end
122
+
123
+ context do
124
+ before do
125
+ stub_index(:cities) do
126
+ define_type City do
127
+ field :name, type: 'object'
128
+ end
129
+ end.tap(&:create!)
130
+ end
131
+
132
+ specify do
133
+ outer_payload = nil
134
+ ActiveSupport::Notifications.subscribe('import_objects.chewy') do |name, start, finish, id, payload|
135
+ outer_payload = payload
136
+ end
137
+
138
+ city.import dummy_cities, batch_size: 1
139
+ outer_payload.should == {
140
+ type: CitiesIndex::City,
141
+ errors: {
142
+ index: {
143
+ 'MapperParsingException[object mapping for [city] tried to parse as object, but got EOF, has a concrete value been provided to it?]' => ['1', '2', '3']
144
+ }
145
+ },
146
+ import: {index: 3}
147
+ }
148
+ end
149
+ end
150
+ end
151
+
152
+ context 'error handling' do
153
+ context do
154
+ before do
155
+ stub_index(:cities) do
156
+ define_type City do
157
+ field :name, type: 'object'
158
+ end
159
+ end.tap(&:create!)
160
+ end
161
+
162
+ specify { city.import(dummy_cities).should be_false }
163
+ specify { city.import(dummy_cities.map(&:id)).should be_false }
164
+ specify { city.import(dummy_cities, batch_size: 1).should be_false }
165
+ end
166
+
167
+ context do
168
+ before do
169
+ stub_index(:cities) do
170
+ define_type City do
171
+ field :name, type: 'object', value: ->{ name == 'name1' ? name : {name: name} }
172
+ end
173
+ end.tap(&:create!)
174
+ end
175
+
176
+ specify { city.import(dummy_cities).should be_false }
177
+ specify { city.import(dummy_cities.map(&:id)).should be_false }
178
+ specify { city.import(dummy_cities, batch_size: 1).should be_false }
179
+ end
95
180
  end
96
181
  end
97
182
  end
data/spec/spec_helper.rb CHANGED
@@ -10,6 +10,7 @@ require 'support/class_helpers'
10
10
  require 'chewy/rspec'
11
11
 
12
12
  ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
13
+ ActiveRecord::Base.logger = Logger.new('/dev/null')
13
14
 
14
15
  Kaminari::Hooks.init
15
16
 
metadata CHANGED
@@ -1,37 +1,37 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chewy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - pyromaniac
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-23 00:00:00.000000000 Z
11
+ date: 2014-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
- type: :development
16
15
  requirement: !ruby/object:Gem::Requirement
17
16
  requirements:
18
- - - ! '>='
17
+ - - '>='
19
18
  - !ruby/object:Gem::Version
20
19
  version: '0'
20
+ type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
- type: :development
30
29
  requirement: !ruby/object:Gem::Requirement
31
30
  requirements:
32
31
  - - ~>
33
32
  - !ruby/object:Gem::Version
34
33
  version: '2.14'
34
+ type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
@@ -40,100 +40,100 @@ dependencies:
40
40
  version: '2.14'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: sqlite3
43
- type: :development
44
43
  requirement: !ruby/object:Gem::Requirement
45
44
  requirements:
46
- - - ! '>='
45
+ - - '>='
47
46
  - !ruby/object:Gem::Version
48
47
  version: '0'
48
+ type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: kaminari
57
- type: :development
58
57
  requirement: !ruby/object:Gem::Requirement
59
58
  requirements:
60
- - - ! '>='
59
+ - - '>='
61
60
  - !ruby/object:Gem::Version
62
61
  version: '0'
62
+ type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ! '>='
66
+ - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: activerecord
71
- type: :development
72
71
  requirement: !ruby/object:Gem::Requirement
73
72
  requirements:
74
- - - ! '>='
73
+ - - '>='
75
74
  - !ruby/object:Gem::Version
76
75
  version: '3.2'
76
+ type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ! '>='
80
+ - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '3.2'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: database_cleaner
85
- type: :development
86
85
  requirement: !ruby/object:Gem::Requirement
87
86
  requirements:
88
- - - ! '>='
87
+ - - '>='
89
88
  - !ruby/object:Gem::Version
90
89
  version: '0'
90
+ type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ! '>='
94
+ - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: elasticsearch-extensions
99
- type: :development
100
99
  requirement: !ruby/object:Gem::Requirement
101
100
  requirements:
102
- - - ! '>='
101
+ - - '>='
103
102
  - !ruby/object:Gem::Version
104
103
  version: '0'
104
+ type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ! '>='
108
+ - - '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: activesupport
113
- type: :runtime
114
113
  requirement: !ruby/object:Gem::Requirement
115
114
  requirements:
116
- - - ! '>='
115
+ - - '>='
117
116
  - !ruby/object:Gem::Version
118
117
  version: '3.2'
118
+ type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ! '>='
122
+ - - '>='
123
123
  - !ruby/object:Gem::Version
124
124
  version: '3.2'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: elasticsearch
127
- type: :runtime
128
127
  requirement: !ruby/object:Gem::Requirement
129
128
  requirements:
130
- - - ! '>='
129
+ - - '>='
131
130
  - !ruby/object:Gem::Version
132
131
  version: '0'
132
+ type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ! '>='
136
+ - - '>='
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  description: Chewy provides functionality for Elasticsearch index handling, documents
@@ -162,10 +162,12 @@ files:
162
162
  - lib/chewy/fields/root.rb
163
163
  - lib/chewy/index.rb
164
164
  - lib/chewy/index/actions.rb
165
+ - lib/chewy/index/aliases.rb
165
166
  - lib/chewy/index/search.rb
166
167
  - lib/chewy/query.rb
167
- - lib/chewy/query/context.rb
168
+ - lib/chewy/query/compose.rb
168
169
  - lib/chewy/query/criteria.rb
170
+ - lib/chewy/query/filters.rb
169
171
  - lib/chewy/query/loading.rb
170
172
  - lib/chewy/query/nodes/and.rb
171
173
  - lib/chewy/query/nodes/base.rb
@@ -174,6 +176,10 @@ files:
174
176
  - lib/chewy/query/nodes/exists.rb
175
177
  - lib/chewy/query/nodes/expr.rb
176
178
  - lib/chewy/query/nodes/field.rb
179
+ - lib/chewy/query/nodes/has_child.rb
180
+ - lib/chewy/query/nodes/has_parent.rb
181
+ - lib/chewy/query/nodes/has_relation.rb
182
+ - lib/chewy/query/nodes/match_all.rb
177
183
  - lib/chewy/query/nodes/missing.rb
178
184
  - lib/chewy/query/nodes/not.rb
179
185
  - lib/chewy/query/nodes/or.rb
@@ -203,15 +209,19 @@ files:
203
209
  - spec/chewy/fields/default_spec.rb
204
210
  - spec/chewy/fields/root_spec.rb
205
211
  - spec/chewy/index/actions_spec.rb
212
+ - spec/chewy/index/aliases_spec.rb
206
213
  - spec/chewy/index/search_spec.rb
207
214
  - spec/chewy/index_spec.rb
208
- - spec/chewy/query/context_spec.rb
209
215
  - spec/chewy/query/criteria_spec.rb
216
+ - spec/chewy/query/filters_spec.rb
210
217
  - spec/chewy/query/loading_spec.rb
211
218
  - spec/chewy/query/nodes/and_spec.rb
212
219
  - spec/chewy/query/nodes/bool_spec.rb
213
220
  - spec/chewy/query/nodes/equal_spec.rb
214
221
  - spec/chewy/query/nodes/exists_spec.rb
222
+ - spec/chewy/query/nodes/has_child_spec.rb
223
+ - spec/chewy/query/nodes/has_parent_spec.rb
224
+ - spec/chewy/query/nodes/match_all_spec.rb
215
225
  - spec/chewy/query/nodes/missing_spec.rb
216
226
  - spec/chewy/query/nodes/not_spec.rb
217
227
  - spec/chewy/query/nodes/or_spec.rb
@@ -245,17 +255,17 @@ require_paths:
245
255
  - lib
246
256
  required_ruby_version: !ruby/object:Gem::Requirement
247
257
  requirements:
248
- - - ! '>='
258
+ - - '>='
249
259
  - !ruby/object:Gem::Version
250
260
  version: '0'
251
261
  required_rubygems_version: !ruby/object:Gem::Requirement
252
262
  requirements:
253
- - - ! '>='
263
+ - - '>='
254
264
  - !ruby/object:Gem::Version
255
265
  version: '0'
256
266
  requirements: []
257
267
  rubyforge_project:
258
- rubygems_version: 2.1.10
268
+ rubygems_version: 2.2.1
259
269
  signing_key:
260
270
  specification_version: 4
261
271
  summary: Elasticsearch ODM client wrapper
@@ -265,15 +275,19 @@ test_files:
265
275
  - spec/chewy/fields/default_spec.rb
266
276
  - spec/chewy/fields/root_spec.rb
267
277
  - spec/chewy/index/actions_spec.rb
278
+ - spec/chewy/index/aliases_spec.rb
268
279
  - spec/chewy/index/search_spec.rb
269
280
  - spec/chewy/index_spec.rb
270
- - spec/chewy/query/context_spec.rb
271
281
  - spec/chewy/query/criteria_spec.rb
282
+ - spec/chewy/query/filters_spec.rb
272
283
  - spec/chewy/query/loading_spec.rb
273
284
  - spec/chewy/query/nodes/and_spec.rb
274
285
  - spec/chewy/query/nodes/bool_spec.rb
275
286
  - spec/chewy/query/nodes/equal_spec.rb
276
287
  - spec/chewy/query/nodes/exists_spec.rb
288
+ - spec/chewy/query/nodes/has_child_spec.rb
289
+ - spec/chewy/query/nodes/has_parent_spec.rb
290
+ - spec/chewy/query/nodes/match_all_spec.rb
277
291
  - spec/chewy/query/nodes/missing_spec.rb
278
292
  - spec/chewy/query/nodes/not_spec.rb
279
293
  - spec/chewy/query/nodes/or_spec.rb