neo4jr-simple
A simple, ready to go JRuby wrapper for the Neo4j graph database engine which provides:
-
The Neo4j Core Java Library (required and ready to use)
-
Raw access to the Java API (using Neo4j::DB.instance )
-
Extensions to the Java API to make node manipulation and traversal more rubyesque
-
Working specs
-
Loaded Neo4j sample database with IMDB data
-
Nothing more then Neo4j goodness
Prerequisites
-
Java
-
JRuby
Recommend way of installing JRuby
-
Install RVM: rvm.beginrescueend.com/
-
Install Jruby using rvm: rvm install jruby
-
Switch ruby to JRuby: rvm use jruby
Getting Started
-
install neo4jr-simple [gemcutter.org/gems/neo4jr-simple]
-
API Docs [api.neo4j.org/current/org/neo4j/api/core/package-summary.html]
-
functional_example_spec includes examples of basic operations in neo4j like creating, retrieving and updating nodes along with simple traversal examples.
Basic Node creation:
Neo4jr::DB.execute do |neo|
node = neo.createNode
node[:name] = 'Deiters, Matt'
end
Retrieve a Node:
Neo4jr::DB.execute do |neo|
node = neo.getNodeById(1234)
end
Find a Node by some value you control:
Neo4jr::DB.execute do |neo|
# If you add a property 'identifier' to a node, the value can be used to retrieve the node by
# This can by an id or string but the value must be unique to this node
# e.g. node[:identifier] = user.id
node = neo.find_node_by_identifier(user.id)
end
Traverse Database from a node:
Neo4jr::DB.execute do |neo|
philip_seymour_hoffman = neo.getNodeById(1102)
order = Neo4jr::Order::BREADTH_FIRST
stop_when = Neo4jr::StopEvaluator::END_OF_GRAPH
return_when = Neo4jr::ReturnableEvaluator::ALL
relationships = Neo4jr::RelationshipType.outgoing(:acted_in)
traverser = philip_seymour_hoffman.traverse(order, stop_when, return_when, relationships)
traverser.each do |node|
#...
end
end
Use command line shell to query and modify the graph:
neosh -path <path_to_neo_db>
Contributors
https://github.com/mdeiters
https://github.com/klobuczek
https://github.com/gregormelhorn
Copyright © 2009 Matthew Deiters. See LICENSE for details.