Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gabriel-letarte/sails-arangodb
Waterline ORM adapter for ArangoDB.
https://github.com/gabriel-letarte/sails-arangodb
Last synced: 26 days ago
JSON representation
Waterline ORM adapter for ArangoDB.
- Host: GitHub
- URL: https://github.com/gabriel-letarte/sails-arangodb
- Owner: gabriel-letarte
- License: mit
- Created: 2015-03-02T19:53:18.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2017-07-19T15:22:54.000Z (over 7 years ago)
- Last Synced: 2024-11-14T00:52:20.242Z (about 1 month ago)
- Language: JavaScript
- Size: 72.3 KB
- Stars: 24
- Watchers: 11
- Forks: 19
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-arangodb - sails-arangodb
README
![[email protected]](http://i.imgur.com/RIvu9.png)
# sails-arangodb
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:
```sh
$ npm install 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
```javascriptlocalArangoDB: {
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](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](test/README.md))
To run the waterline adapter compliance tests:
```
$ gulp waterline
```Generate api jsdocs:
```
$ gulp docs
```
(these are also generated in the default 'watch' mode above)---
# Older doc
### Example model definitions
```javascript
/**
* 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'
}
}
};
```
```javascript// 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](./LICENSE)**
© 2016 Gabriel Letarte ([gabriel-letarte](http://github.com/gabriel-letarte)) & [thanks to]
Taneli Leppä ([rosmo](http://github.com/rosmo)) & [thanks to]
[vjsrinath](http://github.com/vjsrinath) & [thanks to]
[balderdashy](http://github.com/balderdashy), [Mike McNeil](http://michaelmcneil.com), [Balderdash](http://balderdash.co) & contributorsThis adapter has been developed using [vjsrinath](http://github.com/vjsrinath)'s sails-orientdb as a template.
[Sails](http://sailsjs.org) is free and open-source under the [MIT License](http://sails.mit-license.org/).