Commit Graph

1112 Commits

Author SHA1 Message Date
Miroslav Bajtoš 5d8b3323ad Remove all usages of lodash.
This commit is dropping lodash in favour of hand-written implementation
based on ES5 Array methods. As a result, the size of the (unminified)
loopback browser bundle is decreased by approx 360KB.
2015-03-26 09:33:48 +01:00
Raymond Feng 58e7c4e90b Merge pull request #534 from fabien/fix/embeds-many-destroy-all
Properly support embedsMany destroyAll
2015-03-24 09:58:02 -07:00
Raymond Feng 5e0451eef0 Merge pull request #443 from clarkorz/fix/findOrCreate-ThroughModel
Always use findOrCreate when creating a through model
2015-03-24 09:56:07 -07:00
Fabien Franzen aa5943f6b0 Properly support embedsMany destroyAll 2015-03-24 15:39:55 +01:00
Miroslav Bajtoš f7dc6fab90 Fix regression in prototype.save
ffcaa4e7 added a "data" argument to the callback function, which
shadowed the original data with the data returned by a connector.
Not all connectors are returning a data object though, in which case
the model instance ("this" object) is updated with wrong values.

This commit fixes the problem by renaming the second callback argument
to "unusedData".
2015-03-23 08:34:21 +01:00
Raymond Feng 99396387ee Merge pull request #525 from fabien/fix/embeds-one-remoting
Enable more CRUD remoting methods for embedsOne
2015-03-22 07:56:13 -07:00
Fabien Franzen 73f4a1bbe6 Enable more CRUD remoting methods for embedsOne 2015-03-21 16:23:46 +01:00
Fabien Franzen 8199767a8a Implement scope.findOne 2015-03-21 13:44:06 +01:00
Clark Wang 09ee38d613 use findOrCreate for HasManyThrough#create
see strongloop/loopback-connector-mongodb#92

Signed-off-by: Clark Wang <clark.wangs@gmail.com>
2015-03-21 11:49:28 +08:00
Raymond Feng 5d0b745f31 Merge pull request #520 from fabien/feature/scope-find-by-id
Implement scope.findById
2015-03-20 12:00:56 -07:00
Raymond Feng 2f0561a7a8 Merge pull request #514 from fabien/feature/relation-methods
Enable defineMethod for singular relations
2015-03-20 11:57:45 -07:00
Raymond Feng 4ac227b052 Merge pull request #522 from strongloop/feature/enhance-id-comparison-for-updateAttributes
Enhance id comparision for updateAttributes
2015-03-20 11:06:57 -07:00
Raymond Feng 6a40a8a5e5 Enhance id comparision for updateAttributes
string/number and MongoDB ObjectID equality are now allowed.
2015-03-20 11:06:24 -07:00
Miroslav Bajtoš 84d538c1ca Merge pull request #515 from strongloop/feature/isNewInstance
Add ctx.isNewInstance for "save" hooks
2015-03-20 18:33:55 +01:00
Fabien Franzen 54781f376e Enable custom methods on singular relations 2015-03-20 18:15:58 +01:00
Fabien Franzen 34acc6c50a Implement scope.findById 2015-03-20 16:37:46 +01:00
Miroslav Bajtoš 94e6d893a7 Fix updateAll callback in "transient" connector
Fix the implementation to return an object as the result,
that's the expected API since 04f35b3.
2015-03-20 08:34:58 +01:00
Simon Ho 04f35b31b4 Memory connector returns updated records count
The memory connector now includes the number of updated items in its callback
when updating records.
2015-03-19 15:40:14 -07:00
Raymond Feng a8d8556dcc Merge pull request #499 from clarkorz/fix/merge-mixins
fix #429 Multiple Models can't mixin same class
2015-03-19 13:21:22 -07:00
Miroslav Bajtoš ffcaa4e76e Add ctx.isNewInstance for "save" hooks
"before save" hooks provide "ctx.isNewInstance" whenever "ctx.instance"
is set. Possible values:
 - true for all CREATE operations
 - false for all UPDATE operations
 - undefined for "prototype.save"

"after save" hooks provide "ctx.isNewInstance" whenever "ctx.instance"
is set. Possible values:
 - true after all CREATE operations
 - false after all UPDATE operations
 - undefined after "updateOrCreate" and "save"

Note: both "updateOrCreate" and "prototype.updateAttributes"
don't provide `ctx.instance` to "before save" hooks, therefore
`ctx.isNewInstance` it not provided either.
2015-03-19 18:05:24 +01:00
Miroslav Bajtoš d731252941 deleteAll returns number of deleted records
The number is returned as `data.ctx` to `cb(null, data)`.
2015-03-19 17:54:22 +01:00
Miroslav Bajtoš ae3dc3cec2 Merge pull request #510 from strongloop/fix/duplicate-create
Reject CREATE with a duplicate id
2015-03-19 17:37:01 +01:00
Raymond Feng cd1d815936 Use the correct way to iterate over an array
See https://github.com/strongloop/loopback-datasource-juggler/issues/512
2015-03-18 08:21:32 -07:00
Raymond Feng 01fb5db550 Merge pull request #509 from dbarbeau/master
Enable "between" filter for memory db connector
2015-03-16 10:41:38 -07:00
Miroslav Bajtoš 6f11c2d717 DAO: Fix updateOrCreate to set persisted:true
Before this commit, the following code would not work:

    Change.updateOrCreate({...}, function(err, ch) {
      // somewhere later, modify "ch" and save the changes
      ch.save(cb);
    });
2015-03-16 18:26:42 +01:00
Miroslav Bajtoš 902772f1af Reject CREATE with a duplicate id
Modify the memory connector to reject requests to create a record
with a duplicate id.

Add a unit-test to verify this behaviour across all connectors.
2015-03-16 18:26:42 +01:00
Raymond Feng 04348a1168 Make sure id properties cannot be changed 2015-03-16 09:25:38 -07:00
Daniel B. Vasquez 9aeaa37b1c enable between filter for memory db connector 2015-03-16 11:21:04 +01:00
Miroslav Bajtoš 274a5c778a Remove trailing spaces. 2015-03-11 09:39:16 +01:00
Fabien Franzen 8605da3ac6 Improve instance-level operation hooks
"before delete" and "after delete" hooks receive `ctx.instance`
when a single model is being deleted.

"before save" hook receives `ctx.currentInstance` when triggered
by `prototype.updateAttributes()`.

Note that "after save" hook triggered by `prototype.updateAttributes()`
already provides `ctx.instance`.
2015-03-11 09:35:46 +01:00
Clark Wang 90e169c1a6 fix #429 Multiple Models can't mixin same class
Signed-off-by: Clark Wang <clark.wangs@gmail.com>
2015-03-11 16:08:50 +08:00
didikeke 3644b85432 fix foreign key dataType bug 2015-03-11 11:30:40 +08:00
Raymond Feng 159be756ac Merge pull request #494 from strongloop/feature/allow-submodel-to-hide-base-properties
Allow submodel to hide base properties
2015-03-09 13:16:09 -07:00
Fabien Franzen 18b58558cc Reformat notifyObserversOf context argument 2015-03-05 15:53:34 +01:00
Fabien Franzen f42859f2e5 Implement operation hooks' context 2015-03-05 11:55:04 +01:00
crandmck d4b0a26a0e Improved and corrected API docs 2015-03-04 17:21:25 -08:00
crandmck e81415ceda Fix problems in annotations that prvented validateAsync and validate functions from appearing in API docs. 2015-03-03 16:58:19 -08:00
Raymond Feng 33d3239b44 Allow submodel to hide base properties 2015-03-03 10:27:22 -08:00
Raymond Feng 8042eeb3b1 Make sure inclusion filter is applied to the target model
See https://github.com/strongloop/loopback/issues/1076
2015-02-28 10:53:18 -08:00
Miroslav Bajtoš 17a999bfca Merge pull request #473 from strongloop/feature/deprecate-model-hooks-and-events
Deprecate model hooks and events
2015-02-27 19:37:39 +01:00
Miroslav Bajtoš 37d7721e0e Deprecate DAO events
List of deprecated events:

 - changed
 - deleted
 - deletedAll
2015-02-27 17:03:39 +01:00
Miroslav Bajtoš 03daaca9de Deprecate Model hooks
List of deprecated hooks:

 - beforeValidate
 - afterValidate
 - beforeCreate
 - afterCreate
 - beforeSave
 - afterSave
 - beforeUpdate
 - afterUpdate
 - beforeDestroy
 - afterDestroy

Also add a lightweight browser version of "depd", because the "depd"
does not support browser and it is not trivial to fix that.
This commits adds a lightweight implementation of depd's "deprecate"
function.
2015-02-27 16:58:24 +01:00
Partap Davis 1e6c453191 Add Promises to DAO
When a callback is omitted from a DAO method, return a Promise that
resolves to the value normally passed to the callback of that method.
If a callback is provided, behave normally.

This API will use native ES6 promises if available.  If not available,
or to force the use of another Promise library, you must assign the
global.Promise object.

e.g.:
global.Promise = require('bluebird')

Class methods affected:

- create
- updateOrCreate / upsert
- findOrCreate
- exists
- find
- findOne
- findById
- findByIds
- remove / deleteAll / destroyAll
- removeById / deleteById / destroyById
- count
- update / updateAll

Prototype methods affected:

- save
- delete / remove / destroy
- updateAttribute
- updateAttributes
- reload

Exceptions / edge cases:

- create() used to return the data object that was passed in, even if
  no callback was provided.  Now, if a callback is provided, it will
  return the data object, otherwise it will return a Promise.

- If create() is provided an array of data objects for creation, it
  will continue to always return the array. This batch creation mode
  does not support promises.

- findOrCreate() has a callback of the form: cb(err, instance, created),
  with the extra parameter indicating whether the instance was created
  or not. When called with its promise variant, the resolver will
  receive a single array parameter: [instance, created]
2015-02-26 13:45:37 -07:00
Raymond Feng 6891da4535 Merge pull request #470 from rudzon/master
Enhance updateAll to coerce the data per property definitions
2015-02-24 08:28:39 -08:00
rudzon dbe9329a37 enhance the coercion for boolean/date types 2015-02-24 13:55:57 +02:00
rudzon 35825f5e53 enhance updateAll to coerce the data per property definitions 2015-02-24 13:53:23 +02:00
Miroslav Bajtoš 52e78ff5ae relation-definition: remove trailing whitespace 2015-02-24 11:36:13 +01:00
Raymond Feng e659e2f603 Fix JS style issues 2015-02-20 14:57:48 -08:00
Miroslav Bajtoš ba0f3c1616 Add a new property option `defaultFn`
The property allows developers to specify that the default value
should be retrieved via a named function.

Only two built-in functions are supported at the moment:

  "guid", "uuid" - generate a new GUID/UUID
  "now" - use the current date and time

Support for custom (user-provided) functions is not implemented yet.
2015-02-20 20:08:25 +01:00
Miroslav Bajtoš c939efe1e7 Merge pull request #445 from PradnyaBaviskar/issue292
Add $now as shortcut default value for date property
2015-02-17 19:46:05 +01:00