chewy 7.1.0 → 7.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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]