Sha256: cf16a6f7967f632f78bd9056cb072e6aea11b1a3785aff938f3a0f7ab1b6fa1b

Contents?: true

Size: 1.51 KB

Versions: 42

Compression:

Stored size: 1.51 KB

Contents

module ActiveGraph
  module Node
    module Dependent
      module AssociationMethods
        def validate_dependent(value)
          fail ArgumentError, "Invalid dependent value: #{value.inspect}" if not valid_dependent_value?(value)
        end

        def add_destroy_callbacks(model)
          return if dependent.nil?

          model.before_destroy(&method("dependent_#{dependent}_callback"))
        rescue NameError
          raise "Unknown dependent option #{dependent}"
        end

        private

        def valid_dependent_value?(value)
          return true if value.nil?

          self.respond_to?("dependent_#{value}_callback", true)
        end

        # Callback methods
        def dependent_delete_callback(object)
          object.association_query_proxy(name).delete_all
        end

        def dependent_delete_orphans_callback(object)
          unique_query = object.as(:self).unique_nodes(self, :self, :n, :other_rel)
          unique_query.query.optional_match('(n)-[r]-()').delete(:n, :r).exec if unique_query
        end

        def dependent_destroy_callback(object)
          unique_query = object.association_query_proxy(name)
          unique_query.each_for_destruction(object, &:destroy) if unique_query
        end

        def dependent_destroy_orphans_callback(object)
          unique_query = object.as(:self).unique_nodes(self, :self, :n, :other_rel)
          unique_query.each_for_destruction(object, &:destroy) if unique_query
        end

        # End callback methods
      end
    end
  end
end

Version data entries

42 entries across 42 versions & 1 rubygems

Version Path
activegraph-10.0.0.pre.beta.2 lib/active_graph/node/dependent/association_methods.rb
activegraph-10.0.0.pre.beta.1 lib/active_graph/node/dependent/association_methods.rb