This Bookshelf.js plugin enables you to define which model columns have JSON format, preventing manual hook definition for each model with JSON columns.
Install the package via npm
:
$ npm install --save bookshelf-json-columns
Require and register the bookshelf-json-columns plugin:
var bookshelf = require('bookshelf')(knex);
var jsonColumns = require('bookshelf-json-columns');
bookshelf.plugin(jsonColumns);
Define which columns have JSON format with the jsonColumns
class property:
bookshelf.Model.extend({
tableName: 'foo'
}, {
jsonColumns: ['bar', 'biz']
});
If you're using ES6 class syntax, define jsonColumns
as static property:
class Model extends bookshelf.Model {
get tableName() {
return 'foo';
}
static jsonColumns = ['bar', 'biz'];
}
This plugin extends the initialize
and save
methods of Bookshelf's Model
, so if you are also extending or overriding them on your models make sure to call their prototype after your work is done:
bookshelf.Model.extend({
initialize: function() {
// Do some stuff.
store.addModel(this);
// Call the `initialize` prototype method.
bookshelf.Model.prototype.initialize.apply(this, arguments);
},
save: function() {
// Do some stuff.
store.validateModel(this);
// Call the `save` prototype method.
bookshelf.Model.prototype.save.apply(this, arguments);
},
tableName: 'foo'
}, {
jsonColumns: ['bar', 'biz']
});
Contributions are welcome and greatly appreciated, so feel free to fork this repository and submit pull requests.
bookshelf-json-columns supports PostgreSQL, SQLite3 and MySQL. You can find test suites for all these database engines in the test folder.
- Fork and clone the bookshelf-json-columns repository.
- Duplicate all .dist knexfiles and update them to your needs.
- Make sure all the tests pass:
$ npm test
bookshelf-json-columns enforces linting using ESLint with the Seegno-flavored ESLint config. We recommend you to install an eslint plugin in your editor of choice, although you can run the linter anytime with:
$ eslint src test
Please follow these advices to simplify the pull request workflow:
- If you add or enhance functionality, an update of README.md usage section should be part of the PR.
- If your PR fixes a bug you should include tests that at least fail before your code changes and pass after.
- Keep your branch rebased and fix all conflicts before submitting.
- Make sure Travis build status is ok.