bookshelf-touch v1.1.4
bookshelf-touch
This Bookshelf.js plugin automatically updates your timestamps when saving your Bookshelf models.
Developed at the Media Engineering Institute (HEIG-VD).
Usage
const knex = require('knex')({ ... });
const bookshelf = require('bookshelf')(knex);
const touch = require('bookshelf-touch');
bookshelf.plugin(touch);
const MyModel = bookshelf.Model.extend({
tableName: 'my_table',
// Define which timestamps you want to be automatically updated
// (supports "created_at" and "updated_at" by default, but you
// can configure more).
timestamps: [ 'created_at', 'updated_at' ]
});
const model = new MyModel({
name: 'Awesome'
});
// Both timestamps are automatically set when the model is created.
model.save();
// Only the updated_at timestamp is updated when the model is saved.
model.name = 'Indeed';
model.save();
// You can trigger an update of the timestamps with the touch method
// (this does not save the model):
model.touch();Configuration
The timestamps property of your model can be:
trueto automatically update bothcreated_atandupdated_at.A string indicating which of
created_atorupdated_atshould be updated.An array containing either
created_at,updated_ator both to indicate which should be updated.An object mapping timestamp columns as keys to timestamp configurations as value. See Timestamp configuration below.
Do not define it or set it to false to disable the plugin on that model.
Timestamp configuration
You may configure the behavior of timestamps (and add timestamps) yourself. This is what the default configuration looks like:
const MyModel = bookshelf.Model.extend({
tableName: 'my_table',
timestamps: {
created_at: {}
updated_at: {
default: record => record.get('created_at'),
update: true
}
}
});A timestamp configuration object has 2 options:
default- A function that takes the record as an argument and should return a default value. This function will be called if the record has no value for that timestamp, or when updating the timestamp. If it returns a falsy value, a new date is created instead. If the default function is not specified (like forcreated_at), a new date is also created as the default value.update- Whether to update the timestamp when the record is touched. This defaults to false. As expected, it is not set forcreated_atand set to true forupdated_atin the default configuration.
You may define new timestamps by adding them to the configuration. Use true and false to enable/disable default timestamps:
const MyModel = bookshelf.Model.extend({
tableName: 'my_table',
timestamps: {
created_at: true,
updated_at: false,
amended_at: {
default: record => new Date(11029388)
}
}
});