Bridgetown ArcadeDB plugin
This plugin grants Bridgetown sites (v1.2 or higher) to ArcadeDB-Databases. You can pull data from a database during a static build or during server requests (or both!). ArcadeDB is a multi-model NOSQL-Database supporting Document-, KeyStore- and Graph-Databases including standard-protocols (SQL, Redis, MongoDB, Gremlin, GraphQL). Most important: ArcadeDB supports inheritance, ArcadDB is a native object-orientated database. This fits nicely to ruby.
Installation
An automation script is planned
$ bin/bridgetown apply https://github.com/bridgetownrb/bridgetown-arcade-db (future use)
Manual setup:
- Add the following to
Gemfile
gem 'arcadedb', git: 'https://github.com/topofocus/arcadedb"
gem 'arcade-time-graph', git: 'https://github.com/topofocus/-arcade-time-graph"
gem 'bridgetown-arcade-db' , git: 'https://github.com/topofocus/bridgetown-arcade-db"
( the gem is not released jet. so, reference to the github-repositories or clone everything an refer to their local location )
- activate the plugin in
config/initializers.rb
init :ssr
init :"bridgetown-routes"
init :"bridgetown-arcade-db"
or if the DB should only referenced through deployment from static pages
only :static, :console do
init :bridgetown-arcade-db
end
- add
arcade.yml
to theconfig
-dir
--- #/config/arcade.yml
:environment:
:test:
dbname: test
user: root
pass: ****
:development:
dbname: playground
user: root
pass: ****
:production:
dbname: bridgetown
user: root
pass: ****
:admin:
:host: localhost # enter ip-address or name of the arcadeDB-Server
:port: 2480 #
:user: root # this is used for lowlevel Api-Access
:pass: **** #
:autoload: true # load model if a link is detected in a record
:logger: stdout # 'file' or 'stdout'
:namespace: Arcade # default namespace
- create a
model
-directory, and there anarcade
-Namespace-Directory. - for testing: create a file
model/arcade/person.rb
module Arcade
class Person
attribute :name, Types::Nominal::String
attribute :surname, Types::Nominal::String.default( "".freeze )
attribute :email?, Types::Email
attribute :age?, Types::Nominal::Integer
attribute :active, Types::Nominal::Bool.default( true )
attribute :conterfeil?, Types::Nominal::Any
def self.db_init
File.read(__FILE__).gsub(/.*__END__/m, '')
end
end
end
## The code below is executed on the database after the database-type is created
## Use the output of `ModelClass.database_name` as DB type name
##
__END__
CREATE PROPERTY user.name STRING
CREATE PROPERTY user.surname STRING
CREATE PROPERTY user.email STRING
CREATE INDEX ON user ( name ) NOTUNIQUE
CREATE INDEX ON user ( name, surname, email ) UNIQUE
- Assuming you got a running database-instance, you are ready to go.
First steps
- Create the database
- Open the Bridgetown-Console (bin/bt c)
- execute
Api.create_database {name of the database in arcade.yml}
- create the Person type:
Arcade::Person.create_type
- add a person:
Arcade::Person.create name: "Hogo"
- query the database:
Arcade::Person.where name: 'Hugo'
The records are available in Frontmatter, components and in Bridgetown-Documents.
Contributing
- Fork it (https://github.com/topofocus/bridgetown-arcade-db/fork)
- Clone the fork using
git clone
to your local development machine. - Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request