chewy 0.5.2 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +26 -4
- data/CHANGELOG.md +16 -0
- data/Gemfile +3 -1
- data/README.md +2 -10
- data/chewy.gemspec +0 -1
- data/gemfiles/Gemfile.rails-3.2.active_record +6 -0
- data/gemfiles/Gemfile.rails-3.2.active_record.kaminari +7 -0
- data/gemfiles/Gemfile.rails-3.2.active_record.will_paginate +7 -0
- data/gemfiles/Gemfile.rails-4.0.active_record +6 -0
- data/gemfiles/Gemfile.rails-4.0.active_record.kaminari +7 -0
- data/gemfiles/Gemfile.rails-4.0.active_record.will_paginate +7 -0
- data/gemfiles/Gemfile.rails-4.0.mongoid +6 -0
- data/gemfiles/Gemfile.rails-4.0.mongoid.kaminari +7 -0
- data/gemfiles/Gemfile.rails-4.0.mongoid.will_paginate +7 -0
- data/gemfiles/Gemfile.rails-4.1.active_record +6 -0
- data/gemfiles/Gemfile.rails-4.1.active_record.kaminari +7 -0
- data/gemfiles/Gemfile.rails-4.1.active_record.will_paginate +7 -0
- data/gemfiles/Gemfile.rails-4.1.mongoid +6 -0
- data/gemfiles/Gemfile.rails-4.1.mongoid.kaminari +7 -0
- data/gemfiles/Gemfile.rails-4.1.mongoid.will_paginate +7 -0
- data/gemfiles/Gemfile.rails-4.2.active_record +6 -0
- data/gemfiles/Gemfile.rails-4.2.active_record.kaminari +7 -0
- data/gemfiles/Gemfile.rails-4.2.active_record.will_paginate +7 -0
- data/gemfiles/Gemfile.rails-4.2.mongoid +6 -0
- data/gemfiles/Gemfile.rails-4.2.mongoid.kaminari +7 -0
- data/gemfiles/Gemfile.rails-4.2.mongoid.will_paginate +7 -0
- data/lib/chewy.rb +33 -5
- data/lib/chewy/config.rb +1 -0
- data/lib/chewy/index/search.rb +6 -3
- data/lib/chewy/query.rb +74 -1
- data/lib/chewy/query/compose.rb +4 -4
- data/lib/chewy/query/pagination.rb +5 -4
- data/lib/chewy/query/pagination/kaminari.rb +1 -1
- data/lib/chewy/query/pagination/will_paginate.rb +27 -0
- data/lib/chewy/type.rb +1 -0
- data/lib/chewy/type/adapter/active_record.rb +2 -2
- data/lib/chewy/type/adapter/mongoid.rb +147 -0
- data/lib/chewy/type/adapter/object.rb +1 -1
- data/lib/chewy/type/import.rb +1 -0
- data/lib/chewy/type/observe.rb +34 -6
- data/lib/chewy/version.rb +1 -1
- data/spec/chewy/config_spec.rb +17 -17
- data/spec/chewy/fields/base_spec.rb +62 -62
- data/spec/chewy/fields/root_spec.rb +5 -5
- data/spec/chewy/index/actions_spec.rb +127 -127
- data/spec/chewy/index/aliases_spec.rb +9 -9
- data/spec/chewy/index/search_spec.rb +4 -4
- data/spec/chewy/index/settings_spec.rb +33 -33
- data/spec/chewy/index_spec.rb +49 -49
- data/spec/chewy/query/criteria_spec.rb +173 -161
- data/spec/chewy/query/filters_spec.rb +76 -76
- data/spec/chewy/query/loading_spec.rb +54 -23
- data/spec/chewy/query/nodes/and_spec.rb +4 -4
- data/spec/chewy/query/nodes/bool_spec.rb +8 -8
- data/spec/chewy/query/nodes/equal_spec.rb +19 -19
- data/spec/chewy/query/nodes/exists_spec.rb +6 -6
- data/spec/chewy/query/nodes/has_child_spec.rb +25 -25
- data/spec/chewy/query/nodes/has_parent_spec.rb +25 -25
- data/spec/chewy/query/nodes/match_all_spec.rb +1 -1
- data/spec/chewy/query/nodes/missing_spec.rb +4 -4
- data/spec/chewy/query/nodes/not_spec.rb +4 -4
- data/spec/chewy/query/nodes/or_spec.rb +4 -4
- data/spec/chewy/query/nodes/prefix_spec.rb +5 -5
- data/spec/chewy/query/nodes/query_spec.rb +2 -2
- data/spec/chewy/query/nodes/range_spec.rb +18 -18
- data/spec/chewy/query/nodes/raw_spec.rb +1 -1
- data/spec/chewy/query/nodes/regexp_spec.rb +18 -18
- data/spec/chewy/query/nodes/script_spec.rb +4 -4
- data/spec/chewy/query/pagination/kaminari_spec.rb +41 -39
- data/spec/chewy/query/pagination/will_paginage_spec.rb +60 -0
- data/spec/chewy/query/pagination_spec.rb +8 -7
- data/spec/chewy/query_spec.rb +166 -167
- data/spec/chewy/rspec/update_index_spec.rb +1 -1
- data/spec/chewy/runtime/version_spec.rb +30 -30
- data/spec/chewy/runtime_spec.rb +3 -3
- data/spec/chewy/type/actions_spec.rb +3 -3
- data/spec/chewy/type/adapter/active_record_spec.rb +143 -143
- data/spec/chewy/type/adapter/mongoid_spec.rb +219 -0
- data/spec/chewy/type/adapter/object_spec.rb +39 -39
- data/spec/chewy/type/import_spec.rb +67 -37
- data/spec/chewy/type/mapping_spec.rb +12 -12
- data/spec/chewy/type/observe_spec.rb +5 -6
- data/spec/chewy/type/wrapper_spec.rb +12 -12
- data/spec/chewy_spec.rb +26 -28
- data/spec/spec_helper.rb +19 -31
- data/spec/support/active_record.rb +52 -0
- data/spec/support/class_helpers.rb +0 -4
- data/spec/support/mongoid.rb +87 -0
- metadata +33 -18
- data/gemfiles/Gemfile.rails-3.2 +0 -15
- data/gemfiles/Gemfile.rails-4.0 +0 -15
@@ -21,31 +21,31 @@ describe Chewy::Query::Filters do
|
|
21
21
|
|
22
22
|
context 'outer scope' do
|
23
23
|
let(:email) { 'email' }
|
24
|
-
specify { query { email }.
|
25
|
-
specify { query { o{email} }.
|
24
|
+
specify { expect(query { email }).to be_eql Field(:email) }
|
25
|
+
specify { expect(query { o{email} }).to eq('email') }
|
26
26
|
end
|
27
27
|
|
28
28
|
context 'field' do
|
29
29
|
let(:email) { 'email' }
|
30
|
-
specify { query { f(:email) }.
|
31
|
-
specify { query { f{ :email } }.
|
32
|
-
specify { query { f{ email } }.
|
33
|
-
specify { query { email }.
|
34
|
-
specify { query { emails.first }.
|
35
|
-
specify { query { emails.first.second }.
|
30
|
+
specify { expect(query { f(:email) }).to be_eql Field(:email) }
|
31
|
+
specify { expect(query { f{ :email } }).to be_eql Field(:email) }
|
32
|
+
specify { expect(query { f{ email } }).to be_eql Field(:email) }
|
33
|
+
specify { expect(query { email }).to be_eql Field(:email) }
|
34
|
+
specify { expect(query { emails.first }).to be_eql Field('emails.first') }
|
35
|
+
specify { expect(query { emails.first.second }).to be_eql Field('emails.first.second') }
|
36
36
|
end
|
37
37
|
|
38
38
|
context 'term' do
|
39
|
-
specify { query { email == 'email' }.
|
40
|
-
specify { query { name != 'name' }.
|
41
|
-
specify { query { email == ['email1', 'email2'] }.
|
42
|
-
specify { query { email != ['email1', 'email2'] }.
|
43
|
-
specify { query { email(execution: :bool) == ['email1', 'email2'] }
|
44
|
-
.
|
45
|
-
specify { query { email(:bool) == ['email1', 'email2'] }
|
46
|
-
.
|
47
|
-
specify { query { email(:b) == ['email1', 'email2'] }
|
48
|
-
.
|
39
|
+
specify { expect(query { email == 'email' }).to be_eql Equal(:email, 'email') }
|
40
|
+
specify { expect(query { name != 'name' }).to be_eql Not(Equal(:name, 'name')) }
|
41
|
+
specify { expect(query { email == ['email1', 'email2'] }).to be_eql Equal(:email, ['email1', 'email2']) }
|
42
|
+
specify { expect(query { email != ['email1', 'email2'] }).to be_eql Not(Equal(:email, ['email1', 'email2'])) }
|
43
|
+
specify { expect(query { email(execution: :bool) == ['email1', 'email2'] })
|
44
|
+
.to be_eql Equal(:email, ['email1', 'email2'], execution: :bool) }
|
45
|
+
specify { expect(query { email(:bool) == ['email1', 'email2'] })
|
46
|
+
.to be_eql Equal(:email, ['email1', 'email2'], execution: :bool) }
|
47
|
+
specify { expect(query { email(:b) == ['email1', 'email2'] })
|
48
|
+
.to be_eql Equal(:email, ['email1', 'email2'], execution: :bool) }
|
49
49
|
end
|
50
50
|
|
51
51
|
context 'bool' do
|
@@ -63,111 +63,111 @@ describe Chewy::Query::Filters do
|
|
63
63
|
end
|
64
64
|
|
65
65
|
context 'exists' do
|
66
|
-
specify { query { email? }.
|
67
|
-
specify { query { !!email? }.
|
68
|
-
specify { query { emails.first? }.
|
69
|
-
specify { query { !!emails.first? }.
|
70
|
-
specify { query { emails != nil }.
|
71
|
-
specify { query { !(emails == nil) }.
|
66
|
+
specify { expect(query { email? }).to be_eql Exists(:email) }
|
67
|
+
specify { expect(query { !!email? }).to be_eql Exists(:email) }
|
68
|
+
specify { expect(query { emails.first? }).to be_eql Exists('emails.first') }
|
69
|
+
specify { expect(query { !!emails.first? }).to be_eql Exists('emails.first') }
|
70
|
+
specify { expect(query { emails != nil }).to be_eql Exists('emails') }
|
71
|
+
specify { expect(query { !(emails == nil) }).to be_eql Exists('emails') }
|
72
72
|
end
|
73
73
|
|
74
74
|
context 'missing' do
|
75
|
-
specify { query { !email }.
|
76
|
-
specify { query { !email? }.
|
77
|
-
specify { query { !emails.first }.
|
78
|
-
specify { query { !emails.first? }.
|
79
|
-
specify { query { emails == nil }.
|
80
|
-
specify { query { emails.first == nil }.
|
75
|
+
specify { expect(query { !email }).to be_eql Missing(:email) }
|
76
|
+
specify { expect(query { !email? }).to be_eql Missing(:email, null_value: true) }
|
77
|
+
specify { expect(query { !emails.first }).to be_eql Missing('emails.first') }
|
78
|
+
specify { expect(query { !emails.first? }).to be_eql Missing('emails.first', null_value: true) }
|
79
|
+
specify { expect(query { emails == nil }).to be_eql Missing('emails', existence: false, null_value: true) }
|
80
|
+
specify { expect(query { emails.first == nil }).to be_eql Missing('emails.first', existence: false, null_value: true) }
|
81
81
|
end
|
82
82
|
|
83
83
|
context 'range' do
|
84
|
-
specify { query { age > 42 }.
|
85
|
-
specify { query { age >= 42 }.
|
86
|
-
specify { query { age < 42 }.
|
87
|
-
specify { query { age <= 42 }.
|
84
|
+
specify { expect(query { age > 42 }).to be_eql Range(:age, gt: 42) }
|
85
|
+
specify { expect(query { age >= 42 }).to be_eql Range(:age, gt: 42, left_closed: true) }
|
86
|
+
specify { expect(query { age < 42 }).to be_eql Range(:age, lt: 42) }
|
87
|
+
specify { expect(query { age <= 42 }).to be_eql Range(:age, lt: 42, right_closed: true) }
|
88
88
|
|
89
|
-
specify { query { age == (30..42) }.
|
90
|
-
specify { query { age == [30..42] }.
|
91
|
-
specify { query { (age > 30) & (age < 42) }.
|
92
|
-
specify { query { (age > 30) & (age <= 42) }.
|
93
|
-
specify { query { (age >= 30) & (age < 42) }.
|
94
|
-
specify { query { (age >= 30) & (age <= 42) }.
|
95
|
-
specify { query { (age > 30) | (age < 42) }.
|
89
|
+
specify { expect(query { age == (30..42) }).to be_eql Range(:age, gt: 30, lt: 42) }
|
90
|
+
specify { expect(query { age == [30..42] }).to be_eql Range(:age, gt: 30, lt: 42, left_closed: true, right_closed: true) }
|
91
|
+
specify { expect(query { (age > 30) & (age < 42) }).to be_eql Range(:age, gt: 30, lt: 42) }
|
92
|
+
specify { expect(query { (age > 30) & (age <= 42) }).to be_eql Range(:age, gt: 30, lt: 42, right_closed: true) }
|
93
|
+
specify { expect(query { (age >= 30) & (age < 42) }).to be_eql Range(:age, gt: 30, lt: 42, left_closed: true) }
|
94
|
+
specify { expect(query { (age >= 30) & (age <= 42) }).to be_eql Range(:age, gt: 30, lt: 42, right_closed: true, left_closed: true) }
|
95
|
+
specify { expect(query { (age > 30) | (age < 42) }).to be_eql Or(Range(:age, gt: 30), Range(:age, lt: 42)) }
|
96
96
|
end
|
97
97
|
|
98
98
|
context 'prefix' do
|
99
|
-
specify { query { name =~ 'nam' }.
|
100
|
-
specify { query { name !~ 'nam' }.
|
99
|
+
specify { expect(query { name =~ 'nam' }).to be_eql Prefix(:name, 'nam') }
|
100
|
+
specify { expect(query { name !~ 'nam' }).to be_eql Not(Prefix(:name, 'nam')) }
|
101
101
|
end
|
102
102
|
|
103
103
|
context 'regexp' do
|
104
|
-
specify { query { name =~ /name/ }.
|
105
|
-
specify { query { name == /name/ }.
|
106
|
-
specify { query { name !~ /name/ }.
|
107
|
-
specify { query { name != /name/ }.
|
108
|
-
specify { query { name(:anystring, :intersection) =~ /name/ }.
|
104
|
+
specify { expect(query { name =~ /name/ }).to be_eql Regexp(:name, 'name') }
|
105
|
+
specify { expect(query { name == /name/ }).to be_eql Regexp(:name, 'name') }
|
106
|
+
specify { expect(query { name !~ /name/ }).to be_eql Not(Regexp(:name, 'name')) }
|
107
|
+
specify { expect(query { name != /name/ }).to be_eql Not(Regexp(:name, 'name')) }
|
108
|
+
specify { expect(query { name(:anystring, :intersection) =~ /name/ }).to be_eql Regexp(:name, 'name', flags: %w(anystring intersection)) }
|
109
109
|
end
|
110
110
|
|
111
111
|
context 'query' do
|
112
112
|
let(:some_query) { 'some query' }
|
113
|
-
specify { query { q('some query') }.
|
114
|
-
specify { query { q{'some query'} }.
|
115
|
-
specify { query { q{ some_query } }.
|
113
|
+
specify { expect(query { q('some query') }).to be_eql Query('some query') }
|
114
|
+
specify { expect(query { q{'some query'} }).to be_eql Query('some query') }
|
115
|
+
specify { expect(query { q{ some_query } }).to be_eql Query('some query') }
|
116
116
|
end
|
117
117
|
|
118
118
|
context 'raw' do
|
119
119
|
let(:raw_query) { {term: {name: 'name'}} }
|
120
|
-
specify { query { r(term: {name: 'name'}) }.
|
121
|
-
specify { query { r{ {term: {name: 'name'}} } }.
|
122
|
-
specify { query { r{ raw_query } }.
|
120
|
+
specify { expect(query { r(term: {name: 'name'}) }).to be_eql Raw(term: {name: 'name'}) }
|
121
|
+
specify { expect(query { r{ {term: {name: 'name'}} } }).to be_eql Raw(term: {name: 'name'}) }
|
122
|
+
specify { expect(query { r{ raw_query } }).to be_eql Raw(term: {name: 'name'}) }
|
123
123
|
end
|
124
124
|
|
125
125
|
context 'script' do
|
126
126
|
let(:some_script) { 'some script' }
|
127
|
-
specify { query { s('some script') }.
|
128
|
-
specify { query { s('some script', param1: 42) }.
|
129
|
-
specify { query { s{'some script'} }.
|
130
|
-
specify { query { s(param1: 42) { some_script } }.
|
127
|
+
specify { expect(query { s('some script') }).to be_eql Script('some script') }
|
128
|
+
specify { expect(query { s('some script', param1: 42) }).to be_eql Script('some script', param1: 42) }
|
129
|
+
specify { expect(query { s{'some script'} }).to be_eql Script('some script') }
|
130
|
+
specify { expect(query { s(param1: 42) { some_script } }).to be_eql Script('some script', param1: 42) }
|
131
131
|
end
|
132
132
|
|
133
133
|
context 'and or not' do
|
134
|
-
specify { query { (email == 'email') & (name == 'name') }
|
135
|
-
.
|
136
|
-
specify { query { (email == 'email') | (name == 'name') }
|
137
|
-
.
|
138
|
-
specify { query { !(email == 'email') }.
|
139
|
-
|
140
|
-
specify { query { (email == 'email') & (name == 'name') | (address != 'address') }
|
141
|
-
.
|
134
|
+
specify { expect(query { (email == 'email') & (name == 'name') })
|
135
|
+
.to be_eql And(Equal(:email, 'email'), Equal(:name, 'name')) }
|
136
|
+
specify { expect(query { (email == 'email') | (name == 'name') })
|
137
|
+
.to be_eql Or(Equal(:email, 'email'), Equal(:name, 'name')) }
|
138
|
+
specify { expect(query { !(email == 'email') }).to be_eql Not(Equal(:email, 'email')) }
|
139
|
+
|
140
|
+
specify { expect(query { (email == 'email') & (name == 'name') | (address != 'address') })
|
141
|
+
.to be_eql Or(
|
142
142
|
And(
|
143
143
|
Equal(:email, 'email'),
|
144
144
|
Equal(:name, 'name')
|
145
145
|
),
|
146
146
|
Not(Equal(:address, 'address'))
|
147
147
|
) }
|
148
|
-
specify { query { (email == 'email') & ((name == 'name') | (address != 'address')) }
|
149
|
-
.
|
148
|
+
specify { expect(query { (email == 'email') & ((name == 'name') | (address != 'address')) })
|
149
|
+
.to be_eql And(
|
150
150
|
Equal(:email, 'email'),
|
151
151
|
Or(
|
152
152
|
Equal(:name, 'name'),
|
153
153
|
Not(Equal(:address, 'address')),
|
154
154
|
)
|
155
155
|
) }
|
156
|
-
specify { query { (email == 'email') & ((name == 'name') & (address != 'address')) }
|
157
|
-
.
|
156
|
+
specify { expect(query { (email == 'email') & ((name == 'name') & (address != 'address')) })
|
157
|
+
.to be_eql And(
|
158
158
|
Equal(:email, 'email'),
|
159
159
|
Equal(:name, 'name'),
|
160
160
|
Not(Equal(:address, 'address')),
|
161
161
|
) }
|
162
|
-
specify { query { ((email == 'email') | (name == 'name')) | (address != 'address') }
|
163
|
-
.
|
162
|
+
specify { expect(query { ((email == 'email') | (name == 'name')) | (address != 'address') })
|
163
|
+
.to be_eql Or(
|
164
164
|
Equal(:email, 'email'),
|
165
165
|
Equal(:name, 'name'),
|
166
166
|
Not(Equal(:address, 'address')),
|
167
167
|
) }
|
168
|
-
specify { query { !((email == 'email') | (name == 'name')) }
|
169
|
-
.
|
170
|
-
specify { query { !!((email == 'email') | (name == 'name')) }
|
171
|
-
.
|
168
|
+
specify { expect(query { !((email == 'email') | (name == 'name')) })
|
169
|
+
.to be_eql Not(Or(Equal(:email, 'email'), Equal(:name, 'name'))) }
|
170
|
+
specify { expect(query { !!((email == 'email') | (name == 'name')) })
|
171
|
+
.to be_eql Or(Equal(:email, 'email'), Equal(:name, 'name')) }
|
172
172
|
end
|
173
173
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Chewy::Query::Loading do
|
4
|
-
before { Chewy.
|
3
|
+
describe Chewy::Query::Loading, :orm do
|
4
|
+
before { Chewy.massacre }
|
5
5
|
|
6
6
|
before do
|
7
7
|
stub_model(:city)
|
@@ -17,6 +17,7 @@ describe Chewy::Query::Loading do
|
|
17
17
|
define_type City do
|
18
18
|
field :rating, type: 'integer', value: ->(o){ o.rating }
|
19
19
|
end
|
20
|
+
|
20
21
|
define_type Country do
|
21
22
|
field :rating, type: 'integer', value: ->(o){ o.rating }
|
22
23
|
end
|
@@ -26,30 +27,60 @@ describe Chewy::Query::Loading do
|
|
26
27
|
before { PlacesIndex.import!(cities: cities, countries: countries) }
|
27
28
|
|
28
29
|
describe '#load' do
|
29
|
-
specify { PlacesIndex.order(:rating).limit(6).load.total_count.
|
30
|
-
specify { PlacesIndex.order(:rating).limit(6).load.
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
30
|
+
specify { expect(PlacesIndex.order(:rating).limit(6).load.total_count).to eq(12) }
|
31
|
+
specify { expect(PlacesIndex.order(:rating).limit(6).load).to match_array(cities.first(3) + countries.first(3)) }
|
32
|
+
|
33
|
+
context 'mongoid', :mongoid do
|
34
|
+
specify { expect(PlacesIndex.order(:rating).limit(6).load(city: { scope: ->{ where(:rating.lt => 2) } }))
|
35
|
+
.to match_array(cities.first(2) + countries.first(3) + [nil]) }
|
36
|
+
specify { expect(PlacesIndex.limit(6).load(city: { scope: ->{ where(:rating.lt => 2) } }).order(:rating))
|
37
|
+
.to match_array(cities.first(2) + countries.first(3) + [nil]) }
|
38
|
+
specify { expect(PlacesIndex.order(:rating).limit(6).load(scope: ->{ where(:rating.lt => 2) }))
|
39
|
+
.to match_array(cities.first(2) + countries.first(2) + [nil] * 2) }
|
40
|
+
specify { expect(PlacesIndex.order(:rating).limit(6).load(city: { scope: City.where(:rating.lt => 2) }))
|
41
|
+
.to match_array(cities.first(2) + countries.first(3) + [nil]) }
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'active record', :active_record do
|
45
|
+
specify { expect(PlacesIndex.order(:rating).limit(6).load(city: { scope: ->{ where('rating < 2') } }))
|
46
|
+
.to match_array(cities.first(2) + countries.first(3) + [nil]) }
|
47
|
+
specify { expect(PlacesIndex.limit(6).load(city: { scope: ->{ where('rating < 2') } }).order(:rating))
|
48
|
+
.to match_array(cities.first(2) + countries.first(3) + [nil]) }
|
49
|
+
specify { expect(PlacesIndex.order(:rating).limit(6).load(scope: ->{ where('rating < 2') }))
|
50
|
+
.to match_array(cities.first(2) + countries.first(2) + [nil] * 2) }
|
51
|
+
specify { expect(PlacesIndex.order(:rating).limit(6).load(city: { scope: City.where('rating < 2') }))
|
52
|
+
.to match_array(cities.first(2) + countries.first(3) + [nil]) }
|
53
|
+
end
|
40
54
|
end
|
41
55
|
|
42
56
|
describe '#preload' do
|
43
|
-
|
44
|
-
.
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
57
|
+
context 'mongoid', :mongoid do
|
58
|
+
specify { expect(PlacesIndex.order(:rating).limit(6).preload(scope: ->{ where(:rating.lt => 2) })
|
59
|
+
.map(&:_object)).to match_array(cities.first(2) + countries.first(2) + [nil] * 2) }
|
60
|
+
specify { expect(PlacesIndex.limit(6).preload(scope: ->{ where(:rating.lt => 2) }).order(:rating)
|
61
|
+
.map(&:_object)).to match_array(cities.first(2) + countries.first(2) + [nil] * 2) }
|
62
|
+
|
63
|
+
specify { expect(PlacesIndex.order(:rating).limit(6).preload(only: :city, scope: ->{ where(:rating.lt => 2) })
|
64
|
+
.map(&:_object)).to match_array(cities.first(2) + [nil] * 4) }
|
65
|
+
specify { expect(PlacesIndex.order(:rating).limit(6).preload(except: [:city], scope: ->{ where(:rating.lt => 2) })
|
66
|
+
.map(&:_object)).to match_array(countries.first(2) + [nil] * 4) }
|
67
|
+
specify { expect(PlacesIndex.order(:rating).limit(6).preload(only: [:city], except: :city, scope: ->{ where(:rating.lt => 2) })
|
68
|
+
.map(&:_object)).to match_array([nil] * 6) }
|
69
|
+
end
|
70
|
+
|
71
|
+
context 'active record', :active_record do
|
72
|
+
specify { expect(PlacesIndex.order(:rating).limit(6).preload(scope: ->{ where('rating < 2') })
|
73
|
+
.map(&:_object)).to match_array(cities.first(2) + countries.first(2) + [nil] * 2) }
|
74
|
+
specify { expect(PlacesIndex.limit(6).preload(scope: ->{ where('rating < 2') }).order(:rating)
|
75
|
+
.map(&:_object)).to match_array(cities.first(2) + countries.first(2) + [nil] * 2) }
|
76
|
+
|
77
|
+
specify { expect(PlacesIndex.order(:rating).limit(6).preload(only: :city, scope: ->{ where('rating < 2') })
|
78
|
+
.map(&:_object)).to match_array(cities.first(2) + [nil] * 4) }
|
79
|
+
specify { expect(PlacesIndex.order(:rating).limit(6).preload(except: [:city], scope: ->{ where('rating < 2') })
|
80
|
+
.map(&:_object)).to match_array(countries.first(2) + [nil] * 4) }
|
81
|
+
specify { expect(PlacesIndex.order(:rating).limit(6).preload(only: [:city], except: :city, scope: ->{ where('rating < 2') })
|
82
|
+
.map(&:_object)).to match_array([nil] * 6) }
|
83
|
+
end
|
53
84
|
end
|
54
85
|
end
|
55
86
|
end
|
@@ -6,11 +6,11 @@ describe Chewy::Query::Nodes::And do
|
|
6
6
|
Chewy::Query::Filters.new(&block).__render__
|
7
7
|
end
|
8
8
|
|
9
|
-
specify { render { name? & (email == 'email') }.
|
9
|
+
specify { expect(render { name? & (email == 'email') }).to eq({
|
10
10
|
and: [{exists: {field: 'name'}}, {term: {'email' => 'email'}}]
|
11
|
-
} }
|
12
|
-
specify { render { ~(name? & (email == 'email')) }.
|
11
|
+
}) }
|
12
|
+
specify { expect(render { ~(name? & (email == 'email')) }).to eq({
|
13
13
|
and: {filters: [{exists: {field: 'name'}}, {term: {'email' => 'email'}}], _cache: true}
|
14
|
-
} }
|
14
|
+
}) }
|
15
15
|
end
|
16
16
|
end
|
@@ -6,17 +6,17 @@ describe Chewy::Query::Nodes::Bool do
|
|
6
6
|
Chewy::Query::Filters.new(&block).__render__
|
7
7
|
end
|
8
8
|
|
9
|
-
specify { render { must(name == 'name', email == 'email') }.
|
9
|
+
specify { expect(render { must(name == 'name', email == 'email') }).to eq({
|
10
10
|
bool: {must: [{term: {'name' => 'name'}}, {term: {'email' => 'email'}}]
|
11
|
-
} } }
|
12
|
-
specify { render { must(name == 'name').must_not(email == 'email') }.
|
11
|
+
} }) }
|
12
|
+
specify { expect(render { must(name == 'name').must_not(email == 'email') }).to eq({
|
13
13
|
bool: {must: [{term: {'name' => 'name'}}], must_not: [{term: {'email' => 'email'}}]
|
14
|
-
} } }
|
15
|
-
specify { render { must(name == 'name').should(email == 'email') }.
|
14
|
+
} }) }
|
15
|
+
specify { expect(render { must(name == 'name').should(email == 'email') }).to eq({
|
16
16
|
bool: {must: [{term: {'name' => 'name'}}], should: [{ term: {'email' => 'email'}}]
|
17
|
-
} } }
|
18
|
-
specify { render { ~must(name == 'name').should(email == 'email') }.
|
17
|
+
} }) }
|
18
|
+
specify { expect(render { ~must(name == 'name').should(email == 'email') }).to eq({
|
19
19
|
bool: {must: [{term: {'name' => 'name'}}], should: [{ term: {'email' => 'email'}}], _cache: true
|
20
|
-
} } }
|
20
|
+
} }) }
|
21
21
|
end
|
22
22
|
end
|
@@ -6,27 +6,27 @@ describe Chewy::Query::Nodes::Equal do
|
|
6
6
|
Chewy::Query::Filters.new(&block).__render__
|
7
7
|
end
|
8
8
|
|
9
|
-
specify { render { name == 'name' }.
|
10
|
-
specify { render { name != 'name' }.
|
11
|
-
specify { render { name == ['name1', 'name2'] }.
|
12
|
-
specify { render { name != ['name1', 'name2'] }.
|
9
|
+
specify { expect(render { name == 'name' }).to eq({term: {'name' => 'name'}}) }
|
10
|
+
specify { expect(render { name != 'name' }).to eq({not: {term: {'name' => 'name'}}}) }
|
11
|
+
specify { expect(render { name == ['name1', 'name2'] }).to eq({terms: {'name' => ['name1', 'name2']}}) }
|
12
|
+
specify { expect(render { name != ['name1', 'name2'] }).to eq({not: {terms: {'name' => ['name1', 'name2']}}}) }
|
13
13
|
|
14
|
-
specify { render { name(:bool) == 'name' }.
|
15
|
-
specify { render { name(:borogoves) == ['name1', 'name2'] }.
|
14
|
+
specify { expect(render { name(:bool) == 'name' }).to eq({term: {'name' => 'name'}}) }
|
15
|
+
specify { expect(render { name(:borogoves) == ['name1', 'name2'] }).to eq({terms: {'name' => ['name1', 'name2']}}) }
|
16
16
|
|
17
|
-
specify { render { name(:|) == ['name1', 'name2'] }.
|
18
|
-
specify { render { name(:or) == ['name1', 'name2'] }.
|
19
|
-
specify { render { name(:&) == ['name1', 'name2'] }.
|
20
|
-
specify { render { name(:and) == ['name1', 'name2'] }.
|
21
|
-
specify { render { name(:b) == ['name1', 'name2'] }.
|
22
|
-
specify { render { name(:bool) == ['name1', 'name2'] }.
|
23
|
-
specify { render { name(:f) == ['name1', 'name2'] }.
|
24
|
-
specify { render { name(:fielddata) == ['name1', 'name2'] }.
|
17
|
+
specify { expect(render { name(:|) == ['name1', 'name2'] }).to eq({terms: {'name' => ['name1', 'name2'], execution: :or}}) }
|
18
|
+
specify { expect(render { name(:or) == ['name1', 'name2'] }).to eq({terms: {'name' => ['name1', 'name2'], execution: :or}}) }
|
19
|
+
specify { expect(render { name(:&) == ['name1', 'name2'] }).to eq({terms: {'name' => ['name1', 'name2'], execution: :and}}) }
|
20
|
+
specify { expect(render { name(:and) == ['name1', 'name2'] }).to eq({terms: {'name' => ['name1', 'name2'], execution: :and}}) }
|
21
|
+
specify { expect(render { name(:b) == ['name1', 'name2'] }).to eq({terms: {'name' => ['name1', 'name2'], execution: :bool}}) }
|
22
|
+
specify { expect(render { name(:bool) == ['name1', 'name2'] }).to eq({terms: {'name' => ['name1', 'name2'], execution: :bool}}) }
|
23
|
+
specify { expect(render { name(:f) == ['name1', 'name2'] }).to eq({terms: {'name' => ['name1', 'name2'], execution: :fielddata}}) }
|
24
|
+
specify { expect(render { name(:fielddata) == ['name1', 'name2'] }).to eq({terms: {'name' => ['name1', 'name2'], execution: :fielddata}}) }
|
25
25
|
|
26
|
-
specify { render { ~name == 'name' }.
|
27
|
-
specify { render { ~(name == 'name') }.
|
28
|
-
specify { render { ~name != 'name' }.
|
29
|
-
specify { render { ~name(:|) == ['name1', 'name2'] }.
|
30
|
-
specify { render { ~name != ['name1', 'name2'] }.
|
26
|
+
specify { expect(render { ~name == 'name' }).to eq({term: {'name' => 'name', _cache: true}}) }
|
27
|
+
specify { expect(render { ~(name == 'name') }).to eq({term: {'name' => 'name', _cache: true}}) }
|
28
|
+
specify { expect(render { ~name != 'name' }).to eq({not: {term: {'name' => 'name', _cache: true}}}) }
|
29
|
+
specify { expect(render { ~name(:|) == ['name1', 'name2'] }).to eq({terms: {'name' => ['name1', 'name2'], execution: :or, _cache: true}}) }
|
30
|
+
specify { expect(render { ~name != ['name1', 'name2'] }).to eq({not: {terms: {'name' => ['name1', 'name2'], _cache: true}}}) }
|
31
31
|
end
|
32
32
|
end
|
@@ -6,13 +6,13 @@ describe Chewy::Query::Nodes::Exists do
|
|
6
6
|
Chewy::Query::Filters.new(&block).__render__
|
7
7
|
end
|
8
8
|
|
9
|
-
specify { render { name? }.
|
9
|
+
specify { expect(render { name? }).to eq({exists: {field: 'name'}}) }
|
10
10
|
|
11
|
-
specify { render { !!name? }.
|
12
|
-
specify { render { !!name }.
|
13
|
-
specify { render { name != nil }.
|
14
|
-
specify { render { !(name == nil) }.
|
11
|
+
specify { expect(render { !!name? }).to eq({exists: {field: 'name'}}) }
|
12
|
+
specify { expect(render { !!name }).to eq({exists: {field: 'name'}}) }
|
13
|
+
specify { expect(render { name != nil }).to eq({exists: {field: 'name'}}) }
|
14
|
+
specify { expect(render { !(name == nil) }).to eq({exists: {field: 'name'}}) }
|
15
15
|
|
16
|
-
specify { render { ~name? }.
|
16
|
+
specify { expect(render { ~name? }).to eq({exists: {field: 'name'}}) }
|
17
17
|
end
|
18
18
|
end
|
@@ -6,35 +6,35 @@ describe Chewy::Query::Nodes::HasChild do
|
|
6
6
|
Chewy::Query::Filters.new(&block).__render__
|
7
7
|
end
|
8
8
|
|
9
|
-
specify { render { has_child('child') }.
|
10
|
-
|
11
|
-
|
12
|
-
specify { render { has_child('child').filter(term: {name: 'name'}) }
|
13
|
-
.
|
14
|
-
specify { render { has_child('child').filter{ name == 'name' } }
|
15
|
-
.
|
16
|
-
specify { render { has_child('child').filter(term: {name: 'name'}).filter{ age < 42 } }
|
17
|
-
.
|
18
|
-
specify { render { has_child('child').filter(term: {name: 'name'}).filter{ age < 42 }.filter_mode(:or) }
|
19
|
-
.
|
20
|
-
|
21
|
-
specify { render { has_child('child').query(match: {name: 'name'}) }
|
22
|
-
.
|
23
|
-
specify { render { has_child('child').query(match: {name: 'name'}).query(match: {surname: 'surname'}) }
|
24
|
-
.
|
25
|
-
specify { render { has_child('child').query(match: {name: 'name'}).query(match: {surname: 'surname'}).query_mode(:should) }
|
26
|
-
.
|
27
|
-
|
28
|
-
specify { render { has_child('child').filter{ name == 'name' }.query(match: {name: 'name'}) }
|
29
|
-
.
|
30
|
-
specify { render { has_child('child').filter{ name == 'name' }.query(match: {name: 'name'}).filter{ age < 42 } }
|
31
|
-
.
|
9
|
+
specify { expect(render { has_child('child') }).to eq({has_child: {type: 'child'}}) }
|
10
|
+
|
11
|
+
|
12
|
+
specify { expect(render { has_child('child').filter(term: {name: 'name'}) })
|
13
|
+
.to eq({has_child: {type: 'child', filter: {term: {name: 'name'}}}}) }
|
14
|
+
specify { expect(render { has_child('child').filter{ name == 'name' } })
|
15
|
+
.to eq({has_child: {type: 'child', filter: {term: {'name' => 'name'}}}}) }
|
16
|
+
specify { expect(render { has_child('child').filter(term: {name: 'name'}).filter{ age < 42 } })
|
17
|
+
.to eq({has_child: {type: 'child', filter: {and: [{term: {name: 'name'}}, range: {'age' => {lt: 42}}]}}}) }
|
18
|
+
specify { expect(render { has_child('child').filter(term: {name: 'name'}).filter{ age < 42 }.filter_mode(:or) })
|
19
|
+
.to eq({has_child: {type: 'child', filter: {or: [{term: {name: 'name'}}, range: {'age' => {lt: 42}}]}}}) }
|
20
|
+
|
21
|
+
specify { expect(render { has_child('child').query(match: {name: 'name'}) })
|
22
|
+
.to eq({has_child: {type: 'child', query: {match: {name: 'name'}}}}) }
|
23
|
+
specify { expect(render { has_child('child').query(match: {name: 'name'}).query(match: {surname: 'surname'}) })
|
24
|
+
.to eq({has_child: {type: 'child', query: {bool: {must: [{match: {name: 'name'}}, {match: {surname: 'surname'}}]}}}}) }
|
25
|
+
specify { expect(render { has_child('child').query(match: {name: 'name'}).query(match: {surname: 'surname'}).query_mode(:should) })
|
26
|
+
.to eq({has_child: {type: 'child', query: {bool: {should: [{match: {name: 'name'}}, {match: {surname: 'surname'}}]}}}}) }
|
27
|
+
|
28
|
+
specify { expect(render { has_child('child').filter{ name == 'name' }.query(match: {name: 'name'}) })
|
29
|
+
.to eq({has_child: {type: 'child', query: {filtered: {query: {match: {name: 'name'}}, filter: {term: {'name' => 'name'}}}}}}) }
|
30
|
+
specify { expect(render { has_child('child').filter{ name == 'name' }.query(match: {name: 'name'}).filter{ age < 42 } })
|
31
|
+
.to eq({has_child: {type: 'child', query: {filtered: {query: {match: {name: 'name'}}, filter: {and: [{term: {'name' => 'name'}}, range: {'age' => {lt: 42}}]}}}}}) }
|
32
32
|
|
33
33
|
context do
|
34
34
|
let(:name) { 'Name' }
|
35
35
|
|
36
|
-
specify { render { has_child('child').filter{ name == o{name} } }
|
37
|
-
.
|
36
|
+
specify { expect(render { has_child('child').filter{ name == o{name} } })
|
37
|
+
.to eq({has_child: {type: 'child', filter: {term: {'name' => 'Name'}}}}) }
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|