Skip to content
Updated Transforms And Templates (markdown) authored by mjpearson's avatar mjpearson
...@@ -11,9 +11,9 @@ eg: say we have an [email.smtp_forward channel](https://bip.io/docs/pods/email) ...@@ -11,9 +11,9 @@ eg: say we have an [email.smtp_forward channel](https://bip.io/docs/pods/email)
Templates can also be interpolated with variables from upstream channels or metadata if they take the form Templates can also be interpolated with variables from upstream channels or metadata if they take the form
`[%(source|_client|_bip|channel id)#export_attribute%]` `[%(source|_client|_bip|channel id)#json_path%]`
"export attribute" in the example means the name of an attribute exported by an upstream channel, keyed by either an explicit channel id, or `source` (ie: whatever the bip receives or generates). This means you can concatenate exports and text together to create a custom import. With the previous email example, lets assume we're using an `smtp` bip and want to pass through some of the details to an email channel on its hub : `json_path` in the example means the [JSON Path](http://goessner.net/articles/JsonPath/) of an attribute exported by an upstream channel, keyed by either an explicit channel id, or `source` (ie: whatever the bip receives or generates). This means you can concatenate exports and text together to create a custom import. With the previous email example, lets assume we're using an `smtp` bip and want to pass through some of the details to an email channel on its hub :
``` ```
{ {
...@@ -21,6 +21,35 @@ Templates can also be interpolated with variables from upstream channels or meta ...@@ -21,6 +21,35 @@ Templates can also be interpolated with variables from upstream channels or meta
"body_text" : "I got an email from [%_client#repr%] : [%source#body_text%]" "body_text" : "I got an email from [%_client#repr%] : [%source#body_text%]"
} }
``` ```
## Object and Array Passthrough
Transform templates which only include a single JSONPath will be evaluated in-place, meaning that if the path evaluates to an object or array, then it will be replaced with that structured data.
For example, say we have a channel with a `json_document` import which expects a structured object and you need to map an export object from a complex payload like so (the 2nd object element of an array) :
```
{
"374d9a1d-cc84-456d-9dad-e1e3065e8c4d" : {
"payload" : [
"Payload Title",
{
"name" : "This is the document name",
"value" : "And it has a value"
}
]
}
}
```
It can mapped as :
```
{
"json_document" : "[%374d9a1d-cc84-456d-9dad-e1e3065e8c4d#payload[1].body%]"
}
```
## Bip metadata exports (_bip|_client) ## Bip metadata exports (_bip|_client)
Additional metadata exports are available depending on the type of Bip that is evaluating. These exports are set in `_bip` and `_client` exports which can be discovered by calling the [`/rpc/describe/bip`](https://github.com/bipio-server/bipio/wiki/Describing-Models) RPC. Additional metadata exports are available depending on the type of Bip that is evaluating. These exports are set in `_bip` and `_client` exports which can be discovered by calling the [`/rpc/describe/bip`](https://github.com/bipio-server/bipio/wiki/Describing-Models) RPC.
... ...
......