DEV Community

Cover image for Ruby Adventures with ArcadeDB
Hartmut B.
Hartmut B.

Posted on • Edited on

Ruby Adventures with ArcadeDB

ArcadeDB is a modern, multi purpose Not-Only-SQL database. The ArcadeDB-Gem opens the database for ruby-projects.

The database is organized with types. A database-type is either a document, a vertex or an edge.

Similar to other database-adapters in ruby, types are declared in the model directory of the project.

A typical Account-model is similar to a rudimentary ActiveRecord-based Model-setup.

module Arcade
  class  Account  < Arcade::Vertex
    attribute :name, Types::Nominal::String
    attribute :mail, Types::Nominal::String

    def self.db_init
      File.read(__FILE__).gsub(/.*__END__/m, '')
    end
  end
end
__END__
CREATE PROPERTY account.name STRING
CREATE INDEX  ON account (name) UNIQUE
## /model/arcade/account.rb
Enter fullscreen mode Exit fullscreen mode
  • Account is a Vertex
  • Two attributes are predefined and type-checked via DRY::Types.
  • One Index is defined. Its needed for filtering.
  • The code at the bottom of the model-file creates the corresponding database-properties through -> Account.create_type.

First steps

It is assumed, that an arcadedb-server is setup and running.
Initialize a ruby project

mkdir test-project && cd test-project
mkdir bin
mkdir model; mkdir model/arcade
bundle init
bundle add arcadedb
Enter fullscreen mode Exit fullscreen mode

Clone dev-adventures and modify the provides framework to your needs. Modify the provided arcade.yml!

Open the console cd bin && ./console and create the Account-Vertex

3.2.0 :002 > Account
 => Arcade::Account 
3.2.0 :003 > Account.create_type
25.10.(15:51:50) INFO->Q: create vertex type account    
25.10.(15:51:50) INFO->Q: CREATE PROPERTY account.name STRING
25.10.(15:51:50) INFO->Q: CREATE INDEX  ON account (name) UNIQ
3.2.0 :004 > Account.insert name: 'hugo', mail: 'hugo@test.com', age: 37, home: '0098 565 4433' 
 => <account[#1:0]:{0->}{->0}, age: 37, home: 0098 565 4433, mail: hugo@test.com, name: hugo> 
Enter fullscreen mode Exit fullscreen mode

Congratulations! You just created the first record. Only essential attributes are predefined. Other attributes are added as needed.

Basic commands

At that point, any database query can be submitted via DB.query "query" or DB.execute { "query" }, eg.

 DB.query 'select from account'
 =>                                                
[{:@rid=>"#1:0",                                  
  :@type=>"account",                               
  :@cat=>"v",                                      
  :mail=>"hugo@test.com",                          
  :name=>"hugo",                                   
  :age=>37,                                        
  :home=>"0098 565 4433"}]  
Enter fullscreen mode Exit fullscreen mode

Most common tasks are present via ruby, eg.

a =  Account.find name: 'hugo' # find one record
a.update name: 'danzig'        # does not modify a
a = a.refresh                  # mutate a
=> <account[#1:0]:{0->}{->0}, age: 37, home: 0098 565 4433, mail: hugo@test.com, name: danzig> 
Enter fullscreen mode Exit fullscreen mode

This is the first part of an introduction series on ArcadeDB.

Next Part: Ruby Adventures with ArcadeDB 2

Top comments (0)