Readme: Clean up of code formatting, some grammar fixes, added UsergridQuery
diff --git a/README.md b/README.md
index 3a7e640..efc0ce2 100644
--- a/README.md
+++ b/README.md
@@ -53,172 +53,190 @@
1. The singleton pattern is both convenient and enables the developer to use a globally available and always-initialized shared instance of Usergrid.
- var Usergrid = require('usergrid')
- Usergrid.init({
- orgId: '<org-id>',
- appId: '<app-id>'
- })
+ ```js
+ var Usergrid = require('usergrid')
+ Usergrid.init({
+ orgId: '<org-id>',
+ appId: '<app-id>'
+ })
- // or you can load from a config file; see config.sample.json
+ // or you can load from a config file; see config.sample.json
- var Usergrid = require('usergrid')
- Usergrid.init() // defaults to use config.json
+ var Usergrid = require('usergrid')
+ Usergrid.init() // defaults to use config.json
+ ```
2. The instance pattern enables the developer to manage instances of the Usergrid client independently and in an isolated fashion. The primary use-case for this is when an application connects to multiple Usergrid targets.
- var UsergridClient = require('./node_modules/usergrid/lib/client')
- var client = new UsergridClient(config)
+ ```js
+ var UsergridClient = require('./node_modules/usergrid/lib/client')
+ var client = new UsergridClient(config)
+ ```
_**Note:** Examples in this readme assume you are using the `Usergrid` shared instance. If you've implemented the instance pattern instead, simply replace `Usergrid` with your client instance variable. See `/tests` for additional examples._
## RESTful operations
-When making any RESTful call, a `type` parameter (or `path`) is always required. Whether you specify this as an argument or in an object as a parameter is up to you.
+When making any RESTful call, a `type` parameter (or `path`) is always required. Whether you specify this as an argument, in an object as a parameter, or as part of a `UsergridQuery` object is up to you.
### GET()
-**GET entities in a collection**
+To get entities in a collection:
- Usergrid.GET('collection', function(error, usergridResponse, entities) {
- // entities is an array of UsergridEntity objects
- })
+```js
+Usergrid.GET('collection', function(error, usergridResponse, entities) {
+ // entities is an array of UsergridEntity objects
+})
+```
-**GET a specific entity in a collection by uuid or name**
+To get a specific entity in a collection by uuid or name:
- Usergrid.GET('collection', '<uuid-or-name>', function(error, usergridResponse, entity) {
- // entity, if found, is a UsergridEntity object
- })
+```js
+Usergrid.GET('collection', '<uuid-or-name>', function(error, usergridResponse, entity) {
+ // entity, if found, is a UsergridEntity object
+})
+```
-**GET specific entities in a collection by passing a UsergridQuery object**
+To get specific entities in a collection by passing a UsergridQuery object:
- var query = new UsergridQuery('cats')
- .gt('weight', 2.4)
- .contains('color', 'bl*')
- .not
- .eq('color', 'blue')
- .or
- .eq('color', 'orange')
-
- // this will build out the following query:
- // select * where weight > 2.4 and color contains 'bl*' and not color = 'blue' or color = 'orange'
+```js
+var query = new UsergridQuery('cats')
+ .gt('weight', 2.4)
+ .contains('color', 'bl*')
+ .not
+ .eq('color', 'blue')
+ .or
+ .eq('color', 'orange')
+
+// this will build out the following query:
+// select * where weight > 2.4 and color contains 'bl*' and not color = 'blue' or color = 'orange'
- Usergrid.GET(query, function(error, usergridResponse) {
- // entities is an array of UsergridEntity objects matching the specified query
- })
+Usergrid.GET(query, function(error, usergridResponse) {
+ // entities is an array of UsergridEntity objects matching the specified query
+})
+```
### POST() and PUT()
POST and PUT requests both require a JSON body payload. You can pass either a standard JavaScript object or a `UsergridEntity` instance. While the former works in principle, best practise is to use a `UsergridEntity` wherever practical. When an entity has a uuid or name property and already exists on the server, use a PUT request to update it. If it does not, use POST to create it.
-**POST (create) a new entity in a collection**
+To create a new entity in a collection (POST):
- var entity = new UsergridEntity({
+```js
+var entity = new UsergridEntity({
+ type: 'restaurant',
+ restaurant: 'Dino's Deep Dish,
+ cuisine: 'pizza'
+})
+
+// or
+
+var entity = {
+ type: 'restaurant',
+ restaurant: 'Dino's Deep Dish,
+ cuisine: 'pizza'
+}
+
+Usergrid.POST(entity, function(error, usergridResponse, entity) {
+ // entity should now have a uuid property and be created
+})
+
+// you can also POST an array of entities:
+
+var entities = [
+ new UsergridEntity({
type: 'restaurant',
restaurant: 'Dino's Deep Dish,
cuisine: 'pizza'
- })
-
- // or
-
- var entity = {
- type: 'restaurant',
- restaurant: 'Dino's Deep Dish,
- cuisine: 'pizza'
- }
-
- Usergrid.POST(entity, function(error, usergridResponse, entity) {
- // entity should now have a uuid property and be created
- })
-
- // you can also POST an array of entities:
-
- var entities = [
- new UsergridEntity({
- type: 'restaurant',
- restaurant: 'Dino's Deep Dish,
- cuisine: 'pizza'
- }),
- new UsergridEntity({
- type: 'restaurant',
- restaurant: 'Pizza da Napoli',
- cuisine: 'pizza'
- })
- ]
-
- Usergrid.POST(entities, function(error, usergridResponse, entities) {
- //
- })
-
-**PUT (update) an entity in a collection**
-
- var entity = new UsergridEntity({
+ }),
+ new UsergridEntity({
type: 'restaurant',
restaurant: 'Pizza da Napoli',
cuisine: 'pizza'
})
+]
- Usergrid.POST(entity, function(error, usergridResponse, entity) {
- entity.owner = 'Mia Carrara'
- Usergrid.PUT(entity, function(error, usergridResponse, entity) {
- // entity now has the property 'owner'
- })
+Usergrid.POST(entities, function(error, usergridResponse, entities) {
+ //
+})
+```
+
+To update an entity in a collection (PUT request):
+
+```js
+var entity = new UsergridEntity({
+ type: 'restaurant',
+ restaurant: 'Pizza da Napoli',
+ cuisine: 'pizza'
+})
+
+Usergrid.POST(entity, function(error, usergridResponse, entity) {
+ entity.owner = 'Mia Carrara'
+ Usergrid.PUT(entity, function(error, usergridResponse, entity) {
+ // entity now has the property 'owner'
})
+})
- // or update a set of entities by passing a UsergridQuery object
+// or update a set of entities by passing a UsergridQuery object
- var query = new UsergridQuery('restaurants')
- .eq('cuisine', 'italian')
-
- // this will build out the following query:
- // select * where cuisine = 'italian'
+var query = new UsergridQuery('restaurants')
+ .eq('cuisine', 'italian')
+
+// this will build out the following query:
+// select * where cuisine = 'italian'
- Usergrid.PUT(query, { keywords: ['pasta'] }, function(error, usergridResponse) {
- /* the first 10 entities matching this query criteria will be updated:
- e.g.:
- [
- {
- "type": "restaurant",
- "restaurant": "Il Tarazzo",
- "cuisine": "italian",
- "keywords": [
- "pasta"
- ]
- },
- {
- "type": "restaurant",
- "restaurant": "Cono Sur Pizza & Pasta",
- "cuisine": "italian",
- "keywords": [
- "pasta"
- ]
- }
- ]
- /*
- })
+Usergrid.PUT(query, { keywords: ['pasta'] }, function(error, usergridResponse) {
+ /* the first 10 entities matching this query criteria will be updated:
+ e.g.:
+ [
+ {
+ "type": "restaurant",
+ "restaurant": "Il Tarazzo",
+ "cuisine": "italian",
+ "keywords": [
+ "pasta"
+ ]
+ },
+ {
+ "type": "restaurant",
+ "restaurant": "Cono Sur Pizza & Pasta",
+ "cuisine": "italian",
+ "keywords": [
+ "pasta"
+ ]
+ }
+ ]
+ /*
+})
+```
### DELETE()
DELETE requests require either a specific entity or a `UsergridQuery` object to be passed as an argument.
-**DELETE a specific entity in a collection by uuid or name**
+To delete a specific entity in a collection by uuid or name:
- Usergrid.DELETE('collection', '<uuid-or-name>', function(error, usergridResponse) {
- // if successful, entity will now be deleted
- })
+```js
+Usergrid.DELETE('collection', '<uuid-or-name>', function(error, usergridResponse) {
+ // if successful, entity will now be deleted
+})
+```
-**DELETE specific entities in a collection by passing a UsergridQuery object**
+To specific entities in a collection by passing a `UsergridQuery` object:
- var query = new UsergridQuery('cats')
- .eq('color', 'black')
- .or
- .eq('color', 'white')
-
- // this will build out the following query:
- // select * where color = 'black' or color = 'white'
+```js
+var query = new UsergridQuery('cats')
+ .eq('color', 'black')
+ .or
+ .eq('color', 'white')
+
+// this will build out the following query:
+// select * where color = 'black' or color = 'white'
- Usergrid.DELETE(query, function(error, usergridResponse) {
- // the first 10 entities matching this query criteria will be deleted
- })
+Usergrid.DELETE(query, function(error, usergridResponse) {
+ // the first 10 entities matching this query criteria will be deleted
+})
+```
## Entity operations and convenience methods
@@ -226,22 +244,34 @@
### reload()
- entity.reload(function(error, usergridResponse) {
- // entity is now reloaded from the server
- })
+Reloads the entity from the server
+
+```js
+entity.reload(function(error, usergridResponse) {
+ // entity is now reloaded from the server
+})
+```
### save()
- entity.aNewProperty = 'A new value'
- entity.save(function(error, usergridResponse) {
- // entity is now updated on the server
- })
+Saves (or creates) the entity on the server
+
+```js
+entity.aNewProperty = 'A new value'
+entity.save(function(error, usergridResponse) {
+ // entity is now updated on the server
+})
+```
### remove()
- entity.remove(function(error, usergridResponse) {
- // entity is now deleted on the server and the local instance should be destroyed
- })
+Deletes the entity from the server
+
+```js
+entity.remove(function(error, usergridResponse) {
+ // entity is now deleted on the server and the local instance should be destroyed
+})
+```
## Authentication, current user, and auth-fallback
@@ -249,10 +279,12 @@
`Usergrid` can use the app client ID and secret that were passed upon initialization and automatically retrieve an app-level token for these credentials.
- Usergrid.setAppAuth('<client-id>', '<client-secret>')
- Usergrid.authenticateApp(function(error, usergridResponse, token) {
- // Usergrid.appAuth is created automatically when this call is successful
- })
+```js
+Usergrid.setAppAuth('<client-id>', '<client-secret>')
+Usergrid.authenticateApp(function(error, usergridResponse, token) {
+ // Usergrid.appAuth is created automatically when this call is successful
+})
+```
### authFallback
@@ -262,36 +294,42 @@
At times it is desireable to have complete, granular control over the authentication context of an API call. To facilitate this, the passthrough function `.usingAuth()` allows you to pre-define the auth context of the next API call.
- // assume Usergrid.authFallback = UsergridAuth.AUTH_FALLBACK_NONE
+```js
+// assume Usergrid.authFallback = UsergridAuth.AUTH_FALLBACK_NONE
- Usergrid.usingAuth(Usergrid.appAuth).POST('roles/guest/permissions', {
- permission: "get,post,put,delete:/**"
- }, function(error, usergridResponse) {
- // here we've temporarily used the client credentials to modify permissions
- // subsequent calls will not use this auth context
- })
+Usergrid.usingAuth(Usergrid.appAuth).POST('roles/guest/permissions', {
+ permission: "get,post,put,delete:/**"
+}, function(error, usergridResponse) {
+ // here we've temporarily used the client credentials to modify permissions
+ // subsequent calls will not use this auth context
+})
+```
### currentUser and authenticateUser()
`Usergrid` has a special `currentUser` property. By default, when calling `authenticateUser()`, `.currentUser` will be set to this user if the authentication flow is successful.
- Usergrid.authenticateUser({
- username: '<username>',
- email: '<email-address>', // either username or email is required
- password: '<password>'
- }, function(error, usergridResponse, token) {
- // Usergrid.currentUser is set to the authenticated user and the token is stored within that context
- })
+```js
+Usergrid.authenticateUser({
+ username: '<username>',
+ email: '<email-address>', // either username or email is required
+ password: '<password>'
+}, function(error, usergridResponse, token) {
+ // Usergrid.currentUser is set to the authenticated user and the token is stored within that context
+})
+```
If you want to utilize authenticateUser without setting as the current user, simply pass a `false` boolean value as the second parameter:
- Usergrid.authenticateUser({
- username: '<username>',
- email: '<email-address>', // either username or email is required
- password: '<password>'
- }, false, function(error, usergridResponse, token) {
+```js
+Usergrid.authenticateUser({
+ username: '<username>',
+ email: '<email-address>', // either username or email is required
+ password: '<password>'
+}, false, function(error, usergridResponse, token) {
- })
+})
+```
## User operations and convenience methods
@@ -301,78 +339,258 @@
Creating a new user:
- var user = new UsergridUser({
- username: 'username',
- password: 'password'
- })
+```js
+var user = new UsergridUser({
+ username: 'username',
+ password: 'password'
+})
- user.create(function(error, usergridResponse, user) {
- // user has now been created and should have a valid uuid
- })
+user.create(function(error, usergridResponse, user) {
+ // user has now been created and should have a valid uuid
+})
+```
### login()
A simpler means of retrieving a user-level token:
- var user = new UsergridUser({
- username: 'username',
- password: 'password'
- })
+```js
+var user = new UsergridUser({
+ username: 'username',
+ password: 'password'
+})
- user.login(function(error, usergridResponse, token) {
- // user is now logged in
- })
+user.login(function(error, usergridResponse, token) {
+ // user is now logged in
+})
+```
### logout()
Logs out the selected user. You can also use this convenience method on `Usergrid.currentUser`.
- user.logout(function(error, usergridResponse) {
- // user is now logged out
- })
+```js
+user.logout(function(error, usergridResponse) {
+ // user is now logged out
+})
+```
### logoutAllSessions()
Logs out all sessions for the selected user and destroys all active tokens. You can also use this convenience method on `Usergrid.currentUser`.
- user.logoutAllSessions(function(error, usergridResponse) {
- // user is now logged out from everywhere
- })
+```js
+user.logoutAllSessions(function(error, usergridResponse) {
+ // user is now logged out from everywhere
+})
+```
### resetPassword()
Resets the password for the selected user.
- user.resetPassword({
- oldPassword: '2cool4u',
- newPassword: 'correct-horse-battery-staple',
- }, function(error, response, success) {
- // if it was done correctly, the new password will be changed
- // 'success' is a boolean value that indicates whether it was changed successfully
- })
+```js
+user.resetPassword({
+ oldPassword: '2cool4u',
+ newPassword: 'correct-horse-battery-staple',
+}, function(error, response, success) {
+ // if it was done correctly, the new password will be changed
+ // 'success' is a boolean value that indicates whether it was changed successfully
+})
+```
### UsergridUser.CheckAvailable()
This is a class (static) method that allows you to check whether a username or email address is available or not.
- UsergridUser.CheckAvailable(client, {
- email: 'email'
- }, function(err, response, exists) {
- // 'exists' is a boolean value that indicates whether a user already exists
- })
+```js
+UsergridUser.CheckAvailable(client, {
+ email: 'email'
+}, function(err, response, exists) {
+ // 'exists' is a boolean value that indicates whether a user already exists
+})
- UsergridUser.CheckAvailable(client, {
- username: 'username'
- }, function(err, response, exists) {
-
- })
+UsergridUser.CheckAvailable(client, {
+ username: 'username'
+}, function(err, response, exists) {
+
+})
- UsergridUser.CheckAvailable(client, {
- email: 'email',
- username: 'username', // checks both email and username
- }, function(err, response, exists) {
- // 'exists' returns true if either username or email exist
- })
+UsergridUser.CheckAvailable(client, {
+ email: 'email',
+ username: 'username', // checks both email and username
+}, function(err, response, exists) {
+ // 'exists' returns true if either username or email exist
+})
+```
+
+## Querying and filtering data
+
+### UsergridQuery initialization
+
+The `UsergridQuery` class allows you to build out complex query filters using the Usergrid [query syntax](http://docs.apigee.com/app-services/content/querying-your-data).
+
+The first parameter of the `UsergridQuery` builder pattern should be the collection (or type) you intend to query. You can either pass this as an argument, or as the first builder object:
+
+```js
+var query = new UsergridQuery('cats')
+// or
+var query = new UsergridQuery().type('cats')
+var query = new UsergridQuery().collection('cats')
+```
+
+You then can layer on additional queries:
+
+```js
+var query = new UsergridQuery('cats')
+ .gt('weight', 2.4)
+ .contains('color', 'bl*')
+ .not
+ .eq('color', 'white')
+ .or
+ .eq('color', 'orange')
+```
+
+You can also adjust the number of results returned:
+
+```js
+var query = new UsergridQuery('cats').eq('color', 'black').limit(100)
+// returns a maximum of 100 entiteis
+```
+
+And sort the results:
+
+```js
+var query = new UsergridQuery('cats').eq('color', 'black').asc('name')
+// sorts by 'name', ascending
+```
+
+And you can do geo-location queries:
+
+```js
+var query = new UsergridQuery('devices').locationWithin(<distanceInMeters>, <latitude>, <longitude>)
+```
+
+### Using a query in a request
+
+Queries can be passed as parameters to GET, PUT, and DELETE requests:
+
+```js
+Usergrid.GET(query, function(error, usergridResponse, entities) {
+ //
+})
+
+Usergrid.PUT(query, { aNewProperty: "A new value" }, function(error, usergridResponse, entities) {
+ //
+})
+
+Usergrid.DELETE(query, function(error, usergridResponse, entities) {
+ //
+})
+```
+
+While not a typical use case, sometimes it is useful to be able to create a query that works on multiple collections. Therefore, in each one of these RESTful calls, you can optionally pass a 'type' string as the first argument:
+
+```js
+Usergrid.GET('cats', query, function(error, usergridResponse, entities) {
+ //
+})
+```
+
+### List of query builder objects
+
+`type('string')`
+
+> The collection name to query
+
+`collection('string')`
+
+> An alias for `type`
+
+`eq('key', 'value')` or `equal('key', 'value')`
+
+> Equal to (e.g. `where color = 'black'`)
+
+`contains('key', 'value')`
+
+> Contains a string (e.g.` where color contains 'bl*'`)
+
+`gt('key', 'value')` or `greaterThan('key', 'value')`
+
+> Greater than (e.g. `where weight > 2.4`)
+
+`gte('key', 'value')` or `greaterThanOrEqual('key', 'value')`
+
+> Greater than or equal to (e.g. `where weight >= 2.4`)
+
+`lt('key', 'value')` or `lessThan('key', 'value')`
+
+> Less than (e.g. `where weight < 2.4`)
+
+`lte('key', 'value')` or `lessThanOrEqual('key', 'value')`
+
+> Less than or equal to (e.g. `where weight <= 2.4`)
+
+`not`
+
+> Negates the next block in the builder pattern, e.g.:
+
+```js
+var query = new UsergridQuery('cats').not.eq('color', 'black')
+// select * from cats where not color = 'black'
+```
+
+`and`
+
+> Joins two queries by requiring both of them. `and` is also implied when joining two queries _without_ an operator. E.g.:
+
+```js
+var query = new UsergridQuery('cats').eq('color', 'black').eq('fur', 'longHair')
+// is identical to:
+var query = new UsergridQuery('cats').eq('color', 'black').and.eq('fur', 'longHair')
+```
+
+`or`
+
+> Joins two queries by requiring only one of them. `or` is never implied. E.g.:
+
+```js
+var query = new UsergridQuery('cats').eq('color', 'black').or.eq('color', 'white')
+```
+
+> When using `or` and `and` operators, `and` joins will take precedence over `or` joins. You can read more about query operators and precedence [here](http://docs.apigee.com/api-baas/content/supported-query-operators-data-types).
+
+`locationWithin(distanceInMeters, latitude, longitude)`
+
+> Returns entities which have a location within the specified radius. Arguments can be `float` or `int`.
+
+`asc('key')`
+
+> Sorts the results by the specified property, ascending
+
+`desc('key')`
+
+> Sorts the results by the specified property, descending
+
+`sort('key', 'order')`
+
+> Sorts the results by the specified property, in the specified order (`asc` or `desc`).
+
+`limit(int)`
+
+> The maximum number of entities to return
+
+`cursor('string')`
+
+> A pagination cursor string
+
+`fromString('query string')`
+
+> A special builder property that allows you to input a pre-defined query string. All other builder properties will be ignored when this property is defined. For example:
+
+```js
+var query = new UsergridQuery().fromString("select * where color = 'black' order by name asc")
+```
## UsergridResponse object
@@ -382,11 +600,13 @@
You can check `usergridResponse.ok`, a `bool` value, to see if the response was successful. Any status code < 400 returns true.
- Usergrid.GET('collection', function(error, usergridResponse, entities) {
- if (usergridResponse.ok) {
- // woo!
- }
- })
+```js
+Usergrid.GET('collection', function(error, usergridResponse, entities) {
+ if (usergridResponse.ok) {
+ // woo!
+ }
+})
+```
### entity, entities, user, users, first, last
@@ -400,36 +620,38 @@
Examples:
- Usergrid.GET('collection', function(error, usergridResponse, entities) {
- // third param is an array of entities because no specific entity was referenced
- // you can also access:
- // usergridResponse.entities
- // usergridResponse.first
- // usergridResponse.entity (the first entity)
- // usergridResponse.last
- })
+```js
+Usergrid.GET('collection', function(error, usergridResponse, entities) {
+ // third param is an array of entities because no specific entity was referenced
+ // you can also access:
+ // usergridResponse.entities
+ // usergridResponse.first
+ // usergridResponse.entity (the first entity)
+ // usergridResponse.last
+})
- Usergrid.GET('collection', '<uuid or name>', function(error, usergridResponse, entity) {
- // third param is a single entity object
- // you can also access:
- // usergridResponse.entity
- // usergridResponse.first
- // usergridResponse.last
- })
+Usergrid.GET('collection', '<uuid or name>', function(error, usergridResponse, entity) {
+ // third param is a single entity object
+ // you can also access:
+ // usergridResponse.entity
+ // usergridResponse.first
+ // usergridResponse.last
+})
- Usergrid.GET('users', function(error, usergridResponse, users) {
- // third param is an array of users because no specific user was referenced
- // you can also access:
- // usergridResponse.users
- // usergridResponse.user (the first user)
- // usergridResponse.last
- })
+Usergrid.GET('users', function(error, usergridResponse, users) {
+ // third param is an array of users because no specific user was referenced
+ // you can also access:
+ // usergridResponse.users
+ // usergridResponse.user (the first user)
+ // usergridResponse.last
+})
- Usergrid.GET('users', '<uuid, username, or email>', function(error, usergridResponse, user) {
- // third param is a single user object
- // you can also access:
- // usergridResponse.user
- })
+Usergrid.GET('users', '<uuid, username, or email>', function(error, usergridResponse, user) {
+ // third param is a single user object
+ // you can also access:
+ // usergridResponse.user
+})
+```
## Connections
@@ -437,35 +659,42 @@
### connect
-**Create a connection between two entities**
+Create a connection between two entities:
- Usergrid.connect(entity1, 'relationship', entity2, function(error, usergridResponse) {
- // entity1 now has an outbound connection to entity2
- })
+```js
+Usergrid.connect(entity1, 'relationship', entity2, function(error, usergridResponse) {
+ // entity1 now has an outbound connection to entity2
+})
+```
### getConnections
-**Retrieve outbound connections**
+Retrieve outbound connections:
- client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, 'relationship', function(error, usergridResponse, entities) {
- // entities is an array of entities that entity1 is connected to via 'relationship'
- // in this case, we'll see entity2 in the array
- })
+```js
+client.getConnections(UsergridClient.Connections.DIRECTION_OUT, entity1, 'relationship', function(error, usergridResponse, entities) {
+ // entities is an array of entities that entity1 is connected to via 'relationship'
+ // in this case, we'll see entity2 in the array
+})
+```
-**Retrieve inbound connections**
+Retrieve inbound connections:
- client.getConnections(UsergridClient.Connections.DIRECTION_IN, entity2, 'relationship', function(error, usergridResponse, entities) {
- // entities is an array of entities that connect to entity2 via 'relationship'
- // in this case, we'll see entity1 in the array
- })
+```js
+client.getConnections(UsergridClient.Connections.DIRECTION_IN, entity2, 'relationship', function(error, usergridResponse, entities) {
+ // entities is an array of entities that connect to entity2 via 'relationship'
+ // in this case, we'll see entity1 in the array
+})```
### disconnect
-**Delete a connection between two entities**
+Delete a connection between two entities:
- Usergrid.disconnect(entity1, 'relationship', entity2, function(error, usergridResponse) {
- // entity1's outbound connection to entity2 has been destroyed
- })
+```js
+Usergrid.disconnect(entity1, 'relationship', entity2, function(error, usergridResponse) {
+ // entity1's outbound connection to entity2 has been destroyed
+})
+```
## Assets
@@ -473,59 +702,70 @@
### UsergridAsset init
-**Loading a file system image via `fs.readFile()`**
+Loading a file system image via `fs.readFile()`:
- var asset = new UsergridAsset('myImage')
- fs.readFile(_dirname + '/image.jpg', function(error, data) {
- asset.data = data
- })
+```js
+var asset = new UsergridAsset('myImage')
+fs.readFile(_dirname + '/image.jpg', function(error, data) {
+ asset.data = data
+})
+```
-**Loading a file system image from a read stream (`fs.createReadStream()`)**
+Loading a file system image from a read stream (`fs.createReadStream()`):
- var asset = new UsergridAsset('myImage')
- fs.createReadStream(_dirname + '/image.jpg').pipe(asset).on('finish', function() {
- // now contains Buffer stream at asset.data
- })
+```js
+var asset = new UsergridAsset('myImage')
+fs.createReadStream(_dirname + '/image.jpg').pipe(asset).on('finish', function() {
+ // now contains Buffer stream at asset.data
+})
+```
You can also access `asset.contentType` and `asset.contentLength` once data has been loaded into a `UsergridAsset`.
### .POST and .PUT
-**POST binary data to a collection by creating a new entity**
+POST binary data to a collection by creating a new entity:
- var asset = new UsergridAsset('myImage')
- fs.createReadStream(_dirname + '/image.jpg').pipe(asset).on('finish', function() {
- client.POST('collection', asset, function(error, assetResponse, entityWithAsset) {
- // asset is now uploaded to Usergrid
- })
+```js
+var asset = new UsergridAsset('myImage')
+fs.createReadStream(_dirname + '/image.jpg').pipe(asset).on('finish', function() {
+ client.POST('collection', asset, function(error, assetResponse, entityWithAsset) {
+ // asset is now uploaded to Usergrid
})
+})
+```
-**PUT binary data to an existing entity via attachAsset()**
+PUT binary data to an existing entity via attachAsset():
- var asset = new UsergridAsset('myImage')
- fs.createReadStream(_dirname + '/image.jpg').pipe(asset).on('finish', function() {
- // assume entity already exists; attach it to the entity:
- entity.attachAsset(asset)
- client.PUT(entity, asset, function(error, assetResponse, entityWithAsset) {
- // asset is now uploaded to Usergrid
- })
+```js
+var asset = new UsergridAsset('myImage')
+fs.createReadStream(_dirname + '/image.jpg').pipe(asset).on('finish', function() {
+ // assume entity already exists; attach it to the entity:
+ entity.attachAsset(asset)
+ client.PUT(entity, asset, function(error, assetResponse, entityWithAsset) {
+ // asset is now uploaded to Usergrid
})
+})
+```
### UsergridEntity convenience methods
-**entity.uploadAsset() is a much simpler means of uploading an asset**
+`entity.uploadAsset()` is a convenient way to upload an asset that is attached to an entity:
- var asset = new UsergridAsset('myImage')
- fs.createReadStream(_dirname + '/image.jpg').pipe(asset).on('finish', function() {
- // assume entity already exists; attach it to the entity:
- entity.attachAsset(asset)
- entity.uploadAsset(function(error, assetResponse, entityWithAsset) {
- // asset is now uploaded to Usergrid
- })
- })
-
-**entity.downloadAsset() allows you to download a binary asset**
-
+```js
+var asset = new UsergridAsset('myImage')
+fs.createReadStream(_dirname + '/image.jpg').pipe(asset).on('finish', function() {
+ // assume entity already exists; attach it to the entity:
+ entity.attachAsset(asset)
entity.uploadAsset(function(error, assetResponse, entityWithAsset) {
- // access the asset via entityWithAsset.asset
+ // asset is now uploaded to Usergrid
})
+})
+```
+
+`entity.downloadAsset()` allows you to download a binary asset:
+
+```js
+entity.uploadAsset(function(error, assetResponse, entityWithAsset) {
+ // access the asset via entityWithAsset.asset
+})```