module Neomirror::Relationship
Public Class Methods
included(base)
click to toggle source
# File lib/neomirror/relationship.rb, line 2 def self.included(base) base.extend(ClassMethods) base.after_create :create_neo_relationships if base.respond_to?(:after_create) base.after_update :update_neo_relationships if base.respond_to?(:after_update) base.after_destroy :destroy_neo_relationships if base.respond_to?(:after_destroy) end
Public Instance Methods
create_neo_relationship(rel_mirror = {})
click to toggle source
# File lib/neomirror/relationship.rb, line 72 def create_neo_relationship(rel_mirror = {}) raise "Couldn't find neo_relationship declaration" unless rel_mirror[:complete] || (rel_mirror = self.class.rel_mirror(rel_mirror)) return nil unless (m1 = related_object(rel_mirror[:start_node])) && (m2 = related_object(rel_mirror[:end_node])) && neo_relationship_must_exist?(rel_mirror) neo_rel = ::Neography::Relationship.create(rel_mirror[:type], m1.neo_node, m2.neo_node, neo_relationship_properties(rel_mirror)) ::Neomirror.neo.add_relationship_to_index(rel_mirror[:index_name], :id, self.__send__(self.class.neo_primary_key), neo_rel) neo_rel end
create_neo_relationships()
click to toggle source
# File lib/neomirror/relationship.rb, line 113 def create_neo_relationships self.class.rel_mirrors.each { |rel_mirror| create_neo_relationship(rel_mirror) } true end
destroy_neo_relationship(rel_mirror = {}, options = {})
click to toggle source
# File lib/neomirror/relationship.rb, line 103 def destroy_neo_relationship(rel_mirror = {}, options = {}) raise "Couldn't find neo_relationship declaration" unless rel_mirror[:complete] || (rel_mirror = self.class.rel_mirror(rel_mirror)) if neo_rel = options.fetch(:neo_rel, find_neo_relationship(rel_mirror)) ::Neomirror.neo.remove_relationship_from_index(rel_mirror[:index_name], :id, self.__send__(self.class.neo_primary_key), neo_rel) ::Neomirror.neo.delete_relationship(neo_rel) else true end end
destroy_neo_relationships()
click to toggle source
# File lib/neomirror/relationship.rb, line 123 def destroy_neo_relationships self.class.rel_mirrors.each { |rel_mirror| destroy_neo_relationship(rel_mirror) } true end
find_neo_relationship(rel_mirror = {})
click to toggle source
# File lib/neomirror/relationship.rb, line 66 def find_neo_relationship(rel_mirror = {}) raise "Couldn't find neo_relationship declaration" unless rel_mirror[:complete] || (rel_mirror = self.class.rel_mirror(rel_mirror)) return nil unless rel = ::Neomirror.neo.get_relationship_index(rel_mirror[:index_name], :id, self.__send__(self.class.neo_primary_key)) ::Neography::Relationship.load(rel, ::Neomirror.neo) end
neo_relationship(partial_mirror = nil)
click to toggle source
# File lib/neomirror/relationship.rb, line 49 def neo_relationship(partial_mirror = nil) raise "Couldn't find neo_relationship declaration" unless rel_mirror = self.class.rel_mirror(partial_mirror) find_neo_relationship(rel_mirror) || create_neo_relationship(rel_mirror) end
Also aliased as: neo_rel
neo_relationship_must_exist?(rel_mirror = {})
click to toggle source
# File lib/neomirror/relationship.rb, line 61 def neo_relationship_must_exist?(rel_mirror = {}) raise "Couldn't find neo_relationship declaration" unless rel_mirror[:complete] || (rel_mirror = self.class.rel_mirror(rel_mirror)) !rel_mirror[:if] || !!rel_mirror[:if].call(self) end
neo_relationship_properties(rel_mirror = {})
click to toggle source
# File lib/neomirror/relationship.rb, line 55 def neo_relationship_properties(rel_mirror = {}) raise "Couldn't find neo_relationship declaration" unless rel_mirror[:complete] || (rel_mirror = self.class.rel_mirror(rel_mirror)) return nil unless rel_mirror[:properties] rel_mirror[:properties].reduce({}) { |hash, (property, rule)| hash[property] = rule.call(self); hash } end
update_neo_relationship(rel_mirror = {})
click to toggle source
# File lib/neomirror/relationship.rb, line 85 def update_neo_relationship(rel_mirror = {}) raise "Couldn't find neo_relationship declaration" unless rel_mirror[:complete] || (rel_mirror = self.class.rel_mirror(rel_mirror)) if neo_rel = find_neo_relationship(rel_mirror) if related_object(rel_mirror[:start_node]) && related_object(rel_mirror[:end_node]) && neo_relationship_must_exist?(rel_mirror) if related_object(rel_mirror[:start_node]).neo_node.id != neo_rel.start_node.id || related_object(rel_mirror[:end_node]).neo_node.id != neo_rel.end_node.id destroy_neo_relationship(rel_mirror, neo_rel: neo_rel) create_neo_relationship(rel_mirror) else ::Neomirror.neo.reset_relationship_properties(neo_rel, neo_relationship_properties(rel_mirror)) end else destroy_neo_relationship(rel_mirror, neo_rel: neo_rel) end else create_neo_relationship(rel_mirror) if neo_relationship_must_exist?(rel_mirror) end end
update_neo_relationships()
click to toggle source
# File lib/neomirror/relationship.rb, line 118 def update_neo_relationships self.class.rel_mirrors.each { |rel_mirror| update_neo_relationship(rel_mirror) } true end