class TFSGraph::Repository::Neo4jRepository

Public Instance Methods

delete(obj) click to toggle source
Calls superclass method TFSGraph::Repository#delete
# File lib/tfs_graph/repository/neo4j_repository.rb, line 27
def delete(obj)
  obj.db_object.del
  super
end
drop_all() click to toggle source
# File lib/tfs_graph/repository/neo4j_repository.rb, line 32
def drop_all
  flush
  session.query("MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r")
end
find_by_neo_id(id) click to toggle source
# File lib/tfs_graph/repository/neo4j_repository.rb, line 15
def find_by_neo_id(id)
  Neo4j::Node.load(id)
end
find_native(id) click to toggle source
# File lib/tfs_graph/repository/neo4j_repository.rb, line 7
def find_native(id)
  node = Neo4j::Label.query(type.base_class_name.downcase.to_sym, conditions: {id: id}).to_a.first
  node ||= find_by_neo_id(id)

  raise NotFound, id unless node
  node
end
flush() click to toggle source
# File lib/tfs_graph/repository/neo4j_repository.rb, line 23
def flush
  @root = nil
end
get_nodes(entity, direction, relation, type) click to toggle source
# File lib/tfs_graph/repository/neo4j_repository.rb, line 49
def get_nodes(entity, direction, relation, type)
  begin
    entity.nodes(dir: direction.to_sym, type: relation.to_sym).map do |node|
      type.repository.rebuild node
    end
  rescue Neo4j::Server::CypherResponse::ResponseError => e
    []
  end
end
rebuild(db_object) click to toggle source
# File lib/tfs_graph/repository/neo4j_repository.rb, line 59
def rebuild(db_object)
  attributes = normalize db_object.props

  obj = build attributes
  obj.persist get_id(db_object), db_object
end
rebuild_from_query(attrs, id) click to toggle source
# File lib/tfs_graph/repository/neo4j_repository.rb, line 66
def rebuild_from_query(attrs, id)
  obj = build normalize(attrs)
  obj.persist id, nil
end
relate(relationship, parent, child) click to toggle source
# File lib/tfs_graph/repository/neo4j_repository.rb, line 45
def relate(relationship, parent, child)
  Neo4j::Relationship.create relationship, parent, child unless related?(parent, child, relationship)
end
root() click to toggle source
# File lib/tfs_graph/repository/neo4j_repository.rb, line 37
def root
  @root ||= begin
    node = Neo4j::Label.find_all_nodes(:root).first
    node = Neo4j::Node.create({name: "Root node"}, :root) if node.nil?
    node
  end
end
session() click to toggle source
# File lib/tfs_graph/repository/neo4j_repository.rb, line 19
def session
  Neo4j::Session.current
end

Private Instance Methods

get_id(object) click to toggle source
# File lib/tfs_graph/repository/neo4j_repository.rb, line 91
def get_id(object)
  return 0 if object.nil?
  object.neo_id
end
persist(object) click to toggle source

create the DB object

# File lib/tfs_graph/repository/neo4j_repository.rb, line 76
def persist(object)
  begin
    Neo4j::Node.create(object.to_hash, object.base_class_name.downcase)
  rescue Neo4j::Server::CypherResponse::ResponseError => e
    # assume all errors come from constraint errors... probably a bad idea
    fetch_existing_record(object)
  end
end
update(object) click to toggle source

update the DB object

# File lib/tfs_graph/repository/neo4j_repository.rb, line 86
def update(object)
  object.db_object.update_props object.attributes
  object.db_object
end