From 505951a0b11c7f647f8ab225801a6ef95883e6e5 Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Thu, 6 Nov 2014 11:34:52 -0300 Subject: [PATCH] replaced old rate service as angular controller --- js/models/RateService.js | 5 ++- js/services/rate.js | 86 ++-------------------------------------- 2 files changed, 8 insertions(+), 83 deletions(-) diff --git a/js/models/RateService.js b/js/models/RateService.js index 048acb7dd..7c952f3b3 100644 --- a/js/models/RateService.js +++ b/js/models/RateService.js @@ -13,6 +13,9 @@ var request = require('request'); var RateService = function(opts) { var self = this; + opts = opts || {}; + self.request = opts.request || request; + self.SAT_TO_BTC = 1 / 1e8; self.BTC_TO_SAT = 1e8; self.UNAVAILABLE_ERROR = 'Service is not available - check for service.isAvailable() or use service.whenAvailable()'; @@ -44,7 +47,7 @@ RateService.prototype._fetchCurrencies = function() { var updateFrequencySeconds = 3600; var rateServiceUrl = 'https://bitpay.com/api/rates'; - request.get({ + self.request.get({ url: rateServiceUrl, json: true }, function(err, res, body) { diff --git a/js/services/rate.js b/js/services/rate.js index 6599905c1..cbfeb2726 100644 --- a/js/services/rate.js +++ b/js/services/rate.js @@ -1,85 +1,7 @@ 'use strict'; -var MINS_IN_HOUR = 60; -var MILLIS_IN_SECOND = 1000; - -var RateService = function(request) { - this.isAvailable = false; - this.UNAVAILABLE_ERROR = 'Service is not available - check for service.isAvailable or use service.whenAvailable'; - this.SAT_TO_BTC = 1 / 1e8; - this.BTC_TO_SAT = 1e8; - var rateServiceConfig = config.rate; - var updateFrequencySeconds = rateServiceConfig.updateFrequencySeconds || 60 * MINS_IN_HOUR; - var rateServiceUrl = rateServiceConfig.url || 'https://bitpay.com/api/rates'; - this.queued = []; - this.alternatives = []; - var self = this; - var backoffSeconds = 5; - var retrieve = function() { - request.get({ - url: rateServiceUrl, - json: true - }, function(err, response, listOfCurrencies) { - if (err) { - backoffSeconds *= 1.5; - setTimeout(retrieve, backoffSeconds * MILLIS_IN_SECOND); - return; - } - var rates = {}; - listOfCurrencies.forEach(function(element) { - rates[element.code] = element.rate; - self.alternatives.push({ - name: element.name, - isoCode: element.code, - rate: element.rate - }); - }); - self.isAvailable = true; - self.rates = rates; - self.queued.forEach(function(callback) { - setTimeout(callback, 1); - }); - setTimeout(retrieve, updateFrequencySeconds * MILLIS_IN_SECOND); - }); - }; - retrieve(); -}; - -RateService.prototype.whenAvailable = function(callback) { - if (this.isAvailable) { - setTimeout(callback, 1); - } else { - this.queued.push(callback); - } -}; - -RateService.prototype.toFiat = function(satoshis, code) { - if (!this.isAvailable) { - throw new Error(this.UNAVAILABLE_ERROR); - } - return satoshis * this.SAT_TO_BTC * this.rates[code]; -}; - -RateService.prototype.fromFiat = function(amount, code) { - if (!this.isAvailable) { - throw new Error(this.UNAVAILABLE_ERROR); - } - return amount / this.rates[code] * this.BTC_TO_SAT; -}; - -RateService.prototype.listAlternatives = function() { - if (!this.isAvailable) { - throw new Error(this.UNAVAILABLE_ERROR); - } - - var alts = []; - this.alternatives.forEach(function(element) { - alts.push({ - name: element.name, - isoCode: element.isoCode - }); +angular.module('copayApp.services').factory('rateService', function(request) { + return copay.RateService.singleton({ + request: request }); - return alts; -}; - -angular.module('copayApp.services').service('rateService', RateService); +});