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
data/spec/chewy_spec.rb DELETED
@@ -1,100 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Chewy do
4
- it 'has a version number' do
5
- expect(Chewy::VERSION).not_to be_nil
6
- end
7
-
8
- describe '.derive_name' do
9
- before do
10
- stub_const('SomeIndex', Class.new)
11
-
12
- stub_index(:developers)
13
-
14
- stub_index('namespace/autocomplete')
15
- end
16
-
17
- specify do
18
- expect { described_class.derive_name('some') }
19
- .to raise_error(Chewy::UndefinedIndex, /SomeIndex/)
20
- end
21
- specify do
22
- expect { described_class.derive_name('borogoves') }
23
- .to raise_error(Chewy::UndefinedIndex, /Borogoves/)
24
- end
25
-
26
- specify { expect(described_class.derive_name(DevelopersIndex)).to eq(DevelopersIndex) }
27
- specify { expect(described_class.derive_name('developers_index')).to eq(DevelopersIndex) }
28
- specify { expect(described_class.derive_name('developers')).to eq(DevelopersIndex) }
29
- specify do
30
- expect(described_class.derive_name('namespace/autocomplete')).to eq(Namespace::AutocompleteIndex)
31
- end
32
- end
33
-
34
- describe '.client' do
35
- let!(:initial_client) { Chewy.current[:chewy_client] }
36
- let(:faraday_block) { proc {} }
37
- let(:mock_client) { double(:client) }
38
- let(:expected_client_config) { {transport_options: {}} }
39
-
40
- before do
41
- Chewy.current[:chewy_client] = nil
42
- end
43
-
44
- specify do
45
- expect(Chewy).to receive_messages(configuration: {transport_options: {proc: faraday_block}})
46
-
47
- expect(Elasticsearch::Client).to receive(:new).with(expected_client_config) do |*_args, &passed_block|
48
- # RSpec's `with(..., &block)` was used previously, but doesn't actually do
49
- # any verification of the passed block (even of its presence).
50
- expect(passed_block.source_location).to eq(faraday_block.source_location)
51
-
52
- mock_client
53
- end
54
-
55
- expect(Chewy.client).to be_a(Chewy::ElasticClient)
56
- end
57
-
58
- after { Chewy.current[:chewy_client] = initial_client }
59
- end
60
-
61
- describe '.create_indices' do
62
- before do
63
- stub_index(:cities)
64
- stub_index(:places)
65
-
66
- # To avoid flaky issues when previous specs were run
67
- allow(Chewy::Index).to receive(:descendants).and_return([CitiesIndex, PlacesIndex])
68
-
69
- CitiesIndex.delete
70
- PlacesIndex.delete
71
- end
72
-
73
- specify do
74
- expect(CitiesIndex.exists?).to eq false
75
- expect(PlacesIndex.exists?).to eq false
76
-
77
- CitiesIndex.create!
78
-
79
- expect(CitiesIndex.exists?).to eq true
80
- expect(PlacesIndex.exists?).to eq false
81
-
82
- expect { Chewy.create_indices }.not_to raise_error
83
-
84
- expect(CitiesIndex.exists?).to eq true
85
- expect(PlacesIndex.exists?).to eq true
86
- end
87
-
88
- specify '.create_indices!' do
89
- expect(CitiesIndex.exists?).to eq false
90
- expect(PlacesIndex.exists?).to eq false
91
-
92
- expect { Chewy.create_indices! }.not_to raise_error
93
-
94
- expect(CitiesIndex.exists?).to eq true
95
- expect(PlacesIndex.exists?).to eq true
96
-
97
- expect { Chewy.create_indices! }.to raise_error(Elastic::Transport::Transport::Errors::BadRequest)
98
- end
99
- end
100
- end
data/spec/spec_helper.rb DELETED
@@ -1,69 +0,0 @@
1
- require 'bundler'
2
-
3
- Bundler.require
4
-
5
- require 'active_record'
6
-
7
- require 'rspec/its'
8
- require 'rspec/collection_matchers'
9
-
10
- require 'timecop'
11
-
12
- Kaminari::Hooks.init if defined?(Kaminari::Hooks)
13
-
14
- require 'support/fail_helpers'
15
- require 'support/class_helpers'
16
-
17
- require 'chewy/rspec'
18
-
19
- host = ENV['ES_HOST'] || 'localhost'
20
- port = ENV['ES_PORT'] || 9250
21
-
22
- Chewy.settings = {
23
- host: "#{host}:#{port}",
24
- wait_for_status: 'green',
25
- index: {
26
- number_of_shards: 1,
27
- number_of_replicas: 0
28
- }
29
- }
30
-
31
- # To work with security enabled:
32
- #
33
- # user = ENV['ES_USER'] || 'elastic'
34
- # password = ENV['ES_PASSWORD'] || ''
35
- # ca_cert = ENV['ES_CA_CERT'] || './tmp/http_ca.crt'
36
- #
37
- # Chewy.settings.merge!(
38
- # user: user,
39
- # password: password,
40
- # transport_options: {
41
- # ssl: {
42
- # ca_file: ca_cert
43
- # }
44
- # }
45
- # )
46
-
47
- # Low-level substitute for now-obsolete drop_indices
48
- def drop_indices
49
- response = Chewy.client.cat.indices
50
- indices = response.body.lines.map { |line| line.split[2] }
51
- return if indices.blank?
52
-
53
- Chewy.client.indices.delete(index: indices)
54
- Chewy.wait_for_status
55
- end
56
-
57
- # Chewy.transport_logger = Logger.new(STDERR)
58
-
59
- RSpec.configure do |config|
60
- config.mock_with :rspec
61
- config.order = :random
62
- config.filter_run focus: true
63
- config.run_all_when_everything_filtered = true
64
-
65
- config.include FailHelpers
66
- config.include ClassHelpers
67
- end
68
-
69
- require 'support/active_record'
@@ -1,124 +0,0 @@
1
- require 'database_cleaner'
2
-
3
- ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:', pool: 10)
4
- ActiveRecord::Base.logger = Logger.new('/dev/null')
5
- if ActiveRecord::Base.respond_to?(:raise_in_transactional_callbacks)
6
- ActiveRecord::Base.raise_in_transactional_callbacks = true
7
- end
8
-
9
- def create_countries_table
10
- create_table :countries do |t|
11
- t.column :name, :string
12
- t.column :country_code, :string
13
- t.column :rating, :integer
14
- t.column :updated_at, :datetime
15
- end
16
- end
17
-
18
- def create_cities_table
19
- create_table :cities do |t|
20
- t.column :country_id, :integer
21
- t.column :name, :string
22
- t.column :historical_name, :string
23
- t.column :description, :string
24
- t.column :rating, :integer
25
- t.column :updated_at, :datetime
26
- end
27
- end
28
-
29
- def create_locations_table
30
- create_table :locations do |t|
31
- t.column :city_id, :integer
32
- t.column :lat, :string
33
- t.column :lon, :string
34
- end
35
- end
36
-
37
- def create_comments_table
38
- create_table :comments do |t|
39
- t.column :content, :string
40
- t.column :comment_type, :string
41
- t.column :commented_id, :integer
42
- t.column :updated_at, :datetime
43
- end
44
- end
45
-
46
- def create_users_table
47
- create_table :users, id: false do |t|
48
- t.column :id, :string
49
- t.column :name, :string
50
- end
51
- end
52
-
53
- ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS 'countries'")
54
- ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS 'cities'")
55
- ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS 'locations'")
56
- ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS 'comments'")
57
- ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS 'users'")
58
- ActiveRecord::Schema.define do
59
- create_countries_table
60
- create_cities_table
61
- create_locations_table
62
- create_comments_table
63
- create_users_table
64
- end
65
-
66
- module ActiveRecordClassHelpers
67
- extend ActiveSupport::Concern
68
-
69
- def adapter
70
- :active_record
71
- end
72
-
73
- def expects_db_queries(&block)
74
- have_queries = false
75
- ActiveSupport::Notifications.subscribed(
76
- ->(*_) { have_queries = true },
77
- 'sql.active_record',
78
- &block
79
- )
80
- raise 'Expected some db queries, but none were made' unless have_queries
81
- end
82
-
83
- def expects_no_query(except: nil, &block)
84
- queries = []
85
- ActiveSupport::Notifications.subscribed(
86
- ->(*args) { queries << args[4][:sql] },
87
- 'sql.active_record',
88
- &block
89
- )
90
- ofending_queries = except ? queries.find_all { |query| !query.match(except) } : queries
91
- if ofending_queries.present?
92
- raise "Expected no DB queries, but the following ones were made: #{ofending_queries.join(', ')}"
93
- end
94
- end
95
-
96
- def stub_model(name, superclass = nil, &block)
97
- stub_class(name, superclass || ActiveRecord::Base, &block)
98
- end
99
-
100
- def stub_uuid_model(name, superclass = nil, &block)
101
- stub_class(name, superclass || ActiveRecord::Base) do
102
- before_create { self.id = SecureRandom.uuid }
103
- define_singleton_method(:primary_key, -> { 'id' })
104
- class_eval(&block)
105
- end
106
- end
107
- end
108
-
109
- RSpec.configure do |config|
110
- config.include ActiveRecordClassHelpers
111
-
112
- config.before(:suite) do
113
- DatabaseCleaner.clean_with :truncation
114
- DatabaseCleaner.strategy = :truncation
115
- end
116
-
117
- config.before do
118
- DatabaseCleaner.start
119
- end
120
-
121
- config.after do
122
- DatabaseCleaner.clean
123
- end
124
- end
@@ -1,16 +0,0 @@
1
- module ClassHelpers
2
- extend ActiveSupport::Concern
3
-
4
- def stub_index(name, superclass = nil, &block)
5
- stub_class("#{name.to_s.camelize}Index", superclass || Chewy::Index)
6
- .tap { |i| i.class_eval(&block) if block }
7
- end
8
-
9
- def stub_class(name, superclass = nil, &block)
10
- stub_const(name.to_s.camelize, Class.new(superclass || Object, &block))
11
- end
12
-
13
- def stub_model(_name, _superclass = nil)
14
- raise NotImplementedError, 'Seems like no ORM/ODM are loaded, please check your Gemfile'
15
- end
16
- end
@@ -1,13 +0,0 @@
1
- module FailHelpers
2
- def fail
3
- raise_error(RSpec::Expectations::ExpectationNotMetError)
4
- end
5
-
6
- def fail_with(message)
7
- raise_error(RSpec::Expectations::ExpectationNotMetError, message)
8
- end
9
-
10
- def fail_matching(message)
11
- raise_error(RSpec::Expectations::ExpectationNotMetError, /#{Regexp.escape(message)}/)
12
- end
13
- end