UNPKG

cramit

Version:

<a href="https://nodei.co/npm/cramit/" target="_blank"><img src="https://nodei.co/npm/cramit.png?downloads=true&downloadRank=true"></a>

225 lines (173 loc) 10.6 kB
# Cramit <a href="https://nodei.co/npm/cramit/" target="_blank"><img src="https://nodei.co/npm/cramit.png?downloads=true&downloadRank=true"></a> <a href="https://travis-ci.org/ssmereka/cramit" target="_blank"><img src="https://travis-ci.org/ssmereka/cramit.svg" /></a> <a href="https://david-dm.org/ssmereka/cramit" target="_blank"><img src="https://david-dm.org/ssmereka/cramit.svg" /></a> <a href="https://gratipay.com/ScottSmereka/" target="_blank"><img src="http://img.shields.io/gratipay/ScottSmereka.svg" /> <a href="https://codecov.io/github/ssmereka/cramit?branch=master" target="_blank"><img src="https://codecov.io/github/ssmereka/cramit/coverage.svg?branch=master" /></a> Cram data into your database easily for testing, demos, or whatever. # Getting Started Install Cramit using npm and save it as a dependency in your package.json. ```javascript npm install cramit --save ``` You can require Cramit just like every other node.js module. ```javascript var cramit = require('cramit'); ``` In order to define the data that will be added or removed from the database one or more [fixtures](https://github.com/ssmereka/cramit#fixture) must be created. Note: The fixture file names must follow the configuration you set for <a href="https://github.com/ssmereka/crave/blob/master/readme.md#config" target="_blank">Crave</a> in [Cramit's configuration object](https://github.com/ssmereka/cramit#config). By default, Crave looks for and requires any file that contains "_fixture" in the name. ```javascript // Filename: user_fixture.js module.exports = function(cramit, options) { function UserFixture() { cramit.fixtureSuper(this, 'User'); } UserFixture.prototype = cramit.fixturePrototype(); // Returns a new user not already in the database. UserFixture.prototype.getNew = function() { return { "_id": "999999999999999999999999", "activated": true, "email": "kevin@gmail.com", "name": "Kevin Mitnick" }; }; // Returns a list of users to be added/removed from the database. UserFixture.prototype.getAll = function() { return [ { "_id": "000000000000000000000000", "activated": true, "email": "charlie@gmail.com", "name": "Charlie Kelly" }, { "_id": "000000000000000000000001", "activated": false, "email": "macsmom@gmail.com", "name": "Mac's Mom" } ]; }; return new UserFixture(); }; ``` After the fixtures have been created you can call <a href="https://github.com/ssmereka/cramit/wiki/API#find-all-fixtures-and-upsert-data" target="_blank">findAllFixturesAndUpsertData()</a>. This will search for all fixture files and upsert the data returned from each fixture's <a href="https://github.com/ssmereka/cramit/wiki/Fixture#get-all" target="_blank">getAll()</a> method. ```javascript cramit.findAllFixturesAndUpsertData(applicationPath, {}, function(err, results) { if(err) { console.log(err); } else { console.log(results); } }); ``` # API The Cramit API consists of the following methods. * <a href="https://github.com/ssmereka/cramit/wiki/API#find-all-fixtures" target="_blank">Find All Fixtures</a> * <a href="https://github.com/ssmereka/cramit/wiki/API#find-all-fixtures-and-insert-data" target="_blank">Find All Fixtures and Insert Data</a> * <a href="https://github.com/ssmereka/cramit/wiki/API#find-all-fixtures-and-remove-data" target="_blank">Find All Fixtures and Remove Data</a> * <a href="https://github.com/ssmereka/cramit/wiki/API#find-all-fixtures-and-upsert-data" target="_blank">Find All Fixtures and Upsert Data</a> * <a href="https://github.com/ssmereka/cramit/wiki/API#fixture-super" target="_blank">Fixture Super</a> * <a href="https://github.com/ssmereka/cramit/wiki/API#fixture-prototype" target="_blank">Fixture Prototype</a> * <a href="https://github.com/ssmereka/cramit/wiki/API#get-all-fixture-data-object" target="_blank">Get All Fixture Data Object</a> * <a href="https://github.com/ssmereka/cramit/wiki/API#insert-fixture-data" target="_blank">Insert Fixture Data</a> * <a href="https://github.com/ssmereka/cramit/wiki/API#format-fixtures" target="_blank">Format Fixtures</a> * <a href="https://github.com/ssmereka/cramit/wiki/API#remove-fixture-data" target="_blank">Remove Fixture Data</a> * <a href="https://github.com/ssmereka/cramit/wiki/API#set-config" target="_blank">Set Config</a> * <a href="https://github.com/ssmereka/cramit/wiki/API#upsert-fixture-data" target="_blank">Upsert Fixture Data</a> # Fixture Data you want to load into a database is defined in a fixture. A fixture is a pseudo "child class" that overrides a few methods called by the Cramit library. The data methods overridden in a fixture, such as <a href="https://github.com/ssmereka/cramit/wiki/Fixture#get-new" target="_blank">getNew()</a> and <a href="https://github.com/ssmereka/cramit/wiki/Fixture#get-all" target="_blank">getAll()</a>, return data objects to be loaded into the database. Let's look at an example of a user model and fixture. ```javascript // Filename: user_model.js // Description: The user model defines the how the data is stored in the database. module.exports = function() { var db = require('mongoose'); var ObjectId = db.Schema.ObjectId; var User = new db.Schema({ activated: { type: Boolean, default: true }, email: { type: String }, name: { type: String } }); var UserSchema = db.model('User', User); }; ``` ```javascript // Filename: user_fixture.js // Description: Defines data and methods for adding or removing data to/from the database. module.exports = function(cramit, options) { function UserFixture() { cramit.fixtureSuper(this, 'User'); } UserFixture.prototype = cramit.fixturePrototype(); // Returns a new user not already in the database. UserFixture.prototype.getNew = function() { return { "_id": "999999999999999999999999", "activated": true, "email": "kevin@gmail.com", "name": "Kevin Mitnick" }; }; // Returns a list of users to be added/removed from the database. UserFixture.prototype.getAll = function() { return [ { "_id": "000000000000000000000000", "activated": true, "email": "charlie@gmail.com", "name": "Charlie Kelly" }, { "_id": "000000000000000000000001", "activated": false, "email": "macsmom@gmail.com", "name": "Mac's Mom" } ]; }; return new UserFixture(); }; ``` ## Fixture Methods When implementing a fixture you may want to override one or more methods. The following is a list of possible methods. * <a href="https://github.com/ssmereka/cramit/wiki/Fixture#compare" target="_blank">Compare</a> * <a href="https://github.com/ssmereka/cramit/wiki/Fixture#delete-all" target="_blank">Delete All</a> * <a href="https://github.com/ssmereka/cramit/wiki/Fixture#find-by-id" target="_blank">Find By ID</a> * <a href="https://github.com/ssmereka/cramit/wiki/Fixture#find-in-dataset-by-id" target="_blank">Find In Dataset By ID</a> * <a href="https://github.com/ssmereka/cramit/wiki/Fixture#get-all" target="_blank">Get All</a> * <a href="https://github.com/ssmereka/cramit/wiki/Fixture#get-all-and-new" target="_blank">Get All and New</a> * <a href="https://github.com/ssmereka/cramit/wiki/Fixture#get-new" target="_blank">Get New</a> * <a href="https://github.com/ssmereka/cramit/wiki/Fixture#insert-all" target="_blank">Insert All</a> * <a href="https://github.com/ssmereka/cramit/wiki/Fixture#populate-id" target="_blank">Populate ID</a> * <a href="https://github.com/ssmereka/cramit/wiki/Fixture#populate-ids" target="_blank">Populate IDs</a> * <a href="https://github.com/ssmereka/cramit/wiki/Fixture#populate-id-from-dataset" target="_blank">Populate ID from Dataset</a> * <a href="https://github.com/ssmereka/cramit/wiki/Fixture#populate-ids-from-dataset" target="_blank">Populate IDs from Dataset</a> * <a href="https://github.com/ssmereka/cramit/wiki/Fixture#upsert-all" target="_blank">Upsert All</a> The current implementation of these methods can be found <a href="https://github.com/ssmereka/cramit/blob/master/libs/fixtures/index.js" target="_blank">here</a>. # Config You can configure Cramit using the <a href="https://github.com/ssmereka/cramit/wiki/API#set-config" target="_blank">setConfig(myConfigObject)</a> method. Pass along an object with any of the properties you wish to override. For example: ```javascript var cramit = require('cramit'); var mongoose = require(mongoose); cramit.setConfig({ database: { type: 'mongoose', // Set the type of database and connection. instance: mongoose // Pass along the database connection object. } }); ``` The available properties are: | Property | Type | Default | Description | |----------|------|---------|-------------| | **crave** | Object | | Accepts a <a href="https://github.com/ssmereka/crave/blob/master/readme.md#config" target="_blank">Crave configuration object</a> to define how models and fixtures are required. | | **database** | Object | | An object containing configuration properties related to the database. | | **database.connectionUri** | String | ```undefined``` | The URI used to connect to a database. You may alternately choose to specify the database instance. | | **database.idAttributeName** | String | ```undefined``` | The key used by all records as the unique identifier. For example mongoose uses ```_id```. | | **database.instance** | String | ```undefined``` | The database connection object. You may alternately choose to specify a connection URI instead. | | **database.type** | String | ```undefined``` | Defines which database adapter to use. Available options are: ```mongoose```.| | **debug** | Boolean | ```false``` | When true, Cramit will display log messages. | | **error** | Boolean | ```true``` | When true, Cramit will display error log messages. | | **trace** | Boolean | ```false``` | When true, Cramit will display trace log messages. | # Debug Debugging Cramit can be done using the ```debug```, ```trace```, and ```error``` flags that can be toggled on/off using the config. When enabling these flags additional logging will be enabled allowing you to find issues within Cramit easier. # Documentation Further documentation can be found in the <a href="https://github.com/ssmereka/cramit/wiki" target="_blank">wiki</a>. ### <a href="http://www.tldrlegal.com/license/mit-license" target="_blank">MIT License</a>