GraphStarter: Get Your Neo4j Rails App Up and Running Quickly


For a while now, I’ve been building various Neo4j.rb educational resources using the example of an asset portal.

There have been:

As part of this process, I’ve wanted to use what I’ve been building and allow anybody to easily create a UI for their own assets in Rails. I’m pleased to say that I’ve got a good start with the graph_starter gem.

The graph_starter gem is a Rails engine, which means that it can be placed within a Neo4j Rails application. The goal is to be able to quickly set up a basic UI for your entities, but to also be able to override it when you want to provide custom logic.

Setting up a graph_starter application is as simple as the following steps:

Installation


Using graph_starter is easy. First, create a Rails application if you don’t already have one:

rails new application_name

Include the graph_starter gem (it will include the Neo4j.rb gems for you):

# Gemfile

gem 'graph_starter'

Then, mount the engine:

# config/routes.rb

mount GraphStarter::Engine => '/'

Next, create some asset models:

# app/models/product.rb

class Product < GraphStarter::Asset
  # `title` property is added automatically

  property :name
  property :description
  property :price, type: Integer

  has_images

  has_one :in, :vendor, type: :SELLS_PRODUCT
end

# app/models/vendor.rb

class Vendor < GraphStarter::Asset
  property :brand_name
  property :code

  name_property :brand_name

  has_many :out, :products, origin: :vendor
end


These models are simply Neo4j.rb ActiveNode models so you can refer to the Neo4j.rb documentation to define them. They do have some special methods, however, which let you control how GraphStarter works.

In the above Product model, for example, has_images has been called to indicate that products have images which defines a separate Image model along with the necessary association.

See the graph_starter README for documentation on how to configure aspects of your models.

Importing Data


Once that framework is in place, you can define a way to import data, if desired. In this case, I would suggest making a rake task:

# lib/tasks/store.rake

namespace :store do
  task :import do
    CSV.open(File.read('vendors.csv')).each do |row|
      Vendor.create(name: row['brand_name'],
                    code: row['code'])
    end

    CSV.open(File.read('products.csv')).each do |row|
      product = Product.create(name: row['name'],
                               description: row['description'],
                               price: row['price'].to_i)

      product.vendor = Vendor.find_by(code: row['vendor_code'])
    end
  end
end


And that’s all!

When everything is in place, you can simply start up your Rails server (by running rails server) and you get a UI which looks like this example site I made using data from the Natural History Museum in London:

assets-index


Meet GraphStarter: A Ruby Gem for Getting a Neo4j Rails Application Up and Running Quickly


More Information


You can browse the app on Heroku and checkout the repository on GitHub

I’ll be working on a new project to create a GraphGist portal based on the graph_starter gem so I plan to continue improving it!



Need more tips on how to effectively use Neo4j in your next Neo4j Rails app? Register for our online training class, Neo4j in Production, and learn how master the world’s leading graph database.