chewy 7.1.0 → 7.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +58 -0
  3. data/.rubocop.yml +13 -8
  4. data/.rubocop_todo.yml +110 -22
  5. data/CHANGELOG.md +53 -0
  6. data/Gemfile +0 -7
  7. data/Guardfile +3 -1
  8. data/README.md +282 -245
  9. data/chewy.gemspec +3 -5
  10. data/gemfiles/rails.5.2.activerecord.gemfile +8 -14
  11. data/gemfiles/rails.6.0.activerecord.gemfile +8 -14
  12. data/gemfiles/rails.6.1.activerecord.gemfile +8 -14
  13. data/lib/chewy.rb +21 -75
  14. data/lib/chewy/config.rb +40 -40
  15. data/lib/chewy/errors.rb +0 -12
  16. data/lib/chewy/fields/base.rb +11 -1
  17. data/lib/chewy/fields/root.rb +3 -4
  18. data/lib/chewy/index.rb +46 -87
  19. data/lib/chewy/index/actions.rb +51 -32
  20. data/lib/chewy/{type → index}/adapter/active_record.rb +12 -3
  21. data/lib/chewy/{type → index}/adapter/base.rb +2 -3
  22. data/lib/chewy/{type → index}/adapter/object.rb +27 -31
  23. data/lib/chewy/{type → index}/adapter/orm.rb +11 -14
  24. data/lib/chewy/{type → index}/crutch.rb +5 -5
  25. data/lib/chewy/{type → index}/import.rb +36 -27
  26. data/lib/chewy/{type → index}/import/bulk_builder.rb +15 -13
  27. data/lib/chewy/{type → index}/import/bulk_request.rb +6 -6
  28. data/lib/chewy/{type → index}/import/journal_builder.rb +10 -10
  29. data/lib/chewy/{type → index}/import/routine.rb +15 -14
  30. data/lib/chewy/{type → index}/mapping.rb +26 -31
  31. data/lib/chewy/{type → index}/observe.rb +9 -19
  32. data/lib/chewy/index/specification.rb +1 -0
  33. data/lib/chewy/{type → index}/syncer.rb +60 -57
  34. data/lib/chewy/{type → index}/witchcraft.rb +11 -7
  35. data/lib/chewy/{type → index}/wrapper.rb +2 -2
  36. data/lib/chewy/journal.rb +8 -8
  37. data/lib/chewy/minitest/helpers.rb +9 -13
  38. data/lib/chewy/minitest/search_index_receiver.rb +22 -26
  39. data/lib/chewy/railtie.rb +4 -2
  40. data/lib/chewy/rake_helper.rb +82 -107
  41. data/lib/chewy/rspec/update_index.rb +47 -43
  42. data/lib/chewy/search.rb +4 -17
  43. data/lib/chewy/search/loader.rb +18 -30
  44. data/lib/chewy/search/parameters.rb +4 -2
  45. data/lib/chewy/search/parameters/concerns/query_storage.rb +2 -2
  46. data/lib/chewy/search/parameters/source.rb +5 -1
  47. data/lib/chewy/search/query_proxy.rb +9 -2
  48. data/lib/chewy/search/request.rb +82 -86
  49. data/lib/chewy/search/response.rb +4 -4
  50. data/lib/chewy/search/scoping.rb +6 -7
  51. data/lib/chewy/search/scrolling.rb +11 -11
  52. data/lib/chewy/stash.rb +14 -22
  53. data/lib/chewy/strategy.rb +3 -19
  54. data/lib/chewy/strategy/sidekiq.rb +1 -0
  55. data/lib/chewy/version.rb +1 -1
  56. data/lib/generators/chewy/install_generator.rb +1 -1
  57. data/lib/tasks/chewy.rake +10 -22
  58. data/migration_guide.md +14 -0
  59. data/spec/chewy/config_spec.rb +14 -39
  60. data/spec/chewy/fields/base_spec.rb +412 -148
  61. data/spec/chewy/fields/root_spec.rb +16 -24
  62. data/spec/chewy/fields/time_fields_spec.rb +5 -5
  63. data/spec/chewy/index/actions_spec.rb +270 -24
  64. data/spec/chewy/{type → index}/adapter/active_record_spec.rb +68 -40
  65. data/spec/chewy/{type → index}/adapter/object_spec.rb +21 -6
  66. data/spec/chewy/{type → index}/import/bulk_builder_spec.rb +23 -31
  67. data/spec/chewy/{type → index}/import/bulk_request_spec.rb +5 -6
  68. data/spec/chewy/{type → index}/import/journal_builder_spec.rb +9 -15
  69. data/spec/chewy/{type → index}/import/routine_spec.rb +16 -16
  70. data/spec/chewy/{type → index}/import_spec.rb +102 -98
  71. data/spec/chewy/{type → index}/mapping_spec.rb +46 -54
  72. data/spec/chewy/index/observe_spec.rb +116 -0
  73. data/spec/chewy/index/settings_spec.rb +3 -1
  74. data/spec/chewy/index/specification_spec.rb +7 -17
  75. data/spec/chewy/{type → index}/syncer_spec.rb +14 -19
  76. data/spec/chewy/{type → index}/witchcraft_spec.rb +20 -22
  77. data/spec/chewy/index/wrapper_spec.rb +100 -0
  78. data/spec/chewy/index_spec.rb +59 -102
  79. data/spec/chewy/journal_spec.rb +9 -22
  80. data/spec/chewy/minitest/helpers_spec.rb +13 -15
  81. data/spec/chewy/minitest/search_index_receiver_spec.rb +22 -26
  82. data/spec/chewy/multi_search_spec.rb +4 -5
  83. data/spec/chewy/rake_helper_spec.rb +145 -55
  84. data/spec/chewy/rspec/update_index_spec.rb +74 -71
  85. data/spec/chewy/search/loader_spec.rb +19 -37
  86. data/spec/chewy/search/pagination/kaminari_examples.rb +3 -5
  87. data/spec/chewy/search/pagination/kaminari_spec.rb +1 -1
  88. data/spec/chewy/search/parameters/indices_spec.rb +2 -8
  89. data/spec/chewy/search/parameters/order_spec.rb +1 -1
  90. data/spec/chewy/search/parameters/query_storage_examples.rb +67 -21
  91. data/spec/chewy/search/parameters/search_after_spec.rb +4 -1
  92. data/spec/chewy/search/parameters/source_spec.rb +8 -2
  93. data/spec/chewy/search/parameters_spec.rb +12 -3
  94. data/spec/chewy/search/query_proxy_spec.rb +68 -17
  95. data/spec/chewy/search/request_spec.rb +222 -74
  96. data/spec/chewy/search/response_spec.rb +12 -12
  97. data/spec/chewy/search/scrolling_spec.rb +7 -9
  98. data/spec/chewy/search_spec.rb +32 -35
  99. data/spec/chewy/stash_spec.rb +9 -21
  100. data/spec/chewy/strategy/active_job_spec.rb +8 -8
  101. data/spec/chewy/strategy/atomic_spec.rb +9 -10
  102. data/spec/chewy/strategy/sidekiq_spec.rb +8 -8
  103. data/spec/chewy/strategy_spec.rb +19 -15
  104. data/spec/chewy_spec.rb +14 -100
  105. data/spec/spec_helper.rb +2 -21
  106. data/spec/support/active_record.rb +15 -5
  107. metadata +44 -103
  108. data/.circleci/config.yml +0 -214
  109. data/Appraisals +0 -81
  110. data/gemfiles/rails.5.2.mongoid.6.4.gemfile +0 -17
  111. data/gemfiles/sequel.4.45.gemfile +0 -11
  112. data/lib/chewy/search/pagination/will_paginate.rb +0 -43
  113. data/lib/chewy/strategy/resque.rb +0 -27
  114. data/lib/chewy/strategy/shoryuken.rb +0 -40
  115. data/lib/chewy/type.rb +0 -120
  116. data/lib/chewy/type/actions.rb +0 -43
  117. data/lib/chewy/type/adapter/mongoid.rb +0 -67
  118. data/lib/chewy/type/adapter/sequel.rb +0 -93
  119. data/lib/sequel/plugins/chewy_observe.rb +0 -63
  120. data/spec/chewy/search/pagination/will_paginate_examples.rb +0 -63
  121. data/spec/chewy/search/pagination/will_paginate_spec.rb +0 -23
  122. data/spec/chewy/strategy/resque_spec.rb +0 -46
  123. data/spec/chewy/strategy/shoryuken_spec.rb +0 -70
  124. data/spec/chewy/type/actions_spec.rb +0 -50
  125. data/spec/chewy/type/adapter/mongoid_spec.rb +0 -372
  126. data/spec/chewy/type/adapter/sequel_spec.rb +0 -472
  127. data/spec/chewy/type/observe_spec.rb +0 -137
  128. data/spec/chewy/type/wrapper_spec.rb +0 -100
  129. data/spec/chewy/type_spec.rb +0 -55
  130. data/spec/support/mongoid.rb +0 -93
  131. data/spec/support/sequel.rb +0 -80
@@ -0,0 +1,100 @@
1
+ require 'spec_helper'
2
+
3
+ describe Chewy::Index::Wrapper do
4
+ before do
5
+ stub_class(:city)
6
+ stub_index(:cities) do
7
+ index_scope City
8
+ end
9
+ end
10
+
11
+ let(:cities_index) { CitiesIndex }
12
+
13
+ describe '.build' do
14
+ specify do
15
+ expect(cities_index.build({}).attributes)
16
+ .to eq('id' => nil, '_score' => nil, '_explanation' => nil)
17
+ end
18
+ specify do
19
+ expect(cities_index.build('_source' => {name: 'Martin'}).attributes)
20
+ .to eq('id' => nil, '_score' => nil, '_explanation' => nil, 'name' => 'Martin')
21
+ end
22
+ specify do
23
+ expect(cities_index.build('_id' => 42).attributes)
24
+ .to eq('id' => 42, '_score' => nil, '_explanation' => nil)
25
+ end
26
+ specify do
27
+ expect(cities_index.build('_id' => 42, '_source' => {'id' => 43}).attributes)
28
+ .to eq('id' => 43, '_score' => nil, '_explanation' => nil)
29
+ end
30
+ specify do
31
+ expect(cities_index.build('_score' => 42, '_explanation' => {foo: 'bar'}).attributes)
32
+ .to eq('id' => nil, '_score' => 42, '_explanation' => {foo: 'bar'})
33
+ end
34
+ specify do
35
+ expect(cities_index.build('_score' => 42, 'borogoves' => {foo: 'bar'})._data)
36
+ .to eq('_score' => 42, 'borogoves' => {foo: 'bar'})
37
+ end
38
+ end
39
+
40
+ describe '#initialize' do
41
+ subject(:city) { cities_index.new(name: 'Martin', age: 42) }
42
+
43
+ it do
44
+ is_expected.to respond_to(:name)
45
+ .and respond_to(:age)
46
+ .and have_attributes(
47
+ name: 'Martin',
48
+ age: 42
49
+ )
50
+ end
51
+
52
+ it { expect { city.population }.to raise_error(NoMethodError) }
53
+
54
+ context 'highlight' do
55
+ subject(:city) do
56
+ cities_index.new(name: 'Martin', age: 42)
57
+ .tap do |city|
58
+ city._data = {
59
+ 'highlight' => {'name' => ['<b>Mar</b>tin']}
60
+ }
61
+ end
62
+ end
63
+
64
+ it do
65
+ is_expected.to respond_to(:name_highlight)
66
+ .and respond_to(:name_highlights)
67
+ .and have_attributes(
68
+ name: 'Martin',
69
+ name_highlight: '<b>Mar</b>tin',
70
+ name_highlights: ['<b>Mar</b>tin']
71
+ )
72
+ end
73
+ end
74
+ end
75
+
76
+ describe '#==' do
77
+ specify { expect(cities_index.new(id: 42)).to eq(cities_index.new(id: 42)) }
78
+ specify { expect(cities_index.new(id: 42, age: 55)).to eq(cities_index.new(id: 42, age: 54)) }
79
+ specify { expect(cities_index.new(id: 42)).not_to eq(cities_index.new(id: 43)) }
80
+ specify { expect(cities_index.new(id: 42, age: 55)).not_to eq(cities_index.new(id: 43, age: 55)) }
81
+ specify { expect(cities_index.new(age: 55)).to eq(cities_index.new(age: 55)) }
82
+ specify { expect(cities_index.new(age: 55)).not_to eq(cities_index.new(age: 54)) }
83
+
84
+ specify { expect(cities_index.new(id: '42')).to eq(City.new.tap { |m| allow(m).to receive_messages(id: 42) }) }
85
+ specify { expect(cities_index.new(id: 42)).not_to eq(City.new.tap { |m| allow(m).to receive_messages(id: 43) }) }
86
+ specify { expect(cities_index.new(id: 42)).not_to eq(Class.new) }
87
+
88
+ context 'models', :orm do
89
+ before do
90
+ stub_model(:city)
91
+ stub_index(:cities) do
92
+ index_scope City
93
+ end
94
+ end
95
+ specify { expect(cities_index.new(id: '42')).to eq(City.new.tap { |m| allow(m).to receive_messages(id: 42) }) }
96
+ specify { expect(cities_index.new(id: 42)).not_to eq(City.new.tap { |m| allow(m).to receive_messages(id: 43) }) }
97
+ specify { expect(cities_index.new(id: 42)).not_to eq(Class.new) }
98
+ end
99
+ end
100
+ end
@@ -2,9 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Chewy::Index do
4
4
  before do
5
- stub_index(:dummies) do
6
- define_type :dummy
7
- end
5
+ stub_index(:dummies)
8
6
  end
9
7
 
10
8
  describe '.import', :orm do
@@ -13,11 +11,11 @@ describe Chewy::Index do
13
11
  stub_model(:country)
14
12
 
15
13
  stub_index(:cities) do
16
- define_type City
14
+ index_scope City
17
15
  end
18
16
 
19
17
  stub_index(:countries) do
20
- define_type Country
18
+ index_scope Country
21
19
  end
22
20
  end
23
21
 
@@ -30,18 +28,13 @@ describe Chewy::Index do
30
28
  end
31
29
 
32
30
  specify do
33
- expect { CitiesIndex.import city: cities.first }.to update_index(CitiesIndex).and_reindex(cities.first).only
34
- expect { CountriesIndex.import city: cities.first }.to update_index(CountriesIndex).and_reindex(countries)
35
- end
36
-
37
- specify do
38
- expect { CitiesIndex.import city: cities.first, country: countries.last }.to update_index(CitiesIndex).and_reindex(cities.first).only
39
- expect { CountriesIndex.import city: cities.first, country: countries.last }.to update_index(CountriesIndex).and_reindex(countries.last).only
31
+ expect { CitiesIndex.import cities.first }.to update_index(CitiesIndex).and_reindex(cities.first).only
32
+ expect { CountriesIndex.import countries.last }.to update_index(CountriesIndex).and_reindex(countries.last).only
40
33
  end
41
34
 
42
35
  specify do
43
36
  expect(CitiesIndex.client).to receive(:bulk).with(hash_including(refresh: false)).once
44
- CitiesIndex.import city: cities.first, refresh: false
37
+ CitiesIndex.import cities.first, refresh: false
45
38
  end
46
39
  end
47
40
 
@@ -64,10 +57,18 @@ describe Chewy::Index do
64
57
  specify { expect(stub_const('DeveloperIndex', Class.new(Chewy::Index)).index_name).to eq('developer') }
65
58
  specify { expect(stub_const('DevelopersIndex', Class.new(Chewy::Index)).index_name).to eq('developers') }
66
59
 
67
- specify { expect(stub_const('DevelopersIndex', Class.new(Chewy::Index)).index_name(suffix: '')).to eq('developers') }
68
- specify { expect(stub_const('DevelopersIndex', Class.new(Chewy::Index)).index_name(suffix: '2013')).to eq('developers_2013') }
69
- specify { expect(stub_const('DevelopersIndex', Class.new(Chewy::Index)).index_name(prefix: '')).to eq('developers') }
70
- specify { expect(stub_const('DevelopersIndex', Class.new(Chewy::Index)).index_name(prefix: 'test')).to eq('test_developers') }
60
+ specify do
61
+ expect(stub_const('DevelopersIndex', Class.new(Chewy::Index)).index_name(suffix: '')).to eq('developers')
62
+ end
63
+ specify do
64
+ expect(stub_const('DevelopersIndex', Class.new(Chewy::Index)).index_name(suffix: '2013')).to eq('developers_2013')
65
+ end
66
+ specify do
67
+ expect(stub_const('DevelopersIndex', Class.new(Chewy::Index)).index_name(prefix: '')).to eq('developers')
68
+ end
69
+ specify do
70
+ expect(stub_const('DevelopersIndex', Class.new(Chewy::Index)).index_name(prefix: 'test')).to eq('test_developers')
71
+ end
71
72
 
72
73
  context do
73
74
  before { allow(Chewy).to receive_messages(configuration: {prefix: 'testing'}) }
@@ -88,18 +89,18 @@ describe Chewy::Index do
88
89
  specify { expect(Class.new(Chewy::Index).prefix).to eq('testing') }
89
90
  end
90
91
 
91
- describe '.define_type' do
92
- specify { expect(DummiesIndex.type_hash['dummy']).to eq(DummiesIndex::Dummy) }
92
+ describe '.index_scope' do
93
+ specify { expect(DummiesIndex.adapter.name).to eq('Default') }
93
94
 
94
95
  context do
95
- before { stub_index(:dummies) { define_type :dummy, name: :borogoves } }
96
- specify { expect(DummiesIndex.type_hash['borogoves']).to eq(DummiesIndex::Borogoves) }
96
+ before { stub_index(:dummies) { index_scope :dummy, name: :borogoves } }
97
+ specify { expect(DummiesIndex.adapter.name).to eq('Borogoves') }
97
98
  end
98
99
 
99
100
  context do
100
101
  before { stub_class(:city) }
101
- before { stub_index(:dummies) { define_type City, name: :country } }
102
- specify { expect(DummiesIndex.type_hash['country']).to eq(DummiesIndex::Country) }
102
+ before { stub_index(:dummies) { index_scope City, name: :country } }
103
+ specify { expect(DummiesIndex.adapter.name).to eq('Country') }
103
104
  end
104
105
 
105
106
  context do
@@ -110,16 +111,16 @@ describe Chewy::Index do
110
111
  expect do
111
112
  Kernel.eval <<-DUMMY_CITY_INDEX
112
113
  class DummyCityIndex2 < Chewy::Index
113
- define_type City
114
- define_type Country
114
+ index_scope City
115
+ index_scope Country
115
116
  end
116
117
  DUMMY_CITY_INDEX
117
- end.to raise_error(/Multiple types are deprecated/)
118
+ end.to raise_error(/Index scope is already defined/)
118
119
 
119
120
  expect do
120
121
  Kernel.eval <<-DUMMY_CITY_INDEX
121
122
  class DummyCityIndex2 < Chewy::Index
122
- define_type City::Nothing
123
+ index_scope City::Nothing
123
124
  end
124
125
  DUMMY_CITY_INDEX
125
126
  end.to raise_error(NameError)
@@ -127,24 +128,6 @@ describe Chewy::Index do
127
128
  end
128
129
  end
129
130
 
130
- describe '.type_hash' do
131
- specify { expect(DummiesIndex.type_hash['dummy']).to eq(DummiesIndex::Dummy) }
132
- specify { expect(DummiesIndex.type_hash).to have_key 'dummy' }
133
- specify { expect(DummiesIndex.type_hash['dummy']).to be < Chewy::Type }
134
- specify { expect(DummiesIndex.type_hash['dummy'].type_name).to eq('dummy') }
135
- end
136
-
137
- describe '.type' do
138
- specify { expect(DummiesIndex.type('dummy')).to eq(DummiesIndex::Dummy) }
139
- specify { expect { DummiesIndex.type('not-the-dummy') }.to raise_error(Chewy::UndefinedType) }
140
- end
141
-
142
- specify { expect(DummiesIndex.type_names).to eq(DummiesIndex.type_hash.keys) }
143
-
144
- describe '.types' do
145
- specify { expect(DummiesIndex.types).to eq(DummiesIndex.type_hash.values) }
146
- end
147
-
148
131
  describe '.settings' do
149
132
  before do
150
133
  allow(Chewy).to receive_messages(config: Chewy::Config.send(:new))
@@ -156,7 +139,11 @@ describe Chewy::Index do
156
139
  Chewy.filter :names_nysiis, type: 'phonetic', encoder: 'nysiis', replace: false
157
140
  end
158
141
 
159
- let(:documents) { stub_index(:documents) { settings analysis: {analyzer: [:name, :phone, {sorted: {option: :baz}}]} } }
142
+ let(:documents) do
143
+ stub_index(:documents) do
144
+ settings analysis: {analyzer: [:name, :phone, {sorted: {option: :baz}}]}
145
+ end
146
+ end
160
147
 
161
148
  specify { expect { documents.settings_hash }.to_not change(documents._settings, :inspect) }
162
149
  specify do
@@ -180,20 +167,18 @@ describe Chewy::Index do
180
167
  filter(terms: {colors: colors.flatten(1).map(&:to_s)})
181
168
  end
182
169
 
183
- define_type :city do
184
- def self.by_id; end
185
- field :colors
186
- end
170
+ def self.by_id; end
171
+ field :colors
187
172
  end
188
173
  end
189
174
 
190
175
  specify { expect(described_class.scopes).to eq([]) }
191
- specify { expect(PlacesIndex.scopes).to match_array(%i[by_rating colors]) }
176
+ specify { expect(PlacesIndex.scopes).to match_array(%i[by_rating colors by_id]) }
192
177
 
193
178
  context do
194
179
  before do
195
180
  Chewy.massacre
196
- PlacesIndex::City.import!(
181
+ PlacesIndex.import!(
197
182
  double(colors: ['red']),
198
183
  double(colors: %w[red green]),
199
184
  double(colors: %w[green yellow])
@@ -201,16 +186,12 @@ describe Chewy::Index do
201
186
  end
202
187
 
203
188
  specify do
204
- # This `blank?`` call is for the messed scopes bug reproduction. See #573
205
- PlacesIndex::City.blank?
206
189
  expect(PlacesIndex.colors(:green).map(&:colors))
207
190
  .to contain_exactly(%w[red green], %w[green yellow])
208
191
  end
209
192
 
210
193
  specify do
211
- # This `blank?` call is for the messed scopes bug reproduction. See #573
212
- PlacesIndex::City.blank?
213
- expect(PlacesIndex::City.colors(:green).map(&:colors))
194
+ expect(PlacesIndex.colors(:green).map(&:colors))
214
195
  .to contain_exactly(%w[red green], %w[green yellow])
215
196
  end
216
197
  end
@@ -220,17 +201,19 @@ describe Chewy::Index do
220
201
  before { allow(Chewy).to receive_messages(config: Chewy::Config.send(:new)) }
221
202
 
222
203
  specify { expect(stub_index(:documents).settings_hash).to eq({}) }
223
- specify { expect(stub_index(:documents) { settings number_of_shards: 1 }.settings_hash).to eq(settings: {number_of_shards: 1}) }
204
+ specify do
205
+ expect(stub_index(:documents) do
206
+ settings number_of_shards: 1
207
+ end.settings_hash).to eq(settings: {number_of_shards: 1})
208
+ end
224
209
  end
225
210
 
226
211
  describe '.mappings_hash' do
227
212
  specify { expect(stub_index(:documents).mappings_hash).to eq({}) }
228
- specify { expect(stub_index(:documents) { define_type :document }.mappings_hash).to eq({}) }
213
+ specify { expect(stub_index(:documents) { index_scope :document }.mappings_hash).to eq({}) }
229
214
  specify do
230
215
  expect(stub_index(:documents) do
231
- define_type :document do
232
- field :date, type: 'date'
233
- end
216
+ field :date, type: 'date'
234
217
  end.mappings_hash).to eq(mappings: {properties: {date: {type: 'date'}}})
235
218
  end
236
219
  end
@@ -239,20 +222,20 @@ describe Chewy::Index do
239
222
  before { allow(Chewy).to receive_messages(config: Chewy::Config.send(:new)) }
240
223
 
241
224
  specify { expect(stub_index(:documents).specification_hash).to eq({}) }
242
- specify { expect(stub_index(:documents) { settings number_of_shards: 1 }.specification_hash.keys).to eq([:settings]) }
243
225
  specify do
244
226
  expect(stub_index(:documents) do
245
- define_type :document do
246
- field :name
247
- end
227
+ settings number_of_shards: 1
228
+ end.specification_hash.keys).to eq([:settings])
229
+ end
230
+ specify do
231
+ expect(stub_index(:documents) do
232
+ field :name
248
233
  end.specification_hash.keys).to eq([:mappings])
249
234
  end
250
235
  specify do
251
236
  expect(stub_index(:documents) do
252
237
  settings number_of_shards: 1
253
- define_type :document do
254
- field :name
255
- end
238
+ field :name
256
239
  end.specification_hash.keys).to match_array(%i[mappings settings])
257
240
  end
258
241
  end
@@ -263,50 +246,24 @@ describe Chewy::Index do
263
246
  specify { expect(subject.specification).to equal(subject.specification) }
264
247
  end
265
248
 
266
- describe '.default_prefix' do
267
- before { allow(Chewy).to receive_messages(configuration: {prefix: 'testing'}) }
268
-
269
- context do
270
- before { expect(ActiveSupport::Deprecation).to receive(:warn).once }
271
- specify { expect(DummiesIndex.default_prefix).to eq('testing') }
272
- end
273
-
274
- context do
275
- before do
276
- DummiesIndex.class_eval do
277
- def self.default_prefix
278
- 'borogoves'
279
- end
280
- end
281
- end
282
-
283
- before { expect(ActiveSupport::Deprecation).to receive(:warn).once }
284
- specify { expect(DummiesIndex.index_name).to eq('borogoves_dummies') }
285
- end
286
- end
287
-
288
249
  context 'index call inside index', :orm do
289
250
  before do
290
251
  stub_index(:cities) do
291
- define_type :city do
292
- field :country_name, value: (lambda do |city|
293
- CountriesIndex::Country.filter(term: {_id: city.country_id}).first.name
294
- end)
295
- end
252
+ field :country_name, value: (lambda do |city|
253
+ CountriesIndex.filter(term: {_id: city.country_id}).first.name
254
+ end)
296
255
  end
297
256
 
298
257
  stub_index(:countries) do
299
- define_type :country do
300
- field :name
301
- end
258
+ field :name
302
259
  end
303
260
 
304
- CountriesIndex::Country.import!(double(id: 1, name: 'Country'))
261
+ CountriesIndex.import!(double(id: 1, name: 'Country'))
305
262
  end
306
263
 
307
264
  specify do
308
- expect { CitiesIndex::City.import!(double(country_id: 1)) }
309
- .to update_index(CitiesIndex::City).and_reindex(country_name: 'Country')
265
+ expect { CitiesIndex.import!(double(country_id: 1)) }
266
+ .to update_index(CitiesIndex).and_reindex(country_name: 'Country')
310
267
  end
311
268
  end
312
269
  end
@@ -13,14 +13,12 @@ describe Chewy::Journal do
13
13
  end
14
14
 
15
15
  stub_index("#{namespace}cities") do
16
- define_type City do
17
- default_import_options journal: true
18
- end
16
+ index_scope City
17
+ default_import_options journal: true
19
18
  end
20
19
  stub_index("#{namespace}countries") do
21
- define_type Country do
22
- default_import_options journal: true
23
- end
20
+ index_scope Country
21
+ default_import_options journal: true
24
22
  end
25
23
 
26
24
  Chewy.massacre
@@ -67,63 +65,54 @@ describe Chewy::Journal do
67
65
  expected_journal = [
68
66
  {
69
67
  'index_name' => "#{namespace}cities",
70
- 'type_name' => 'city',
71
68
  'action' => 'index',
72
69
  'references' => ['1'].map(&Base64.method(:encode64)),
73
70
  'created_at' => time.utc.as_json
74
71
  },
75
72
  {
76
73
  'index_name' => "#{namespace}cities",
77
- 'type_name' => 'city',
78
74
  'action' => 'index',
79
75
  'references' => ['2'].map(&Base64.method(:encode64)),
80
76
  'created_at' => time.utc.as_json
81
77
  },
82
78
  {
83
79
  'index_name' => "#{namespace}countries",
84
- 'type_name' => 'country',
85
80
  'action' => 'index',
86
81
  'references' => ['1'].map(&Base64.method(:encode64)),
87
82
  'created_at' => time.utc.as_json
88
83
  },
89
84
  {
90
85
  'index_name' => "#{namespace}countries",
91
- 'type_name' => 'country',
92
86
  'action' => 'index',
93
87
  'references' => ['2'].map(&Base64.method(:encode64)),
94
88
  'created_at' => time.utc.as_json
95
89
  },
96
90
  {
97
91
  'index_name' => "#{namespace}countries",
98
- 'type_name' => 'country',
99
92
  'action' => 'index',
100
93
  'references' => ['3'].map(&Base64.method(:encode64)),
101
94
  'created_at' => time.utc.as_json
102
95
  },
103
96
  {
104
97
  'index_name' => "#{namespace}cities",
105
- 'type_name' => 'city',
106
98
  'action' => 'index',
107
99
  'references' => %w[1 2].map(&Base64.method(:encode64)),
108
100
  'created_at' => import_time.utc.as_json
109
101
  },
110
102
  {
111
103
  'index_name' => "#{namespace}countries",
112
- 'type_name' => 'country',
113
104
  'action' => 'index',
114
105
  'references' => %w[1 2 3].map(&Base64.method(:encode64)),
115
106
  'created_at' => import_time.utc.as_json
116
107
  },
117
108
  {
118
109
  'index_name' => "#{namespace}cities",
119
- 'type_name' => 'city',
120
110
  'action' => 'index',
121
111
  'references' => ['1'].map(&Base64.method(:encode64)),
122
112
  'created_at' => update_time.utc.as_json
123
113
  },
124
114
  {
125
115
  'index_name' => "#{namespace}countries",
126
- 'type_name' => 'country',
127
116
  'action' => 'delete',
128
117
  'references' => ['2'].map(&Base64.method(:encode64)),
129
118
  'created_at' => destroy_time.utc.as_json
@@ -166,14 +155,12 @@ describe Chewy::Journal do
166
155
  end
167
156
 
168
157
  stub_index(:cities) do
169
- define_type City do
170
- default_import_options journal: true
171
- end
158
+ index_scope City
159
+ default_import_options journal: true
172
160
  end
173
161
  stub_index(:countries) do
174
- define_type Country do
175
- default_import_options journal: true
176
- end
162
+ index_scope Country
163
+ default_import_options journal: true
177
164
  end
178
165
  end
179
166
 
@@ -235,7 +222,7 @@ describe Chewy::Journal do
235
222
  let!(:journal_entries) do
236
223
  record = Chewy::Stash::Journal.entries(time).first
237
224
  Array.new(count_of_checks) do |i|
238
- Chewy::Stash::Journal::Journal.new(
225
+ Chewy::Stash::Journal.new(
239
226
  record.attributes.merge(
240
227
  'created_at' => time.to_i + i,
241
228
  'references' => [i.to_s]