@partoutx/sails-arangodb

0.5.0 • Public • Published

image_squidhome@2x.png

sails-arangodb

This is a fork of gabriel-letarte/sails-arangodb project

Provides easy access to ArangoDB from Sails.js & Waterline.

Take a look at sails-arangodb-demo for more up-to-date examples.

This module is a Waterline/Sails adapter, an early implementation of a rapidly-developing, tool-agnostic data standard. Its goal is to provide a set of declarative interfaces, conventions, and best-practices for integrating with all sorts of data sources. Not just database s-- external APIs, proprietary web services, or even hardware.

Strict adherence to an adapter specification enables the (re)use of built-in generic test suites, standardized documentation, reasonable expectations around the API for your users, and overall, a more pleasant development experience for everyone.

This adapter has been developed pretty quickly and may contain bugs.

Installation

To install this adapter, run:

$ npm install @partoutx/sails-arangodb

Usage

This adapter exposes the following methods:

find()
create()
update()
destroy()
createGraph() # Create a Named Graph
neighbors() # Experimental, method signature is subject to change
createEdge() # Experimental, method signature is subject to change
deleteEdge() # Experimental, method signature is subject to change

Connection

Check out Connections in the Sails docs, or see the config/connections.js file in a new Sails project for information on setting up adapters.

in connection.js

localArangoDB: {
    adapter: 'sails-arangodb',

    host: 'localhost',
    port: 8529,

    user: 'root',
    password: 'CgdYW3zBLy5yCszR',

    database: '_system'

    collection: 'examplecollection'  // ArangoDB specific
}

Schema for Graphs

Defining a Named Graph in the Schema

/*jshint node: true, esversion: 6*/
'use strict';

const Waterline = require('waterline');

const UsersProfilesGraph = Waterline.Collection.extend({
  identity: 'users_profiles_graph',
  schema: true,
  connection: 'arangodb',

  attributes: {
    // this is a named graph
    $edgeDefinitions: [
      {
        collection: 'users_profiles',
        from: ['users_1'],
        to: ['profiles_1']
      }
    ]
  }
});
module.exports = UsersProfilesGraph;

If a model has an attribute called $edgeDefinitions then the model becomes a named graph. Any further attributes are ignored.

See tests for further examples.

Unit Testing

To run unit-tests every time you save a change to a file, simply:

$ gulp

One off run of sails-arangodb specific tests (same as above):

$ gulp test  # or mocha

(Important: you must create a test.json file for your local db instance first - see test/README.md)

To run the waterline adapter compliance tests:

$ gulp waterline

Code Coverage

Both of the mocha and waterline tests are run through nyc/istanbul code coverage analysis tools. A text summary is show at the end of each test run and a coverage/ folder created containing a html lcov report that you can point your browser to.

Generating api jsdocs:

$ gulp docs

(these are also generated in the default 'watch' mode above)


Older doc

Example model definitions

/**
 * User Model
 *
 * The User model represents the schema of authentication data
 */
module.exports = {

    // Enforce model schema in the case of schemaless databases
    schema: true,
    tableName: 'User',
    attributes: {
        id: {
            type: 'string',
            primaryKey: true,
            columnName: '_key'
        },
        username: {
            type: 'string',
            unique: true
        },
        email: {
            type: 'email',
            unique: true
        },
        profile: {
            collection: 'Profile',
            via: 'user',
            edge: 'userCommented'
        }
    }
};
// api/models/Profile.js
module.exports = {
    tableName: 'profile',
    attributes: {
        id: {
            type: 'string',
            primaryKey: true,
            columnName: '_key'
        },
        user: {
            model: "User",
            required: true
        },
        familyName: {
            type: 'string'
        },
        givenName: {
            type: 'string'
        },
        profilePic: {
            type: 'string'
        }
    }
    }

// api/models/User.js
module.exports = {
    tableName: 'user',
    attributes: {
        id: {
            type: 'string',
            primaryKey: true,
            columnName: '_key'
        },
        username: {
            type: 'string'
        },
        profile: {
            collection: 'profile',
            via: 'user',
            edge: 'profileOf'
        }
    }
};
;

License

MIT © 2016 Gabriel Letarte (gabriel-letarte) & [thanks to] Taneli Leppä (rosmo) & [thanks to] vjsrinath & [thanks to] balderdashy, Mike McNeil, Balderdash & contributors

This adapter has been developed using vjsrinath's sails-orientdb as a template.

Sails is free and open-source under the MIT License.

Dependents (0)

Package Sidebar

Install

npm i @partoutx/sails-arangodb

Weekly Downloads

7

Version

0.5.0

License

MIT

Last publish

Collaborators

  • gbevan