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,162 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Chewy::Search::Parameters::Source do
4
- subject { described_class.new(%i[foo bar]) }
5
-
6
- describe '#initialize' do
7
- specify { expect(described_class.new.value).to eq(includes: [], excludes: [], enabled: true) }
8
- specify { expect(described_class.new(nil).value).to eq(includes: [], excludes: [], enabled: true) }
9
- specify { expect(described_class.new([:foo, nil]).value).to eq(includes: %w[foo], excludes: [], enabled: true) }
10
- specify { expect(described_class.new([:foo, 42]).value).to eq(includes: %w[foo 42], excludes: [], enabled: true) }
11
- specify { expect(described_class.new(false).value).to eq(includes: [], excludes: [], enabled: false) }
12
- specify { expect(described_class.new(true).value).to eq(includes: [], excludes: [], enabled: true) }
13
- specify { expect(described_class.new(a: 1).value).to eq(includes: [], excludes: [], enabled: true) }
14
- specify { expect(described_class.new(includes: :foo).value).to eq(includes: %w[foo], excludes: [], enabled: true) }
15
- specify do
16
- expect(described_class.new(includes: :foo, excludes: 42).value)
17
- .to eq(includes: %w[foo], excludes: %w[42], enabled: true)
18
- end
19
- specify do
20
- expect(described_class.new(includes: :foo, excludes: 42, enabled: false).value)
21
- .to eq(includes: %w[foo], excludes: %w[42], enabled: true)
22
- end
23
- end
24
-
25
- describe '#replace!' do
26
- specify do
27
- expect { subject.replace!(nil) }
28
- .to change { subject.value }
29
- .from(includes: %w[foo bar], excludes: [], enabled: true)
30
- .to(includes: [], excludes: [], enabled: true)
31
- end
32
-
33
- specify do
34
- expect { subject.replace!(%i[foo baz]) }
35
- .to change { subject.value }
36
- .from(includes: %w[foo bar], excludes: [], enabled: true)
37
- .to(includes: %w[foo baz], excludes: [], enabled: true)
38
- end
39
-
40
- specify do
41
- expect { subject.replace!(excludes: 42) }
42
- .to change { subject.value }
43
- .from(includes: %w[foo bar], excludes: [], enabled: true)
44
- .to(includes: [], excludes: %w[42], enabled: true)
45
- end
46
-
47
- specify do
48
- expect { subject.replace!(false) }
49
- .to change { subject.value }
50
- .from(includes: %w[foo bar], excludes: [], enabled: true)
51
- .to(includes: [], excludes: [], enabled: false)
52
- end
53
-
54
- context do
55
- before { subject.update!(false) }
56
-
57
- specify do
58
- expect { subject.replace!(true) }
59
- .to change { subject.value }
60
- .from(includes: %w[foo bar], excludes: [], enabled: false)
61
- .to(includes: [], excludes: [], enabled: true)
62
- end
63
- end
64
- end
65
-
66
- describe '#update!' do
67
- specify do
68
- expect { subject.update!(nil) }
69
- .not_to change { subject.value }
70
- .from(includes: %w[foo bar], excludes: [], enabled: true)
71
- end
72
-
73
- specify do
74
- expect { subject.update!(%i[foo baz]) }
75
- .to change { subject.value }
76
- .from(includes: %w[foo bar], excludes: [], enabled: true)
77
- .to(includes: %w[foo bar baz], excludes: [], enabled: true)
78
- end
79
-
80
- specify do
81
- expect { subject.update!(excludes: 42) }
82
- .to change { subject.value }
83
- .from(includes: %w[foo bar], excludes: [], enabled: true)
84
- .to(includes: %w[foo bar], excludes: %w[42], enabled: true)
85
- end
86
-
87
- specify do
88
- expect { subject.update!(false) }
89
- .to change { subject.value }
90
- .from(includes: %w[foo bar], excludes: [], enabled: true)
91
- .to(includes: %w[foo bar], excludes: [], enabled: false)
92
- end
93
-
94
- context do
95
- before { subject.update!(false) }
96
-
97
- specify do
98
- expect { subject.update!(true) }
99
- .to change { subject.value }
100
- .from(includes: %w[foo bar], excludes: [], enabled: false)
101
- .to(includes: %w[foo bar], excludes: [], enabled: true)
102
- end
103
- end
104
- end
105
-
106
- describe '#merge!' do
107
- specify do
108
- expect { subject.merge!(described_class.new) }
109
- .not_to change { subject.value }
110
- .from(includes: %w[foo bar], excludes: [], enabled: true)
111
- end
112
-
113
- specify do
114
- expect { subject.merge!(described_class.new(%i[foo baz])) }
115
- .to change { subject.value }
116
- .from(includes: %w[foo bar], excludes: [], enabled: true)
117
- .to(includes: %w[foo bar baz], excludes: [], enabled: true)
118
- end
119
-
120
- specify do
121
- expect { subject.merge!(described_class.new(excludes: 42)) }
122
- .to change { subject.value }
123
- .from(includes: %w[foo bar], excludes: [], enabled: true)
124
- .to(includes: %w[foo bar], excludes: %w[42], enabled: true)
125
- end
126
-
127
- specify do
128
- expect { subject.merge!(described_class.new(:baz).tap { |i| i.update!(false) }) }
129
- .to change { subject.value }
130
- .from(includes: %w[foo bar], excludes: [], enabled: true)
131
- .to(includes: %w[foo bar baz], excludes: [], enabled: false)
132
- end
133
-
134
- context do
135
- before { subject.update!(false) }
136
-
137
- specify do
138
- expect { subject.merge!(described_class.new(excludes: :baz).tap { |i| i.update!(true) }) }
139
- .to change { subject.value }
140
- .from(includes: %w[foo bar], excludes: [], enabled: false)
141
- .to(includes: %w[foo bar], excludes: %w[baz], enabled: true)
142
- end
143
- end
144
- end
145
-
146
- describe '#render' do
147
- specify { expect(described_class.new.render).to be_nil }
148
- specify { expect(described_class.new(:foo).render).to eq(_source: %w[foo]) }
149
- specify { expect(described_class.new(excludes: :foo).render).to eq(_source: {excludes: %w[foo]}) }
150
- specify do
151
- expect(described_class.new(includes: :foo, excludes: 42).render)
152
- .to eq(_source: {includes: %w[foo], excludes: %w[42]})
153
- end
154
-
155
- specify { expect(described_class.new(false).render).to eq(_source: false) }
156
-
157
- context do
158
- before { subject.update!(false) }
159
- specify { expect(subject.render).to eq(_source: false) }
160
- end
161
- end
162
- end
@@ -1,60 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Chewy::Search::Parameters::Storage do
4
- subject { described_class.new }
5
-
6
- describe '.param_name' do
7
- specify { expect(described_class.param_name).to eq(:storage) }
8
-
9
- context do
10
- before { stub_class('Namespace::CustomParamName', Class.new(described_class)) }
11
- specify { expect(Namespace::CustomParamName.param_name).to eq(:custom_param_name) }
12
- end
13
- end
14
-
15
- describe '.param_name=' do
16
- before { stub_class('Namespace::Whatever', Class.new(described_class)) }
17
- specify do
18
- expect { Namespace::Whatever.param_name = :custom }
19
- .to change { Namespace::Whatever.param_name }.from(:whatever).to(:custom)
20
- end
21
- end
22
-
23
- describe '#initialize' do
24
- specify { expect(subject.value).to be_nil }
25
- specify { expect(described_class.new(a: 1).value).to eq(a: 1) }
26
- end
27
-
28
- describe '#==' do
29
- specify { expect(subject).to eq(described_class.new) }
30
- specify { expect(described_class.new(:foo)).to eq(described_class.new(:foo)) }
31
- specify { expect(described_class.new(:foo)).not_to eq(described_class.new(:bar)) }
32
-
33
- context do
34
- let(:other_value) { Class.new(described_class) }
35
- specify { expect(other_value.new(:foo)).not_to eq(described_class.new(:foo)) }
36
- specify { expect(other_value.new(:foo)).to eq(other_value.new(:foo)) }
37
- end
38
- end
39
-
40
- describe '#replace!' do
41
- specify { expect { subject.replace!(42) }.to change { subject.value }.from(nil).to(42) }
42
- specify { expect { subject.replace!('42') }.to change { subject.value }.from(nil).to('42') }
43
- end
44
-
45
- describe '#update!' do
46
- specify { expect { subject.update!(true) }.to change { subject.value }.from(nil).to(true) }
47
- specify { expect { subject.update!(:symbol) }.to change { subject.value }.from(nil).to(:symbol) }
48
- end
49
-
50
- describe '#merge!' do
51
- let(:other) { described_class.new(['something']) }
52
- specify { expect { subject.merge!(other) }.to change { subject.value }.from(nil).to(['something']) }
53
- end
54
-
55
- describe '#render' do
56
- specify { expect(subject.render).to be_nil }
57
- specify { expect(described_class.new(false).render).to be_nil }
58
- specify { expect(described_class.new('42').render).to eq(storage: '42') }
59
- end
60
- end
@@ -1,126 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Chewy::Search::Parameters::StoredFields do
4
- subject { described_class.new(%i[foo bar]) }
5
-
6
- describe '#initialize' do
7
- specify { expect(described_class.new.value).to eq(stored_fields: [], enabled: true) }
8
- specify { expect(described_class.new(nil).value).to eq(stored_fields: [], enabled: true) }
9
- specify { expect(described_class.new(:foo).value).to eq(stored_fields: %w[foo], enabled: true) }
10
- specify { expect(described_class.new([:foo, nil]).value).to eq(stored_fields: %w[foo], enabled: true) }
11
- specify { expect(described_class.new([:foo, 42]).value).to eq(stored_fields: %w[foo 42], enabled: true) }
12
- specify { expect(described_class.new(false).value).to eq(stored_fields: [], enabled: false) }
13
- specify { expect(described_class.new(true).value).to eq(stored_fields: [], enabled: true) }
14
- end
15
-
16
- describe '#replace!' do
17
- specify do
18
- expect { subject.replace!(nil) }
19
- .to change { subject.value }
20
- .from(stored_fields: %w[foo bar], enabled: true)
21
- .to(stored_fields: [], enabled: true)
22
- end
23
-
24
- specify do
25
- expect { subject.replace!(%i[foo baz]) }
26
- .to change { subject.value }
27
- .from(stored_fields: %w[foo bar], enabled: true)
28
- .to(stored_fields: %w[foo baz], enabled: true)
29
- end
30
-
31
- specify do
32
- expect { subject.replace!(false) }
33
- .to change { subject.value }
34
- .from(stored_fields: %w[foo bar], enabled: true)
35
- .to(stored_fields: [], enabled: false)
36
- end
37
-
38
- context do
39
- before { subject.update!(false) }
40
-
41
- specify do
42
- expect { subject.replace!(true) }
43
- .to change { subject.value }
44
- .from(stored_fields: %w[foo bar], enabled: false)
45
- .to(stored_fields: [], enabled: true)
46
- end
47
- end
48
- end
49
-
50
- describe '#update!' do
51
- specify do
52
- expect { subject.update!(nil) }
53
- .not_to change { subject.value }
54
- .from(stored_fields: %w[foo bar], enabled: true)
55
- end
56
-
57
- specify do
58
- expect { subject.update!(%i[foo baz]) }
59
- .to change { subject.value }
60
- .from(stored_fields: %w[foo bar], enabled: true)
61
- .to(stored_fields: %w[foo bar baz], enabled: true)
62
- end
63
-
64
- specify do
65
- expect { subject.update!(false) }
66
- .to change { subject.value }
67
- .from(stored_fields: %w[foo bar], enabled: true)
68
- .to(stored_fields: %w[foo bar], enabled: false)
69
- end
70
-
71
- context do
72
- before { subject.update!(false) }
73
-
74
- specify do
75
- expect { subject.update!(true) }
76
- .to change { subject.value }
77
- .from(stored_fields: %w[foo bar], enabled: false)
78
- .to(stored_fields: %w[foo bar], enabled: true)
79
- end
80
- end
81
- end
82
-
83
- describe '#merge!' do
84
- specify do
85
- expect { subject.merge!(described_class.new) }
86
- .not_to change { subject.value }
87
- .from(stored_fields: %w[foo bar], enabled: true)
88
- end
89
-
90
- specify do
91
- expect { subject.merge!(described_class.new(%i[foo baz])) }
92
- .to change { subject.value }
93
- .from(stored_fields: %w[foo bar], enabled: true)
94
- .to(stored_fields: %w[foo bar baz], enabled: true)
95
- end
96
-
97
- specify do
98
- expect { subject.merge!(described_class.new(:baz).tap { |i| i.update!(false) }) }
99
- .to change { subject.value }
100
- .from(stored_fields: %w[foo bar], enabled: true)
101
- .to(stored_fields: %w[foo bar baz], enabled: false)
102
- end
103
-
104
- context do
105
- before { subject.update!(false) }
106
-
107
- specify do
108
- expect { subject.merge!(described_class.new(:baz).tap { |i| i.update!(true) }) }
109
- .to change { subject.value }
110
- .from(stored_fields: %w[foo bar], enabled: false)
111
- .to(stored_fields: %w[foo bar baz], enabled: true)
112
- end
113
- end
114
- end
115
-
116
- describe '#render' do
117
- specify { expect(described_class.new.render).to be_nil }
118
- specify { expect(described_class.new(:foo).render).to eq(stored_fields: %w[foo]) }
119
- specify { expect(described_class.new(false).render).to eq(stored_fields: '_none_') }
120
-
121
- context do
122
- before { subject.update!(false) }
123
- specify { expect(subject.render).to eq(stored_fields: '_none_') }
124
- end
125
- end
126
- end
@@ -1,63 +0,0 @@
1
- require 'spec_helper'
2
-
3
- shared_examples :string_array_storage do |param_name|
4
- subject { described_class.new(%i[foo bar]) }
5
-
6
- describe '#initialize' do
7
- specify { expect(described_class.new.value).to eq([]) }
8
- specify { expect(described_class.new(nil).value).to eq([]) }
9
- specify { expect(described_class.new(:foo).value).to eq(%w[foo]) }
10
- specify { expect(described_class.new([:foo, nil]).value).to eq(%w[foo]) }
11
- specify { expect(subject.value).to eq(%w[foo bar]) }
12
- end
13
-
14
- describe '#replace!' do
15
- specify do
16
- expect { subject.replace!(nil) }
17
- .to change { subject.value }
18
- .from(%w[foo bar]).to([])
19
- end
20
-
21
- specify do
22
- expect { subject.replace!(%i[foo baz]) }
23
- .to change { subject.value }
24
- .from(%w[foo bar]).to(%w[foo baz])
25
- end
26
- end
27
-
28
- describe '#update!' do
29
- specify do
30
- expect { subject.update!(nil) }
31
- .not_to change { subject.value }
32
- end
33
-
34
- specify do
35
- expect { subject.update!(%i[foo baz]) }
36
- .to change { subject.value }
37
- .from(%w[foo bar]).to(%w[foo bar baz])
38
- end
39
- end
40
-
41
- describe '#merge!' do
42
- specify do
43
- expect { subject.merge!(described_class.new) }
44
- .not_to change { subject.value }
45
- end
46
-
47
- specify do
48
- expect { subject.merge!(described_class.new(%i[foo baz])) }
49
- .to change { subject.value }
50
- .from(%w[foo bar]).to(%w[foo bar baz])
51
- end
52
- end
53
-
54
- describe '#render' do
55
- specify { expect(described_class.new.render).to be_nil }
56
-
57
- if param_name
58
- specify { expect(subject.render).to eq(param_name => %w[foo bar]) }
59
- else
60
- specify { expect(subject.render).to be_nil }
61
- end
62
- end
63
- end
@@ -1,32 +0,0 @@
1
- require 'spec_helper'
2
-
3
- shared_examples :string_storage do |param_name|
4
- subject { described_class.new(:foo) }
5
-
6
- describe '#initialize' do
7
- specify { expect(subject.value).to eq('foo') }
8
- specify { expect(described_class.new(42).value).to eq('42') }
9
- specify { expect(described_class.new('').value).to be_nil }
10
- end
11
-
12
- describe '#replace!' do
13
- specify { expect { subject.replace!('bar') }.to change { subject.value }.from('foo').to('bar') }
14
- specify { expect { subject.replace!('') }.to change { subject.value }.from('foo').to(nil) }
15
- end
16
-
17
- describe '#update!' do
18
- specify { expect { subject.update!('bar') }.to change { subject.value }.from('foo').to('bar') }
19
- specify { expect { subject.update!('') }.not_to change { subject.value }.from('foo') }
20
- specify { expect { subject.update!(nil) }.not_to change { subject.value }.from('foo') }
21
- end
22
-
23
- describe '#merge!' do
24
- specify { expect { subject.merge!(described_class.new('bar')) }.to change { subject.value }.from('foo').to('bar') }
25
- specify { expect { subject.merge!(described_class.new) }.not_to change { subject.value }.from('foo') }
26
- end
27
-
28
- describe '#render' do
29
- specify { expect(described_class.new.render).to be_nil }
30
- specify { expect(subject.render).to eq(param_name => 'foo') }
31
- end
32
- end
@@ -1,5 +0,0 @@
1
- require 'chewy/search/parameters/hash_storage_examples'
2
-
3
- describe Chewy::Search::Parameters::Suggest do
4
- it_behaves_like :hash_storage, :suggest
5
- end
@@ -1,5 +0,0 @@
1
- require 'chewy/search/parameters/integer_storage_examples'
2
-
3
- describe Chewy::Search::Parameters::TerminateAfter do
4
- it_behaves_like :integer_storage, :terminate_after
5
- end
@@ -1,5 +0,0 @@
1
- require 'chewy/search/parameters/string_storage_examples'
2
-
3
- describe Chewy::Search::Parameters::Timeout do
4
- it_behaves_like :string_storage, :timeout
5
- end
@@ -1,5 +0,0 @@
1
- require 'chewy/search/parameters/bool_storage_examples'
2
-
3
- describe Chewy::Search::Parameters::TrackScores do
4
- it_behaves_like :bool_storage, :track_scores
5
- end
@@ -1,5 +0,0 @@
1
- require 'chewy/search/parameters/bool_storage_examples'
2
-
3
- describe Chewy::Search::Parameters::TrackTotalHits do
4
- it_behaves_like :bool_storage, :track_total_hits
5
- end
@@ -1,5 +0,0 @@
1
- require 'chewy/search/parameters/bool_storage_examples'
2
-
3
- describe Chewy::Search::Parameters::Version do
4
- it_behaves_like :bool_storage, :version
5
- end
@@ -1,161 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Chewy::Search::Parameters do
4
- subject { described_class.new }
5
-
6
- describe '.storages' do
7
- specify { expect(described_class.storages[:limit]).to eq(Chewy::Search::Parameters::Limit) }
8
- end
9
-
10
- describe '#initialize' do
11
- let(:limit) { described_class.storages[:limit].new(3) }
12
- subject { described_class.new(limit: limit, order: :foo) }
13
-
14
- specify { expect(subject.storages[:limit]).to equal(limit) }
15
- specify { expect(subject.storages[:limit].value).to eq(3) }
16
- specify { expect(subject.storages[:order].value).to eq(['foo']) }
17
-
18
- specify { expect { described_class.new(offset: limit) }.to raise_error(TypeError) }
19
- end
20
-
21
- describe '#storages' do
22
- specify { expect(subject.storages).to eq({}) }
23
- specify { expect(subject.storages[:limit]).to be_a(Chewy::Search::Parameters::Limit) }
24
- end
25
-
26
- describe '#==' do
27
- specify { expect(described_class.new(limit: 10)).to eq(described_class.new(limit: 10)) }
28
- specify { expect(described_class.new(limit: 10)).to eq(described_class.new(limit: 10, offset: nil)) }
29
- specify { expect(described_class.new(limit: 10, offset: 20)).to eq(described_class.new(limit: 10, offset: 20)) }
30
- specify { expect(described_class.new(limit: 10)).not_to eq(described_class.new(limit: 20)) }
31
- specify { expect(described_class.new(limit: 10)).not_to eq(described_class.new(limit: 10, offset: 20)) }
32
- end
33
-
34
- describe '#modify!' do
35
- it 'updates the storage value' do
36
- expect { subject.modify!(:limit) { replace!(42) } }
37
- .to change { subject[:limit].value }
38
- .from(nil).to(42)
39
- end
40
-
41
- it 'replaces the storage' do
42
- expect { subject.modify!(:limit) { replace!(42) } }
43
- .to change { subject[:limit].object_id }
44
- end
45
-
46
- it 'doesn\'t change the old object' do
47
- subject.modify!(:limit) { replace!(42) }
48
- old_limit = subject[:limit]
49
- subject.modify!(:limit) { replace!(43) }
50
- expect(old_limit.value).to eq(42)
51
- end
52
- end
53
-
54
- describe '#only!' do
55
- subject { described_class.new(limit: 10, offset: 20, order: :foo) }
56
-
57
- specify { expect { subject.only!([:limit]) }.to change { subject.clone }.to(described_class.new(limit: 10)) }
58
- specify do
59
- expect { subject.only!(%i[offset order]) }
60
- .to change { subject.clone }.to(described_class.new(offset: 20, order: :foo))
61
- end
62
- specify { expect { subject.only!(%i[limit something]) }.to raise_error NameError }
63
- specify { expect { subject.only!([]) }.to raise_error ArgumentError }
64
- end
65
-
66
- describe '#except!' do
67
- subject { described_class.new(limit: 10, offset: 20, order: :foo) }
68
-
69
- specify do
70
- expect { subject.except!([:limit]) }
71
- .to change { subject.clone }.to(described_class.new(offset: 20, order: :foo))
72
- end
73
- specify do
74
- expect { subject.except!(%i[offset order]) }
75
- .to change { subject.clone }.to(described_class.new(limit: 10))
76
- end
77
- specify { expect { subject.except!(%i[limit something]) }.to raise_error NameError }
78
- specify { expect { subject.except!([]) }.to raise_error ArgumentError }
79
- end
80
-
81
- describe '#merge!' do
82
- let(:first) { described_class.new(offset: 10, order: 'foo') }
83
- let(:second) { described_class.new(limit: 20, offset: 20, order: 'bar') }
84
- let(:first_clone) { first.clone }
85
- let(:second_clone) { second.clone }
86
-
87
- specify do
88
- expect { first.merge!(second) }.to change { first.clone }
89
- .to(described_class.new(limit: 20, offset: 20, order: %w[foo bar]))
90
- end
91
- specify { expect { first.merge!(second) }.not_to change { second_clone } }
92
-
93
- specify do
94
- expect { second.merge!(first) }.to change { second.clone }
95
- .to(described_class.new(limit: 20, offset: 10, order: %w[bar foo]))
96
- end
97
- specify { expect { second.merge!(first) }.not_to change { first_clone } }
98
-
99
- context 'spawns new storages for the merge' do
100
- let(:names) { %i[limit offset order] }
101
- def storage_object_ids(params)
102
- params.storages.values_at(*names).map(&:object_id)
103
- end
104
-
105
- specify { expect(storage_object_ids(first) | storage_object_ids(subject)).to have(6).items }
106
- specify { expect(storage_object_ids(second) | storage_object_ids(subject)).to have(6).items }
107
- end
108
- end
109
-
110
- describe '#render' do
111
- subject { described_class.new(offset: 10, order: 'foo') }
112
-
113
- specify { expect(subject.render).to eq(body: {from: 10, sort: ['foo']}) }
114
- specify { expect(described_class.new.render).to eq(body: {}) }
115
-
116
- context do
117
- subject { described_class.new(request_cache: true) }
118
- specify { expect(subject.render).to eq(body: {}, request_cache: true) }
119
- end
120
-
121
- context do
122
- subject { described_class.new(search_type: 'query_then_fetch') }
123
- specify { expect(subject.render).to eq(body: {}, search_type: 'query_then_fetch') }
124
- end
125
-
126
- context do
127
- subject { described_class.new(allow_partial_search_results: true) }
128
- specify { expect(subject.render).to eq(body: {}, allow_partial_search_results: true) }
129
- end
130
-
131
- context do
132
- subject { described_class.new(ignore_unavailable: true) }
133
- specify { expect(subject.render).to eq(body: {}, ignore_unavailable: true) }
134
- end
135
-
136
- context do
137
- subject { described_class.new(query: {foo: 'bar'}, filter: {moo: 'baz'}) }
138
- specify { expect(subject.render).to eq(body: {query: {bool: {must: {foo: 'bar'}, filter: {moo: 'baz'}}}}) }
139
- end
140
-
141
- context do
142
- subject { described_class.new(query: {should: {foo: 'bar'}}, filter: {moo: 'baz'}) }
143
- specify { expect(subject.render).to eq(body: {query: {bool: {should: {foo: 'bar'}, filter: {moo: 'baz'}}}}) }
144
- end
145
-
146
- context do
147
- subject { described_class.new(query: {must_not: {foo: 'bar'}}, filter: {moo: 'baz'}) }
148
- specify { expect(subject.render).to eq(body: {query: {bool: {must_not: {foo: 'bar'}, filter: {moo: 'baz'}}}}) }
149
- end
150
-
151
- context do
152
- subject { described_class.new(filter: {moo: 'baz'}) }
153
- specify { expect(subject.render).to eq(body: {query: {bool: {filter: {moo: 'baz'}}}}) }
154
- end
155
-
156
- context do
157
- subject { described_class.new(filter: {moo: 'baz'}, none: true) }
158
- specify { expect(subject.render).to eq(body: {query: {match_none: {}}}) }
159
- end
160
- end
161
- end