Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

123 lines (93 sloc) 4.117 kB

Couchpenter http://travis-ci.org/cliffano/couchpenter

Couchpenter is a CouchDB database and document setup tool.

This is handy when you want to create or delete CouchDB databases and documents based on a predefined setup file, either from the command-line or programmatically.

A common usage scenario is to hook up Couchpenter to application start up code, ensuring CouchDB to have the required databases along with any data, design, and replication documents, before the server starts listening.

Another usage is for integration testing, either from test libraries (e.g. Mocha's beforeEach/afterEach), or from a Continuous Integration build pipeline (e.g. resetting the databases prior to running the test suites).

Installation

npm install -g couchpenter 

Usage

Create a sample couchpenter.json setup file:

couchpenter init

Execute a task against a CouchDB URL using default couchpenter.json setup file:

couchpenter <task> -u http://user:pass@localhost:5984

Execute a task using custom setup file:

couchpenter <task> -u http://user:pass@localhost:5984 -f somecouchpenter.json

Tasks:

TaskDescription
setupCreate databases, then create/update documents.
setup-dbCreate databases only.
setup-docCreate documents only.
teardownDelete databases, including documents.
teardown-dbAlias for teardown
teardown-docDelete documents only.
resetDelete then recreate databases and documents.
reset-dbAlias for reset
reset-docDelete then recreate documents only.

Programmatically:

// use default couchpenter.json setup file
var couchpenter = new require('couchpenter').Couchpenter(
  'http://user:pass@localhost:5984'
);

// use custom setup file
var couchpenter = new require('couchpenter').Couchpenter(
  'http://user:pass@localhost:5984',
  { setupFile: 'somecouchpenter.json' }
);

// prefix the database names
// handy for running multiple tests in parallel without interrupting each other
var couchpenter = new require('couchpenter').Couchpenter(
  'http://user:pass@localhost:5984',
  { prefix: 'testrun123_' }
);

// specify a base directory for the documents specified in setup file
var couchpenter = new require('couchpenter').Couchpenter(
  'http://user:pass@localhost:5984',
  { dir: '../some/dir/' }
);

// set up databases and documents
couchpenter.setUp(function (err, result) {
});

// delete databases and documents
couchpenter.tearDown(function (err, result) {
});

// delete databases and documents, then set up databases and documents
couchpenter.reset(function (err, result) {
});

Configuration

Couchpenter setup file is a just a simple JSON file:

{
  "db1": [
    { "_id": "doc1", "foo": "bar" },
    { "_id": "doc2", "foo": "bar" },
    "path/to/doc3file.json"
  ],
  "db2": [
    { "_id": "doc4", "foo": "bar" },
    "path/to/modulename"
  ],
  "db3": [],
  "_replicator": {
    {
      "_id": "db1_pull",
      "source": "http://user:pass@remotehost:5984/db1",
      "target": "db1",
      "user_ctx": {
        "name": "user",
        "roles": ["_admin"]
      },
      "continuous": true
    }
  }
}

Property keys are the names of the databases, property values are the documents in each database.

A document can be represented as:

  • an object
  • a file path string containing a JSON document, file name must end with .json
  • a module path string

Paths are relative to current directory if it's used from command-line, or relative to dir opt if it's used programmatically (defaults to current directory).

Jump to Line
Something went wrong with that request. Please try again.