{
    "author": {
        "name": "Golyshev Dmitrii",
        "email": "golyshev.dmitry@yandex.ru"
    },
    "bugs": {
        "url": "https://github.com/golyshevd/Model/issues"
    },
    "contributors": [
        {
            "name": "Golyshev Dmitrii",
            "email": "golyshev.dmitry@yandex.ru"
        }
    ],
    "dependencies": {
        "jspromise": "git://github.com/golyshevd/JSPromise.git#v1.0.x",
        "node-ns": "git://github.com/golyshevd/Namespace.git#v1.0.x"
    },
    "description": "Simple asynchronous promise-based controller",
    "devDependencies": {
        "jshint": "",
        "nodeunit": "",
        "istanbul": ""
    },
    "license": "MIT",
    "main": "Provider",
    "name": "de",
    "repository": {
        "type": "git",
        "url": "git://github.com/golyshevd/Model.git"
    },
    "scripts": {
        "test": "tools/test"
    },
    "version": "4.0.0",
    "readme": "de [![Build Status](https://travis-ci.org/golyshevd/Model.png?branch=v4.0.x)](https://travis-ci.org/golyshevd/Model)\n==========\n\nSimple asynchronous promise based data agent\n\nLazy example\n---------\n```js\n\nvar Exception;\nvar Promise;\nvar StdProvider;\nvar StdRuntime;\n\nvar agent;\n\nException = require('de/util/Exception');\nPromise = require('jspromise');\nStdProvider = require('de/Provider');\nStdRuntime = require('de/util/Runtime');\n\nfunction Runtime () {\n  StdRuntime.apply(this, arguments);\n}\n\nRuntime.prototype = Object.create(StdRuntime.prototype);\n\n//  my Runtime turbo extension\nRuntime.prototype.getRequest = function () {\n  return this.params.request;\n};\n\nfunction Provider () {\n  StdProvider.apply(this, arguments);\n}\n\nProvider.prototype = Object.create(StdProvider.prototype);\n\n//  @overrides default method\nProvider.prototype._createRuntime = function (params) {\n  \n  return new Runtime(this, params);\n};\n\nagent = new Provider();\n\n//  data declaration (polymorphic)\nagent.decl('my-data-3', {\n  deps: ['my-data-1', 'my-async-data', 'url', 'some-bad'],\n  data: function (result, errors) {\n    \n    console.log(errors['some-bad']); // 9000\n    \n    return result['my-data-1'] + result.myAsyncData + url.query.some;\n  },\n  alias: 'myData3'\n});\n\nagent.decl('my-data-1', 42);\n\nagent.decl('my-async-data', {\n  alias: 'myAsyncData',\n  deps: 'url',\n  data: function (result, errors) {\n  \n  //  the only way to return data asynchronously (U can use ANY compilant promises/A+ implementation)\n    var promise;\n    \n    promise = new JSPromise();\n    \n    setTimeout(function () {\n      promise.fulfill(result.url.query.data));\n    }, 5000);\n    \n    return promise;\n  }\n});\n\nagent.decl('url', function () {\n  \n  var req;\n  \n  req = this.getRequest();\n  \n  console.log(this instanceof Runtime); //  true\n  \n  return Url.parse(req.url, true);\n});\n\nagent.decl('some-bad', function () {\n  throw 9000;\n});\n\n//  data providing\nagent.provide({request: {\n  url: '/a/b/c/?data=5&some=6'\n} }, ['my-data-3']).then(function (data) {\n  \n  console.log(data.result.myData3); // 5 + 6 + 42\n});\n\n```\n\nTo reject provide() promise u can throw an ```{de/util/Exception}``` instance inside data function.\ndata can be any value or promise object, not only function\n"
}
