Project

cadet

0.01
No commit activity in last 3 years
No release in over 3 years
ruby wrapper to Neo4j java API
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
>= 0
 Project Readme

Build Status

Use neo4j via jruby! Nothing else needed, simply add this gem to get the power of embedded neo4j!

  • Batchinsert mode supported.

super simple. you dont even need to download neo4j.

##Open a session

require 'cadet'

Cadet::Session.open "path/to/graph.db/" do
#for a batch inserter session:
#Cadet::BatchInserter::Session.open "path/to/graph.db/" do
#bear in mind that, the database directory needs to be clean before establishing a BatchInserter session.
  transaction do
    Person_by_name("Javad").lives_in_to City_by_name("Chicago")
  end
end

beginning a transaction

transaction do
  #...
end

Note: transaction effictively does nothing in a BatchInserter session, as transactions are not supported in neo4j's BatchInserter (for performance reasons)

Getting/creating a node, using label-property-value

A node can be retrieved (and implicitly created if it does not exist) via the following syntax:

javad = Person_by_name("Javad")

This will search for a node with the label "Person", and with the a "name" property set to "Javad". If a "Person" node with "name" "Javad" is not found, it will create the node, add the label "Person", and set the "name" to "javad".

Setting / retrieving a nodes properties

A node's properties can be accessed and modified just as if the node was a hash:

javad[:age] = 25
puts javad[:age] # 25

Creating a relationship between 2 nodes

A relationship can be added between 2 nodes via the following syntax:

javad.lives_in_to City_by_name("Chicago")

This returns a Cadet#Relationship object, which can then have its properties set just like a hash:

new_relationship = javad.lives_in_to City_by_name("Chicago")
new_relationship[:from] = "2012"
new_relationship[:to]   = "ongoing"

Relationship creation can also be chained:

Person_by_name("Javad").lives_in_to(City_by_name("Chicago")).city_of_to(State_by_name("Illinois")).state_of_to(Country_by_name("United States"))

A node's relationships can be iterated over via:

javad.outgoing(:lives_in).each do |rel|
  #rel is a Cadet#Relationship
end

chicago.incoming(:lives_in).each do |rel|
  #rel is a Cadet#Relationship
end

Note: this (relationship traversal) does not work in a batch inserter session, atleast not yet. The idea is a batch inserter session is used for writing data, as opposed to reading data