Class: Chewy::Index::Adapter::Object
- Defined in:
- lib/chewy/index/adapter/object.rb
Overview
This adapter provides an ability to import documents from any source. You can actually use any class or even a symbol as a target.
In case if a class is used - some of the additional features are available: it is possible to provide the default import data (used on reset) and source objects loading logic.
Constant Summary
Constants inherited from Base
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
-
#identify(collection) ⇒ Array<Object>
While for ORM adapters it returns an array of ids for the passed collection, for the object adapter it returns the collection itself.
-
#import ⇒ true, false
This method is used internally by
Chewy::Index.import
. -
#initialize(target, **options) ⇒ Object
constructor
The signature of the index scope definition.
-
#load(ids, **options) ⇒ Array<Object>?
This method is used internally by the request DSL when the collection of ORM/ODM objects is requested.
-
#name ⇒ String
Inferred from the target by default if possible.
Methods inherited from Base
accepts?, #import_fields, #import_references, #type_name
Constructor Details
#initialize(target, **options) ⇒ Object
The signature of the index scope definition.
29 30 31 32 |
# File 'lib/chewy/index/adapter/object.rb', line 29 def initialize(target, **) @target = target @options = end |
Instance Method Details
#identify(collection) ⇒ Array<Object>
While for ORM adapters it returns an array of ids for the passed collection, for the object adapter it returns the collection itself.
52 53 54 |
# File 'lib/chewy/index/adapter/object.rb', line 52 def identify(collection) Array.wrap(collection) end |
#import ⇒ true, false
This method is used internally by Chewy::Index.import
.
The idea is that any object can be imported to ES if
it responds to #to_json
method.
If method destroyed?
is defined for object (or, in case of hash object,
it has :_destroyed
or '_destroyed'
key) and returns true
or object
satisfy delete_if
option then object will be deleted from index.
But in order to be destroyable, objects need to respond to id
method
or have an id
key so ElasticSearch could know which one to delete.
If nothing is passed the method tries to call import_all_method
,
which is call
by default, on target to get the default objects batch.
88 89 90 91 |
# File 'lib/chewy/index/adapter/object.rb', line 88 ruby2_keywords def import(*args, &block) collection, = import_args(*args) import_objects(collection, , &block) end |
#load(ids, **options) ⇒ Array<Object>?
This method is used internally by the request DSL when the collection of ORM/ODM objects is requested.
Options usage is implemented by load_all_method
and load_one_method
.
If none of the load_all_method
or load_one_method
is implemented
for the target - the method will return nil. This means that the
loader will return an array Chewy::Index
objects that actually was passed.
To use loading for objects it is obviously required to provide some meaningful ids for ES documents.
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/chewy/index/adapter/object.rb', line 179 def load(ids, **) if target.respond_to?(load_all_method) if target.method(load_all_method).arity == 1 target.send(load_all_method, ids) else target.send(load_all_method, ids, ) end elsif target.respond_to?(load_one_method) if target.method(load_one_method).arity == 1 ids.map { |hit| target.send(load_one_method, hit) } else ids.map { |hit| target.send(load_one_method, hit, ) } end end end |
#name ⇒ String
Inferred from the target by default if possible.
43 44 45 |
# File 'lib/chewy/index/adapter/object.rb', line 43 def name @name ||= ([:name] || @target).to_s.camelize.demodulize end |