Пример #1
0
    action: function (params) {
        return ask({
            url: config.yandexLocator.host,
            method: 'POST',
            bodyEncoding: 'multipart',
            allowGzip: true,
            body: {
                json: {
                    common: {
                        version: '1.0',
                        api_key: config.yandexLocator.key
                    },
                    ip: {
                        address_v4: params.ip
                    }
                }
            },
            timeout: config.timeout
        })
            .then(function (response) {
                var json = JSON.parse(response.data);

                return json.position;
            })
            .fail(function () {
                throw new bla.ApiError('GEOLOCATION_ERROR', 'Your city isn\'t found');
            });
    }
Пример #2
0
 .setAction(function () {
     return asker({
         host: 'api.flickr.com',
         protocol: 'https:',
         path: '/services/rest/',
         query: {
             method: 'flickr.photos.search',
             tags: 'kittens',
             api_key: FLICKR_API_KEY,
             format: 'json',
             nojsoncallback: 1,
             per_page: 3
         },
         timeout: 5000
     })
         .then(function (response) {
             var data = JSON.parse(response.data);
             return data.photos.photo.map(function (photo) {
                 return {
                     title: photo.title,
                     url: getPhotoUrl(photo)
                 };
             });
         })
         .fail(function (error) {
             throw new bla.ApiError(bla.ApiError.INTERNAL_ERROR, error.message);
         });
 });
Пример #3
0
    action: function (params) {
        return ask({
            url: config.openWeatherMapApi.host,
            query: {
                lat: params.latitude,
                lon: params.longitude,
                appid: '2cf1ffcfe7564c8c1583eca95384bd9e',
                format: 'json'
            },
            timeout: config.timeout
        }).then(function (response) {
            var json = JSON.parse(response.data);

            if (json.cod !== 200) {
                throw new bla.ApiError('WEATHER_ERROR', json.message);
            }

             // convert to Celsius
            json.main.temp = convertToCelsius(json.main.temp);
            json.main.temp_min = convertToCelsius(json.main.temp_min);
            json.main.temp_max = convertToCelsius(json.main.temp_max);

            return json;
        });
    }
Пример #4
0
module.exports = function (params, handle) {
    var promise;
    var server;

    try {
        fs.unlinkSync(sock);
    } catch (e) {}

    server = http.createServer(handle).listen(sock);

    params.socketPath = sock;

    params.statusFilter = function filter () {

        return {
            accept: true,
            isRetryAllowed: false
        };
    };

    promise = vowAsker(params).then(function (res) {

        if ( null === res.data ) {
            res.data = new Buffer(0);
        }

        return res;
    });

    promise.always(function () {
        server.close();
    });

    return promise;
};
    it('Should respond with expected value (1)', function (done) {

        var app = fist();
        var origServer;

        app.route('/', 'front');
        app.route('/backend/', 'back');

        app.unit({
            path: 'front',
            deps: ['model'],
            data: function (track, context) {
                assert.ok(!context.getErr('model'));

                return context.track.send(context.getRes('model'));
            }
        });

        app.unit({
            path: 'model',
            base: '_contrib-asker',
            _$options: function (context) {

                return _.extend(this.__base(context), {
                    path: '/<token>/',
                    socketPath: sock,
                    vars: {
                        token: 'backend'
                    }
                });
            }
        });

        app.unit({
            path: 'back',
            data: function (track, context) {

                return context.track.send({x: 42});
            }
        });

        unlink();

        origServer = app.listen(sock);

        vowAsker({
            path: '/',
            socketPath: sock
        }).done(function (res) {
            assert.deepEqual(res.data, new Buffer('{"x":42}'));
            origServer.close();
            done();
        });
    });
    it('Should respond with expected value (3)', function (done) {

        var app = fist();
        var origServer;

        app.route('/', 'front');

        app.unit({
            path: 'front',
            deps: ['model'],
            data: function (track, context) {

                return context.track.send(context.getErr('model'));
            }
        });

        app.unit({
            path: 'model',
            base: '_contrib-asker',
            _$request: function () {

                throw 42;
            }
        });

        unlink();

        origServer = app.listen(sock);

        vowAsker({
            path: '/',
            socketPath: sock,
            statusFilter: function () {

                return {
                    accept: true
                };
            }

        }).done(function (res) {
            assert.deepEqual(res.data, new Buffer('42'));
            origServer.close();
            done();
        });
    });
Пример #7
0
    action: function (params, request) {
        var ip = params.ip || request && request.ip;

        if (!ip) {
            return vow.reject(new bla.ApiError('BAD_REQUEST', 'IP address is not specified'));
        }

        return asker({
            url: LOCATOR_URL,
            method: 'POST',
            bodyEncoding: 'multipart',
            allowGzip: true,
            body: {
                json: {
                    common: {
                        version: '1.0',
                        api_key: LOCATOR_KEY
                    },
                    ip: {
                        address_v4: ip
                    }
                }
            },
            timeout: 5000
        })
            .then(function (response) {
                var data = JSON.parse(response.data);

                if (data.error) {
                    throw new bla.ApiError('GEOLOCATION_ERROR', data.error);
                }

                return data.position;
            })
            .fail(function (error) {
                if (error.data && error.data.statusCode === 404) {
                    throw new bla.ApiError(bla.ApiError.NOT_FOUND, 'Cannot detect your location');
                } else {
                    throw new bla.ApiError(bla.ApiError.INTERNAL_ERROR, error.message);
                }
            });
    }
    it('Should respond with expected value (4)', function (done) {

        var app = fist();
        var origServer;

        app.route('/', 'front');

        app.unit({
            path: 'front',
            deps: ['model'],
            data: function (track, context) {
                assert.ok(context.getErr('model'));

                throw context.getErr('model');
            }
        });

        app.unit({
            path: 'model',
            base: '_contrib-asker',
            _$options: function () {

                return {
                    path: '/foo-bar/',
                    sock: sock
                };
            }
        });

        unlink();

        origServer = app.listen(sock);

        vowAsker({
            path: '/',
            socketPath: sock
        }).done(null, function (err) {
            assert.ok(err);
            origServer.close();
            done();
        });
    });