Module: Elastictastic::ParentChild
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/elastictastic/parent_child.rb
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
-
#_parent ⇒ Object
:nodoc:.
-
#_parent_id ⇒ Object
:nodoc:.
- #elasticsearch_doc=(doc) ⇒ Object
- #initialize(attributes = {}) ⇒ Object
- #parent=(parent) ⇒ Object
- #save(options = {}) ⇒ Object
Instance Method Details
#_parent ⇒ Object
:nodoc:
60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/elastictastic/parent_child.rb', line 60 def _parent #:nodoc: return @_parent if defined? @_parent @_parent = if @_parent_id self.class.parent_association.clazz.in_index(index).find(@_parent_id) end #TODO - here's a piece of debugging to fix a problem where we get weird parents. remove after fixing if @_parent && !@_parent.respond_to?(:id) raise ArgumentError.new("Bad parent loaded from id #{@_parent_id} is a #{@_parent.class.name}.") end @_parent end |
#_parent_id ⇒ Object
:nodoc:
73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/elastictastic/parent_child.rb', line 73 def _parent_id #:nodoc: if @_parent_id @_parent_id elsif @_parent unless @_parent.respond_to?(:id) raise ArgumentError, "@_parent is incorrectly set to #{Object.instance_method(:inspect).bind(@_parent).call}" end @_parent_id = @_parent.id end end |
#elasticsearch_doc=(doc) ⇒ Object
55 56 57 58 |
# File 'lib/elastictastic/parent_child.rb', line 55 def elasticsearch_doc=(doc) @_parent_id = doc.delete('_parent') super end |
#initialize(attributes = {}) ⇒ Object
45 46 47 48 49 50 51 52 53 |
# File 'lib/elastictastic/parent_child.rb', line 45 def initialize(attributes = {}) super @_children = Hash.new do |hash, child_association_name| hash[child_association_name] = Elastictastic::ChildCollectionProxy.new( self.class.child_association(child_association_name.to_s), self ) end end |
#parent=(parent) ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/elastictastic/parent_child.rb', line 85 def parent=(parent) if @_parent raise Elastictastic::IllegalModificationError, "Document is already a child of #{_parent}" end if persisted? raise Elastictastic::IllegalModificationError, "Can't change parent of persisted object" end #TODO - here's a piece of debugging to fix a problem where we get weird parents. remove after fixing if parent && !parent.respond_to?(:id) raise ArgumentError.new("Bad parent loaded from id #{parent_id} is a #{parent.class.name}.") end @_parent = parent end |
#save(options = {}) ⇒ Object
101 102 103 104 105 106 107 108 |
# File 'lib/elastictastic/parent_child.rb', line 101 def save( = {}) super self.class.child_associations.each_pair do |name, association| association.extract(self).transient_children.each do |child| child.save unless child.pending_save? end end end |