Skip to content

Latest commit

 

History

History
258 lines (179 loc) · 18.6 KB

CHANGELOG.md

File metadata and controls

258 lines (179 loc) · 18.6 KB

Change Log

0.8.2August 20, 2015Diff

  • ES6/7: Move code base to /src — code is now compiled into /lib via Babel.
  • Add collection.count, model.count and Model.count.
  • Add model.refresh. #796
  • Prevent fetch and refresh from trying to add JSON attributes to a where clause. #550 #778
  • Virtuals plugin now supports {patch: true} argument to model.save. #542
  • Restored model.clone and collection.clone, which were not previously working. #744
  • Allow bookshelf.Collection to be modified and extended by plugins (so that relations and fetchAll operations will return the extended instance). #681 #688
  • Fix model.timestamps behaviour which deviated from documentation. Also ensure that createdAt is set when {method: "insert"} is passed explicitly. #787
  • Calling create on a through relationship no longer tries to make a pivot object. Previously this would attempt to create an object with invalid foreign keys. #768
  • Parse foreign keys set during create in a relation. #770

0.8.1May 12, 2015Diff

  • Fix for regression in initialize not being called in Collection constructor, #737.
  • Fix for regression, removing omitPivot in 0.8 #721
  • Added serialize, a method which contains toJSON logic for easier customization.

0.8.0May 1, 2015Diff

  • Dropped Backbone dependency
  • More specific errors throughout, #522
  • Support {require: true} for model.destroy #617
  • Add lifecycle events on pivot models for belongsToMany, .through #578
  • Allows for select/column calls in the query builder closure, #633.
  • Added per-constructor error classes #694 (note: this will not work in CoffeeScript).

Breaking changes:

  • Removed the __super__ internal property on the constructor, this shouldn't have been something you were relying on anyway.

0.7.9Oct 28, 2014Diff

  • Fix for regression in columns / eager fetch query constraints, (#510).

0.7.8Oct 28, 2014Diff

  • Timestamp created_at is now saved with any insert.
  • Fix for regression created by #429.
  • New events, attaching, attached, detaching, detached #452.
  • Ability to specify custom column names in morphTo, #454
  • Fix for stack overflow with model list as arguments, #482
  • Modified location of eager fetch query constraints internally.

0.7.7July 23, 2014Diff

  • Fix for formatting on polymorphic keys, (#429).
  • Added a resolve method for specifying a custom resolver function for the registry plugin.

0.7.6June 29, 2014Diff
Add omitPivot flag on toJSON options for omitting the _pivot_ keys in through and belongsToMany relations (#404).

0.7.5June 23, 2014Diff
Fix missing NotFoundError & EmptyError on Model & Collection, respectively (#389, 399).

0.7.4June 18, 2014Diff
Added bookshelf.model(name, protoProps, [staticProps]) syntax for registry plugin.

0.7.3June 17, 2014Diff
Fix for collection dropping models early in set, #376.

0.7.2June 12, 2014Diff
Pass a cloned copy of the model's attributes to format rather than the original, related to #315.

0.7.1June 10, 2014Diff
Ensure the knex version >= 0.6.10, where a major regression affecting column names was fixed.

0.7.0June 9, 2014

  • Added {@link Model#fetchAll}, for fetching a collection of models from a model.
  • Added {@link Model#where}, as a shortcut for the most commonly used {@linkplain Model#query query method}.
  • Initializing via a plain options object is deprecated, you must now pass in an initialized knex instance.
  • Adding typed errors (#221).
  • Upgrade to support knex 0.6.x

0.6.12June 5, 2014Diff
Fix for eager loaded belongsTo relation bug with custom parse/format (#377).

0.6.11June 4, 2014Diff
Temporarily add knex to peerDependencies until 0.7 is released to support knex 0.6 and there exists a better internal method of doing a semver check. Fix for belongsTo relation bug (#353).

0.6.10April 3, 2014Diff

  • Bumping dependencies, including upgrading to Bluebird 1.2, trigger-then 0.3, fixing an erroneous "unhandledRejection" (#310).
  • fetchOne properly resets the query on the collection, (#300).

0.6.9April 3, 2014Diff
Only prefix model fields with the "tableName" after format has been called, (#308).

0.6.8March 6, 2014Diff

  • Virtuals plugin may now accept a hash of attributes to set.
  • Properly fix issue addressed in 0.6.7.

0.6.7March 2, 2014Diff
Bugfix for edge case for eager loaded relations and relatedData settings.

0.6.6March 1, 2014Diff
Bugfix for registry plugin, resolving correct models for "through" relations. (#260)

0.6.5February 28, 2014Diff

  • Added {@link Collection#reduceThen} as a passthrough to Bluebird's "reduce" method with models.
  • Options are now passed to "plugin" method. (#254)
  • Bugfix for registry plugin. (#259)

0.6.4February 11, 2014Diff
Adds static method {@link Model.collection Model.collection()} as a shortcut for creating a collection with the current model.

0.6.3February 9, 2014Diff

  • Added an Relation#updatePivot method for updating tables on a "belongsToMany" relation. (#134, #230)
  • Allow mutating the options for passing constraints to eager loaded relations. (#151)
  • All keys of an object passed into sync are properly prefixed before sync. (#177)
  • Clearer error messages for debugging. (#204, #197)
  • Fixed error message for updates that don't affect rows. (#228)
  • Group by the correct key on "belongsTo.through" relations. (#214)
  • Ability to only use created_at or updated_at as timestamp properties. (#158)
  • Numerous documentation corrections, clarifications, enhancements.
  • Bumped Bluebird dependency to ~1.0.0.

Plugins:

  • Added the registry plugin for registering models as strings, helping with the circular dependency problem
  • Added the virtuals plugin for getting/setting virtual (computed) properties on the model.
  • Added the visibility plugin for specifying a whitelist/blacklist of keys when a model is serialized with toJSON.

0.6.2December 18, 2013Diff

  • Debug may now be passed as an option in any sync method, to log queries, including relations.
  • Save now triggers an error in updates with no affected rows. (#119)
  • The model.id attribute is only set on insert if it's empty. (#130)
  • Ensure eager loaded relations can use attach/detach. (#120)

0.6.1November 26, 2013Diff
Fixes bug with promise code and saving event firing, where promises are not properly resolved with ".all" during saving events.

0.6.0November 25, 2013Diff

  • Updating dependency to knex.js 0.5.x
  • Switched from when.js to bluebird for promise implementation, with shim for backward compatibility.
  • Switched from underscore to lodash, for semver reliability.

0.5.8November 24, 2013Diff

  • Parse models after all relations have been eager loaded, for appropriate column name matching (thanks @benesch) (#97)
  • Specify table for withRelated fetches to prevent column naming conflicts (#96).
  • Fix for polymorphic relation loading (#95).
  • Other documentation tweaks and other internal code cleanup.

0.5.7October 11, 2013Diff
The "fetching" event is now fired on eager loaded relation fetches.

0.5.6October 10, 2013Diff
The options.query now contains the appropriate knex instance during the "fetching" event handler.

0.5.5October 1, 2013Diff
An eager loaded morphTo relation may now have child relations nested beneath it that are properly eager loaded, depending on the parent.

0.5.4October 1, 2013Diff

  • Fix issue where the relatedData context was not appropriately maintained for subsequent {@link Collection#create} calls after an eager load (#77).
  • Documentation improvements, encouraging the use of {@link Model#related} rather than calling a relation method directly, to keep association with the parent model's {@link Model#relations relations} hash.

0.5.3September 26, 2013Diff
The columns explicitly specified in a fetch are no-longer passed along when eager loading relations, fixes (#70).

0.5.2September 22, 2013Diff
Fixed incorrect eager loading in belongsTo relations (#65).

0.5.1September 21, 2013Diff
Fixed incorrect eager loading in hasOne relations (#63).

0.5.0September 20, 2013Diff
Major Breaking changes:

  • Global state is no longer stored in the library, an instance is returned from Bookshelf.initialize, so you will need to call this once and then reference this Bookshelf client elsewhere in your application.
  • Lowercasing of bookshelf.initialize, bookshelf.knex, bookshelf.transaction.
  • During the lifecycle events, such as "fetching", "saving", or "destroying", the model no-longer contains the active query builder instance at the time it is saved. If you need to modify the query builder chain inside of an event handler, you may now use options.query inside the event handlers.

Other Changes:

  • Added tableName for all queries, so joins use the correct id (#61).
  • The attach & detach now remove models from the associated collection, as appropriate (#59).
  • A withPivot no longer accepts an object to specify the keys for the returned pivot items, if you wish to specify how these pivot objects are defined on the object, a custom toJSON is your best bet.
  • Added {@link Collection#invokeThen} and {@link Collection#mapThen} as convenience helpers for Promise.all(collection.invoke(method, args*)) and Promise.all(collection.map(method, iterator, [context])), respectively.
  • Added a Bookshelf.plugin method, for a standard way to extend Bookshelf instances.
  • A re-written modular architecture, to move the library toward becoming a database agnostic "data mapper" foundation, with the ablitiy to form relations between different data stores and types, not just SQL (although SQL is the primary focus for now). Also, support for AMD, for eventual use outside of Node.js runtime (with webSQL and likewise).

0.3.1August 29, 2013DiffDocs
Fixed regression in belongsToMany custom column name order.

0.3.0August 28, 2013
Support for a {@link Model#through} clause on various model relations. Creating a model from a related collection maintains the appropriate relation data (#35). Support for a {patch: true} flag on save, to only update specific saved attributes. Added a fetchOne method, for pulling out a single model from a collection, mostly useful for related collection instances. Updated to Knex "0.2.x" syntax for insert / returning, Ability to specify a morphValue on {@link Model#morphOne} or {@link Model#morphMany} relations. Internal refactor of relations for more consistent behavior.

0.2.8August 26, 2013
Some minor fixes to make the Sync methods more consistent in their behavior when called directly, (#53).

0.2.7August 21, 2013
Timestamp for created_at is not set during an "update" query, and the update where clause does not include the idAttribute if it isn't present (#51).

0.2.6August 21, 2013
Fixes bug with query function feature added in 0.2.5, mentioned in (#51).

0.2.5August 19, 2013
The {@link Model#query} method may now accept a function, for even more dynamic query building (#45). Fix for relations not allowing "0" as a valid foreign key value (#49).

0.2.4July 30, 2013
More consistent query resetting, fixing query issues on post-query event handlers. The toJSON is only called on a related model if the method exists, allowing for objects or arrays to be manually specified on the relations hash and serialized properly on the parent's toJSON.

0.2.3July 7, 2013
Fixing bug where triggerThen wasn't actually being used for several of the events as noted in 0.2.1 release.

0.2.2July 2, 2013
The Model's related method is now a no-op if the model doesn't have the related method. Any withPivot columns on many-to-many relations are now prefixed with _pivot rather than pivot unless named otherwise, for consistency. The _reset is not called until after all triggered events so that hasChanged can be used on the current model state in the "created", "updated", "saved", and "destroyed" events. Eager queries may be specified as an object with a function, to constrain the eager queries:

user.fetch({withRelated: ['accounts', {
'accounts.settings': function(qb) { qb.where('status', 'enabled'); }
}, 'other_data']}).then(...

0.2.1June 26, 2013
Using triggerThen instead of trigger for "created", "updated", "saved", "destroyed", and "fetched" events - if any async operations are needed after the model is created but before resolving the original promise.

0.2.0June 24, 2013
Resolve Model's fetch promise with null rather than undefined. An object of query. constraints (e.g. {where: {...}, orWhere: {...}}may be passed to the query method (#30). Fix for empty eager relation responses not providing an empty model or collection instance on the model.relations object.

0.1.9June 19, 2013
Resolve Model's fetch promise with undefined if no model was returned. An array of "created at" and "updated at" values may be used for hasTimestamps. Format is called on the Model#fetch method. Added an exec plugin to provide a node callback style interface for any of the promise methods.

0.1.8June 18, 2013
Added support for polymorphic associations, with morphOne, morphMany, and morphTo model methods.

0.1.7June 15, 2013
Bugfix where detach may be used with no parameters to detach all related items (#19).

0.1.6June 15, 2013
Fixing bug allowing custom idAttribute values to be used in eager loaded many-to-many relations (#18).

0.1.5June 11, 2013
Ensuring each of the _previousAttribute and changed values are properly reset on related models after sync actions.

0.1.4June 10, 2013
Fixing issue with idAttribute not being assigned after database inserts. Removing various aliases {@link Events} methods for clarity.

0.1.3June 10, 2013
Added {@link Model#hasChanged}, {@link Model#previous}, and {@link Model#previousAttributes} methods, for getting the previous value of the model since the last sync. Using Object.create(null) for various internal model objects dealing with user values. Calling {@link Model#related} on a model will now create an empty related object if one is not present on the relations object. Removed the {patch: true} option on save, instead only applying defaults if the object isNew, or if {defaults: true} is passed. Fix for model.clone's relation responses.

0.1.2May 17, 2013
Added triggerThen and emitThen for promise based events, used internally in the "creating", "updating", "saving", and "destroying" events. Docs updates, fixing {patch: true} on update to have intended functionality. A model's toJSON is now correctly called on any related properties.

0.1.1May 16, 2013
Fixed bug with eager loaded belongsTo relations (#14).

0.1.0May 13, 2013
Initial Bookshelf release.