# Dynoga

[![NPM](https://nodei.co/npm/dynoga.png)](https://nodei.co/npm/dynoga/)

## Disclaimer

**Dynoga** is a lightweight library to use DynamoDB with JavaScript objects.

We use CRUD naming for easy matching with [Backbone.ioBind](https://github.com/logicalparadox/backbone.iobind)


## How to use

### Initialize


```
Dynoga = require "dynoga"

db = new Dynoga
  endpoint: config.dynamoDB.endpoint
  accessKeyId: config.dynamoDB.accessKeyId
  secretAccessKey: config.dynamoDB.secretAccessKey
  region: config.dynamoDB.region
```

### Create an item


```
db.create "mytable", item, (err, model) ->
  if err then console.log err
  console.log model
```

### Read an item

**keys**: Key/value object, a hash is mandatory

```
db.read "mytable", keys, (err, model) ->
  if err then console.log err
  console.log model
```


### Update an item

**item**: Key/value object, a hash and range are mandatory

Dynoga automatically find primary keys for update the good item.

```
db.update "mytable", item, (err, model) ->
  if err then console.log err
  console.log model
```

### Delete an item

**item**: Key/value object, a hash and range are mandatory

Dynoga automatically find primary keys for delete the good item.

```
db.delete "mytable", item, (err, model) ->
  if err then console.log err
  console.log model
```

## Running Tests

Put in your environment

```
export METIDIA_ACCESS_KEY_ID=YOURACCESKEYID
export METIDIA_SECRET_ACCESS_KEY=YOURSECRETACCESSKEY
```

Run a local dynomadb instance

`$ java -Djava.library.path=. -jar DynamoDBLocal.jar`

cf: [DynamoDB Local for Desktop Development](http://aws.typepad.com/aws/2013/09/dynamodb-local-for-desktop-development.html)

Run tests

`npm test` Execute units tests

`npm run watch-test` Execute units tests with watch files for changes

## Warning

For a natural sorting for READ operations, Dynoga use an internal `_createTimeStamp` attribute.
Please don't use it if you don't want surprise ;)