Commit Graph

1230 Commits

Author SHA1 Message Date
Raymond Feng 3ee3ba3dcf Allow 0 as the FK
See https://github.com/strongloop/loopback/issues/967
2015-06-08 13:01:16 -07:00
Clark Wang a283922c28 fix typo
Signed-off-by: Clark Wang <clark.wangs@gmail.com>
2015-06-01 11:28:58 +08:00
Raymond Feng 493d98f66b Dedupe ids args of inq for include 2015-05-29 10:50:37 -07:00
Raymond Feng e0e6a0cdbb Merge pull request #588 from mamboer/master
fix issue #587
2015-05-28 14:44:11 -07:00
Raymond Feng f789e2abfc Merge pull request #604 from atomic-labs/master
addressing #603
2015-05-28 14:35:58 -07:00
Samuel Reed b73f9f1bd4 Don't silently swallow db errors on validation. 2015-05-28 11:54:01 -05:00
Raymond Feng 46e6ad2fd6 Merge pull request #602 from strongloop/feature/more-tests-for-observers
Enhance the apis and add more tests
2015-05-27 11:08:00 -07:00
Raymond Feng 621adf5435 Enhance the apis and add more tests 2015-05-26 10:15:39 -07:00
mamboer 018022e84b adapt coding style @bajtos 2015-05-26 12:33:56 +08:00
mamboer 69bd7c1233 Merge remote-tracking branch 'upstream/master' 2015-05-26 12:28:11 +08:00
Patrick Perini e63d15aeb5 addressing #603 2015-05-22 13:42:34 -07:00
Raymond Feng 5977c1f872 Merge pull request #600 from strongloop/feature/fix-lb-1401
Fix for https://github.com/strongloop/loopback/issues/1401
2015-05-22 11:40:20 -07:00
Raymond Feng a028b2644c Fix for https://github.com/strongloop/loopback/issues/1401 2015-05-22 11:39:37 -07:00
Dmitry Manannikov 91b04655cd Fix ReferenceError: definition is not defined
occure when try to delete object in has one relation, but object not created yet
2015-05-22 00:37:27 +03:00
Raymond Feng 12dea6e1cb Merge pull request #598 from strongloop/feature/add-connector-hooks
Mix in observer apis to the connector
2015-05-21 10:43:32 -07:00
Raymond Feng 506223885d Mix in observer apis to the connector 2015-05-20 15:02:44 -07:00
Raymond Feng 966bb56c31 Enhance fieldsToArray to consider strict mode 2015-05-19 22:32:03 -07:00
Raymond Feng 0e04f78637 Make sure promise is returned 2015-05-18 12:02:07 -07:00
Raymond Feng be38cb3a6f Fix comments 2015-05-18 09:34:25 -07:00
Raymond Feng 1bd5e74a13 Enable docs 2015-05-18 09:00:49 -07:00
Raymond Feng 93a0342099 Add an optional `options` argument to relation methods 2015-05-16 11:52:17 -07:00
Raymond Feng 9177e07209 Add transaction apis 2015-05-16 11:52:17 -07:00
Raymond Feng 7a48e7801d Refactor the observer functions into a plugin 2015-05-16 11:52:17 -07:00
Raymond Feng 670a6e740d Add transaction 2015-05-16 11:52:17 -07:00
Raymond Feng eac74ad014 Make sure relation scope is applied during include 2015-05-16 11:49:02 -07:00
crandmck d19001a56e Updated JSdoc for Datasource constructor 2015-05-14 15:53:34 -07:00
mamboer 5ff3798e8e enhancement on #588 2015-05-14 09:55:54 +08:00
mamboer ba68df3ef3 Merge remote-tracking branch 'upstream/master' 2015-05-14 09:26:50 +08:00
Raymond Feng b5b7bab096 Fix the target id resolution 2015-05-13 16:10:07 -07:00
Raymond Feng f9bd1544f9 Merge branch 'include-db-call-spike' of https://github.com/walkonsocial/loopback-datasource-juggler into walkonsocial-include-db-call-spike 2015-05-13 13:15:46 -07:00
ningsuhen d009557a76 DB Call Optimization in relation includes - Fixes #408 & #166 2015-05-14 00:19:43 +05:30
Raymond Feng 5ef444e45d Conditionally pass options to connector CRUD methods 2015-05-13 09:36:45 -07:00
mamboer d27b2eb25f fix issue #587 2015-05-13 13:18:50 +08:00
Fabien Franzen df7d221f31 Pass-through options from save to create 2015-05-10 10:44:22 +02:00
Miroslav Bajtoš 9bc79d2366 dao: support validateUpsert:false
- validateUpsert:true reports validation errors back to the callback
 - validateUpsert:false does not call `isValid()` at all
 - any other value report validation errors via `console.warn`
2015-05-05 08:24:08 +02:00
Rand McKinney 0b235015f0 Changes to API docs per Dennis 2015-05-04 08:45:17 -07:00
Raymond Feng 3aa90751be Merge branch 'merge-inclusion' of https://github.com/walkonsocial/loopback-datasource-juggler into walkonsocial-merge-inclusion 2015-04-24 16:12:38 -07:00
Raymond Feng 03a34fd086 Merge branch 'hasmanythrough-inconsitency' of https://github.com/walkonsocial/loopback-datasource-juggler into walkonsocial-hasmanythrough-inconsitency 2015-04-24 16:08:08 -07:00
ningsuhen 9a7f13ff0f Add support for merging include filters 2015-04-25 01:59:39 +05:30
ningsuhen 7861c08e5a add test case for hasmanythrough bi-drectional relations 2015-04-25 01:32:33 +05:30
Raymond Feng c609b6d7ce Allow leading slash for `path` in model settings 2015-04-24 08:23:13 -07:00
ningsuhen 9806feb397 Fix for bug - https://github.com/strongloop/loopback-datasource-juggler/issues/571 2015-04-24 15:22:50 +05:30
Miroslav Bajtoš 40eecd98c9 validations: treat `NaN` as a blank value
When a required number property is set to NaN, for example as a result
of coersion (`Number([1,2,3])`), the "presence" validation now correctly
reports an error.
2015-04-22 19:57:48 +02:00
Raymond Feng c338c2326d Merge pull request #561 from strongloop/feature/allow-name-mapper-for-discovery
Allow custom name mapping for discovered models
2015-04-22 08:43:09 -07:00
Raymond Feng 1e70678fa7 Allow custom name mapping for discovered models 2015-04-22 08:42:47 -07:00
Miroslav Bajtoš b642d52fbe Merge pull request #565 from strongloop/feature/validate-upsert
Validate model on updateOrCreate (upsert).
2015-04-17 17:20:55 +02:00
Raymond Feng 988a929577 Extend findById to accept an optional filter object 2015-04-16 09:06:53 -07:00
Miroslav Bajtoš 3df62444d6 Validate model on updateOrCreate (upsert).
Fix the implementation of updateOrCreate (a.k.a. upsert) to validate
the model before calling the connector.

In order to preserve backwards compatibility, validation errors are
only logged via console.warn by default.

The correct behaviour, where validation errors fail the updateOrCreate
operation, can be enabled via new model setting "validateUpsert".
2015-04-16 09:09:54 +02:00
Miroslav Bajtoš 99d4c6aa8d Add new strict mode "validate"
When a model is configured with `strict: 'validate'`,
any dynamic properties not included in the schema trigger
a validation error.
2015-04-14 08:16:10 +02:00
Partap Davis 29eb3434c7 Promisify model relation methods
When a callback is omitted from a method on a model relation that
supports promises, return that promise.  This includes all the standard
DAO methods, as well as any user-defined methods that return promises.

e.g.:
mylist.todos.create({name: 'Item 1'}) // returns Promise

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')

Relations affected:

- BelongsTo
- HasOne
- HasMany
- HasManyThrough
- HasAndBelongsToMany
- ReferencesMany
- EmbedsOne

Exceptions:

The EmbedsMany relation has not been promisified, because most of the
methods return synchronous values.

The base relation getter method [e.g.: mylist.todos()] has not been
promisified, due to its default caching behavior.

New Methods:

- getAsync(condition, cb)

A new method "getAsync()" has been added to all relations except
EmbedsMany, which always fetches from the datasource rather than from
the cache.  It takes an optional "where" condition (except for HasOne
and BelongsTo) and an optional callback.  If the callback is omitted,
a Promise is returned.
2015-04-07 11:41:07 +02:00
Raymond Feng 16cc870f57 Merge pull request #544 from strongloop/feature/nesting-doc-query
Allow nesting properties to be queried for memory connector
2015-04-02 08:47:10 -07:00
Miroslav Bajtoš cd7bc46efb Deprecate property names containing a dot 2015-04-02 09:49:04 +02:00
Miroslav Bajtoš 3a51510119 Code cleanup in lib/dao.js
Rename callback argument "result" to "info" to make it consistent
with other places where we use "info" too.

Remove traling whitespace.
2015-04-01 18:25:04 +02:00
Fabien Franzen 17c8576097 Save parent model of embedded relations 2015-04-01 16:59:21 +02:00
Raymond Feng 8d1e782199 Merge pull request #546 from fabien/feature/scope-update-all
Implement scope.updateAll
2015-03-30 14:35:47 -07:00
Raymond Feng 44e5ad1fef Merge pull request #549 from fabien/feature/hookstate-from-options
Allow passing in hookState from options
2015-03-30 14:35:34 -07:00
Fabien Franzen 1ab3d74ab5 Pass options in operation hooks context. 2015-03-30 18:03:42 +02:00
Pulkit Singhal 2891b5e5b3 check if id does not exist a bit more explicitly
if left as-is, ids with value of zero were treated as non-existent
2015-03-30 09:52:08 -05:00
Miroslav Bajtoš 517ea875ec Merge pull request #500 from 0angelic0/master
Remove and clear Operation Hook observers
2015-03-30 11:26:57 +02:00
Fabien Franzen 7e55ef18f8 Implement scope.updateAll 2015-03-28 21:25:24 +01:00
Raymond Feng 137d096cfb Allow nesting properties to be queried for memory connector
See https://github.com/strongloop/loopback/issues/517
2015-03-27 16:05:12 -07:00
Miroslav Bajtoš 093a307052 Merge pull request #542 from strongloop/feature/default-to-null
Add model setting "persistUndefinedAsNull"
2015-03-27 18:39:03 +01:00
Miroslav Bajtoš 9fd4c00225 Add model setting "persistUndefinedAsNull"
When the setting "persistUndefinedAsNull" is true,
the model will use `null` instead of `undefined` in
all property values.

 - Known optional model properties are set to `null` when no value
   was provided.

 - When setting model properties, `undefined` is always converted
   to `null`. This applies to both known (model-defined) properties
   and additional (custom, dynamic) properties.

 - The instance method `toObject()` converts `undefined` to `null` too.
   Because `toJSON()` calls `toObject()` under the hood, the change
   applies to `toJSON()` too.
2015-03-27 18:25:26 +01:00
Raymond Feng c340f416b1 Merge pull request #539 from fabien/fix/tiny-return-scope
Return scope object from DAO.scope
2015-03-27 09:26:50 -07:00
Miroslav Bajtoš abba2a88d9 Merge pull request #540 from strongloop/fix/update-delete-all-details
Code cleanup in updateAll/deleteAll
2015-03-27 08:58:47 +01:00
Miroslav Bajtoš a70a1b255a Code cleanup in updateAll/deleteAll
Rename the second callback argument to `info` to make its purpose more
clear. Fix jsdoc comments, note that these comments are NOT shown
on http://apidocs.strongloop.com/.
2015-03-26 19:01:25 +01:00
Fabien Franzen bbce005d12 Return scope object from DAO.scope 2015-03-26 15:39:26 +01:00
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
0angelic0 befe30f14a Add abilities to remove and clear observers - Operation Hooks. 2015-03-11 18:08:35 +07: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