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š
ae3dc3cec2
Merge pull request #510 from strongloop/fix/duplicate-create
...
Reject CREATE with a duplicate id
2015-03-19 17:37:01 +01: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
Raymond Feng
04348a1168
Make sure id properties cannot be changed
2015-03-16 09:25:38 -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
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
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
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
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š
46ff76dda0
Fix `deleteById(id)` and other test failures
2015-02-13 09:34:40 -08:00
Raymond Feng
bcbb9c580d
Merge branch 'featrue/support-connector-findOrCreate' of https://github.com/clarkorz/loopback-datasource-juggler into clarkorz-featrue/support-connector-findOrCreate
2015-02-11 20:49:51 -08:00
Raymond Feng
760ac97902
Add an optional `options` argument to all CRUD methods
2015-02-10 23:57:05 -08:00
Clark Wang
0bef56efc0
support optimized findOrCreate
...
Signed-off-by: Clark Wang <clark.wangs@gmail.com>
remove undefined for creating data in findOrCreate
Signed-off-by: Clark Wang <clark.wangs@gmail.com>
getLastGeneratedUid instead of force an id
Signed-off-by: Clark Wang <clark.wangs@gmail.com>
2015-02-07 10:23:04 +08:00
Miroslav Bajtoš
4889443ed0
Merge pull request #422 from strongloop/feature/fix-mongodb-issue-87
...
Remove undefined properties for create
2015-02-04 19:11:02 +01:00
Raymond Feng
79eabf3cf9
Fix typo
2015-02-04 08:30:13 -08:00
Raymond Feng
9769df2c91
Remove undefined properties for create
...
See https://github.com/strongloop/loopback-connector-mongodb/issues/87
2015-02-03 08:35:18 -08:00
Miroslav Bajtoš
fcaf19a1d2
Rename hook "query" to "access"
...
The name "query" creates incorrect assumption that hook handlers
may return the result of a query to bypass database access.
That is far from true, since this hook is called also by methods
like `deleteAll` or `updateAll` that don't perform any SELECT query.
2015-02-02 10:41:18 +01:00
Miroslav Bajtoš
370966df99
Implement intent hook `before delete`
...
Methods `DAO.deleteAll` and `DAO.prototype.delete` now invoke
`before delete` hook too. The hook receives `ctx.where` describing
models to be deleted.
2015-02-02 09:13:31 +01:00
Miroslav Bajtoš
842e543bf7
Merge pull request #415 from strongloop/fix/regression-in-dao-save
...
Fix regression in `.save()` from 1fd6eff
2015-01-30 18:28:10 +01:00
Raymond Feng
e41b2d9393
Merge pull request #414 from strongloop/feature/fix-hasone-remoting
...
Fix hasOne remoting
2015-01-30 08:23:46 -08:00
Miroslav Bajtoš
31b9da7d44
Remove redundant `.toObject()` call from `upsert`
2015-01-30 11:31:30 +01:00
Miroslav Bajtoš
5cfbfe3a19
Fix regression in `.save()` from 1fd6eff1
...
The commit 1fd6eff1
(intent-based hooks) introduced a subtle regression
in `.save()` method where dynamic property setters were invoked twice.
This commit fixes the problem by moving pre-save data normalization
into `before save` callback.
2015-01-30 11:31:12 +01:00
Raymond Feng
e46bd0cdb5
Fix hasOne remoting
2015-01-29 23:26:11 -08:00
Raymond Feng
7d42202d40
Make sure batch create calls back with correct data
...
See https://github.com/strongloop/loopback/issues/1031
2015-01-29 11:52:39 -08:00
Miroslav Bajtoš
1fd6eff10f
Intent-based hooks for persistence
...
This patch introduces a new API for "intent-based" hooks. These hooks
are not tied to a particular method (e.g. "find" or "update"). Instead,
they are triggered from all methods that execute a particular "intent".
The consumer API is very simple, there is a new method
Model.observe(name, observer), where the observer is function
observer(context, callback).
Observers are inherited by child models and it is possible to register
multiple observers for the same hook.
List of hooks:
- query
- before save
- after save
- after delete
2015-01-29 08:43:52 +01:00
Fabien Franzen
a19b778cbd
Change Model to BaseModel for clarity
2015-01-08 15:44:28 +01:00
Fabien Franzen
a24b222a72
Don't coerce nested objects into Model instances
...
For queries, this is undesirable. It also affects
loopback-connector-mongodb's ability to perform nested queries (it
expects plain objects to work correctly, and to allow $elemMatch for
example).
2015-01-08 15:34:04 +01:00
Clark Wang
ce2b580ccd
add a flag to callback of findOrCreate to indicate find or create
...
Signed-off-by: Clark Wang <clark.wangs@gmail.com>
2014-12-25 22:19:15 +08:00
Clark Wang
6fa8969912
fix default include in default scope fails findById
...
Signed-off-by: Clark Wang <clark.wangs@gmail.com>
2014-12-11 15:14:35 +08:00
Raymond Feng
48e8ebed7b
Fix a typo
2014-12-03 15:11:27 -08:00
Fabien Franzen
0c28ccedac
Refactored inclusion
...
The syntax is now consistent, regardless of using [] or {} for the
include param.
2014-10-10 14:24:25 +02:00
Fabien Franzen
0e49dc94ec
Allow `attributes` as an alias for `properties` (for LDL)
2014-10-09 18:14:04 +02:00
Fabien Franzen
ec05d0b5a8
Cleanup, consistency: allow properties to be a function
...
Also, pass along the current instance, for any instance method as a
context (save, updateAttributes).
2014-10-09 18:14:04 +02:00
Fabien Franzen
beeb7c46c9
applyProperties => properties (object/false)
2014-10-09 18:14:04 +02:00
Fabien Franzen
49e2b8b8dc
Allow default scope to be a function
2014-10-09 18:14:04 +02:00
Fabien Franzen
b136a8fce7
Full test CRUD suite for default scope
2014-10-09 18:14:04 +02:00
Fabien Franzen
ad55681d69
Properly reset Memory connector cache on automigrate
2014-10-09 18:13:58 +02:00
Fabien Franzen
610866bd7c
Extract mergeQuery and setScopeValuesFromWhere
...
Related to #274 - in preparation of default scope
2014-10-09 18:13:40 +02:00
Fabien Franzen
b4144598bf
DAO save() now uses isNewRecord()
2014-09-05 17:22:14 +02:00
Fabien Franzen
fafe51833b
More fixes/tests
2014-09-05 17:09:23 +02:00
Fabien Franzen
aebf5e9e6b
Enforce id (prevent user-set value), fix isNewRecord
2014-09-05 16:35:01 +02:00
Raymond Feng
057d39d5bb
Simplify the id lookup
2014-09-04 09:32:38 -07:00
Fabien Franzen
86ea107550
Validations configuration as object
...
Previously validations were appended to an array when configured. The
format was cumbersome, and led to issues. This refactors the
configuration into an object, as a property of the Model.
Note that if no validations have been configured, this property is
currently `undefined`.
2014-08-26 17:51:01 +02:00
Fabien Franzen
3b81b928fb
Implement DAO unsetAttribute
2014-08-20 08:57:20 -07:00
Fabien Franzen
a446551a59
Fix relations for RDBMS connectors (mysql, postgresql)
...
- fix tests (explicit model/property definitions)
- fix include vs. RDBMS model strictness
2014-08-20 14:03:38 +02:00
Raymond Feng
7f9108c6d2
Check null
...
See https://github.com/strongloop/loopback-datasource-juggler/issues/223
2014-08-15 23:30:23 -07:00
Fabien Franzen
9f1c5d9c37
Moved DataAccessObject.sortByIds to utils.js
2014-08-15 19:39:58 +02:00
Fabien Franzen
085bb94505
Allow partial list of ids for sortByIds
2014-08-15 19:39:58 +02:00
Fabien Franzen
7cd880712b
Handle toObject in updateAttributes
...
Since one can call updateAttributes with any kind of properties (as
opposed to save, which uses toObject internally), any objects that
correspond to toObject should be handled as such. This is particularly
the case with List objects, as used by embedsMany.
2014-08-15 18:01:40 +02:00
Raymond Feng
c53dc74d16
Fix a name conflict in scope metadata
2014-08-08 15:52:30 -07:00
Fabien Franzen
b18384459a
Implemented findByIds
2014-07-29 15:01:47 +02:00
Fabien Franzen
da303b72a5
Implemented more complex scenaro: embedsMany + relations
...
The test case will denormalize data into the embedded object,
and re-use the actual related object id as its own id.
2014-07-29 12:02:52 +02:00
Raymond Feng
fc710ca55a
Merge branch 'master' into 2.0
2014-07-15 17:09:20 -07:00
Raymond Feng
dc6ada6348
Merge pull request #165 from strongloop/feature/allow-hook-skip-next
...
Pass callback to hooks so that next can be skipped
2014-07-15 12:53:52 -07:00
Raymond Feng
9325ce316b
Allow before hooks to pass arguments to next()
2014-07-15 12:51:33 -07:00
Samuel Reed
b66183f7dc
DAO.prototype.exists should return 'boolean' type.
...
Signed-off-by: Samuel Reed <samuel.trace.reed@gmail.com>
2014-07-08 15:51:24 -05:00
Miroslav Bajtoš
0296ef113d
Make sure 'deleteById' is used as the remote operation name
...
See strongloop/loopback#359
2014-07-03 08:17:01 +02:00
Raymond Feng
f7afade229
Make sure 'upsert' is used as the remote operation name
...
See https://github.com/strongloop/loopback/issues/359
2014-07-02 12:20:56 -07:00
Raymond Feng
e0c7619908
Normalize filter.order and enforce more checks
2014-06-26 23:40:20 -07:00
Raymond Feng
44de2da21f
Merge branch 'master' into 2.0
2014-06-20 23:02:37 -07:00
Raymond Feng
86073cb480
Merge pull request #144 from strongloop/feature/add-update
...
Feature/add update
2014-06-20 12:28:48 -07:00
Raymond Feng
a1836662a7
Clean up comments
2014-06-20 12:05:32 -07:00
Raymond Feng
26501eaa2e
Merge pull request #135 from albertoleal/ConvertNullToNotFoundError
...
ConvertNulltoNotFoundError when calling DataAccessObject.findOne via rest
2014-06-18 23:00:30 -07:00
Raymond Feng
7c71e1e53b
Merge pull request #141 from strongloop/feature/fix-perf
...
Feature/fix perf
2014-06-18 22:40:00 -07:00
Raymond Feng
888d15ce1c
Optimize model instantiation and conversion
2014-06-18 22:13:52 -07:00
Raymond Feng
ad3af82923
Add support for updating multiple instances with query
2014-06-17 16:30:02 -07:00
Raymond Feng
4b9d98c6ce
Allows skip or offset
...
See https://github.com/strongloop/loopback/issues/336
2014-06-17 09:07:55 -07:00
Alberto Leal
4fd3c969f9
Convert null to NotFoundError for remoting call to DataAccessObject.findOne.
2014-06-11 16:59:21 -03:00
Raymond Feng
bb57fcbe11
Fix the comparison for null/boolean values
2014-06-10 16:11:50 -07:00
Raymond Feng
5f3c856d2e
Fix the logical operator check
2014-06-04 14:23:53 -07:00
Raymond Feng
cdf9956867
Fix JS doc for private methods
2014-06-04 14:02:55 -07:00
Raymond Feng
42c1ad3dca
Normalize/validate the query filter object
2014-06-02 15:57:44 -07:00
crandmck
835708d25d
Copy info from api-model.md to JSDoc
2014-05-27 21:59:21 -07:00
crandmck
00226dde0d
Copy info from api-model.md to JSDoc
2014-05-21 17:50:44 -07:00
Ritchie Martori
dc9c9b2bd4
Remove remoting metadata
2014-05-16 12:33:17 -07:00
Adam Schwartz
49f0e5dcee
Fix typo "Unkown" => "Unknown"
2014-05-15 23:26:17 -04:00
Ritchie Martori
2922eb63b7
Merge
2014-05-14 13:33:46 -07:00
Ritchie Martori
ad752747d3
Add missing changed event
2014-05-14 13:31:15 -07:00
Ritchie Martori
0866a55cb2
Do not .toObject if already Object
2014-05-14 13:31:15 -07:00
Raymond Feng
3f410cae21
Add test cases for updateOrCreate/save and fix related issues
2014-05-09 15:27:45 -07:00
Raymond Feng
0bcbe6ceae
Remove undefined for the data to be saved
2014-05-09 09:59:34 -07:00
Raymond Feng
4a907b0a18
Remove the undefined property to avoid mongodb upsert overwrite
2014-05-08 15:46:39 -07:00
crandmck
cf75f55f73
Fix JSDoc - remove newlines from function alias declarations, etc.
2014-05-07 11:24:49 -07:00
Ritchie Martori
45eadabbeb
Fix remoting for IDs in URLs
2014-05-01 14:19:31 -07:00
Raymond Feng
cc5975486d
Simplify the inclusion processing
2014-03-17 08:40:40 -07:00
Raymond Feng
cadacc44bb
Create scoped methods for belongsTo and improve docs
2014-03-17 08:40:40 -07:00
crandmck
9c2098cd35
Updates to JSDoc comments for API doc
2014-03-12 16:28:46 -07:00
Raymond Feng
44a62d01af
Allows unknown properties to be saved for non-strict models
...
See https://github.com/strongloop/loopback/issues/199
2014-02-24 18:38:45 -08:00
Raymond Feng
9192c27409
Leave the item type introspection for List
2014-02-14 11:21:30 -08:00
Raymond Feng
12a624d99c
Rewrite the List class for typed array
2014-02-14 10:41:00 -08:00
Raymond Feng
7e45a1fda1
Fix the include with array value
2014-02-14 10:40:45 -08:00
Raymond Feng
061b274055
Merge branch 'partial-fix-for-58' of github.com:arlaneenalra/loopback-datasource-juggler
2014-02-12 21:55:53 -08:00
Raymond Feng
dbd97eb423
Merge pull request #68 from strongloop/feature/fix-lb-162
...
Make sure own properties are copied by toObject for non-strict mode
2014-02-11 14:29:21 -08:00
Raymond Feng
85232f31b3
Clean up the options for model constructor
2014-02-10 22:38:59 -08:00
arlaneenalra
5252d0e805
Move new var into thunk.
...
There really was no reason for it to be in the
outer context.
2014-02-05 22:21:27 -06:00
arlaneenalra
abd46961da
Use type converted data when writing back to database.
...
This allows foreignKey types and other custom types
to be converted into natvie values before writing them
to the database.
2014-02-04 23:10:42 -06:00
Ritchie Martori
61a54da418
Merge pull request #65 from strongloop/feature/change-hook
...
Add change / delete events
2014-01-30 13:54:47 -08:00
Ritchie Martori
e909749455
Add tests for change / delete events
2014-01-29 11:03:04 -08:00
Raymond Feng
c008c4d30a
Add more comments
2014-01-28 23:01:11 -08:00
Raymond Feng
43637a690d
Handle hasMany.though
2014-01-28 17:59:59 -08:00
Ritchie Martori
bef1bc1ca4
Add change / delete events
2014-01-28 13:51:45 -08:00
Raymond Feng
1339250c8f
Promote the included relations as properties
2014-01-27 15:56:04 -08:00
Raymond Feng
2b8c1ebaee
Reformat the code
2014-01-24 09:09:53 -08:00
Raymond Feng
3d9061aa69
Make the identation consistent for now
2013-12-16 08:40:06 -08:00
Raymond Feng
1b9edbcfcb
Fix a regression in mongodb connector
2013-12-15 22:51:47 -08:00
Raymond Feng
8d1d6f4466
Add more comments
2013-12-15 21:43:21 -08:00
Raymond Feng
9890af119e
Check for null & undefined values
2013-12-14 09:54:28 -08:00
Raymond Feng
fab504b5d9
Fix the coercion issue related to GeoPoint near
2013-12-14 09:49:11 -08:00
Raymond Feng
abe6d2bb22
Add more tests to address the PR comments
2013-12-04 10:00:33 -08:00
Raymond Feng
ed6d8839ba
Add a test case
2013-12-03 21:27:46 -08:00
Raymond Feng
2df0c4b21d
Coerce types for values of where clause
2013-11-29 14:45:50 -08:00
Miroslav Bajtos
f7c48c0d72
REST call of DataAccessObject.findById returns 404
...
Modify the remoting configuration of `DataAccessObject.findById()`
and add a `rest.before` handler that converts `null` to 404 error.
The change is covered by a test in loopback project.
2013-11-21 19:05:52 +01:00
Raymond Feng
526d126e41
Fix the relation lazy setup
2013-11-11 22:06:43 -08:00
Ritchie Martori
597a775e4c
Add model.getDataSource() method
2013-10-31 11:46:12 -07:00
Raymond Feng
9ec9f654c7
Remove undefined values from the query object
2013-10-11 11:50:00 -07:00
Raymond Feng
0bfc362b18
Use for-in loop to support properties from the super class
2013-10-06 21:27:02 -07:00
Raymond Feng
1963ea9fb1
Use ModelDefinition to access model name/properties/settings
2013-10-02 15:18:50 -07:00
Raymond Feng
fad6ee5e1d
Refactor/cleanup the data source juggler implementation
...
- Add a ModelDefinition class to encapsulate the model schema handling
- Add a Connector class as the base class for connector implementations
- Optimize attachTo and mixin
- Rename some properties/methods
2013-10-01 22:14:21 -07:00
Raymond Feng
21e6fddf1a
Check the filter param to make sure we have a default value
...
sls-sample-app is failing if we hit http://localhost:3000/locations/findOne
In this case, a undefined param is passed in.
The fix now sets it to {} if the value is undefined/null
2013-09-06 13:42:12 -07:00
Raymond Feng
038f30cb95
Fix the conflicts between MongoDB _id & juggler's internal prefix
2013-08-30 16:59:17 -07:00
Raymond Feng
84a40cc1c6
Merge pull request #7 from strongloop/SLA-422
...
Mark id arguments to be required
2013-08-30 10:49:16 -07:00
Raymond Feng
c2eb1f55f0
Fix the property population for schemaless models
2013-08-28 21:49:05 -07:00
Raymond Feng
cb00aad473
Mark id arguments to be required
2013-08-27 22:03:59 -07:00
Raymond Feng
59841a04a8
Set strict to false by default for non-relational data sources
2013-08-26 13:38:24 -07:00
Raymond Feng
ecc142b4d2
Disable remoting for reload
2013-08-26 10:54:26 -07:00
Raymond Feng
7234c9822c
Add descriptions for remote method paramters
2013-08-23 17:04:08 -07:00
Raymond Feng
43a5398792
Fix the remote method descriptions
2013-08-23 14:08:47 -07:00
Raymond Feng
6407098126
Update descriptions to use data source
2013-08-22 13:30:13 -07:00
Raymond Feng
a1e4457794
Refactor the shared method declaration and add descriptions
2013-08-22 12:24:02 -07:00
Raymond Feng
9482d3c7de
Fix the where option for delete
2013-08-18 10:58:53 -07:00
Raymond Feng
705a1fc2c9
Update the remote methods
2013-08-16 16:44:31 -07:00
Raymond Feng
281cc38017
Fix the id references to allow custom name other than 'id'
2013-08-14 23:14:44 -07:00
Raymond Feng
8aec0a3b47
Add missing declaration
2013-08-14 17:32:38 -07:00
Raymond Feng
2e20df2dd3
Add docs.json and jsdocs
2013-08-09 15:16:32 -07:00
Raymond Feng
96787ad25f
Fix id references
2013-07-24 22:58:57 -07:00
Ritchie
5bf2d1ff23
Add root true to remote methods
2013-07-24 17:21:35 -07:00
Raymond Feng
752aedb80d
Rename adapters to connectors
2013-07-23 14:40:44 -07:00
Raymond Feng
6af4b1ba2f
More renames: schema -> dataSource, adapter -> connector
2013-07-23 11:16:43 -07:00
Raymond Feng
127fb32d02
Add the id arg
2013-07-22 09:57:55 -07:00
Raymond Feng
b7f7f71b15
Add static deleteById
2013-07-22 09:42:09 -07:00
Ritchie Martori
22db369fb8
Allow queries to filter fields
2013-07-17 09:05:37 -07:00
Ritchie Martori
d4ca20c01a
Add filter.fields support to dao and memory connector
2013-07-16 17:53:52 -07:00
Ritchie Martori
a4247ad59f
Remove updateAttribute as remote method
2013-07-15 19:44:29 -07:00
Raymond Feng
12c28ce363
Fix typos
2013-07-15 10:38:54 -07:00
Raymond Feng
ef671825ff
Only flatten array/object for relational DBs
2013-07-12 19:10:42 -07:00
Raymond Feng
296b258f35
Add http mapping for create/updateAttributes methods
2013-07-11 16:49:18 -07:00
Ritchie Martori
7684fe2946
Change default create method from save to create for remoting
2013-07-02 20:28:00 -07:00