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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +58 -0
- data/.rubocop.yml +13 -8
- data/.rubocop_todo.yml +110 -22
- data/CHANGELOG.md +53 -0
- data/Gemfile +0 -7
- data/Guardfile +3 -1
- data/README.md +282 -245
- data/chewy.gemspec +3 -5
- data/gemfiles/rails.5.2.activerecord.gemfile +8 -14
- data/gemfiles/rails.6.0.activerecord.gemfile +8 -14
- data/gemfiles/rails.6.1.activerecord.gemfile +8 -14
- data/lib/chewy.rb +21 -75
- data/lib/chewy/config.rb +40 -40
- data/lib/chewy/errors.rb +0 -12
- data/lib/chewy/fields/base.rb +11 -1
- data/lib/chewy/fields/root.rb +3 -4
- data/lib/chewy/index.rb +46 -87
- data/lib/chewy/index/actions.rb +51 -32
- data/lib/chewy/{type → index}/adapter/active_record.rb +12 -3
- data/lib/chewy/{type → index}/adapter/base.rb +2 -3
- data/lib/chewy/{type → index}/adapter/object.rb +27 -31
- data/lib/chewy/{type → index}/adapter/orm.rb +11 -14
- data/lib/chewy/{type → index}/crutch.rb +5 -5
- data/lib/chewy/{type → index}/import.rb +36 -27
- data/lib/chewy/{type → index}/import/bulk_builder.rb +15 -13
- data/lib/chewy/{type → index}/import/bulk_request.rb +6 -6
- data/lib/chewy/{type → index}/import/journal_builder.rb +10 -10
- data/lib/chewy/{type → index}/import/routine.rb +15 -14
- data/lib/chewy/{type → index}/mapping.rb +26 -31
- data/lib/chewy/{type → index}/observe.rb +9 -19
- data/lib/chewy/index/specification.rb +1 -0
- data/lib/chewy/{type → index}/syncer.rb +60 -57
- data/lib/chewy/{type → index}/witchcraft.rb +11 -7
- data/lib/chewy/{type → index}/wrapper.rb +2 -2
- data/lib/chewy/journal.rb +8 -8
- data/lib/chewy/minitest/helpers.rb +9 -13
- data/lib/chewy/minitest/search_index_receiver.rb +22 -26
- data/lib/chewy/railtie.rb +4 -2
- data/lib/chewy/rake_helper.rb +82 -107
- data/lib/chewy/rspec/update_index.rb +47 -43
- data/lib/chewy/search.rb +4 -17
- data/lib/chewy/search/loader.rb +18 -30
- data/lib/chewy/search/parameters.rb +4 -2
- data/lib/chewy/search/parameters/concerns/query_storage.rb +2 -2
- data/lib/chewy/search/parameters/source.rb +5 -1
- data/lib/chewy/search/query_proxy.rb +9 -2
- data/lib/chewy/search/request.rb +82 -86
- data/lib/chewy/search/response.rb +4 -4
- data/lib/chewy/search/scoping.rb +6 -7
- data/lib/chewy/search/scrolling.rb +11 -11
- data/lib/chewy/stash.rb +14 -22
- data/lib/chewy/strategy.rb +3 -19
- data/lib/chewy/strategy/sidekiq.rb +1 -0
- data/lib/chewy/version.rb +1 -1
- data/lib/generators/chewy/install_generator.rb +1 -1
- data/lib/tasks/chewy.rake +10 -22
- data/migration_guide.md +14 -0
- data/spec/chewy/config_spec.rb +14 -39
- data/spec/chewy/fields/base_spec.rb +412 -148
- data/spec/chewy/fields/root_spec.rb +16 -24
- data/spec/chewy/fields/time_fields_spec.rb +5 -5
- data/spec/chewy/index/actions_spec.rb +270 -24
- data/spec/chewy/{type → index}/adapter/active_record_spec.rb +68 -40
- data/spec/chewy/{type → index}/adapter/object_spec.rb +21 -6
- data/spec/chewy/{type → index}/import/bulk_builder_spec.rb +23 -31
- data/spec/chewy/{type → index}/import/bulk_request_spec.rb +5 -6
- data/spec/chewy/{type → index}/import/journal_builder_spec.rb +9 -15
- data/spec/chewy/{type → index}/import/routine_spec.rb +16 -16
- data/spec/chewy/{type → index}/import_spec.rb +102 -98
- data/spec/chewy/{type → index}/mapping_spec.rb +46 -54
- data/spec/chewy/index/observe_spec.rb +116 -0
- data/spec/chewy/index/settings_spec.rb +3 -1
- data/spec/chewy/index/specification_spec.rb +7 -17
- data/spec/chewy/{type → index}/syncer_spec.rb +14 -19
- data/spec/chewy/{type → index}/witchcraft_spec.rb +20 -22
- data/spec/chewy/index/wrapper_spec.rb +100 -0
- data/spec/chewy/index_spec.rb +59 -102
- data/spec/chewy/journal_spec.rb +9 -22
- data/spec/chewy/minitest/helpers_spec.rb +13 -15
- data/spec/chewy/minitest/search_index_receiver_spec.rb +22 -26
- data/spec/chewy/multi_search_spec.rb +4 -5
- data/spec/chewy/rake_helper_spec.rb +145 -55
- data/spec/chewy/rspec/update_index_spec.rb +74 -71
- data/spec/chewy/search/loader_spec.rb +19 -37
- data/spec/chewy/search/pagination/kaminari_examples.rb +3 -5
- data/spec/chewy/search/pagination/kaminari_spec.rb +1 -1
- data/spec/chewy/search/parameters/indices_spec.rb +2 -8
- data/spec/chewy/search/parameters/order_spec.rb +1 -1
- data/spec/chewy/search/parameters/query_storage_examples.rb +67 -21
- data/spec/chewy/search/parameters/search_after_spec.rb +4 -1
- data/spec/chewy/search/parameters/source_spec.rb +8 -2
- data/spec/chewy/search/parameters_spec.rb +12 -3
- data/spec/chewy/search/query_proxy_spec.rb +68 -17
- data/spec/chewy/search/request_spec.rb +222 -74
- data/spec/chewy/search/response_spec.rb +12 -12
- data/spec/chewy/search/scrolling_spec.rb +7 -9
- data/spec/chewy/search_spec.rb +32 -35
- data/spec/chewy/stash_spec.rb +9 -21
- data/spec/chewy/strategy/active_job_spec.rb +8 -8
- data/spec/chewy/strategy/atomic_spec.rb +9 -10
- data/spec/chewy/strategy/sidekiq_spec.rb +8 -8
- data/spec/chewy/strategy_spec.rb +19 -15
- data/spec/chewy_spec.rb +14 -100
- data/spec/spec_helper.rb +2 -21
- data/spec/support/active_record.rb +15 -5
- metadata +44 -103
- data/.circleci/config.yml +0 -214
- data/Appraisals +0 -81
- data/gemfiles/rails.5.2.mongoid.6.4.gemfile +0 -17
- data/gemfiles/sequel.4.45.gemfile +0 -11
- data/lib/chewy/search/pagination/will_paginate.rb +0 -43
- data/lib/chewy/strategy/resque.rb +0 -27
- data/lib/chewy/strategy/shoryuken.rb +0 -40
- data/lib/chewy/type.rb +0 -120
- data/lib/chewy/type/actions.rb +0 -43
- data/lib/chewy/type/adapter/mongoid.rb +0 -67
- data/lib/chewy/type/adapter/sequel.rb +0 -93
- data/lib/sequel/plugins/chewy_observe.rb +0 -63
- data/spec/chewy/search/pagination/will_paginate_examples.rb +0 -63
- data/spec/chewy/search/pagination/will_paginate_spec.rb +0 -23
- data/spec/chewy/strategy/resque_spec.rb +0 -46
- data/spec/chewy/strategy/shoryuken_spec.rb +0 -70
- data/spec/chewy/type/actions_spec.rb +0 -50
- data/spec/chewy/type/adapter/mongoid_spec.rb +0 -372
- data/spec/chewy/type/adapter/sequel_spec.rb +0 -472
- data/spec/chewy/type/observe_spec.rb +0 -137
- data/spec/chewy/type/wrapper_spec.rb +0 -100
- data/spec/chewy/type_spec.rb +0 -55
- data/spec/support/mongoid.rb +0 -93
- 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
|
data/spec/chewy/index_spec.rb
CHANGED
|
@@ -2,9 +2,7 @@ require 'spec_helper'
|
|
|
2
2
|
|
|
3
3
|
describe Chewy::Index do
|
|
4
4
|
before do
|
|
5
|
-
stub_index(:dummies)
|
|
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
|
-
|
|
14
|
+
index_scope City
|
|
17
15
|
end
|
|
18
16
|
|
|
19
17
|
stub_index(:countries) do
|
|
20
|
-
|
|
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
|
|
34
|
-
expect { CountriesIndex.import
|
|
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
|
|
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
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
specify
|
|
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 '.
|
|
92
|
-
specify { expect(DummiesIndex.
|
|
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) {
|
|
96
|
-
specify { expect(DummiesIndex.
|
|
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) {
|
|
102
|
-
specify { expect(DummiesIndex.
|
|
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
|
-
|
|
114
|
-
|
|
114
|
+
index_scope City
|
|
115
|
+
index_scope Country
|
|
115
116
|
end
|
|
116
117
|
DUMMY_CITY_INDEX
|
|
117
|
-
end.to raise_error(/
|
|
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
|
-
|
|
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)
|
|
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
|
-
|
|
184
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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) {
|
|
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
|
-
|
|
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
|
-
|
|
246
|
-
|
|
247
|
-
|
|
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
|
-
|
|
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
|
-
|
|
292
|
-
|
|
293
|
-
|
|
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
|
-
|
|
300
|
-
field :name
|
|
301
|
-
end
|
|
258
|
+
field :name
|
|
302
259
|
end
|
|
303
260
|
|
|
304
|
-
CountriesIndex
|
|
261
|
+
CountriesIndex.import!(double(id: 1, name: 'Country'))
|
|
305
262
|
end
|
|
306
263
|
|
|
307
264
|
specify do
|
|
308
|
-
expect { CitiesIndex
|
|
309
|
-
.to update_index(CitiesIndex
|
|
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
|
data/spec/chewy/journal_spec.rb
CHANGED
|
@@ -13,14 +13,12 @@ describe Chewy::Journal do
|
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
stub_index("#{namespace}cities") do
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
end
|
|
16
|
+
index_scope City
|
|
17
|
+
default_import_options journal: true
|
|
19
18
|
end
|
|
20
19
|
stub_index("#{namespace}countries") do
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
170
|
-
|
|
171
|
-
end
|
|
158
|
+
index_scope City
|
|
159
|
+
default_import_options journal: true
|
|
172
160
|
end
|
|
173
161
|
stub_index(:countries) do
|
|
174
|
-
|
|
175
|
-
|
|
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
|
|
225
|
+
Chewy::Stash::Journal.new(
|
|
239
226
|
record.attributes.merge(
|
|
240
227
|
'created_at' => time.to_i + i,
|
|
241
228
|
'references' => [i.to_s]
|