screwdriver-datastore-imdb

1.0.18 • Public • Published

Screwdriver In-Memory Datastore

Version Downloads Build Status Open Issues Dependency Status License

In-memory datastore for use with the Screwdriver API

Usage

npm install screwdriver-datastore-imdb

Initialization

The IMDB is an extension of the screwdriver-datastore-base class and implements all of the functions exposed.

The IMDB takes in an optional config parameter as a JSON object that will be used to initialize the in-memory database.

Arguments

  • config - Optional An object passed to the initialization of the class
  • config.db - Optional An object to initialize the database with
  • config.filename - Optional A filename to initialize the database with. If both db and filename are passed in, the db value will be ignored
const Imdb = require('screwdriver-datastore-imdb');

Without a database (will initialize with {} as default)

const imdb = new Imdb();
 
imdb.get('table1', 'key1').then(console.log);  // Outputs null

With a filename

Example file some/path/to/config.json:

{
    table1: {
        key1: {
            foo: 'bar'
        }
    }
}
const imdb2 = new Imdb({
  filename: 'some/path/to/config.json'
});
 
imdb2.get('table1', 'key1').then(console.log);    // Outputs { foo: 'bar' }

With a database

const imdb3 = new Imdb({
  db: {
      table1: {
          key1: {
              foo: 'bar'
          }
      }
  }
});
 
imdb3.get('table1', 'key1').then(console.log);    // Outputs { foo: 'bar' }

get

Obtain a single record given an id. Returns null if the record does not exist.

Arguments

  • config - An object. Each of its properties defines your get operation
  • config.table - A string. The datastore table name
  • config.params - An object. Each of its properties defines the get parameters
  • config.params.id - A string. The ID of the item to fetch from the datastore

Example

const Imdb = require('screwdriver-datastore-imdb');
const imdb = new Imdb();
 
// successful get operation
imdb.get({
    table: 'fruits',
    params: {
        id: 'apple'
    }
}).then(console.log);  // { color: 'red', type: 'fruit' }
 
// get operation on a non-existing entry
imdb.get({
    table: 'fruits',
    params: {
        id: 'celery'
    }
}).then(console.log);  // null

save

Save a record in the datastore. Returns saved data.

Arguments

  • config - An object. Each of its properties defines your save operation
  • config.table - A string. The datastore table name
  • config.params - An object. Each of its properties defines the save parameters
  • config.params.id - A string. The ID to associate the data with
  • config.params.data - An object. This is what will be saved in the datastore
const Imdb = require('screwdriver-datastore-imdb');
const imdb = new Imdb({
    db: {
        favorites: {
            fruit: {
                name: 'cherry'
            }
        }
    }
});
 
 
// overwrite pre-existing entry
imdb.save({
    table: 'favorites',
    params: {
        id: 'fruit',
        data: {
            name: 'pear'
        }
    }
}).then(console.log);  // { id: 'fruit', name: 'cherry' }
 
 
// save new entry
imdb.save({
    table: 'favorites',
    params: {
        id: 'meal',
        data: {
            name: 'mac & cheese'
        }
    }
}).then(console.log);  // { id: 'meal', name: 'mac & cheese' }

update

Update an existing record in the datastore. Returns null if the record does not exist.

Arguments

  • config - An object. Each of its properties defines your save operation
  • config.table - A string. The datastore table name
  • config.params - An object. Each of its properties defines the save parameters
  • config.params.id - A string. The ID to associate the data with
  • config.params.data - An object. This is what will be saved in the datastore
const Imdb = require('screwdriver-datastore-imdb');
const imdb = new Imdb({
    db: {
        meals: {
            lunch: {
                main: 'sandwich',
                side: 'chips'
            }
        }
    }
});
 
 
// update entry
imdb.update({
    table: 'meals',
    params: {
        id: 'lunch',
        data: {
            drink: 'ice tea'
        }
    }
}).then(console.log);  // { id: 'lunch', main: 'sandwich', side: 'chips', drink: 'ice tea' }
 
 
// update a non-existing entry
imdb.save({
    table: 'meals',
    params: {
        id: 'breakfast',
        data: {
            main: 'milk & cereal'
        }
    }
}).then(console.log);  // null

scan

Fetch multiple records from the datastore. Returns [] if the table is empty. Rejects with an error if table does not exist.

Arguments

  • config - An object. Each of its properties defines your scan operation
  • config.table - A string. The datastore table name
  • config.params - An object. Each of its properties defines the query parameters
  • config.paginate - An object. Each of its properties further defines the characteristics for pagination
  • config.paginate.count - An integer. This is the number of items per page
  • config.paginate.page - An integer. This is the page number of the set you wish for the datastore to return

Example

const Imdb = require('screwdriver-datastore-imdb');
const imdb = new Imdb();
 
// valid scan
imdb.scan({
    table: 'primarycolors',
    params: {},
    paginate: {
        page: 1,
        count: 2
    }
}).then(console.log);  // [{ id: 0, name: 'blue' }, { id: 1, name: 'green'}]
 
// best effort based on given criteria
imdb.scan({
    table: 'primarycolors',
    params: {},
    paginate: {
        page: 2,
        count: 2
    }
}).then(console.log);  // [{ id: 2, name: 'red' }]
 
// no results found
imdb.scan({
    table: 'primarycolors',
    params: {},
    paginate: {
        page: 3,
        count: 2
    }
}).then(console.log); // []
 
// scan operation on a non-existing entry
datastore.scan({
    table: 'unicorns',
    params: {},
    paginate: {
        page: 2,
        count: 2
    }
}).catch(console.error);  // [Error: Invalid table name "unicorns"]

Testing

npm test

License

Code licensed under the BSD 3-Clause license. See LICENSE file for terms.

Readme

Keywords

Package Sidebar

Install

npm i screwdriver-datastore-imdb

Weekly Downloads

3

Version

1.0.18

License

BSD-3-Clause

Last publish

Collaborators

  • sd-buildbot
  • screwdriver
  • minz1027
  • stjohnjohnson
  • d2lam
  • tkyi
  • fenrirunbound
  • petey