
# Regard

[![build status][travis-svg]][travis-url]
[![dependency status][deps-svg]][deps-url]
[![dev dependency status][dev-deps-svg]][dev-deps-url]
[![license][license-image]][license-url]

[![npm badge][npm-badge-png]][npm-url]

Sugar-interface to access multiple data sources.

## Example

In the example below, we will:

1. Create a new instance of _Regard_ ;
2. Load two connectors (_FsConnector_ and _HttpConnector_) ;
3. Create two major endpoints (`root` which give access to the current folder and `mb` which give access to the [Mockbin API](http://mockbin.com/docs));
4. Execute a request to http://mockbin.com/request, write the result into `sample.json`, read it and print the content on the standard output.

```javascript
var Regard = require('regard');

// #1 Create a new instance of Regard
var regard = Regard();

// #2 Load two connectors
regard
  .$$(Regard.FsConnector)
  .$$(Regard.HttpConnector);

// #3 Create two major endpoints
regard
  .$('mb', 'http://mockbin.com')
  .$('root', __dirname);

// #4 Execute a request to http://mockbin.com/request
regard('mb', 'request')
  .then(function (res) {
    // write the result into __dirname/sample.json
    return regard.root('write', 'sample.json', res.body);
  })
  .then(function () {
    // read it
    return regard.root('read', 'sample.json');
  })
  .then(function (res) {
    // and print it
    console.log(res);
  });
```

We can rewrite this example with less code lines:

1. Create an instance of _Regard_ initialized with _FsConnector_ and _HttpConnector_ ;
2. Create two major endpoints and two nested endpoints (one under the `mb` endpoint and an other under the `root` endpoint);
3. Execute a request, write the result into `sample.json` and print it.


```javascript
var Regard = require('regard');

// #1 Create an instance of Regard initialized with two connectors
var regard = Regard('fs', 'http');

// #2 Create two major endpoints and one nested endpoint under each of them
regard
  .$('mb', 'http://mockbin.com')
  .$('root', __dirname)
  .mb.$('request', 'request')
  .root.$('sample', 'sample.json');

// #3 Execute a request, write and print the result
regard.mb.request()
  .then(function (res) {
    return regard.root.sample('write', res.body);
  })
  .then(console.log);
```

The two example above have the same result: the request's response is wrote into `sample.json`.

```bash
$ cat sample.json

{
  startedDateTime: '2015-09-23T07:04:52.797Z',
  clientIPAddress: '79.87.208.107',
  method: 'GET',
  url: 'http://mockbin.com/request',
  httpVersion: 'HTTP/1.1',
  // ...
}
```

## Tests

```
npm test
```

## Credits

* [Steven Enten](https://github.com/enten)

## License

[MIT][license-url]



[npm-url]: https://npmjs.org/package/regard
[npm-version-svg]: http://vb.teelaun.ch/enten/regard.svg
[travis-svg]: https://travis-ci.org/enten/regard.svg?branch=master
[travis-url]: https://travis-ci.org/enten/regard
[deps-svg]: https://david-dm.org/enten/regard.svg
[deps-url]: https://david-dm.org/enten/regard
[dev-deps-svg]: https://david-dm.org/enten/regard/dev-status.svg
[dev-deps-url]: https://david-dm.org/enten/regard#info=devDependencies
[npm-badge-png]: https://nodei.co/npm/regard.png
[license-image]: http://img.shields.io/npm/l/regard.svg
[license-url]: https://raw.githubusercontent.com/enten/regard/master/LICENSE
