rename asteroid to loopback
This commit is contained in:
parent
407a50f493
commit
2f773115fe
132
README.md
132
README.md
|
@ -1,10 +1,10 @@
|
||||||
# asteroid
|
# loopback
|
||||||
|
|
||||||
v0.9.0
|
v0.9.0
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
slnode install asteroid -g
|
slnode install loopback -g
|
||||||
|
|
||||||
## Server API
|
## Server API
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ v0.9.0
|
||||||
- [Model](#model)
|
- [Model](#model)
|
||||||
- [DataSource](#data-source)
|
- [DataSource](#data-source)
|
||||||
- [Connectors](#connectors)
|
- [Connectors](#connectors)
|
||||||
- [Asteroid Types](#asteroid-types)
|
- [Loopback Types](#loopback-types)
|
||||||
- [GeoPoint](#geo-point)
|
- [GeoPoint](#geo-point)
|
||||||
- [REST Router](#rest-router)
|
- [REST Router](#rest-router)
|
||||||
- [Bundled Models](#bundled-models)
|
- [Bundled Models](#bundled-models)
|
||||||
|
@ -26,10 +26,10 @@ _TODO_
|
||||||
|
|
||||||
### App
|
### App
|
||||||
|
|
||||||
Create an asteroid application.
|
Create an loopback application.
|
||||||
|
|
||||||
var asteroid = require('asteroid');
|
var loopback = require('loopback');
|
||||||
var app = asteroid();
|
var app = loopback();
|
||||||
|
|
||||||
app.get('/', function(req, res){
|
app.get('/', function(req, res){
|
||||||
res.send('hello world');
|
res.send('hello world');
|
||||||
|
@ -48,12 +48,12 @@ Create an asteroid application.
|
||||||
Expose a `Model` to remote clients.
|
Expose a `Model` to remote clients.
|
||||||
|
|
||||||
// create a testing data source
|
// create a testing data source
|
||||||
var memory = asteroid.memory();
|
var memory = loopback.memory();
|
||||||
var Color = memory.createModel('color', {name: String});
|
var Color = memory.createModel('color', {name: String});
|
||||||
Color.attachTo(memory);
|
Color.attachTo(memory);
|
||||||
|
|
||||||
app.model(Color);
|
app.model(Color);
|
||||||
app.use(asteroid.rest());
|
app.use(loopback.rest());
|
||||||
|
|
||||||
**Note:** this will expose all [shared methods](#shared-methods) on the model.
|
**Note:** this will expose all [shared methods](#shared-methods) on the model.
|
||||||
|
|
||||||
|
@ -69,10 +69,10 @@ Get the app's exposed models.
|
||||||
|
|
||||||
### Model
|
### Model
|
||||||
|
|
||||||
An Asteroid `Model` is a vanilla JavaScript class constructor with an attached set of properties and options. A `Model` instance is created by passing a data object containing properties to the `Model` constructor. A `Model` constructor will clean the object passed to it and only set the values matching the properties you define.
|
An Loopback `Model` is a vanilla JavaScript class constructor with an attached set of properties and options. A `Model` instance is created by passing a data object containing properties to the `Model` constructor. A `Model` constructor will clean the object passed to it and only set the values matching the properties you define.
|
||||||
|
|
||||||
// valid color
|
// valid color
|
||||||
var Color = asteroid.createModel('color', {name: String});
|
var Color = loopback.createModel('color', {name: String});
|
||||||
var red = new Color({name: 'red'});
|
var red = new Color({name: 'red'});
|
||||||
console.log(red.name); // red
|
console.log(red.name); // red
|
||||||
|
|
||||||
|
@ -88,9 +88,9 @@ A model defines a list of property names, types and other validation metadata. A
|
||||||
|
|
||||||
Some [DataSources](#data-source) may support additional `Model` options.
|
Some [DataSources](#data-source) may support additional `Model` options.
|
||||||
|
|
||||||
Define an asteroid model.
|
Define an loopback model.
|
||||||
|
|
||||||
var User = asteroid.createModel('user', {
|
var User = loopback.createModel('user', {
|
||||||
first: String,
|
first: String,
|
||||||
last: String,
|
last: String,
|
||||||
age: Number
|
age: Number
|
||||||
|
@ -154,7 +154,7 @@ Validate the model instance.
|
||||||
|
|
||||||
#### Model.properties
|
#### Model.properties
|
||||||
|
|
||||||
An object containing a normalized set of properties supplied to `asteroid.createModel(name, properties)`.
|
An object containing a normalized set of properties supplied to `loopback.createModel(name, properties)`.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
|
@ -163,10 +163,10 @@ Example:
|
||||||
b: {type: 'Number'},
|
b: {type: 'Number'},
|
||||||
c: {type: 'String', min: 10, max: 100},
|
c: {type: 'String', min: 10, max: 100},
|
||||||
d: Date,
|
d: Date,
|
||||||
e: asteroid.GeoPoint
|
e: loopback.GeoPoint
|
||||||
};
|
};
|
||||||
|
|
||||||
var MyModel = asteroid.createModel('foo', props);
|
var MyModel = loopback.createModel('foo', props);
|
||||||
|
|
||||||
console.log(MyModel.properties);
|
console.log(MyModel.properties);
|
||||||
|
|
||||||
|
@ -191,8 +191,8 @@ Outputs:
|
||||||
|
|
||||||
Attach a model to a [DataSource](#data-source). Attaching a [DataSource](#data-source) updates the model with additional methods and behaviors.
|
Attach a model to a [DataSource](#data-source). Attaching a [DataSource](#data-source) updates the model with additional methods and behaviors.
|
||||||
|
|
||||||
var oracle = asteroid.createDataSource({
|
var oracle = loopback.createDataSource({
|
||||||
connector: require('asteroid-connector-oracle'),
|
connector: require('loopback-connector-oracle'),
|
||||||
host: '111.22.333.44',
|
host: '111.22.333.44',
|
||||||
database: 'MYDB',
|
database: 'MYDB',
|
||||||
username: 'username',
|
username: 'username',
|
||||||
|
@ -296,7 +296,7 @@ Define a static model method.
|
||||||
|
|
||||||
Setup the static model method to be exposed to clients as a [remote method](#remote-method).
|
Setup the static model method to be exposed to clients as a [remote method](#remote-method).
|
||||||
|
|
||||||
asteroid.remoteMethod(
|
loopback.remoteMethod(
|
||||||
User.login,
|
User.login,
|
||||||
{
|
{
|
||||||
accepts: [
|
accepts: [
|
||||||
|
@ -350,13 +350,13 @@ Define an instance method.
|
||||||
|
|
||||||
Define a remote model instance method.
|
Define a remote model instance method.
|
||||||
|
|
||||||
asteroid.remoteMethod(User.prototype.logout);
|
loopback.remoteMethod(User.prototype.logout);
|
||||||
|
|
||||||
#### Remote Methods
|
#### Remote Methods
|
||||||
|
|
||||||
Both instance and static methods can be exposed to clients. A remote method must accept a callback with the conventional `fn(err, result, ...)` signature.
|
Both instance and static methods can be exposed to clients. A remote method must accept a callback with the conventional `fn(err, result, ...)` signature.
|
||||||
|
|
||||||
##### asteroid.remoteMethod(fn, [options]);
|
##### loopback.remoteMethod(fn, [options]);
|
||||||
|
|
||||||
Expose a remote method.
|
Expose a remote method.
|
||||||
|
|
||||||
|
@ -364,7 +364,7 @@ Expose a remote method.
|
||||||
myApi.getStats('products', fn);
|
myApi.getStats('products', fn);
|
||||||
}
|
}
|
||||||
|
|
||||||
asteroid.remoteMethod(
|
loopback.remoteMethod(
|
||||||
Product.stats,
|
Product.stats,
|
||||||
{
|
{
|
||||||
returns: {arg: 'stats', type: 'array'},
|
returns: {arg: 'stats', type: 'array'},
|
||||||
|
@ -394,7 +394,7 @@ An arguments description defines either a single argument as an object or an ord
|
||||||
|
|
||||||
**Types**
|
**Types**
|
||||||
|
|
||||||
Each argument may define any of the [asteroid types](#asteroid-types).
|
Each argument may define any of the [loopback types](#loopback-types).
|
||||||
|
|
||||||
**Notes:**
|
**Notes:**
|
||||||
|
|
||||||
|
@ -464,7 +464,7 @@ During `afterRemote` hooks, `ctx.result` will contain the data about to be sent
|
||||||
|
|
||||||
##### Rest
|
##### Rest
|
||||||
|
|
||||||
When [asteroid.rest](#asteroidrest) is used the following `ctx` properties are available.
|
When [loopback.rest](#loopbackrest) is used the following `ctx` properties are available.
|
||||||
|
|
||||||
###### ctx.req
|
###### ctx.req
|
||||||
|
|
||||||
|
@ -522,15 +522,15 @@ TODO: implement / document
|
||||||
|
|
||||||
#### Shared Methods
|
#### Shared Methods
|
||||||
|
|
||||||
Any static or instance method can be decorated as `shared`. These methods are exposed over the provided transport (eg. [asteroid.rest](#rest)).
|
Any static or instance method can be decorated as `shared`. These methods are exposed over the provided transport (eg. [loopback.rest](#rest)).
|
||||||
|
|
||||||
### Data Source
|
### Data Source
|
||||||
|
|
||||||
An Asteroid `DataSource` provides [Models](#model) with the ability to manipulate data. Attaching a `DataSource` to a `Model` adds [instance methods](#instance-methods) and [static methods](#static-methods) to the `Model`. The added methods may be [remote methods](#remote-methods).
|
An Loopback `DataSource` provides [Models](#model) with the ability to manipulate data. Attaching a `DataSource` to a `Model` adds [instance methods](#instance-methods) and [static methods](#static-methods) to the `Model`. The added methods may be [remote methods](#remote-methods).
|
||||||
|
|
||||||
Define a data source for persisting models.
|
Define a data source for persisting models.
|
||||||
|
|
||||||
var oracle = asteroid.createDataSource({
|
var oracle = loopback.createDataSource({
|
||||||
connector: 'oracle',
|
connector: 'oracle',
|
||||||
host: '111.22.333.44',
|
host: '111.22.333.44',
|
||||||
database: 'MYDB',
|
database: 'MYDB',
|
||||||
|
@ -665,8 +665,8 @@ Disable remote access to a data source operation. Each [connector](#connector) h
|
||||||
|
|
||||||
// all rest data source operations are
|
// all rest data source operations are
|
||||||
// disabled by default
|
// disabled by default
|
||||||
var oracle = asteroid.createDataSource({
|
var oracle = loopback.createDataSource({
|
||||||
connector: require('asteroid-connector-oracle'),
|
connector: require('loopback-connector-oracle'),
|
||||||
host: '...',
|
host: '...',
|
||||||
...
|
...
|
||||||
});
|
});
|
||||||
|
@ -709,22 +709,22 @@ Output:
|
||||||
|
|
||||||
Create a data source with a specific connector. See **available connectors** for specific connector documentation.
|
Create a data source with a specific connector. See **available connectors** for specific connector documentation.
|
||||||
|
|
||||||
var memory = asteroid.createDataSource({
|
var memory = loopback.createDataSource({
|
||||||
connector: asteroid.Memory
|
connector: loopback.Memory
|
||||||
});
|
});
|
||||||
|
|
||||||
**Available Connectors**
|
**Available Connectors**
|
||||||
|
|
||||||
- [Oracle](http://github.com/strongloop/asteroid-connectors/oracle)
|
- [Oracle](http://github.com/strongloop/loopback-connectors/oracle)
|
||||||
- [In Memory](http://github.com/strongloop/asteroid-connectors/memory)
|
- [In Memory](http://github.com/strongloop/loopback-connectors/memory)
|
||||||
- TODO - [REST](http://github.com/strongloop/asteroid-connectors/rest)
|
- TODO - [REST](http://github.com/strongloop/loopback-connectors/rest)
|
||||||
- TODO - [MySQL](http://github.com/strongloop/asteroid-connectors/mysql)
|
- TODO - [MySQL](http://github.com/strongloop/loopback-connectors/mysql)
|
||||||
- TODO - [SQLite3](http://github.com/strongloop/asteroid-connectors/sqlite)
|
- TODO - [SQLite3](http://github.com/strongloop/loopback-connectors/sqlite)
|
||||||
- TODO - [Postgres](http://github.com/strongloop/asteroid-connectors/postgres)
|
- TODO - [Postgres](http://github.com/strongloop/loopback-connectors/postgres)
|
||||||
- TODO - [Redis](http://github.com/strongloop/asteroid-connectors/redis)
|
- TODO - [Redis](http://github.com/strongloop/loopback-connectors/redis)
|
||||||
- TODO - [MongoDB](http://github.com/strongloop/asteroid-connectors/mongo)
|
- TODO - [MongoDB](http://github.com/strongloop/loopback-connectors/mongo)
|
||||||
- TODO - [CouchDB](http://github.com/strongloop/asteroid-connectors/couch)
|
- TODO - [CouchDB](http://github.com/strongloop/loopback-connectors/couch)
|
||||||
- TODO - [Firebird](http://github.com/strongloop/asteroid-connectors/firebird)
|
- TODO - [Firebird](http://github.com/strongloop/loopback-connectors/firebird)
|
||||||
|
|
||||||
**Installing Connectors**
|
**Installing Connectors**
|
||||||
|
|
||||||
|
@ -732,7 +732,7 @@ Include the connector in your package.json dependencies and run `npm install`.
|
||||||
|
|
||||||
{
|
{
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"asteroid-connector-oracle": "latest"
|
"loopback-connector-oracle": "latest"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -740,15 +740,15 @@ Include the connector in your package.json dependencies and run `npm install`.
|
||||||
|
|
||||||
Use the `GeoPoint` class.
|
Use the `GeoPoint` class.
|
||||||
|
|
||||||
var GeoPoint = require('asteroid').GeoPoint;
|
var GeoPoint = require('loopback').GeoPoint;
|
||||||
|
|
||||||
Embed a latitude / longitude point in a [Model](#model).
|
Embed a latitude / longitude point in a [Model](#model).
|
||||||
|
|
||||||
var CoffeeShop = asteroid.createModel('coffee-shop', {
|
var CoffeeShop = loopback.createModel('coffee-shop', {
|
||||||
location: 'GeoPoint'
|
location: 'GeoPoint'
|
||||||
});
|
});
|
||||||
|
|
||||||
Asteroid Model's with a GeoPoint property and an attached DataSource may be queried using geo spatial filters and sorting.
|
Loopback Model's with a GeoPoint property and an attached DataSource may be queried using geo spatial filters and sorting.
|
||||||
|
|
||||||
Find the 3 nearest coffee shops.
|
Find the 3 nearest coffee shops.
|
||||||
|
|
||||||
|
@ -792,9 +792,9 @@ The latitude point in degrees. Range: -90 to 90.
|
||||||
|
|
||||||
The longitude point in degrees. Range: -180 to 180.
|
The longitude point in degrees. Range: -180 to 180.
|
||||||
|
|
||||||
### Asteroid Types
|
### Loopback Types
|
||||||
|
|
||||||
Various APIs in Asteroid accept type descriptions (eg. [remote methods](#remote-methods), [asteroid.createModel()](#model)). The following is a list of supported types.
|
Various APIs in Loopback accept type descriptions (eg. [remote methods](#remote-methods), [loopback.createModel()](#model)). The following is a list of supported types.
|
||||||
|
|
||||||
- `null` - JSON null
|
- `null` - JSON null
|
||||||
- `Boolean` - JSON boolean
|
- `Boolean` - JSON boolean
|
||||||
|
@ -804,18 +804,18 @@ Various APIs in Asteroid accept type descriptions (eg. [remote methods](#remote-
|
||||||
- `Array` - JSON array
|
- `Array` - JSON array
|
||||||
- `Date` - a JavaScript date object
|
- `Date` - a JavaScript date object
|
||||||
- `Buffer` - a node.js Buffer object
|
- `Buffer` - a node.js Buffer object
|
||||||
- [GeoPoint](#geopoint) - an asteroid GeoPoint object. TODO
|
- [GeoPoint](#geopoint) - an loopback GeoPoint object. TODO
|
||||||
|
|
||||||
## Bundled Models
|
## Bundled Models
|
||||||
|
|
||||||
The Asteroid library is unopinioned in the way you define your app's data and logic. Asteroid also bundles useful pre-built models for common use cases.
|
The Loopback library is unopinioned in the way you define your app's data and logic. Loopback also bundles useful pre-built models for common use cases.
|
||||||
|
|
||||||
- User - register and authenticate users of your app locally or against 3rd party services.
|
- User - register and authenticate users of your app locally or against 3rd party services.
|
||||||
- Notification - _TODO_ create, store, schedule and send push notifications to your app users.
|
- Notification - _TODO_ create, store, schedule and send push notifications to your app users.
|
||||||
- Email - send emails to your app users using smtp or 3rd party services.
|
- Email - send emails to your app users using smtp or 3rd party services.
|
||||||
- Job - _TODO_ schedule arbitrary code to run at a given time.
|
- Job - _TODO_ schedule arbitrary code to run at a given time.
|
||||||
|
|
||||||
Defining a model with `asteroid.createModel()` is really just extending the base `asteroid.Model` type using `asteroid.Model.extend()`. The bundled models extend from the base `asteroid.Model` allowing you to extend them arbitrarily.
|
Defining a model with `loopback.createModel()` is really just extending the base `loopback.Model` type using `loopback.Model.extend()`. The bundled models extend from the base `loopback.Model` allowing you to extend them arbitrarily.
|
||||||
|
|
||||||
### User Model
|
### User Model
|
||||||
|
|
||||||
|
@ -823,13 +823,13 @@ Register and authenticate users of your app locally or against 3rd party service
|
||||||
|
|
||||||
#### Create a User Model
|
#### Create a User Model
|
||||||
|
|
||||||
Extend a vanilla Asteroid model using the built in User model.
|
Extend a vanilla Loopback model using the built in User model.
|
||||||
|
|
||||||
// create a data source
|
// create a data source
|
||||||
var memory = asteroid.memory();
|
var memory = loopback.memory();
|
||||||
|
|
||||||
// define a User model
|
// define a User model
|
||||||
var User = asteroid.User.extend('user');
|
var User = loopback.User.extend('user');
|
||||||
|
|
||||||
// attach to the memory connector
|
// attach to the memory connector
|
||||||
User.attachTo(memory);
|
User.attachTo(memory);
|
||||||
|
@ -840,15 +840,15 @@ Extend a vanilla Asteroid model using the built in User model.
|
||||||
// expose over the app's api
|
// expose over the app's api
|
||||||
app.model(User);
|
app.model(User);
|
||||||
|
|
||||||
**Note:** By default the `asteroid.User` model uses the `asteroid.Session` model to persist sessions. You can change this by setting the `session` property.
|
**Note:** By default the `loopback.User` model uses the `loopback.Session` model to persist sessions. You can change this by setting the `session` property.
|
||||||
|
|
||||||
**Note:** You must attach both the `User` and `User.session` model's to a data source!
|
**Note:** You must attach both the `User` and `User.session` model's to a data source!
|
||||||
|
|
||||||
// define a custom session model
|
// define a custom session model
|
||||||
var MySession = asteroid.Session.extend('my-session');
|
var MySession = loopback.Session.extend('my-session');
|
||||||
|
|
||||||
// define a custom User model
|
// define a custom User model
|
||||||
var User = asteroid.User.extend('user');
|
var User = loopback.User.extend('user');
|
||||||
|
|
||||||
// use the custom session model
|
// use the custom session model
|
||||||
User.session = MySession;
|
User.session = MySession;
|
||||||
|
@ -978,7 +978,7 @@ Send an email to the user's supplied email address containing a link to reset th
|
||||||
|
|
||||||
#### Remote Password Reset
|
#### Remote Password Reset
|
||||||
|
|
||||||
The password reset email will send users to a page rendered by asteroid with fields required to reset the user's password. You may customize this template by defining a `resetTemplate` setting.
|
The password reset email will send users to a page rendered by loopback with fields required to reset the user's password. You may customize this template by defining a `resetTemplate` setting.
|
||||||
|
|
||||||
User.settings.resetTemplate = 'reset.ejs';
|
User.settings.resetTemplate = 'reset.ejs';
|
||||||
|
|
||||||
|
@ -993,30 +993,30 @@ Confirm the password reset.
|
||||||
|
|
||||||
### Session Model
|
### Session Model
|
||||||
|
|
||||||
Identify users by creating sessions when they connect to your asteroid app. By default the `asteroid.User` model uses the `asteroid.Session` model to persist sessions. You can change this by setting the `session` property.
|
Identify users by creating sessions when they connect to your loopback app. By default the `loopback.User` model uses the `loopback.Session` model to persist sessions. You can change this by setting the `session` property.
|
||||||
|
|
||||||
// define a custom session model
|
// define a custom session model
|
||||||
var MySession = asteroid.Session.extend('my-session');
|
var MySession = loopback.Session.extend('my-session');
|
||||||
|
|
||||||
// define a custom User model
|
// define a custom User model
|
||||||
var User = asteroid.User.extend('user');
|
var User = loopback.User.extend('user');
|
||||||
|
|
||||||
// use the custom session model
|
// use the custom session model
|
||||||
User.session = MySession;
|
User.session = MySession;
|
||||||
|
|
||||||
// attach both Session and User to a data source
|
// attach both Session and User to a data source
|
||||||
User.attachTo(asteroid.memory());
|
User.attachTo(loopback.memory());
|
||||||
MySession.attachTo(asteroid.memory());
|
MySession.attachTo(loopback.memory());
|
||||||
|
|
||||||
### Email Model
|
### Email Model
|
||||||
|
|
||||||
Send emails from your asteroid app.
|
Send emails from your loopback app.
|
||||||
|
|
||||||
### REST Router
|
### REST Router
|
||||||
|
|
||||||
Expose models over rest using the `asteroid.rest` router.
|
Expose models over rest using the `loopback.rest` router.
|
||||||
|
|
||||||
app.use(asteroid.rest());
|
app.use(loopback.rest());
|
||||||
|
|
||||||
**REST Documentation**
|
**REST Documentation**
|
||||||
|
|
||||||
|
@ -1024,7 +1024,7 @@ View generated REST documentation by visiting: [http://localhost:3000/_docs](htt
|
||||||
|
|
||||||
### SocketIO Middleware **Not Available**
|
### SocketIO Middleware **Not Available**
|
||||||
|
|
||||||
**Coming Soon** - Expose models over socket.io using the `asteroid.sio()` middleware.
|
**Coming Soon** - Expose models over socket.io using the `loopback.sio()` middleware.
|
||||||
|
|
||||||
app.use(asteroid.sio);
|
app.use(loopback.sio);
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
var asteroid = require('../../');
|
var loopback = require('../../');
|
||||||
var app = asteroid();
|
var app = loopback();
|
||||||
|
|
||||||
app.use(asteroid.rest());
|
app.use(loopback.rest());
|
||||||
|
|
||||||
var schema = {
|
var schema = {
|
||||||
name: String
|
name: String
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
var asteroid = require('../../');
|
var loopback = require('../../');
|
||||||
var app = asteroid();
|
var app = loopback();
|
||||||
|
|
||||||
app.use(asteroid.rest());
|
app.use(loopback.rest());
|
||||||
|
|
||||||
|
|
||||||
var dataSource = app.dataSource('db', {adapter: 'memory'});
|
var dataSource = app.dataSource('db', {adapter: 'memory'});
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
var asteroid = require('../../');
|
var loopback = require('../../');
|
||||||
var app = asteroid();
|
var app = loopback();
|
||||||
|
|
||||||
app.use(asteroid.configure());
|
app.use(loopback.configure());
|
||||||
app.use(asteroid.bodyParser());
|
app.use(loopback.bodyParser());
|
||||||
app.use(asteroid.routes());
|
app.use(loopback.routes());
|
||||||
|
|
||||||
app.listen(3000);
|
app.listen(3000);
|
10
index.js
10
index.js
|
@ -1,18 +1,18 @@
|
||||||
/**
|
/**
|
||||||
* asteroid ~ public api
|
* loopback ~ public api
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var asteroid = module.exports = require('./lib/asteroid');
|
var loopback = module.exports = require('./lib/loopback');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Connectors
|
* Connectors
|
||||||
*/
|
*/
|
||||||
|
|
||||||
asteroid.Connector = require('./lib/connectors/base-connector');
|
loopback.Connector = require('./lib/connectors/base-connector');
|
||||||
asteroid.Memory = require('./lib/connectors/memory');
|
loopback.Memory = require('./lib/connectors/memory');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Types
|
* Types
|
||||||
*/
|
*/
|
||||||
|
|
||||||
asteroid.GeoPoint = require('jugglingdb/lib/geo').GeoPoint;
|
loopback.GeoPoint = require('jugglingdb/lib/geo').GeoPoint;
|
218
lib/asteroid.js
218
lib/asteroid.js
|
@ -1,218 +0,0 @@
|
||||||
/**
|
|
||||||
* Module dependencies.
|
|
||||||
*/
|
|
||||||
|
|
||||||
var express = require('express')
|
|
||||||
, fs = require('fs')
|
|
||||||
, ejs = require('ejs')
|
|
||||||
, EventEmitter = require('events').EventEmitter
|
|
||||||
, path = require('path')
|
|
||||||
, proto = require('./application')
|
|
||||||
, utils = require('express/node_modules/connect').utils
|
|
||||||
, DataSource = require('jugglingdb').DataSource
|
|
||||||
, ModelBuilder = require('jugglingdb').ModelBuilder
|
|
||||||
, assert = require('assert')
|
|
||||||
, i8n = require('inflection');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Expose `createApplication()`.
|
|
||||||
*/
|
|
||||||
|
|
||||||
var asteroid = exports = module.exports = createApplication;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Framework version.
|
|
||||||
*/
|
|
||||||
|
|
||||||
asteroid.version = require('../package.json').version;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Expose mime.
|
|
||||||
*/
|
|
||||||
|
|
||||||
asteroid.mime = express.mime;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an asteroid application.
|
|
||||||
*
|
|
||||||
* @return {Function}
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
|
|
||||||
function createApplication() {
|
|
||||||
var app = express();
|
|
||||||
|
|
||||||
utils.merge(app, proto);
|
|
||||||
|
|
||||||
return app;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Expose express.middleware as asteroid.*
|
|
||||||
* for example `asteroid.errorHandler` etc.
|
|
||||||
*/
|
|
||||||
|
|
||||||
for (var key in express) {
|
|
||||||
Object.defineProperty(
|
|
||||||
asteroid
|
|
||||||
, key
|
|
||||||
, Object.getOwnPropertyDescriptor(express, key));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Expose additional asteroid middleware
|
|
||||||
* for example `asteroid.configure` etc.
|
|
||||||
*/
|
|
||||||
|
|
||||||
fs
|
|
||||||
.readdirSync(path.join(__dirname, 'middleware'))
|
|
||||||
.filter(function (file) {
|
|
||||||
return file.match(/\.js$/);
|
|
||||||
})
|
|
||||||
.forEach(function (m) {
|
|
||||||
asteroid[m.replace(/\.js$/, '')] = require('./middleware/' + m);
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error handler title
|
|
||||||
*/
|
|
||||||
|
|
||||||
asteroid.errorHandler.title = 'Asteroid';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a data source with passing the provided options to the connector.
|
|
||||||
*
|
|
||||||
* @param {String} name (optional)
|
|
||||||
* @param {Object} options
|
|
||||||
*
|
|
||||||
* - connector - an asteroid connector
|
|
||||||
* - other values - see the specified `connector` docs
|
|
||||||
*/
|
|
||||||
|
|
||||||
asteroid.createDataSource = function (name, options) {
|
|
||||||
var ds = new DataSource(name, options);
|
|
||||||
ds.createModel = function (name, properties, settings) {
|
|
||||||
var ModelCtor = asteroid.createModel(name, properties, settings);
|
|
||||||
ModelCtor.attachTo(ds);
|
|
||||||
|
|
||||||
var hasMany = ModelCtor.hasMany;
|
|
||||||
|
|
||||||
if(hasMany) {
|
|
||||||
ModelCtor.hasMany = function (anotherClass, params) {
|
|
||||||
var origArgs = arguments;
|
|
||||||
var thisClass = this, thisClassName = this.modelName;
|
|
||||||
params = params || {};
|
|
||||||
if (typeof anotherClass === 'string') {
|
|
||||||
params.as = anotherClass;
|
|
||||||
if (params.model) {
|
|
||||||
anotherClass = params.model;
|
|
||||||
} else {
|
|
||||||
var anotherClassName = i8n.singularize(anotherClass).toLowerCase();
|
|
||||||
for(var name in this.schema.models) {
|
|
||||||
if (name.toLowerCase() === anotherClassName) {
|
|
||||||
anotherClass = this.schema.models[name];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var pluralized = i8n.pluralize(anotherClass.modelName);
|
|
||||||
var methodName = params.as ||
|
|
||||||
i8n.camelize(pluralized, true);
|
|
||||||
var proxyMethodName = 'get' + i8n.titleize(pluralized, true);
|
|
||||||
|
|
||||||
// create a proxy method
|
|
||||||
var fn = this.prototype[proxyMethodName] = function () {
|
|
||||||
// this[methodName] cannot be a shared method
|
|
||||||
// because it is defined inside
|
|
||||||
// a property getter...
|
|
||||||
|
|
||||||
this[methodName].apply(thisClass, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
fn.shared = true;
|
|
||||||
fn.http = {verb: 'get', path: '/' + methodName};
|
|
||||||
fn.accepts = {arg: 'where', type: 'object'};
|
|
||||||
hasMany.apply(this, arguments);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return ModelCtor;
|
|
||||||
}
|
|
||||||
return ds;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a named vanilla JavaScript class constructor with an attached set of properties and options.
|
|
||||||
*
|
|
||||||
* @param {String} name - must be unique
|
|
||||||
* @param {Object} properties
|
|
||||||
* @param {Object} options (optional)
|
|
||||||
*/
|
|
||||||
|
|
||||||
asteroid.createModel = function (name, properties, options) {
|
|
||||||
return asteroid.Model.extend(name, properties, options);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a remote method to a model.
|
|
||||||
* @param {Function} fn
|
|
||||||
* @param {Object} options (optional)
|
|
||||||
*/
|
|
||||||
|
|
||||||
asteroid.remoteMethod = function (fn, options) {
|
|
||||||
fn.shared = true;
|
|
||||||
if(typeof options === 'object') {
|
|
||||||
Object.keys(options).forEach(function (key) {
|
|
||||||
fn[key] = options[key];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
fn.http = fn.http || {verb: 'get'};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a template helper.
|
|
||||||
*
|
|
||||||
* var render = asteroid.template('foo.ejs');
|
|
||||||
* var html = render({foo: 'bar'});
|
|
||||||
*
|
|
||||||
* @param {String} path Path to the template file.
|
|
||||||
* @returns {Function}
|
|
||||||
*/
|
|
||||||
|
|
||||||
asteroid.template = function (file) {
|
|
||||||
var templates = this._templates || (this._templates = {});
|
|
||||||
var str = templates[file] || (templates[file] = fs.readFileSync(file, 'utf8'));
|
|
||||||
return ejs.compile(str);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get an in-memory data source. Use one if it already exists.
|
|
||||||
*
|
|
||||||
* @param {String} [name] The name of the data source. If not provided, the `'default'` is used.
|
|
||||||
*/
|
|
||||||
|
|
||||||
asteroid.memory = function (name) {
|
|
||||||
name = name || 'default';
|
|
||||||
var memory = (
|
|
||||||
this._memoryDataSources
|
|
||||||
|| (this._memoryDataSources = {})
|
|
||||||
)[name];
|
|
||||||
|
|
||||||
if(!memory) {
|
|
||||||
memory = this._memoryDataSources[name] = asteroid.createDataSource({
|
|
||||||
connector: asteroid.Memory
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return memory;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Built in models / services
|
|
||||||
*/
|
|
||||||
|
|
||||||
asteroid.Model = require('./models/model');
|
|
||||||
asteroid.Email = require('./models/email');
|
|
||||||
asteroid.User = require('./models/user');
|
|
||||||
asteroid.Session = require('./models/session');
|
|
|
@ -2,7 +2,7 @@
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var asteroid = require('../asteroid')
|
var loopback = require('../loopback')
|
||||||
, passport = require('passport');
|
, passport = require('passport');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -17,13 +17,13 @@ module.exports = auth;
|
||||||
|
|
||||||
function auth() {
|
function auth() {
|
||||||
return function (req, res, next) {
|
return function (req, res, next) {
|
||||||
var sub = asteroid();
|
var sub = loopback();
|
||||||
|
|
||||||
// TODO clean this up
|
// TODO clean this up
|
||||||
sub._models = req.app._models;
|
sub._models = req.app._models;
|
||||||
sub._remotes = req.app._remotes;
|
sub._remotes = req.app._remotes;
|
||||||
|
|
||||||
sub.use(asteroid.session({secret: 'change me'}))
|
sub.use(loopback.session({secret: 'change me'}))
|
||||||
sub.use(passport.initialize());
|
sub.use(passport.initialize());
|
||||||
sub.use(passport.session());
|
sub.use(passport.session());
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var asteroid = require('../asteroid');
|
var loopback = require('../loopback');
|
||||||
var RemoteObjects = require('sl-remoting');
|
var RemoteObjects = require('sl-remoting');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
* Module Dependencies.
|
* Module Dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var Model = require('../asteroid').Model
|
var Model = require('../loopback').Model
|
||||||
, asteroid = require('../asteroid')
|
, loopback = require('../loopback')
|
||||||
, mailer = require("nodemailer");
|
, mailer = require("nodemailer");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -19,7 +19,7 @@ var properties = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extends from the built in `asteroid.Model` type.
|
* Extends from the built in `loopback.Model` type.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var Email = module.exports = Model.extend('email', properties);
|
var Email = module.exports = Model.extend('email', properties);
|
||||||
|
|
|
@ -6,7 +6,7 @@ var ModelBuilder = require('jugglingdb').ModelBuilder;
|
||||||
var modeler = new ModelBuilder();
|
var modeler = new ModelBuilder();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define the built in asteroid.Model.
|
* Define the built in loopback.Model.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var Model = module.exports = modeler.define('model');
|
var Model = module.exports = modeler.define('model');
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
* Module Dependencies.
|
* Module Dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var Model = require('../asteroid').Model
|
var Model = require('../loopback').Model
|
||||||
, asteroid = require('../asteroid')
|
, loopback = require('../loopback')
|
||||||
, crypto = require('crypto');
|
, crypto = require('crypto');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -17,7 +17,7 @@ var properties = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extends from the built in `asteroid.Model` type.
|
* Extends from the built in `loopback.Model` type.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var Session = module.exports = Model.extend('session', properties);
|
var Session = module.exports = Model.extend('session', properties);
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
* Module Dependencies.
|
* Module Dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var Model = require('../asteroid').Model
|
var Model = require('../loopback').Model
|
||||||
, asteroid = require('../asteroid')
|
, loopback = require('../loopback')
|
||||||
, path = require('path')
|
, path = require('path')
|
||||||
, SALT_WORK_FACTOR = 10
|
, SALT_WORK_FACTOR = 10
|
||||||
, crypto = require('crypto')
|
, crypto = require('crypto')
|
||||||
|
@ -41,7 +41,7 @@ var properties = {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extends from the built in `asteroid.Model` type.
|
* Extends from the built in `loopback.Model` type.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var User = module.exports = Model.extend('user', properties);
|
var User = module.exports = Model.extend('user', properties);
|
||||||
|
@ -114,7 +114,7 @@ User.login = function (credentials, fn) {
|
||||||
User.logout = function (sid, fn) {
|
User.logout = function (sid, fn) {
|
||||||
var UserCtor = this;
|
var UserCtor = this;
|
||||||
|
|
||||||
var Session = UserCtor.settings.session || asteroid.Session;
|
var Session = UserCtor.settings.session || loopback.Session;
|
||||||
|
|
||||||
Session.findById(sid, function (err, session) {
|
Session.findById(sid, function (err, session) {
|
||||||
if(err) {
|
if(err) {
|
||||||
|
@ -183,7 +183,7 @@ User.prototype.verify = function (options, fn) {
|
||||||
|
|
||||||
|
|
||||||
// Email model
|
// Email model
|
||||||
var Email = options.mailer || this.constructor.email || asteroid.Email;
|
var Email = options.mailer || this.constructor.email || loopback.Email;
|
||||||
|
|
||||||
crypto.randomBytes(64, function(err, buf) {
|
crypto.randomBytes(64, function(err, buf) {
|
||||||
if(err) {
|
if(err) {
|
||||||
|
@ -208,7 +208,7 @@ User.prototype.verify = function (options, fn) {
|
||||||
|
|
||||||
options.text = options.text.replace('{href}', options.verifyHref);
|
options.text = options.text.replace('{href}', options.verifyHref);
|
||||||
|
|
||||||
var template = asteroid.template(options.template);
|
var template = loopback.template(options.template);
|
||||||
Email.send({
|
Email.send({
|
||||||
to: options.to || user.email,
|
to: options.to || user.email,
|
||||||
subject: options.subject || 'Thanks for Registering',
|
subject: options.subject || 'Thanks for Registering',
|
||||||
|
@ -257,7 +257,7 @@ User.setup = function () {
|
||||||
this._password = bcrypt.hashSync(plain, salt);
|
this._password = bcrypt.hashSync(plain, salt);
|
||||||
}
|
}
|
||||||
|
|
||||||
asteroid.remoteMethod(
|
loopback.remoteMethod(
|
||||||
UserModel.login,
|
UserModel.login,
|
||||||
{
|
{
|
||||||
accepts: [
|
accepts: [
|
||||||
|
@ -268,7 +268,7 @@ User.setup = function () {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
asteroid.remoteMethod(
|
loopback.remoteMethod(
|
||||||
UserModel.logout,
|
UserModel.logout,
|
||||||
{
|
{
|
||||||
accepts: [
|
accepts: [
|
||||||
|
@ -278,7 +278,7 @@ User.setup = function () {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
asteroid.remoteMethod(
|
loopback.remoteMethod(
|
||||||
UserModel.confirm,
|
UserModel.confirm,
|
||||||
{
|
{
|
||||||
accepts: [
|
accepts: [
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "asteroid",
|
"name": "loopback",
|
||||||
"description": "asteroid",
|
"description": "loopback",
|
||||||
"version": "0.9.0",
|
"version": "0.9.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "mocha -R spec"
|
"test": "mocha -R spec"
|
||||||
|
|
|
@ -2,10 +2,10 @@
|
||||||
- [app](#app)
|
- [app](#app)
|
||||||
- [app.model(Model)](#app-appmodelmodel)
|
- [app.model(Model)](#app-appmodelmodel)
|
||||||
- [app.models()](#app-appmodels)
|
- [app.models()](#app-appmodels)
|
||||||
- [asteroid](#asteroid)
|
- [loopback](#loopback)
|
||||||
- [asteroid.createDataSource(options)](#asteroid-asteroidcreatedatasourceoptions)
|
- [loopback.createDataSource(options)](#loopback-loopbackcreatedatasourceoptions)
|
||||||
- [asteroid.remoteMethod(Model, fn, [options]);](#asteroid-asteroidremotemethodmodel-fn-options)
|
- [loopback.remoteMethod(Model, fn, [options]);](#loopback-loopbackremotemethodmodel-fn-options)
|
||||||
- [asteroid.memory([name])](#asteroid-asteroidmemoryname)
|
- [loopback.memory([name])](#loopback-loopbackmemoryname)
|
||||||
- [DataSource](#datasource)
|
- [DataSource](#datasource)
|
||||||
- [dataSource.createModel(name, properties, settings)](#datasource-datasourcecreatemodelname-properties-settings)
|
- [dataSource.createModel(name, properties, settings)](#datasource-datasourcecreatemodelname-properties-settings)
|
||||||
- [dataSource.operations()](#datasource-datasourceoperations)
|
- [dataSource.operations()](#datasource-datasourceoperations)
|
||||||
|
@ -56,7 +56,7 @@
|
||||||
Expose a `Model` to remote clients..
|
Expose a `Model` to remote clients..
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var memory = asteroid.createDataSource({connector: asteroid.Memory});
|
var memory = loopback.createDataSource({connector: loopback.Memory});
|
||||||
var Color = memory.createModel('color', {name: String});
|
var Color = memory.createModel('color', {name: String});
|
||||||
app.model(Color);
|
app.model(Color);
|
||||||
assert.equal(app.models().length, 1);
|
assert.equal(app.models().length, 1);
|
||||||
|
@ -67,38 +67,38 @@ assert.equal(app.models().length, 1);
|
||||||
Get the app's exposed models..
|
Get the app's exposed models..
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var Color = asteroid.createModel('color', {name: String});
|
var Color = loopback.createModel('color', {name: String});
|
||||||
var models = app.models();
|
var models = app.models();
|
||||||
|
|
||||||
assert.equal(models.length, 1);
|
assert.equal(models.length, 1);
|
||||||
assert.equal(models[0].modelName, 'color');
|
assert.equal(models[0].modelName, 'color');
|
||||||
```
|
```
|
||||||
|
|
||||||
<a name="asteroid"></a>
|
<a name="loopback"></a>
|
||||||
# asteroid
|
# loopback
|
||||||
<a name="asteroid-asteroidcreatedatasourceoptions"></a>
|
<a name="loopback-loopbackcreatedatasourceoptions"></a>
|
||||||
## asteroid.createDataSource(options)
|
## loopback.createDataSource(options)
|
||||||
Create a data source with a connector..
|
Create a data source with a connector..
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var dataSource = asteroid.createDataSource({
|
var dataSource = loopback.createDataSource({
|
||||||
connector: asteroid.Memory
|
connector: loopback.Memory
|
||||||
});
|
});
|
||||||
assert(dataSource.connector());
|
assert(dataSource.connector());
|
||||||
```
|
```
|
||||||
|
|
||||||
<a name="asteroid-asteroidremotemethodmodel-fn-options"></a>
|
<a name="loopback-loopbackremotemethodmodel-fn-options"></a>
|
||||||
## asteroid.remoteMethod(Model, fn, [options]);
|
## loopback.remoteMethod(Model, fn, [options]);
|
||||||
Setup a remote method..
|
Setup a remote method..
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var Product = asteroid.createModel('product', {price: Number});
|
var Product = loopback.createModel('product', {price: Number});
|
||||||
|
|
||||||
Product.stats = function(fn) {
|
Product.stats = function(fn) {
|
||||||
// ...
|
// ...
|
||||||
}
|
}
|
||||||
|
|
||||||
asteroid.remoteMethod(
|
loopback.remoteMethod(
|
||||||
Product.stats,
|
Product.stats,
|
||||||
{
|
{
|
||||||
returns: {arg: 'stats', type: 'array'},
|
returns: {arg: 'stats', type: 'array'},
|
||||||
|
@ -113,16 +113,16 @@ assert.equal(Product.stats.http.verb, 'get');
|
||||||
assert.equal(Product.stats.shared, true);
|
assert.equal(Product.stats.shared, true);
|
||||||
```
|
```
|
||||||
|
|
||||||
<a name="asteroid-asteroidmemoryname"></a>
|
<a name="loopback-loopbackmemoryname"></a>
|
||||||
## asteroid.memory([name])
|
## loopback.memory([name])
|
||||||
Get an in-memory data source. Use one if it already exists..
|
Get an in-memory data source. Use one if it already exists..
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var memory = asteroid.memory();
|
var memory = loopback.memory();
|
||||||
assertValidDataSource(memory);
|
assertValidDataSource(memory);
|
||||||
var m1 = asteroid.memory();
|
var m1 = loopback.memory();
|
||||||
var m2 = asteroid.memory('m2');
|
var m2 = loopback.memory('m2');
|
||||||
var alsoM2 = asteroid.memory('m2');
|
var alsoM2 = loopback.memory('m2');
|
||||||
|
|
||||||
assert(m1 === memory);
|
assert(m1 === memory);
|
||||||
assert(m1 !== m2);
|
assert(m1 !== m2);
|
||||||
|
@ -257,7 +257,7 @@ assert.equal(point.lat, 6.777);
|
||||||
Create as Model property.
|
Create as Model property.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var Model = asteroid.createModel('geo-model', {
|
var Model = loopback.createModel('geo-model', {
|
||||||
geo: {type: 'GeoPoint'}
|
geo: {type: 'GeoPoint'}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -385,7 +385,7 @@ user.isValid(function (valid) {
|
||||||
Attach a model to a [DataSource](#data-source).
|
Attach a model to a [DataSource](#data-source).
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var MyModel = asteroid.createModel('my-model', {name: String});
|
var MyModel = loopback.createModel('my-model', {name: String});
|
||||||
|
|
||||||
assert(MyModel.find === undefined, 'should not have data access methods');
|
assert(MyModel.find === undefined, 'should not have data access methods');
|
||||||
|
|
||||||
|
@ -706,7 +706,7 @@ Book.create({title: 'Into the Wild', author: 'Jon Krakauer'}, function(err, book
|
||||||
|
|
||||||
<a name="model-modelproperties"></a>
|
<a name="model-modelproperties"></a>
|
||||||
## Model.properties
|
## Model.properties
|
||||||
Normalized properties passed in originally by asteroid.createModel()..
|
Normalized properties passed in originally by loopback.createModel()..
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var props = {
|
var props = {
|
||||||
|
@ -714,10 +714,10 @@ var props = {
|
||||||
n: {type: 'Number'},
|
n: {type: 'Number'},
|
||||||
o: {type: 'String', min: 10, max: 100},
|
o: {type: 'String', min: 10, max: 100},
|
||||||
d: Date,
|
d: Date,
|
||||||
g: asteroid.GeoPoint
|
g: loopback.GeoPoint
|
||||||
};
|
};
|
||||||
|
|
||||||
var MyModel = asteroid.createModel('foo', props);
|
var MyModel = loopback.createModel('foo', props);
|
||||||
|
|
||||||
Object.keys(MyModel.properties).forEach(function (key) {
|
Object.keys(MyModel.properties).forEach(function (key) {
|
||||||
var p = MyModel.properties[key];
|
var p = MyModel.properties[key];
|
||||||
|
@ -743,7 +743,7 @@ Object.keys(MyModel.properties).forEach(function (key) {
|
||||||
Create a new model by extending an existing model..
|
Create a new model by extending an existing model..
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var User = asteroid.Model.extend('test-user', {
|
var User = loopback.Model.extend('test-user', {
|
||||||
email: String
|
email: String
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ describe('app', function() {
|
||||||
|
|
||||||
describe('app.model(Model)', function() {
|
describe('app.model(Model)', function() {
|
||||||
it("Expose a `Model` to remote clients.", function() {
|
it("Expose a `Model` to remote clients.", function() {
|
||||||
var memory = asteroid.createDataSource({connector: asteroid.Memory});
|
var memory = loopback.createDataSource({connector: loopback.Memory});
|
||||||
var Color = memory.createModel('color', {name: String});
|
var Color = memory.createModel('color', {name: String});
|
||||||
app.model(Color);
|
app.model(Color);
|
||||||
assert.equal(app.models().length, 1);
|
assert.equal(app.models().length, 1);
|
||||||
|
@ -11,7 +11,7 @@ describe('app', function() {
|
||||||
|
|
||||||
describe('app.models()', function() {
|
describe('app.models()', function() {
|
||||||
it("Get the app's exposed models.", function() {
|
it("Get the app's exposed models.", function() {
|
||||||
var Color = asteroid.createModel('color', {name: String});
|
var Color = loopback.createModel('color', {name: String});
|
||||||
var models = app.models();
|
var models = app.models();
|
||||||
|
|
||||||
assert.equal(models.length, 1);
|
assert.equal(models.length, 1);
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
describe('asteroid', function() {
|
|
||||||
describe('asteroid.createDataSource(options)', function(){
|
|
||||||
it('Create a data source with a connector.', function() {
|
|
||||||
var dataSource = asteroid.createDataSource({
|
|
||||||
connector: asteroid.Memory
|
|
||||||
});
|
|
||||||
assert(dataSource.connector());
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('asteroid.remoteMethod(Model, fn, [options]);', function() {
|
|
||||||
it("Setup a remote method.", function() {
|
|
||||||
var Product = asteroid.createModel('product', {price: Number});
|
|
||||||
|
|
||||||
Product.stats = function(fn) {
|
|
||||||
// ...
|
|
||||||
}
|
|
||||||
|
|
||||||
asteroid.remoteMethod(
|
|
||||||
Product.stats,
|
|
||||||
{
|
|
||||||
returns: {arg: 'stats', type: 'array'},
|
|
||||||
http: {path: '/info', verb: 'get'}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
assert.equal(Product.stats.returns.arg, 'stats');
|
|
||||||
assert.equal(Product.stats.returns.type, 'array');
|
|
||||||
assert.equal(Product.stats.http.path, '/info');
|
|
||||||
assert.equal(Product.stats.http.verb, 'get');
|
|
||||||
assert.equal(Product.stats.shared, true);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('asteroid.memory([name])', function(){
|
|
||||||
it('Get an in-memory data source. Use one if it already exists.', function() {
|
|
||||||
var memory = asteroid.memory();
|
|
||||||
assertValidDataSource(memory);
|
|
||||||
var m1 = asteroid.memory();
|
|
||||||
var m2 = asteroid.memory('m2');
|
|
||||||
var alsoM2 = asteroid.memory('m2');
|
|
||||||
|
|
||||||
assert(m1 === memory);
|
|
||||||
assert(m1 !== m2);
|
|
||||||
assert(alsoM2 === m2);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -2,8 +2,8 @@ describe('DataSource', function() {
|
||||||
var memory;
|
var memory;
|
||||||
|
|
||||||
beforeEach(function(){
|
beforeEach(function(){
|
||||||
memory = asteroid.createDataSource({
|
memory = loopback.createDataSource({
|
||||||
connector: asteroid.Memory
|
connector: loopback.Memory
|
||||||
});
|
});
|
||||||
|
|
||||||
assertValidDataSource(memory);
|
assertValidDataSource(memory);
|
||||||
|
|
|
@ -40,7 +40,7 @@ describe('GeoPoint', function() {
|
||||||
assert.equal(point.lat, 6.777);
|
assert.equal(point.lat, 6.777);
|
||||||
});
|
});
|
||||||
it('Create as Model property', function() {
|
it('Create as Model property', function() {
|
||||||
var Model = asteroid.createModel('geo-model', {
|
var Model = loopback.createModel('geo-model', {
|
||||||
geo: {type: 'GeoPoint'}
|
geo: {type: 'GeoPoint'}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ describe('Model', function() {
|
||||||
var User, memory;
|
var User, memory;
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
memory = asteroid.createDataSource({connector: asteroid.Memory});
|
memory = loopback.createDataSource({connector: loopback.Memory});
|
||||||
User = memory.createModel('user', {
|
User = memory.createModel('user', {
|
||||||
'first': String,
|
'first': String,
|
||||||
'last': String,
|
'last': String,
|
||||||
|
@ -109,7 +109,7 @@ describe('Model', function() {
|
||||||
|
|
||||||
describe('Model.attachTo(dataSource)', function() {
|
describe('Model.attachTo(dataSource)', function() {
|
||||||
it("Attach a model to a [DataSource](#data-source)", function() {
|
it("Attach a model to a [DataSource](#data-source)", function() {
|
||||||
var MyModel = asteroid.createModel('my-model', {name: String});
|
var MyModel = loopback.createModel('my-model', {name: String});
|
||||||
|
|
||||||
assert(MyModel.find === undefined, 'should not have data access methods');
|
assert(MyModel.find === undefined, 'should not have data access methods');
|
||||||
|
|
||||||
|
@ -254,7 +254,7 @@ describe('Model', function() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
asteroid.remoteMethod(
|
loopback.remoteMethod(
|
||||||
User.login,
|
User.login,
|
||||||
{
|
{
|
||||||
accepts: [
|
accepts: [
|
||||||
|
@ -266,7 +266,7 @@ describe('Model', function() {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
app.use(asteroid.rest());
|
app.use(loopback.rest());
|
||||||
app.model(User);
|
app.model(User);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -433,16 +433,16 @@ describe('Model', function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Model.properties', function(){
|
describe('Model.properties', function(){
|
||||||
it('Normalized properties passed in originally by asteroid.createModel().', function() {
|
it('Normalized properties passed in originally by loopback.createModel().', function() {
|
||||||
var props = {
|
var props = {
|
||||||
s: String,
|
s: String,
|
||||||
n: {type: 'Number'},
|
n: {type: 'Number'},
|
||||||
o: {type: 'String', min: 10, max: 100},
|
o: {type: 'String', min: 10, max: 100},
|
||||||
d: Date,
|
d: Date,
|
||||||
g: asteroid.GeoPoint
|
g: loopback.GeoPoint
|
||||||
};
|
};
|
||||||
|
|
||||||
var MyModel = asteroid.createModel('foo', props);
|
var MyModel = loopback.createModel('foo', props);
|
||||||
|
|
||||||
Object.keys(MyModel.properties).forEach(function (key) {
|
Object.keys(MyModel.properties).forEach(function (key) {
|
||||||
var p = MyModel.properties[key];
|
var p = MyModel.properties[key];
|
||||||
|
@ -466,7 +466,7 @@ describe('Model', function() {
|
||||||
|
|
||||||
describe('Model.extend()', function(){
|
describe('Model.extend()', function(){
|
||||||
it('Create a new model by extending an existing model.', function() {
|
it('Create a new model by extending an existing model.', function() {
|
||||||
var User = asteroid.Model.extend('test-user', {
|
var User = loopback.Model.extend('test-user', {
|
||||||
email: String
|
email: String
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -531,7 +531,7 @@ describe('Model', function() {
|
||||||
// },
|
// },
|
||||||
// ...
|
// ...
|
||||||
// }
|
// }
|
||||||
// var oracle = asteroid.createDataSource({
|
// var oracle = loopback.createDataSource({
|
||||||
// connector: 'oracle',
|
// connector: 'oracle',
|
||||||
// host: '111.22.333.44',
|
// host: '111.22.333.44',
|
||||||
// database: 'MYDB',
|
// database: 'MYDB',
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
/**
|
/**
|
||||||
* asteroid test setup and support.
|
* loopback test setup and support.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
assert = require('assert');
|
assert = require('assert');
|
||||||
asteroid = require('../');
|
loopback = require('../');
|
||||||
memoryConnector = asteroid.Memory;
|
memoryConnector = loopback.Memory;
|
||||||
GeoPoint = asteroid.GeoPoint;
|
GeoPoint = loopback.GeoPoint;
|
||||||
app = null;
|
app = null;
|
||||||
TaskEmitter = require('sl-task-emitter');
|
TaskEmitter = require('sl-task-emitter');
|
||||||
request = require('supertest');
|
request = require('supertest');
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
app = asteroid();
|
app = loopback();
|
||||||
});
|
});
|
||||||
|
|
||||||
assertValidDataSource = function (dataSource) {
|
assertValidDataSource = function (dataSource) {
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
var User = asteroid.User.extend('user');
|
var User = loopback.User.extend('user');
|
||||||
var Session = asteroid.Session;
|
var Session = loopback.Session;
|
||||||
var passport = require('passport');
|
var passport = require('passport');
|
||||||
|
|
||||||
var userMemory = asteroid.createDataSource({
|
var userMemory = loopback.createDataSource({
|
||||||
connector: asteroid.Memory
|
connector: loopback.Memory
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,9 +17,9 @@ describe('User', function(){
|
||||||
User.setMaxListeners(22);
|
User.setMaxListeners(22);
|
||||||
|
|
||||||
beforeEach(function (done) {
|
beforeEach(function (done) {
|
||||||
app.use(asteroid.cookieParser());
|
app.use(loopback.cookieParser());
|
||||||
app.use(asteroid.auth());
|
app.use(loopback.auth());
|
||||||
app.use(asteroid.rest());
|
app.use(loopback.rest());
|
||||||
app.model(User);
|
app.model(User);
|
||||||
|
|
||||||
User.create({email: 'foo@bar.com', password: 'bar'}, done);
|
User.create({email: 'foo@bar.com', password: 'bar'}, done);
|
||||||
|
|
Loading…
Reference in New Issue