chewy 8.0.0 → 8.1.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 (144) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +42 -0
  3. data/README.md +30 -16
  4. data/lib/chewy/errors.rb +3 -0
  5. data/lib/chewy/fields/root.rb +3 -3
  6. data/lib/chewy/index/crutch.rb +12 -2
  7. data/lib/chewy/index/import/bulk_builder.rb +4 -3
  8. data/lib/chewy/index/import/routine.rb +2 -1
  9. data/lib/chewy/index/import.rb +4 -4
  10. data/lib/chewy/index/witchcraft.rb +24 -8
  11. data/lib/chewy/multi_search.rb +1 -1
  12. data/lib/chewy/search/parameters/runtime_mappings.rb +14 -0
  13. data/lib/chewy/search/request.rb +18 -2
  14. data/lib/chewy/search/scrolling.rb +14 -6
  15. data/lib/chewy/stash.rb +10 -6
  16. data/lib/chewy/version.rb +1 -1
  17. metadata +5 -131
  18. data/.github/CODEOWNERS +0 -1
  19. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -39
  20. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  21. data/.github/PULL_REQUEST_TEMPLATE.md +0 -16
  22. data/.github/dependabot.yml +0 -42
  23. data/.github/workflows/ruby.yml +0 -61
  24. data/.gitignore +0 -22
  25. data/.rspec +0 -2
  26. data/.rubocop.yml +0 -64
  27. data/.rubocop_todo.yml +0 -225
  28. data/.yardopts +0 -5
  29. data/CODE_OF_CONDUCT.md +0 -14
  30. data/CONTRIBUTING.md +0 -63
  31. data/Gemfile +0 -22
  32. data/Guardfile +0 -25
  33. data/Rakefile +0 -17
  34. data/chewy.gemspec +0 -24
  35. data/docker-compose.yml +0 -14
  36. data/docs/README.md +0 -16
  37. data/docs/configuration.md +0 -440
  38. data/docs/import.md +0 -122
  39. data/docs/indexing.md +0 -329
  40. data/docs/querying.md +0 -72
  41. data/docs/rake_tasks.md +0 -108
  42. data/docs/testing.md +0 -41
  43. data/docs/troubleshooting.md +0 -101
  44. data/filters +0 -78
  45. data/gemfiles/base.gemfile +0 -12
  46. data/gemfiles/rails.7.2.activerecord.gemfile +0 -14
  47. data/gemfiles/rails.8.0.activerecord.gemfile +0 -14
  48. data/migration_guide.md +0 -56
  49. data/spec/chewy/config_spec.rb +0 -110
  50. data/spec/chewy/elastic_client_spec.rb +0 -26
  51. data/spec/chewy/fields/base_spec.rb +0 -700
  52. data/spec/chewy/fields/root_spec.rb +0 -142
  53. data/spec/chewy/fields/time_fields_spec.rb +0 -28
  54. data/spec/chewy/index/actions_spec.rb +0 -851
  55. data/spec/chewy/index/adapter/active_record_spec.rb +0 -663
  56. data/spec/chewy/index/adapter/object_spec.rb +0 -243
  57. data/spec/chewy/index/aliases_spec.rb +0 -49
  58. data/spec/chewy/index/import/bulk_builder_spec.rb +0 -494
  59. data/spec/chewy/index/import/bulk_request_spec.rb +0 -95
  60. data/spec/chewy/index/import/journal_builder_spec.rb +0 -87
  61. data/spec/chewy/index/import/routine_spec.rb +0 -110
  62. data/spec/chewy/index/import_spec.rb +0 -615
  63. data/spec/chewy/index/mapping_spec.rb +0 -135
  64. data/spec/chewy/index/observe/active_record_methods_spec.rb +0 -68
  65. data/spec/chewy/index/observe/callback_spec.rb +0 -139
  66. data/spec/chewy/index/observe_spec.rb +0 -143
  67. data/spec/chewy/index/settings_spec.rb +0 -136
  68. data/spec/chewy/index/specification_spec.rb +0 -156
  69. data/spec/chewy/index/syncer_spec.rb +0 -118
  70. data/spec/chewy/index/witchcraft_spec.rb +0 -245
  71. data/spec/chewy/index/wrapper_spec.rb +0 -100
  72. data/spec/chewy/index_spec.rb +0 -269
  73. data/spec/chewy/journal_spec.rb +0 -223
  74. data/spec/chewy/minitest/helpers_spec.rb +0 -194
  75. data/spec/chewy/minitest/search_index_receiver_spec.rb +0 -120
  76. data/spec/chewy/multi_search_spec.rb +0 -84
  77. data/spec/chewy/rake_helper_spec.rb +0 -656
  78. data/spec/chewy/repository_spec.rb +0 -50
  79. data/spec/chewy/rspec/build_query_spec.rb +0 -34
  80. data/spec/chewy/rspec/helpers_spec.rb +0 -61
  81. data/spec/chewy/rspec/update_index_spec.rb +0 -313
  82. data/spec/chewy/runtime/version_spec.rb +0 -48
  83. data/spec/chewy/runtime_spec.rb +0 -9
  84. data/spec/chewy/search/loader_spec.rb +0 -83
  85. data/spec/chewy/search/pagination/kaminari_examples.rb +0 -69
  86. data/spec/chewy/search/pagination/kaminari_spec.rb +0 -21
  87. data/spec/chewy/search/parameters/aggs_spec.rb +0 -5
  88. data/spec/chewy/search/parameters/bool_storage_examples.rb +0 -53
  89. data/spec/chewy/search/parameters/collapse_spec.rb +0 -5
  90. data/spec/chewy/search/parameters/docvalue_fields_spec.rb +0 -5
  91. data/spec/chewy/search/parameters/explain_spec.rb +0 -5
  92. data/spec/chewy/search/parameters/filter_spec.rb +0 -5
  93. data/spec/chewy/search/parameters/hash_storage_examples.rb +0 -59
  94. data/spec/chewy/search/parameters/highlight_spec.rb +0 -5
  95. data/spec/chewy/search/parameters/ignore_unavailable_spec.rb +0 -67
  96. data/spec/chewy/search/parameters/indices_spec.rb +0 -99
  97. data/spec/chewy/search/parameters/integer_storage_examples.rb +0 -32
  98. data/spec/chewy/search/parameters/knn_spec.rb +0 -5
  99. data/spec/chewy/search/parameters/limit_spec.rb +0 -5
  100. data/spec/chewy/search/parameters/load_spec.rb +0 -60
  101. data/spec/chewy/search/parameters/min_score_spec.rb +0 -32
  102. data/spec/chewy/search/parameters/none_spec.rb +0 -5
  103. data/spec/chewy/search/parameters/offset_spec.rb +0 -5
  104. data/spec/chewy/search/parameters/order_spec.rb +0 -72
  105. data/spec/chewy/search/parameters/post_filter_spec.rb +0 -5
  106. data/spec/chewy/search/parameters/preference_spec.rb +0 -5
  107. data/spec/chewy/search/parameters/profile_spec.rb +0 -5
  108. data/spec/chewy/search/parameters/query_spec.rb +0 -5
  109. data/spec/chewy/search/parameters/query_storage_examples.rb +0 -434
  110. data/spec/chewy/search/parameters/request_cache_spec.rb +0 -67
  111. data/spec/chewy/search/parameters/rescore_spec.rb +0 -62
  112. data/spec/chewy/search/parameters/script_fields_spec.rb +0 -5
  113. data/spec/chewy/search/parameters/search_after_spec.rb +0 -35
  114. data/spec/chewy/search/parameters/search_type_spec.rb +0 -5
  115. data/spec/chewy/search/parameters/source_spec.rb +0 -162
  116. data/spec/chewy/search/parameters/storage_spec.rb +0 -60
  117. data/spec/chewy/search/parameters/stored_fields_spec.rb +0 -126
  118. data/spec/chewy/search/parameters/string_array_storage_examples.rb +0 -63
  119. data/spec/chewy/search/parameters/string_storage_examples.rb +0 -32
  120. data/spec/chewy/search/parameters/suggest_spec.rb +0 -5
  121. data/spec/chewy/search/parameters/terminate_after_spec.rb +0 -5
  122. data/spec/chewy/search/parameters/timeout_spec.rb +0 -5
  123. data/spec/chewy/search/parameters/track_scores_spec.rb +0 -5
  124. data/spec/chewy/search/parameters/track_total_hits_spec.rb +0 -5
  125. data/spec/chewy/search/parameters/version_spec.rb +0 -5
  126. data/spec/chewy/search/parameters_spec.rb +0 -161
  127. data/spec/chewy/search/query_proxy_spec.rb +0 -95
  128. data/spec/chewy/search/request_spec.rb +0 -886
  129. data/spec/chewy/search/response_spec.rb +0 -180
  130. data/spec/chewy/search/scrolling_spec.rb +0 -171
  131. data/spec/chewy/search_spec.rb +0 -127
  132. data/spec/chewy/stash_spec.rb +0 -85
  133. data/spec/chewy/strategy/active_job_spec.rb +0 -73
  134. data/spec/chewy/strategy/atomic_no_refresh_spec.rb +0 -60
  135. data/spec/chewy/strategy/atomic_spec.rb +0 -61
  136. data/spec/chewy/strategy/delayed_sidekiq_spec.rb +0 -225
  137. data/spec/chewy/strategy/lazy_sidekiq_spec.rb +0 -214
  138. data/spec/chewy/strategy/sidekiq_spec.rb +0 -52
  139. data/spec/chewy/strategy_spec.rb +0 -125
  140. data/spec/chewy_spec.rb +0 -100
  141. data/spec/spec_helper.rb +0 -69
  142. data/spec/support/active_record.rb +0 -124
  143. data/spec/support/class_helpers.rb +0 -16
  144. data/spec/support/fail_helpers.rb +0 -13
@@ -1,142 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Chewy::Fields::Root do
4
- subject(:field) { described_class.new('product') }
5
-
6
- describe '#dynamic_template' do
7
- specify do
8
- field.dynamic_template 'hello', type: 'keyword'
9
- field.dynamic_template 'hello*', :integer
10
- field.dynamic_template 'hello.*'
11
- field.dynamic_template(/hello/)
12
- field.dynamic_template(/hello.*/)
13
- field.dynamic_template template_42: {mapping: {}, match: ''}
14
- field.dynamic_template(/hello\..*/)
15
-
16
- expect(field.mappings_hash).to eq(dynamic_templates: [
17
- {template_1: {mapping: {type: 'keyword'}, match: 'hello'}},
18
- {template_2: {mapping: {}, match_mapping_type: 'integer', match: 'hello*'}},
19
- {template_3: {mapping: {}, path_match: 'hello.*'}},
20
- {template_4: {mapping: {}, match: 'hello', match_pattern: 'regexp'}},
21
- {template_5: {mapping: {}, match: 'hello.*', match_pattern: 'regexp'}},
22
- {template_42: {mapping: {}, match: ''}},
23
- {template_7: {mapping: {}, path_match: 'hello\..*', match_pattern: 'regexp'}}
24
- ])
25
- end
26
-
27
- context do
28
- subject(:field) do
29
- described_class.new('product', dynamic_templates: [
30
- {template_42: {mapping: {}, match: ''}}
31
- ])
32
- end
33
-
34
- specify do
35
- field.dynamic_template 'hello', type: 'keyword'
36
- expect(field.mappings_hash).to eq(dynamic_templates: [
37
- {template_42: {mapping: {}, match: ''}},
38
- {template_1: {mapping: {type: 'keyword'}, match: 'hello'}}
39
- ])
40
- end
41
- end
42
- end
43
-
44
- describe '#compose' do
45
- context 'empty children', :orm do
46
- before do
47
- stub_model(:city)
48
- stub_index(:places) do
49
- index_scope City
50
- end
51
- end
52
-
53
- let(:city) { City.new(name: 'London', rating: 100) }
54
-
55
- specify do
56
- expect(PlacesIndex.root.compose(city))
57
- .to match(hash_including('name' => 'London', 'rating' => 100))
58
- end
59
- specify do
60
- expect(PlacesIndex.root.compose(city, fields: %i[name borogoves]))
61
- .to eq('name' => 'London')
62
- end
63
- end
64
-
65
- context 'has children' do
66
- before do
67
- stub_index(:places) do
68
- field :name, :rating
69
- end
70
- end
71
-
72
- let(:city) { double(name: 'London', rating: 100) }
73
-
74
- specify do
75
- expect(PlacesIndex.root.compose(city))
76
- .to eq('name' => 'London', 'rating' => 100)
77
- end
78
- specify do
79
- expect(PlacesIndex.root.compose(city, fields: %i[name borogoves]))
80
- .to eq('name' => 'London')
81
- end
82
- end
83
-
84
- context 'root value provided' do
85
- before do
86
- stub_index(:places) do
87
- root value: ->(o) { {name: "#{o.name}Modified", rating: o.rating.next} }
88
- end
89
- end
90
-
91
- let(:city) { double(name: 'London', rating: 100) }
92
-
93
- specify do
94
- expect(PlacesIndex.root.compose(city))
95
- .to eq('name' => 'LondonModified', 'rating' => 101)
96
- end
97
-
98
- specify do
99
- expect(PlacesIndex.root.compose(city, fields: %i[name borogoves]))
100
- .to eq('name' => 'LondonModified')
101
- end
102
- end
103
-
104
- context 'complex evaluations' do
105
- before do
106
- stub_index(:places) do
107
- root value: ->(o) { {name: "#{o.name}Modified", rating: o.rating.next} } do
108
- field :name, value: ->(o) { "#{o[:name]}Modified" }
109
- field :rating
110
- end
111
- end
112
- end
113
-
114
- let(:city) { double(name: 'London', rating: 100) }
115
-
116
- specify do
117
- expect(PlacesIndex.root.compose(city))
118
- .to eq('name' => 'LondonModifiedModified', 'rating' => 101)
119
- end
120
-
121
- specify do
122
- expect(PlacesIndex.root.compose(city, fields: %i[name borogoves]))
123
- .to eq('name' => 'LondonModifiedModified')
124
- end
125
- end
126
- end
127
-
128
- describe '#child_hash' do
129
- before do
130
- stub_index(:places) do
131
- field :name, :rating
132
- end
133
- end
134
-
135
- specify do
136
- expect(PlacesIndex.root.child_hash).to match(
137
- name: an_instance_of(Chewy::Fields::Base).and(have_attributes(name: :name)),
138
- rating: an_instance_of(Chewy::Fields::Base).and(have_attributes(name: :rating))
139
- )
140
- end
141
- end
142
- end
@@ -1,28 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'Time fields' do
4
- before { drop_indices }
5
-
6
- before do
7
- stub_index(:posts) do
8
- field :published_at, type: 'date'
9
- end
10
- end
11
-
12
- before do
13
- PostsIndex.import(
14
- double(published_at: ActiveSupport::TimeZone[-28_800].parse('2014/12/18 19:00')),
15
- double(published_at: ActiveSupport::TimeZone[-21_600].parse('2014/12/18 20:00')),
16
- double(published_at: ActiveSupport::TimeZone[-21_600].parse('2014/12/17 20:00'))
17
- )
18
- end
19
-
20
- let(:time) { ActiveSupport::TimeZone[-14_400].parse('2014/12/18 22:00') }
21
- let(:range) { (time - 1.minute)..(time + 1.minute) }
22
-
23
- specify { expect(PostsIndex.total).to eq(3) }
24
- specify { expect(PostsIndex.filter(range: {published_at: {gte: range.min, lte: range.max}}).size).to eq(1) }
25
- specify do
26
- expect(PostsIndex.filter(range: {published_at: {gt: range.min.utc, lt: (range.max + 1.hour).utc}}).size).to eq(2)
27
- end
28
- end