chewy 0.5.2 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +26 -4
  3. data/CHANGELOG.md +16 -0
  4. data/Gemfile +3 -1
  5. data/README.md +2 -10
  6. data/chewy.gemspec +0 -1
  7. data/gemfiles/Gemfile.rails-3.2.active_record +6 -0
  8. data/gemfiles/Gemfile.rails-3.2.active_record.kaminari +7 -0
  9. data/gemfiles/Gemfile.rails-3.2.active_record.will_paginate +7 -0
  10. data/gemfiles/Gemfile.rails-4.0.active_record +6 -0
  11. data/gemfiles/Gemfile.rails-4.0.active_record.kaminari +7 -0
  12. data/gemfiles/Gemfile.rails-4.0.active_record.will_paginate +7 -0
  13. data/gemfiles/Gemfile.rails-4.0.mongoid +6 -0
  14. data/gemfiles/Gemfile.rails-4.0.mongoid.kaminari +7 -0
  15. data/gemfiles/Gemfile.rails-4.0.mongoid.will_paginate +7 -0
  16. data/gemfiles/Gemfile.rails-4.1.active_record +6 -0
  17. data/gemfiles/Gemfile.rails-4.1.active_record.kaminari +7 -0
  18. data/gemfiles/Gemfile.rails-4.1.active_record.will_paginate +7 -0
  19. data/gemfiles/Gemfile.rails-4.1.mongoid +6 -0
  20. data/gemfiles/Gemfile.rails-4.1.mongoid.kaminari +7 -0
  21. data/gemfiles/Gemfile.rails-4.1.mongoid.will_paginate +7 -0
  22. data/gemfiles/Gemfile.rails-4.2.active_record +6 -0
  23. data/gemfiles/Gemfile.rails-4.2.active_record.kaminari +7 -0
  24. data/gemfiles/Gemfile.rails-4.2.active_record.will_paginate +7 -0
  25. data/gemfiles/Gemfile.rails-4.2.mongoid +6 -0
  26. data/gemfiles/Gemfile.rails-4.2.mongoid.kaminari +7 -0
  27. data/gemfiles/Gemfile.rails-4.2.mongoid.will_paginate +7 -0
  28. data/lib/chewy.rb +33 -5
  29. data/lib/chewy/config.rb +1 -0
  30. data/lib/chewy/index/search.rb +6 -3
  31. data/lib/chewy/query.rb +74 -1
  32. data/lib/chewy/query/compose.rb +4 -4
  33. data/lib/chewy/query/pagination.rb +5 -4
  34. data/lib/chewy/query/pagination/kaminari.rb +1 -1
  35. data/lib/chewy/query/pagination/will_paginate.rb +27 -0
  36. data/lib/chewy/type.rb +1 -0
  37. data/lib/chewy/type/adapter/active_record.rb +2 -2
  38. data/lib/chewy/type/adapter/mongoid.rb +147 -0
  39. data/lib/chewy/type/adapter/object.rb +1 -1
  40. data/lib/chewy/type/import.rb +1 -0
  41. data/lib/chewy/type/observe.rb +34 -6
  42. data/lib/chewy/version.rb +1 -1
  43. data/spec/chewy/config_spec.rb +17 -17
  44. data/spec/chewy/fields/base_spec.rb +62 -62
  45. data/spec/chewy/fields/root_spec.rb +5 -5
  46. data/spec/chewy/index/actions_spec.rb +127 -127
  47. data/spec/chewy/index/aliases_spec.rb +9 -9
  48. data/spec/chewy/index/search_spec.rb +4 -4
  49. data/spec/chewy/index/settings_spec.rb +33 -33
  50. data/spec/chewy/index_spec.rb +49 -49
  51. data/spec/chewy/query/criteria_spec.rb +173 -161
  52. data/spec/chewy/query/filters_spec.rb +76 -76
  53. data/spec/chewy/query/loading_spec.rb +54 -23
  54. data/spec/chewy/query/nodes/and_spec.rb +4 -4
  55. data/spec/chewy/query/nodes/bool_spec.rb +8 -8
  56. data/spec/chewy/query/nodes/equal_spec.rb +19 -19
  57. data/spec/chewy/query/nodes/exists_spec.rb +6 -6
  58. data/spec/chewy/query/nodes/has_child_spec.rb +25 -25
  59. data/spec/chewy/query/nodes/has_parent_spec.rb +25 -25
  60. data/spec/chewy/query/nodes/match_all_spec.rb +1 -1
  61. data/spec/chewy/query/nodes/missing_spec.rb +4 -4
  62. data/spec/chewy/query/nodes/not_spec.rb +4 -4
  63. data/spec/chewy/query/nodes/or_spec.rb +4 -4
  64. data/spec/chewy/query/nodes/prefix_spec.rb +5 -5
  65. data/spec/chewy/query/nodes/query_spec.rb +2 -2
  66. data/spec/chewy/query/nodes/range_spec.rb +18 -18
  67. data/spec/chewy/query/nodes/raw_spec.rb +1 -1
  68. data/spec/chewy/query/nodes/regexp_spec.rb +18 -18
  69. data/spec/chewy/query/nodes/script_spec.rb +4 -4
  70. data/spec/chewy/query/pagination/kaminari_spec.rb +41 -39
  71. data/spec/chewy/query/pagination/will_paginage_spec.rb +60 -0
  72. data/spec/chewy/query/pagination_spec.rb +8 -7
  73. data/spec/chewy/query_spec.rb +166 -167
  74. data/spec/chewy/rspec/update_index_spec.rb +1 -1
  75. data/spec/chewy/runtime/version_spec.rb +30 -30
  76. data/spec/chewy/runtime_spec.rb +3 -3
  77. data/spec/chewy/type/actions_spec.rb +3 -3
  78. data/spec/chewy/type/adapter/active_record_spec.rb +143 -143
  79. data/spec/chewy/type/adapter/mongoid_spec.rb +219 -0
  80. data/spec/chewy/type/adapter/object_spec.rb +39 -39
  81. data/spec/chewy/type/import_spec.rb +67 -37
  82. data/spec/chewy/type/mapping_spec.rb +12 -12
  83. data/spec/chewy/type/observe_spec.rb +5 -6
  84. data/spec/chewy/type/wrapper_spec.rb +12 -12
  85. data/spec/chewy_spec.rb +26 -28
  86. data/spec/spec_helper.rb +19 -31
  87. data/spec/support/active_record.rb +52 -0
  88. data/spec/support/class_helpers.rb +0 -4
  89. data/spec/support/mongoid.rb +87 -0
  90. metadata +33 -18
  91. data/gemfiles/Gemfile.rails-3.2 +0 -15
  92. 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 }.should be_eql Field(:email) }
25
- specify { query { o{email} }.should == '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) }.should be_eql Field(:email) }
31
- specify { query { f{ :email } }.should be_eql Field(:email) }
32
- specify { query { f{ email } }.should be_eql Field(:email) }
33
- specify { query { email }.should be_eql Field(:email) }
34
- specify { query { emails.first }.should be_eql Field('emails.first') }
35
- specify { query { emails.first.second }.should be_eql Field('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' }.should be_eql Equal(:email, 'email') }
40
- specify { query { name != 'name' }.should be_eql Not(Equal(:name, 'name')) }
41
- specify { query { email == ['email1', 'email2'] }.should be_eql Equal(:email, ['email1', 'email2']) }
42
- specify { query { email != ['email1', 'email2'] }.should be_eql Not(Equal(:email, ['email1', 'email2'])) }
43
- specify { query { email(execution: :bool) == ['email1', 'email2'] }
44
- .should be_eql Equal(:email, ['email1', 'email2'], execution: :bool) }
45
- specify { query { email(:bool) == ['email1', 'email2'] }
46
- .should be_eql Equal(:email, ['email1', 'email2'], execution: :bool) }
47
- specify { query { email(:b) == ['email1', 'email2'] }
48
- .should be_eql Equal(:email, ['email1', 'email2'], execution: :bool) }
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? }.should be_eql Exists(:email) }
67
- specify { query { !!email? }.should be_eql Exists(:email) }
68
- specify { query { emails.first? }.should be_eql Exists('emails.first') }
69
- specify { query { !!emails.first? }.should be_eql Exists('emails.first') }
70
- specify { query { emails != nil }.should be_eql Exists('emails') }
71
- specify { query { !(emails == nil) }.should be_eql Exists('emails') }
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 }.should be_eql Missing(:email) }
76
- specify { query { !email? }.should be_eql Missing(:email, null_value: true) }
77
- specify { query { !emails.first }.should be_eql Missing('emails.first') }
78
- specify { query { !emails.first? }.should be_eql Missing('emails.first', null_value: true) }
79
- specify { query { emails == nil }.should be_eql Missing('emails', existence: false, null_value: true) }
80
- specify { query { emails.first == nil }.should be_eql Missing('emails.first', existence: false, null_value: true) }
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 }.should be_eql Range(:age, gt: 42) }
85
- specify { query { age >= 42 }.should be_eql Range(:age, gt: 42, left_closed: true) }
86
- specify { query { age < 42 }.should be_eql Range(:age, lt: 42) }
87
- specify { query { age <= 42 }.should be_eql Range(:age, lt: 42, right_closed: true) }
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) }.should be_eql Range(:age, gt: 30, lt: 42) }
90
- specify { query { age == [30..42] }.should be_eql Range(:age, gt: 30, lt: 42, left_closed: true, right_closed: true) }
91
- specify { query { (age > 30) & (age < 42) }.should be_eql Range(:age, gt: 30, lt: 42) }
92
- specify { query { (age > 30) & (age <= 42) }.should be_eql Range(:age, gt: 30, lt: 42, right_closed: true) }
93
- specify { query { (age >= 30) & (age < 42) }.should be_eql Range(:age, gt: 30, lt: 42, left_closed: true) }
94
- specify { query { (age >= 30) & (age <= 42) }.should be_eql Range(:age, gt: 30, lt: 42, right_closed: true, left_closed: true) }
95
- specify { query { (age > 30) | (age < 42) }.should be_eql Or(Range(:age, gt: 30), Range(:age, lt: 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' }.should be_eql Prefix(:name, 'nam') }
100
- specify { query { name !~ 'nam' }.should be_eql Not(Prefix(: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/ }.should be_eql Regexp(:name, 'name') }
105
- specify { query { name == /name/ }.should be_eql Regexp(:name, 'name') }
106
- specify { query { name !~ /name/ }.should be_eql Not(Regexp(:name, 'name')) }
107
- specify { query { name != /name/ }.should be_eql Not(Regexp(:name, 'name')) }
108
- specify { query { name(:anystring, :intersection) =~ /name/ }.should be_eql Regexp(:name, 'name', flags: %w(anystring intersection)) }
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') }.should be_eql Query('some query') }
114
- specify { query { q{'some query'} }.should be_eql Query('some query') }
115
- specify { query { q{ some_query } }.should be_eql Query('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'}) }.should be_eql Raw(term: {name: 'name'}) }
121
- specify { query { r{ {term: {name: 'name'}} } }.should be_eql Raw(term: {name: 'name'}) }
122
- specify { query { r{ raw_query } }.should be_eql Raw(term: {name: 'name'}) }
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') }.should be_eql Script('some script') }
128
- specify { query { s('some script', param1: 42) }.should be_eql Script('some script', param1: 42) }
129
- specify { query { s{'some script'} }.should be_eql Script('some script') }
130
- specify { query { s(param1: 42) { some_script } }.should be_eql Script('some script', param1: 42) }
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
- .should be_eql And(Equal(:email, 'email'), Equal(:name, 'name')) }
136
- specify { query { (email == 'email') | (name == 'name') }
137
- .should be_eql Or(Equal(:email, 'email'), Equal(:name, 'name')) }
138
- specify { query { !(email == 'email') }.should be_eql Not(Equal(:email, 'email')) }
139
-
140
- specify { query { (email == 'email') & (name == 'name') | (address != 'address') }
141
- .should be_eql Or(
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
- .should be_eql And(
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
- .should be_eql And(
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
- .should be_eql Or(
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
- .should be_eql Not(Or(Equal(:email, 'email'), Equal(:name, 'name'))) }
170
- specify { query { !!((email == 'email') | (name == 'name')) }
171
- .should be_eql Or(Equal(:email, 'email'), Equal(:name, 'name')) }
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.client.indices.delete index: '*' }
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.should == 12 }
30
- specify { PlacesIndex.order(:rating).limit(6).load.should =~ cities.first(3) + countries.first(3) }
31
-
32
- specify { PlacesIndex.order(:rating).limit(6).load(city: { scope: ->{ where('rating < 2') } })
33
- .should =~ cities.first(2) + countries.first(3) + [nil] }
34
- specify { PlacesIndex.limit(6).load(city: { scope: ->{ where('rating < 2') } }).order(:rating)
35
- .should =~ cities.first(2) + countries.first(3) + [nil] }
36
- specify { PlacesIndex.order(:rating).limit(6).load(scope: ->{ where('rating < 2') })
37
- .should =~ cities.first(2) + countries.first(2) + [nil] * 2 }
38
- specify { PlacesIndex.order(:rating).limit(6).load(city: { scope: City.where('rating < 2') })
39
- .should =~ cities.first(2) + countries.first(3) + [nil] }
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
- specify { PlacesIndex.order(:rating).limit(6).preload(scope: ->{ where('rating < 2') })
44
- .map(&:_object).should =~ cities.first(2) + countries.first(2) + [nil] * 2 }
45
- specify { PlacesIndex.limit(6).preload(scope: ->{ where('rating < 2') }).order(:rating)
46
- .map(&:_object).should =~ cities.first(2) + countries.first(2) + [nil] * 2 }
47
- specify { PlacesIndex.order(:rating).limit(6).preload(only: :city, scope: ->{ where('rating < 2') })
48
- .map(&:_object).should =~ cities.first(2) + [nil] * 4 }
49
- specify { PlacesIndex.order(:rating).limit(6).preload(except: [:city], scope: ->{ where('rating < 2') })
50
- .map(&:_object).should =~ countries.first(2) + [nil] * 4 }
51
- specify { PlacesIndex.order(:rating).limit(6).preload(only: [:city], except: :city, scope: ->{ where('rating < 2') })
52
- .map(&:_object).should =~ [nil] * 6 }
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') }.should == {
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')) }.should == {
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') }.should == {
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') }.should == {
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') }.should == {
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') }.should == {
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' }.should == {term: {'name' => 'name'}} }
10
- specify { render { name != 'name' }.should == {not: {term: {'name' => 'name'}}} }
11
- specify { render { name == ['name1', 'name2'] }.should == {terms: {'name' => ['name1', 'name2']}} }
12
- specify { render { name != ['name1', 'name2'] }.should == {not: {terms: {'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' }.should == {term: {'name' => 'name'}} }
15
- specify { render { name(:borogoves) == ['name1', 'name2'] }.should == {terms: {'name' => ['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'] }.should == {terms: {'name' => ['name1', 'name2'], execution: :or}} }
18
- specify { render { name(:or) == ['name1', 'name2'] }.should == {terms: {'name' => ['name1', 'name2'], execution: :or}} }
19
- specify { render { name(:&) == ['name1', 'name2'] }.should == {terms: {'name' => ['name1', 'name2'], execution: :and}} }
20
- specify { render { name(:and) == ['name1', 'name2'] }.should == {terms: {'name' => ['name1', 'name2'], execution: :and}} }
21
- specify { render { name(:b) == ['name1', 'name2'] }.should == {terms: {'name' => ['name1', 'name2'], execution: :bool}} }
22
- specify { render { name(:bool) == ['name1', 'name2'] }.should == {terms: {'name' => ['name1', 'name2'], execution: :bool}} }
23
- specify { render { name(:f) == ['name1', 'name2'] }.should == {terms: {'name' => ['name1', 'name2'], execution: :fielddata}} }
24
- specify { render { name(:fielddata) == ['name1', 'name2'] }.should == {terms: {'name' => ['name1', 'name2'], execution: :fielddata}} }
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' }.should == {term: {'name' => 'name', _cache: true}} }
27
- specify { render { ~(name == 'name') }.should == {term: {'name' => 'name', _cache: true}} }
28
- specify { render { ~name != 'name' }.should == {not: {term: {'name' => 'name', _cache: true}}} }
29
- specify { render { ~name(:|) == ['name1', 'name2'] }.should == {terms: {'name' => ['name1', 'name2'], execution: :or, _cache: true}} }
30
- specify { render { ~name != ['name1', 'name2'] }.should == {not: {terms: {'name' => ['name1', 'name2'], _cache: true}}} }
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? }.should == {exists: {field: 'name'}} }
9
+ specify { expect(render { name? }).to eq({exists: {field: 'name'}}) }
10
10
 
11
- specify { render { !!name? }.should == {exists: {field: 'name'}} }
12
- specify { render { !!name }.should == {exists: {field: 'name'}} }
13
- specify { render { name != nil }.should == {exists: {field: 'name'}} }
14
- specify { render { !(name == nil) }.should == {exists: {field: 'name'}} }
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? }.should == {exists: {field: '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') }.should == {has_child: {type: 'child'}} }
10
-
11
-
12
- specify { render { has_child('child').filter(term: {name: 'name'}) }
13
- .should == {has_child: {type: 'child', filter: {term: {name: 'name'}}}} }
14
- specify { render { has_child('child').filter{ name == 'name' } }
15
- .should == {has_child: {type: 'child', filter: {term: {'name' => 'name'}}}} }
16
- specify { render { has_child('child').filter(term: {name: 'name'}).filter{ age < 42 } }
17
- .should == {has_child: {type: 'child', filter: {and: [{term: {name: 'name'}}, range: {'age' => {lt: 42}}]}}} }
18
- specify { render { has_child('child').filter(term: {name: 'name'}).filter{ age < 42 }.filter_mode(:or) }
19
- .should == {has_child: {type: 'child', filter: {or: [{term: {name: 'name'}}, range: {'age' => {lt: 42}}]}}} }
20
-
21
- specify { render { has_child('child').query(match: {name: 'name'}) }
22
- .should == {has_child: {type: 'child', query: {match: {name: 'name'}}}} }
23
- specify { render { has_child('child').query(match: {name: 'name'}).query(match: {surname: 'surname'}) }
24
- .should == {has_child: {type: 'child', query: {bool: {must: [{match: {name: 'name'}}, {match: {surname: 'surname'}}]}}}} }
25
- specify { render { has_child('child').query(match: {name: 'name'}).query(match: {surname: 'surname'}).query_mode(:should) }
26
- .should == {has_child: {type: 'child', query: {bool: {should: [{match: {name: 'name'}}, {match: {surname: 'surname'}}]}}}} }
27
-
28
- specify { render { has_child('child').filter{ name == 'name' }.query(match: {name: 'name'}) }
29
- .should == {has_child: {type: 'child', query: {filtered: {query: {match: {name: 'name'}}, filter: {term: {'name' => 'name'}}}}}} }
30
- specify { render { has_child('child').filter{ name == 'name' }.query(match: {name: 'name'}).filter{ age < 42 } }
31
- .should == {has_child: {type: 'child', query: {filtered: {query: {match: {name: 'name'}}, filter: {and: [{term: {'name' => 'name'}}, range: {'age' => {lt: 42}}]}}}}} }
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
- .should == {has_child: {type: 'child', filter: {term: {'name' => 'Name'}}}} }
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