Class: Chewy::Index::Adapter::Orm
- Defined in:
- lib/chewy/index/adapter/orm.rb
Direct Known Subclasses
Constant Summary
Constants inherited from Base
Instance Attribute Summary collapse
- 
  
    
      #default_scope  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute default_scope. 
Attributes inherited from Base
Instance Method Summary collapse
- #identify(collection) ⇒ Object
- 
  
    
      #import(*args, &block)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Import method for ORM takes import data and import options. 
- #import_fields(*args, &block) ⇒ Object (also: #import_references)
- 
  
    
      #initialize(target, **options)  ⇒ Orm 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of Orm. 
- #load(ids, **options) ⇒ Object
- #name ⇒ Object
Methods inherited from Base
Constructor Details
#initialize(target, **options) ⇒ Orm
Returns a new instance of Orm.
| 9 10 11 12 13 14 15 16 17 18 19 | # File 'lib/chewy/index/adapter/orm.rb', line 9 def initialize(target, **) if target.is_a?(relation_class) @target = model_of_relation(target) @default_scope = target else @target = target @default_scope = all_scope end @options = cleanup_default_scope! end | 
Instance Attribute Details
#default_scope ⇒ Object (readonly)
Returns the value of attribute default_scope.
| 7 8 9 | # File 'lib/chewy/index/adapter/orm.rb', line 7 def default_scope @default_scope end | 
Instance Method Details
#identify(collection) ⇒ Object
| 25 26 27 28 29 30 31 32 33 | # File 'lib/chewy/index/adapter/orm.rb', line 25 def identify(collection) if collection.is_a?(relation_class) pluck(collection) else Array.wrap(collection).map do |entity| entity.respond_to?(primary_key) ? entity.public_send(primary_key) : entity end end end | 
#import(*args, &block) ⇒ Object
Import method for ORM takes import data and import options
Import data types:
- Nothing passed - imports all the model data according to type default scope
- ORM scope
- Objects collection
- Ids collection
Import options:
:batch_size - import batch size, 1000 objects by default :direct_import - import objects without reloading
Method handles destroyed objects as well. In case of objects ORM scope
or array passed, objects, responding with true to destroyed? method will be deleted
from index. In case of ids array passed - documents with missing source object ids will be
deleted from index:
users = User.all users.each { |user| user.destroy if user.inactive? } UsersIndex.import users # inactive users will be deleted from index # or UsersIndex.import users.map(&:id) # deleted user ids will be deleted from index
Also there is custom type option delete_if. It it returns true
object will be deleted from index. Note that if this option is defined and
return false Chewy will still check destroyed? method. This is useful
for paranoid objects deleting implementation.
index_scope User, delete_if: ->{ deleted_at } ...
users = User.all users.each { |user| user.deleted_at = Time.now } UsersIndex.import users # paranoid deleted users will be deleted from index # or UsersIndex.import users.map(&:id) # user ids will be deleted from index
| 75 76 77 78 79 80 81 82 83 | # File 'lib/chewy/index/adapter/orm.rb', line 75 def import(*args, &block) collection, = import_args(*args) if !collection.is_a?(relation_class) || [:direct_import] import_objects(collection, , &block) else import_scope(collection, , &block) end end | 
#import_fields(*args, &block) ⇒ Object Also known as: import_references
| 85 86 87 88 89 90 91 92 93 94 95 96 | # File 'lib/chewy/index/adapter/orm.rb', line 85 def import_fields(*args, &block) return enum_for(:import_fields, *args) unless block_given? collection, = import_args(*args) if [:fields].present? || collection.is_a?(relation_class) collection = all_scope_where_ids_in(identify(collection)) unless collection.is_a?(relation_class) pluck_in_batches(collection, **.slice(:fields, :batch_size, :typecast), &block) else identify(collection).each_slice([:batch_size], &block) end end | 
#load(ids, **options) ⇒ Object
| 99 100 101 102 103 104 105 106 107 108 109 110 111 | # File 'lib/chewy/index/adapter/orm.rb', line 99 def load(ids, **) scope = all_scope_where_ids_in(ids) additional_scope = [[:_index].to_sym].try(:[], :scope) || [:scope] loaded_objects = load_scope_objects(scope, additional_scope) loaded_objects = raw(loaded_objects, [:raw_import]) if [:raw_import] indexed_objects = loaded_objects.index_by do |object| object.public_send(primary_key).to_s end ids.map { |id| indexed_objects[id.to_s] } end | 
#name ⇒ Object
| 21 22 23 | # File 'lib/chewy/index/adapter/orm.rb', line 21 def name @name ||= ([:name].presence || target.name).to_s.camelize.demodulize end |