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
data/chewy.gemspec CHANGED
@@ -1,8 +1,8 @@
1
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  require 'chewy/version'
4
4
 
5
- Gem::Specification.new do |spec| # rubocop:disable BlockLength
5
+ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
6
6
  spec.name = 'chewy'
7
7
  spec.version = Chewy::VERSION
8
8
  spec.authors = ['Toptal, LLC', 'pyromaniac']
@@ -17,15 +17,13 @@ Gem::Specification.new do |spec| # rubocop:disable BlockLength
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ['lib']
19
19
 
20
- spec.add_development_dependency 'appraisal'
21
20
  spec.add_development_dependency 'database_cleaner'
22
21
  spec.add_development_dependency 'elasticsearch-extensions'
23
22
  spec.add_development_dependency 'rake'
24
- spec.add_development_dependency 'resque_spec'
25
23
  spec.add_development_dependency 'rspec', '>= 3.7.0'
26
24
  spec.add_development_dependency 'rspec-collection_matchers'
27
25
  spec.add_development_dependency 'rspec-its'
28
- spec.add_development_dependency 'rubocop', '0.52.1'
26
+ spec.add_development_dependency 'rubocop', '1.11'
29
27
  spec.add_development_dependency 'sqlite3'
30
28
  spec.add_development_dependency 'timecop'
31
29
 
@@ -1,17 +1,11 @@
1
- # This file was generated by Appraisal
1
+ source 'https://rubygems.org'
2
2
 
3
- source "https://rubygems.org"
4
-
5
- gem "activerecord", "~> 5.2.0"
6
- gem "activesupport", "~> 5.2.0"
7
- gem "activejob", "~> 5.2.0"
8
- gem "resque", require: false
9
- gem "shoryuken", require: false
10
- gem "aws-sdk-sqs", require: false
11
- gem "sidekiq", require: false
12
- gem "kaminari-core", "~> 1.1.0", require: false
13
- gem "will_paginate", require: false
14
- gem "parallel", require: false
3
+ gem 'activejob', '~> 5.2.0'
4
+ gem 'activerecord', '~> 5.2.0'
5
+ gem 'activesupport', '~> 5.2.0'
6
+ gem 'kaminari-core', '~> 1.1.0', require: false
7
+ gem 'parallel', require: false
15
8
  gem 'rspec_junit_formatter', '~> 0.4.1'
9
+ gem 'sidekiq', require: false
16
10
 
17
- gemspec path: "../"
11
+ gemspec path: '../'
@@ -1,17 +1,11 @@
1
- # This file was generated by Appraisal
1
+ source 'https://rubygems.org'
2
2
 
3
- source "https://rubygems.org"
4
-
5
- gem "activerecord", "~> 6.0.0"
6
- gem "activesupport", "~> 6.0.0"
7
- gem "activejob", "~> 6.0.0"
8
- gem "resque", require: false
9
- gem "shoryuken", require: false
10
- gem "aws-sdk-sqs", require: false
11
- gem "sidekiq", require: false
12
- gem "kaminari-core", "~> 1.1.0", require: false
13
- gem "will_paginate", require: false
14
- gem "parallel", require: false
3
+ gem 'activejob', '~> 6.0.0'
4
+ gem 'activerecord', '~> 6.0.0'
5
+ gem 'activesupport', '~> 6.0.0'
6
+ gem 'kaminari-core', '~> 1.1.0', require: false
7
+ gem 'parallel', require: false
15
8
  gem 'rspec_junit_formatter', '~> 0.4.1'
9
+ gem 'sidekiq', require: false
16
10
 
17
- gemspec path: "../"
11
+ gemspec path: '../'
@@ -1,19 +1,13 @@
1
- # This file was generated by Appraisal
1
+ source 'https://rubygems.org'
2
2
 
3
- source "https://rubygems.org"
4
-
5
- gem "activerecord", "~> 6.1.0"
6
- gem "activesupport", "~> 6.1.0"
7
- gem "activejob", "~> 6.1.0"
8
- gem "resque", require: false
9
- gem "shoryuken", require: false
10
- gem "aws-sdk-sqs", require: false
11
- gem "sidekiq", require: false
12
- gem "kaminari-core", "~> 1.1.0", require: false
13
- gem "will_paginate", require: false
14
- gem "parallel", require: false
3
+ gem 'activejob', '~> 6.1.0'
4
+ gem 'activerecord', '~> 6.1.0'
5
+ gem 'activesupport', '~> 6.1.0'
6
+ gem 'kaminari-core', '~> 1.1.0', require: false
7
+ gem 'parallel', require: false
15
8
  gem 'rspec_junit_formatter', '~> 0.4.1'
9
+ gem 'sidekiq', require: false
16
10
 
17
11
  gem 'rexml' if RUBY_VERSION >= '3.0.0'
18
12
 
19
- gemspec path: "../"
13
+ gemspec path: '../'
data/lib/chewy.rb CHANGED
@@ -29,20 +29,12 @@ end
29
29
 
30
30
  try_require 'kaminari'
31
31
  try_require 'kaminari/core'
32
- try_require 'will_paginate'
33
- try_require 'will_paginate/collection'
34
32
  try_require 'parallel'
35
33
 
36
34
  ActiveSupport.on_load(:active_record) do
37
- try_require 'will_paginate/active_record'
38
35
  try_require 'kaminari/activerecord'
39
36
  end
40
37
 
41
- ActiveSupport.on_load(:mongoid) do
42
- try_require 'will_paginate/mongoid'
43
- try_require 'kaminari/mongoid'
44
- end
45
-
46
38
  require 'chewy/version'
47
39
  require 'chewy/errors'
48
40
  require 'chewy/config'
@@ -52,94 +44,43 @@ require 'chewy/runtime'
52
44
  require 'chewy/log_subscriber'
53
45
  require 'chewy/strategy'
54
46
  require 'chewy/index'
55
- require 'chewy/type'
56
47
  require 'chewy/fields/base'
57
48
  require 'chewy/fields/root'
58
49
  require 'chewy/journal'
59
50
  require 'chewy/railtie' if defined?(::Rails::Railtie)
60
51
 
61
52
  ActiveSupport.on_load(:active_record) do
62
- extend Chewy::Type::Observe::ActiveRecordMethods
63
- end
64
-
65
- ActiveSupport.on_load(:mongoid) do
66
- module Mongoid
67
- module Document
68
- module ClassMethods
69
- include Chewy::Type::Observe::MongoidMethods
70
- end
71
- end
72
- end
53
+ extend Chewy::Index::Observe::ActiveRecordMethods
73
54
  end
74
55
 
75
56
  module Chewy
76
57
  @adapters = [
77
- Chewy::Type::Adapter::ActiveRecord,
78
- Chewy::Type::Adapter::Mongoid,
79
- Chewy::Type::Adapter::Sequel,
80
- Chewy::Type::Adapter::Object
58
+ Chewy::Index::Adapter::ActiveRecord,
59
+ Chewy::Index::Adapter::Object
81
60
  ]
82
61
 
83
62
  class << self
84
63
  attr_accessor :adapters
85
64
 
86
- # Derives a single type for the passed string identifier if possible.
87
- #
88
- # @example
89
- # Chewy.derive_types(UsersIndex::User) # => UsersIndex::User
90
- # Chewy.derive_types('namespace/users') # => Namespace::UsersIndex::User
91
- # Chewy.derive_types('places') # => raises Chewy::UnderivableType
92
- # Chewy.derive_types('places#city') # => PlacesIndex::City
93
- #
94
- # @param name [String, Chewy::Type] string type identifier
95
- # @raise [Chewy::UnderivableType] in cases when it is impossble to find index or type or more than one type found
96
- # @return [Chewy::Type] an array of derived types
97
- def derive_type(name)
98
- return name if name.is_a?(Class) && name < Chewy::Type
99
-
100
- types = derive_types(name)
101
- raise Chewy::UnderivableType, "Index `#{types.first.index}` has more than one type, please specify type via `#{types.first.index.derivable_name}#type_name`" unless types.one?
102
- types.first
103
- end
104
-
105
- # Derives all the types for the passed string identifier if possible.
65
+ # Derives an index for the passed string identifier if possible.
106
66
  #
107
67
  # @example
108
- # Chewy.derive_types('namespace/users') # => [Namespace::UsersIndex::User]
109
- # Chewy.derive_types('places') # => [PlacesIndex::City, PlacesIndex::Country]
110
- # Chewy.derive_types('places#city') # => [PlacesIndex::City]
68
+ # Chewy.derive_name(UsersIndex) # => UsersIndex
69
+ # Chewy.derive_name('namespace/users') # => Namespace::UsersIndex
70
+ # Chewy.derive_name('missing') # => raises Chewy::UndefinedIndex
111
71
  #
112
- # @param from [String] string type identifier
113
- # @raise [Chewy::UnderivableType] in cases when it is impossible to find index or type
114
- # @return [Array<Chewy::Type>] an array of derived types
115
- def derive_types(from)
116
- return from.types if from.is_a?(Class) && (from < Chewy::Index || from < Chewy::Type)
72
+ # @param index_name [String, Chewy::Index] index identifier or class
73
+ # @raise [Chewy::UndefinedIndex] in cases when it is impossible to find index
74
+ # @return [Chewy::Index]
75
+ def derive_name(index_name)
76
+ return index_name if index_name.is_a?(Class) && index_name < Chewy::Index
117
77
 
118
- index_name, type_name = from.split('#', 2)
119
78
  class_name = "#{index_name.camelize.gsub(/Index\z/, '')}Index"
120
79
  index = class_name.safe_constantize
121
- raise Chewy::UnderivableType, "Can not find index named `#{class_name}`" unless index && index < Chewy::Index
122
- if type_name.present?
123
- type = index.type_hash[type_name] or raise Chewy::UnderivableType, "Index `#{class_name}` doesn`t have type named `#{type_name}`"
124
- [type]
125
- else
126
- index.types
127
- end
128
- end
129
80
 
130
- # Creates Chewy::Type ancestor defining index and adapter methods.
131
- #
132
- def create_type(index, target, options = {}, &block)
133
- type = Class.new(Chewy::Type)
134
-
135
- adapter = adapters.find { |klass| klass.accepts?(target) }.new(target, **options)
136
-
137
- index.const_set(adapter.name, type)
138
- type.send(:define_singleton_method, :index) { index }
139
- type.send(:define_singleton_method, :adapter) { adapter }
81
+ return index if index && index < Chewy::Index
140
82
 
141
- type.class_eval(&block) if block
142
- type
83
+ raise Chewy::UndefinedIndex, "Can not find index named `#{class_name}`"
143
84
  end
144
85
 
145
86
  # Main elasticsearch-ruby client instance
@@ -159,7 +100,9 @@ module Chewy
159
100
  # Does nothing in case of config `wait_for_status` is undefined.
160
101
  #
161
102
  def wait_for_status
162
- client.cluster.health wait_for_status: Chewy.configuration[:wait_for_status] if Chewy.configuration[:wait_for_status].present?
103
+ if Chewy.configuration[:wait_for_status].present?
104
+ client.cluster.health wait_for_status: Chewy.configuration[:wait_for_status]
105
+ end
163
106
  end
164
107
 
165
108
  # Deletes all corresponding indexes with current prefix from ElasticSearch.
@@ -227,7 +170,10 @@ module Chewy
227
170
 
228
171
  def eager_load!
229
172
  return unless defined?(Chewy::Railtie)
230
- dirs = Chewy::Railtie.all_engines.map { |engine| engine.paths[Chewy.configuration[:indices_path]] }.compact.map(&:existent).flatten.uniq
173
+
174
+ dirs = Chewy::Railtie.all_engines.map do |engine|
175
+ engine.paths[Chewy.configuration[:indices_path]]
176
+ end.compact.map(&:existent).flatten.uniq
231
177
 
232
178
  dirs.each do |dir|
233
179
  Dir.glob(File.join(dir, '**/*.rb')).each do |file|
data/lib/chewy/config.rb CHANGED
@@ -3,43 +3,46 @@ module Chewy
3
3
  include Singleton
4
4
 
5
5
  attr_accessor :settings, :logger,
6
- # The first strategy in stack. `:base` by default.
7
- # If you need to return to the previous chewy behavior -
8
- # just set it to `:bypass`
9
- #
10
- :root_strategy,
11
- # Default request strategy middleware, used in e.g
12
- # Rails controllers. See Chewy::Railtie::RequestStrategy
13
- # for more info.
14
- #
15
- :request_strategy,
16
- # Use after_commit callbacks for RDBMS instead of
17
- # after_save and after_destroy. True by default. Useful
18
- # in tests with transactional fixtures or transactional
19
- # DatabaseCleaner strategy.
20
- #
21
- :use_after_commit_callbacks,
22
- # Where Chewy expects to find index definitions
23
- # within a Rails app folder.
24
- :indices_path,
25
- # Set index refresh_interval setting to -1 before reset and put the original value after.
26
- # If setting not present, put back to default 1s
27
- # https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-update-settings.html
28
- :reset_disable_refresh_interval,
29
- # Set number_of_replicas to 0 before reset and put the original value after
30
- # https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-update-settings.html
31
- :reset_no_replicas,
32
- # Refresh or not when import async (sidekiq, resque, activejob)
33
- :disable_refresh_async,
34
- # Default options for root of Chewy type. Allows to set default options
35
- # for type mappings like `_all`.
36
- :default_root_options,
37
- # Default field type for any field in any Chewy type. Defaults to 'text'.
38
- :default_field_type
6
+ # The first strategy in stack. `:base` by default.
7
+ # If you need to return to the previous chewy behavior -
8
+ # just set it to `:bypass`
9
+ #
10
+ :root_strategy,
11
+ # Default request strategy middleware, used in e.g
12
+ # Rails controllers. See Chewy::Railtie::RequestStrategy
13
+ # for more info.
14
+ #
15
+ :request_strategy,
16
+ # Rails console strategy, `:urgent` by default.
17
+ #
18
+ :console_strategy,
19
+ # Use after_commit callbacks for RDBMS instead of
20
+ # after_save and after_destroy. True by default. Useful
21
+ # in tests with transactional fixtures or transactional
22
+ # DatabaseCleaner strategy.
23
+ #
24
+ :use_after_commit_callbacks,
25
+ # Where Chewy expects to find index definitions
26
+ # within a Rails app folder.
27
+ :indices_path,
28
+ # Set index refresh_interval setting to -1 before reset and put the original value after.
29
+ # If setting not present, put back to default 1s
30
+ # https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-update-settings.html
31
+ :reset_disable_refresh_interval,
32
+ # Set number_of_replicas to 0 before reset and put the original value after
33
+ # https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-update-settings.html
34
+ :reset_no_replicas,
35
+ # Refresh or not when import async (sidekiq, activejob)
36
+ :disable_refresh_async,
37
+ # Default options for root of Chewy type. Allows to set default options
38
+ # for type mappings like `_all`.
39
+ :default_root_options,
40
+ # Default field type for any field in any Chewy type. Defaults to 'text'.
41
+ :default_field_type
39
42
 
40
43
  attr_reader :transport_logger, :transport_tracer,
41
- # Chewy search request DSL base class, used by every index.
42
- :search_class
44
+ # Chewy search request DSL base class, used by every index.
45
+ :search_class
43
46
 
44
47
  def self.delegated
45
48
  public_instance_methods - superclass.public_instance_methods - Singleton.public_instance_methods
@@ -49,6 +52,7 @@ module Chewy
49
52
  @settings = {}
50
53
  @root_strategy = :base
51
54
  @request_strategy = :atomic
55
+ @console_strategy = :urgent
52
56
  @use_after_commit_callbacks = true
53
57
  @reset_disable_refresh_interval = false
54
58
  @reset_no_replicas = false
@@ -138,11 +142,7 @@ module Chewy
138
142
 
139
143
  def build_search_class(base)
140
144
  Class.new(base).tap do |search_class|
141
- if defined?(::Kaminari)
142
- search_class.send :include, Chewy::Search::Pagination::Kaminari
143
- elsif defined?(::WillPaginate)
144
- search_class.send :include, Chewy::Search::Pagination::WillPaginate
145
- end
145
+ search_class.send :include, Chewy::Search::Pagination::Kaminari if defined?(::Kaminari)
146
146
  end
147
147
  end
148
148
  end
data/lib/chewy/errors.rb CHANGED
@@ -5,12 +5,6 @@ module Chewy
5
5
  class UndefinedIndex < Error
6
6
  end
7
7
 
8
- class UndefinedType < Error
9
- end
10
-
11
- class UnderivableType < Error
12
- end
13
-
14
8
  class UndefinedUpdateStrategy < Error
15
9
  def initialize(_type)
16
10
  super <<-MESSAGE
@@ -36,10 +30,4 @@ module Chewy
36
30
  super message
37
31
  end
38
32
  end
39
-
40
- class RemovedFeature < Error
41
- end
42
-
43
- class PluginMissing < Error
44
- end
45
33
  end
@@ -40,6 +40,8 @@ module Chewy
40
40
  def compose(*objects)
41
41
  result = evaluate(objects)
42
42
 
43
+ return {} if result.blank? && ignore_blank?
44
+
43
45
  if children.present? && !multi_field?
44
46
  result = if result.respond_to?(:to_ary)
45
47
  result.to_ary.map { |item| compose_children(item, *objects) }
@@ -53,13 +55,21 @@ module Chewy
53
55
 
54
56
  private
55
57
 
58
+ def geo_point?
59
+ @options[:type].to_s == 'geo_point'
60
+ end
61
+
62
+ def ignore_blank?
63
+ @options.fetch(:ignore_blank) { geo_point? }
64
+ end
65
+
56
66
  def evaluate(objects)
57
67
  object = objects.first
58
68
 
59
69
  if value.is_a?(Proc)
60
70
  if value.arity.zero?
61
71
  object.instance_exec(&value)
62
- elsif value.arity < 0
72
+ elsif value.arity.negative?
63
73
  value.call(*object)
64
74
  else
65
75
  value.call(*objects.first(value.arity))
@@ -1,10 +1,7 @@
1
1
  module Chewy
2
2
  module Fields
3
3
  class Root < Chewy::Fields::Base
4
- attr_reader :dynamic_templates
5
- attr_reader :id
6
- attr_reader :parent
7
- attr_reader :parent_id
4
+ attr_reader :dynamic_templates, :id, :parent, :parent_id
8
5
 
9
6
  def initialize(name, **options)
10
7
  super(name, **options)
@@ -55,11 +52,13 @@ module Chewy
55
52
 
56
53
  def compose_parent(object)
57
54
  return unless parent_id
55
+
58
56
  parent_id.arity.zero? ? object.instance_exec(&parent_id) : parent_id.call(object)
59
57
  end
60
58
 
61
59
  def compose_id(object)
62
60
  return unless id
61
+
63
62
  id.arity.zero? ? object.instance_exec(&id) : id.call(object)
64
63
  end
65
64