/oriented

Wrapper around OrientDB JRuby gem

Primary LanguageRubyMIT LicenseMIT

Oriented

Code Climate Test Coverage

Codeship Status for ruprict/oriented

Oriented attempts to wrap access to OrientDB in an ORM-like manner.

The conception of this gem started with a lot of copying/pasting of code from the wonderful Neo4j gems. Oriented only provides a fraction of what the Neo4j gems currently offer.

Installation

Add this line to your application's Gemfile:

gem 'oriented'

And then execute:

$ bundle

Or install it yourself as:

$ gem install oriented

Usage

Oriented can be included in your models by simple extending the model with the appropriate module, based on whether your OrientDB class is a Vertex or an Edge.

If, for example, you had these models:

require 'oriented'

class Person
  include Oriented::Vertex

  property :name

  has_n(:knows).relationship(Knows)
end

class Knows
  include Oriented::Edge

  property :rel_type, default: 'friend'
end

then, you might do something like this:

require_relative 'example/knows'
require_relative 'example/person'

$odb = OrientDB::GraphDatabase.new("memory:example-db").create
$odb.close

Oriented.configure do |config|

 config.url = "memory:example-db" 

end

fred = Person.new(name: 'Fred')
fred.save

barney = Person.new(name: 'Barney')
barney.save

fred.knows << barney
fred.save

puts "Fred knows:  #{ fred.knows.to_a.map(&:name) } as a #{fred.knows_rels.to_a.map(&:rel_type)}"
==> Fred know ['Barney'] as a ['friend']

Querying

Oriented supports basic #get! methods:

fred = Person.get!(name: 'Fred')

Beyond that, right now, you'll have to leverage OrientDB, using either Gremlin or raw OrientDB SQL.

As a tip, don't use gremilin unless you have a small dataset. In most cases, it will load hugh amounts of the graph into memory, which can be slow.

OrientDB has a relatively robust SQL-ish query language that offloads most of the work to the server. Use OrientDB::SQLCommand

(should probably put some examples here)

Roadmap

  • Move to 2.0 when it is released
  • Need docs around configuration
  • Should probably look into a decent query DSL
    • Thinking of starting with Arel

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Write code and tests. (Please write tests.)
  4. Commit your changes (git commit -am 'Add some feature')
  5. Push to the branch (git push origin my-new-feature)
  6. Create new Pull Request

License

Oriented uses the MIT License. See LICENSE.txt for details.