currency-rate 1.4.1 → 1.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +22 -0
- data/Gemfile +3 -8
- data/Rakefile +6 -25
- data/api_keys.yml.sample +1 -0
- data/currency-rate.gemspec +33 -133
- data/lib/adapters/crypto/binance_adapter.rb +3 -3
- data/lib/adapters/crypto/bitfinex_adapter.rb +2 -2
- data/lib/adapters/crypto/bitpay_adapter.rb +1 -1
- data/lib/adapters/crypto/bitstamp_adapter.rb +11 -5
- data/lib/adapters/crypto/btc_china_adapter.rb +1 -1
- data/lib/adapters/crypto/btc_e_adapter.rb +1 -1
- data/lib/adapters/crypto/coin_market_cap_adapter.rb +31 -0
- data/lib/adapters/crypto/coinbase_adapter.rb +1 -1
- data/lib/adapters/crypto/exmo_adapter.rb +2 -2
- data/lib/adapters/crypto/huobi_adapter.rb +1 -1
- data/lib/adapters/crypto/kraken_adapter.rb +21 -15
- data/lib/adapters/crypto/localbitcoins_adapter.rb +1 -1
- data/lib/adapters/crypto/okcoin_adapter.rb +1 -1
- data/lib/adapters/fiat/bonbast_adapter.rb +25 -0
- data/lib/adapters/fiat/currency_layer_adapter.rb +1 -1
- data/lib/adapters/fiat/fixer_adapter.rb +1 -1
- data/lib/adapters/fiat/forge_adapter.rb +1 -1
- data/lib/adapters/fiat/free_forex_adapter.rb +1 -1
- data/lib/adapters/fiat/yahoo_adapter.rb +1 -1
- data/lib/configuration.rb +4 -0
- data/lib/currency_rate.rb +3 -1
- data/lib/currency_rate/version.rb +3 -0
- data/lib/fetcher.rb +26 -6
- data/lib/synchronizer.rb +1 -1
- metadata +23 -95
- data/VERSION +0 -1
- data/spec/fixtures/adapters/binance_rates.yml +0 -993
- data/spec/fixtures/adapters/bitfinex_rates.yml +0 -4050
- data/spec/fixtures/adapters/bitpay_rates.yml +0 -490
- data/spec/fixtures/adapters/bitstamp_rates.yml +0 -61
- data/spec/fixtures/adapters/btc_china_rates.yml +0 -11
- data/spec/fixtures/adapters/btce_rates.yml +0 -60
- data/spec/fixtures/adapters/coinbase_rates.yml +0 -181
- data/spec/fixtures/adapters/currency_layer_rates.yml +0 -174
- data/spec/fixtures/adapters/exmo_rates.yml +0 -1251
- data/spec/fixtures/adapters/fixer_rates.yml +0 -174
- data/spec/fixtures/adapters/forge_rates.yml +0 -75
- data/spec/fixtures/adapters/free_forex_rates.yml +0 -59
- data/spec/fixtures/adapters/huobi_rates.yml +0 -22
- data/spec/fixtures/adapters/kraken_rates.yml +0 -507
- data/spec/fixtures/adapters/localbitcoins_rates.yml +0 -493
- data/spec/fixtures/adapters/normalized/binance_rates.yml +0 -134
- data/spec/fixtures/adapters/normalized/bitfinex_rates.yml +0 -95
- data/spec/fixtures/adapters/normalized/bitpay_rates.yml +0 -164
- data/spec/fixtures/adapters/normalized/bitstamp_rates.yml +0 -9
- data/spec/fixtures/adapters/normalized/btc_china_rates.yml +0 -1
- data/spec/fixtures/adapters/normalized/btce_rates.yml +0 -5
- data/spec/fixtures/adapters/normalized/coinbase_rates.yml +0 -179
- data/spec/fixtures/adapters/normalized/currency_layer_rates.yml +0 -169
- data/spec/fixtures/adapters/normalized/exmo_rates.yml +0 -42
- data/spec/fixtures/adapters/normalized/fixer_rates.yml +0 -170
- data/spec/fixtures/adapters/normalized/forge_rates.yml +0 -16
- data/spec/fixtures/adapters/normalized/free_forex_rates.yml +0 -16
- data/spec/fixtures/adapters/normalized/huobi_rates.yml +0 -2
- data/spec/fixtures/adapters/normalized/kraken_rates.yml +0 -21
- data/spec/fixtures/adapters/normalized/localbitcoins_rates.yml +0 -73
- data/spec/fixtures/adapters/normalized/okcoin_rates.yml +0 -4
- data/spec/fixtures/adapters/normalized/yahoo_rates.yml +0 -160
- data/spec/fixtures/adapters/okcoin_rates.yml +0 -40
- data/spec/fixtures/adapters/yahoo_rates.yml +0 -1119
- data/spec/lib/adapter_spec.rb +0 -54
- data/spec/lib/adapters/crypto/binance_adapter_spec.rb +0 -13
- data/spec/lib/adapters/crypto/bitfinex_adapter_spec.rb +0 -13
- data/spec/lib/adapters/crypto/bitpay_adapter_spec.rb +0 -13
- data/spec/lib/adapters/crypto/bitstamp_adapter_spec.rb +0 -13
- data/spec/lib/adapters/crypto/btc_china_adapter_spec.rb +0 -13
- data/spec/lib/adapters/crypto/btc_e_adapter_spec.rb +0 -13
- data/spec/lib/adapters/crypto/coinbase_adapter_spec.rb +0 -13
- data/spec/lib/adapters/crypto/exmo_adapter_spec.rb +0 -13
- data/spec/lib/adapters/crypto/huobi_adapter_spec.rb +0 -13
- data/spec/lib/adapters/crypto/kraken_adapter_spec.rb +0 -13
- data/spec/lib/adapters/crypto/localbitcoins_adapter_spec.rb +0 -13
- data/spec/lib/adapters/crypto/okcoin_adapter_spec.rb +0 -13
- data/spec/lib/adapters/fiat/currency_layer_adapter_spec.rb +0 -23
- data/spec/lib/adapters/fiat/fixer_adapter_spec.rb +0 -13
- data/spec/lib/adapters/fiat/forge_adapter_spec.rb +0 -23
- data/spec/lib/adapters/fiat/free_forex_adapter_spec.rb +0 -13
- data/spec/lib/adapters/fiat/yahoo_adapter_spec.rb +0 -13
- data/spec/lib/currency_rate_spec.rb +0 -9
- data/spec/lib/fetcher_spec.rb +0 -124
- data/spec/lib/storage/file_storage_spec.rb +0 -38
- data/spec/lib/synchronizer_spec.rb +0 -99
- data/spec/spec_helper.rb +0 -28
- data/spec/support/matchers/eq_any_of.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2b3592a76d84c04886ccbf012e9219cece2cdc83291671490321bfe34a648e9
|
4
|
+
data.tar.gz: ed430865a39659096db69c0b7d8ff6d3118d06a3982ffe2cc84149579038311d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 958c61580032047f811e8172244a3773a4151598f454337cc797beeab2438b2c1dcf0a5ff2251ec4dc76eb3d21dca1def1d6b0f755a9278af3abb9093eb7357a
|
7
|
+
data.tar.gz: dccc3366ce853113f925843ebe9deba636a0e02a60cb6a136e056ea7456621b64344e027229b899c20dfb57c0780d7ca8d00f465a398a22e4d505e5ce511050f
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# rcov generated
|
2
|
+
coverage
|
3
|
+
coverage.data
|
4
|
+
|
5
|
+
# rdoc generated
|
6
|
+
rdoc
|
7
|
+
|
8
|
+
# yard generated
|
9
|
+
doc
|
10
|
+
.yardoc
|
11
|
+
|
12
|
+
# bundler
|
13
|
+
.bundle
|
14
|
+
|
15
|
+
pkg
|
16
|
+
|
17
|
+
.byebug_history
|
18
|
+
|
19
|
+
Gemfile.lock
|
20
|
+
|
21
|
+
# Private API keys for adapters
|
22
|
+
api_keys.yml
|
data/Gemfile
CHANGED
@@ -1,11 +1,6 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
|
3
|
-
|
3
|
+
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
gem "jeweler", "~> 2.3.7", git: 'git@github.com:technicalpickles/jeweler.git'
|
8
|
-
gem "rake"
|
9
|
-
gem "rspec"
|
10
|
-
gem "webmock"
|
11
|
-
end
|
5
|
+
# Specify your gem's dependencies in currency-rate.gemspec
|
6
|
+
gemspec
|
data/Rakefile
CHANGED
@@ -1,32 +1,13 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'bundler'
|
5
|
-
begin
|
6
|
-
Bundler.setup(:default, :development)
|
7
|
-
rescue Bundler::BundlerError => e
|
8
|
-
$stderr.puts e.message
|
9
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
-
exit e.status_code
|
11
|
-
end
|
12
|
-
require 'rake'
|
13
|
-
|
14
|
-
require 'jeweler'
|
15
|
-
Jeweler::Tasks.new do |gem|
|
16
|
-
# gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
|
17
|
-
gem.name = "currency-rate"
|
18
|
-
gem.homepage = "http://github.com/snitko/currency-rate"
|
19
|
-
gem.license = "MIT"
|
20
|
-
gem.summary = %Q{Converter for fiat and crypto currencies}
|
21
|
-
gem.description = %Q{Fetches exchange rates from various sources and does the conversion}
|
22
|
-
gem.email = "roman.snitko@gmail.com"
|
23
|
-
gem.authors = ["Roman Snitko"]
|
24
|
-
end
|
25
|
-
|
26
1
|
require 'byebug'
|
27
2
|
require 'yaml'
|
3
|
+
require "bundler/gem_tasks"
|
4
|
+
require "rspec/core/rake_task"
|
28
5
|
require_relative "lib/currency_rate"
|
29
6
|
|
7
|
+
RSpec::Core::RakeTask.new(:spec)
|
8
|
+
|
9
|
+
task :default => :spec
|
10
|
+
|
30
11
|
desc "Update rates for specified adapter"
|
31
12
|
task :update_rates, [:exchange] do |t, args|
|
32
13
|
api_keys = YAML.load_file("api_keys.yml")
|
data/api_keys.yml.sample
CHANGED
data/currency-rate.gemspec
CHANGED
@@ -1,141 +1,41 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: currency-rate 1.4.0 ruby lib
|
1
|
+
lib = File.expand_path("../lib", __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require "currency_rate/version"
|
6
4
|
|
7
|
-
Gem::Specification.new do |
|
8
|
-
|
9
|
-
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "currency-rate"
|
7
|
+
spec.version = CurrencyRate::VERSION
|
8
|
+
spec.authors = ["Roman Snitko"]
|
9
|
+
spec.email = "roman.snitko@gmail.com"
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
s.date = "2018-12-12"
|
15
|
-
s.description = "Fetches exchange rates from various sources and does the conversion".freeze
|
16
|
-
s.email = "roman.snitko@gmail.com".freeze
|
17
|
-
s.executables = ["rake".freeze, "rspec".freeze]
|
18
|
-
s.extra_rdoc_files = [
|
19
|
-
"LICENSE.txt",
|
20
|
-
"README.md"
|
21
|
-
]
|
22
|
-
s.files = [
|
23
|
-
".document",
|
24
|
-
".rspec",
|
25
|
-
"Gemfile",
|
26
|
-
"LICENSE.txt",
|
27
|
-
"README.md",
|
28
|
-
"Rakefile",
|
29
|
-
"VERSION",
|
30
|
-
"api_keys.yml.sample",
|
31
|
-
"bin/rake",
|
32
|
-
"bin/rspec",
|
33
|
-
"currency-rate.gemspec",
|
34
|
-
"lib/adapter.rb",
|
35
|
-
"lib/adapters/crypto/bitfinex_adapter.rb",
|
36
|
-
"lib/adapters/crypto/bitpay_adapter.rb",
|
37
|
-
"lib/adapters/crypto/bitstamp_adapter.rb",
|
38
|
-
"lib/adapters/crypto/btc_china_adapter.rb",
|
39
|
-
"lib/adapters/crypto/btc_e_adapter.rb",
|
40
|
-
"lib/adapters/crypto/coinbase_adapter.rb",
|
41
|
-
"lib/adapters/crypto/huobi_adapter.rb",
|
42
|
-
"lib/adapters/crypto/kraken_adapter.rb",
|
43
|
-
"lib/adapters/crypto/localbitcoins_adapter.rb",
|
44
|
-
"lib/adapters/crypto/okcoin_adapter.rb",
|
45
|
-
"lib/adapters/fiat/currency_layer_adapter.rb",
|
46
|
-
"lib/adapters/fiat/fixer_adapter.rb",
|
47
|
-
"lib/adapters/fiat/forge_adapter.rb",
|
48
|
-
"lib/adapters/fiat/free_forex_adapter.rb",
|
49
|
-
"lib/adapters/fiat/yahoo_adapter.rb",
|
50
|
-
"lib/configuration.rb",
|
51
|
-
"lib/currency_rate.rb",
|
52
|
-
"lib/fetcher.rb",
|
53
|
-
"lib/storage/file_storage.rb",
|
54
|
-
"lib/storage/serializers/yaml_serializer.rb",
|
55
|
-
"lib/synchronizer.rb",
|
56
|
-
"spec/fixtures/adapters/bitfinex_rates.yml",
|
57
|
-
"spec/fixtures/adapters/bitpay_rates.yml",
|
58
|
-
"spec/fixtures/adapters/bitstamp_rates.yml",
|
59
|
-
"spec/fixtures/adapters/btc_china_rates.yml",
|
60
|
-
"spec/fixtures/adapters/btce_rates.yml",
|
61
|
-
"spec/fixtures/adapters/coinbase_rates.yml",
|
62
|
-
"spec/fixtures/adapters/currency_layer_rates.yml",
|
63
|
-
"spec/fixtures/adapters/fixer_rates.yml",
|
64
|
-
"spec/fixtures/adapters/forge_rates.yml",
|
65
|
-
"spec/fixtures/adapters/free_forex_rates.yml",
|
66
|
-
"spec/fixtures/adapters/huobi_rates.yml",
|
67
|
-
"spec/fixtures/adapters/kraken_rates.yml",
|
68
|
-
"spec/fixtures/adapters/localbitcoins_rates.yml",
|
69
|
-
"spec/fixtures/adapters/normalized/bitfinex_rates.yml",
|
70
|
-
"spec/fixtures/adapters/normalized/bitpay_rates.yml",
|
71
|
-
"spec/fixtures/adapters/normalized/bitstamp_rates.yml",
|
72
|
-
"spec/fixtures/adapters/normalized/btc_china_rates.yml",
|
73
|
-
"spec/fixtures/adapters/normalized/btce_rates.yml",
|
74
|
-
"spec/fixtures/adapters/normalized/coinbase_rates.yml",
|
75
|
-
"spec/fixtures/adapters/normalized/currency_layer_rates.yml",
|
76
|
-
"spec/fixtures/adapters/normalized/fixer_rates.yml",
|
77
|
-
"spec/fixtures/adapters/normalized/forge_rates.yml",
|
78
|
-
"spec/fixtures/adapters/normalized/free_forex_rates.yml",
|
79
|
-
"spec/fixtures/adapters/normalized/huobi_rates.yml",
|
80
|
-
"spec/fixtures/adapters/normalized/kraken_rates.yml",
|
81
|
-
"spec/fixtures/adapters/normalized/localbitcoins_rates.yml",
|
82
|
-
"spec/fixtures/adapters/normalized/okcoin_rates.yml",
|
83
|
-
"spec/fixtures/adapters/normalized/yahoo_rates.yml",
|
84
|
-
"spec/fixtures/adapters/okcoin_rates.yml",
|
85
|
-
"spec/fixtures/adapters/yahoo_rates.yml",
|
86
|
-
"spec/lib/adapter_spec.rb",
|
87
|
-
"spec/lib/adapters/crypto/bitfinex_adapter_spec.rb",
|
88
|
-
"spec/lib/adapters/crypto/bitpay_adapter_spec.rb",
|
89
|
-
"spec/lib/adapters/crypto/bitstamp_adapter_spec.rb",
|
90
|
-
"spec/lib/adapters/crypto/btc_china_adapter_spec.rb",
|
91
|
-
"spec/lib/adapters/crypto/btc_e_adapter_spec.rb",
|
92
|
-
"spec/lib/adapters/crypto/coinbase_adapter_spec.rb",
|
93
|
-
"spec/lib/adapters/crypto/huobi_adapter_spec.rb",
|
94
|
-
"spec/lib/adapters/crypto/kraken_adapter_spec.rb",
|
95
|
-
"spec/lib/adapters/crypto/localbitcoins_adapter_spec.rb",
|
96
|
-
"spec/lib/adapters/crypto/okcoin_adapter_spec.rb",
|
97
|
-
"spec/lib/adapters/fiat/currency_layer_adapter_spec.rb",
|
98
|
-
"spec/lib/adapters/fiat/fixer_adapter_spec.rb",
|
99
|
-
"spec/lib/adapters/fiat/forge_adapter_spec.rb",
|
100
|
-
"spec/lib/adapters/fiat/free_forex_adapter_spec.rb",
|
101
|
-
"spec/lib/adapters/fiat/yahoo_adapter_spec.rb",
|
102
|
-
"spec/lib/currency_rate_spec.rb",
|
103
|
-
"spec/lib/fetcher_spec.rb",
|
104
|
-
"spec/lib/storage/file_storage_spec.rb",
|
105
|
-
"spec/lib/synchronizer_spec.rb",
|
106
|
-
"spec/spec_helper.rb",
|
107
|
-
"spec/support/matchers/eq_any_of.rb"
|
108
|
-
]
|
109
|
-
s.homepage = "http://github.com/snitko/currency-rate".freeze
|
110
|
-
s.licenses = ["MIT".freeze]
|
111
|
-
s.rubygems_version = "2.7.6".freeze
|
112
|
-
s.summary = "Converter for fiat and crypto currencies".freeze
|
11
|
+
spec.summary = "Converter for fiat and crypto currencies"
|
12
|
+
spec.description = "Fetches exchange rates from various sources and does the conversion"
|
13
|
+
spec.homepage = "https://gitlab.com/hodlhodl-public/currency-rate"
|
113
14
|
|
114
|
-
|
115
|
-
|
15
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
16
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
17
|
+
if spec.respond_to?(:metadata)
|
18
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
116
19
|
|
117
|
-
|
118
|
-
|
119
|
-
s.add_development_dependency(%q<byebug>.freeze, [">= 0"])
|
120
|
-
s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.3.7"])
|
121
|
-
s.add_development_dependency(%q<rake>.freeze, [">= 0"])
|
122
|
-
s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
|
123
|
-
s.add_development_dependency(%q<webmock>.freeze, [">= 0"])
|
124
|
-
else
|
125
|
-
s.add_dependency(%q<http>.freeze, [">= 0"])
|
126
|
-
s.add_dependency(%q<byebug>.freeze, [">= 0"])
|
127
|
-
s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.7"])
|
128
|
-
s.add_dependency(%q<rake>.freeze, [">= 0"])
|
129
|
-
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
130
|
-
s.add_dependency(%q<webmock>.freeze, [">= 0"])
|
131
|
-
end
|
20
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
21
|
+
spec.metadata["source_code_uri"] = "https://gitlab.com/hodlhodl-public/currency-rate"
|
132
22
|
else
|
133
|
-
|
134
|
-
|
135
|
-
s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.7"])
|
136
|
-
s.add_dependency(%q<rake>.freeze, [">= 0"])
|
137
|
-
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
138
|
-
s.add_dependency(%q<webmock>.freeze, [">= 0"])
|
23
|
+
raise "RubyGems 2.0 or newer is required to protect against " \
|
24
|
+
"public gem pushes."
|
139
25
|
end
|
26
|
+
|
27
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
28
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
29
|
+
end
|
30
|
+
spec.bindir = "exe"
|
31
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
32
|
+
spec.require_paths = ["lib"]
|
33
|
+
|
34
|
+
spec.add_dependency "http", ">= 0"
|
35
|
+
|
36
|
+
spec.add_development_dependency "byebug"
|
37
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
38
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
39
|
+
spec.add_development_dependency "webmock"
|
140
40
|
end
|
141
41
|
|
@@ -23,15 +23,15 @@ module CurrencyRate
|
|
23
23
|
return nil unless super
|
24
24
|
binance_result = data["Binance"].reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, hash|
|
25
25
|
if hash["symbol"].index(ANCHOR_CURRENCY) == 0
|
26
|
-
result[hash["symbol"].sub(ANCHOR_CURRENCY, "")] = BigDecimal
|
26
|
+
result[hash["symbol"].sub(ANCHOR_CURRENCY, "")] = BigDecimal(hash["price"].to_s)
|
27
27
|
elsif hash["symbol"].index(ANCHOR_CURRENCY) == 3
|
28
|
-
result[hash["symbol"].sub(ANCHOR_CURRENCY, "")] = 1 / BigDecimal
|
28
|
+
result[hash["symbol"].sub(ANCHOR_CURRENCY, "")] = 1 / BigDecimal(hash["price"].to_s)
|
29
29
|
end
|
30
30
|
result
|
31
31
|
end
|
32
32
|
|
33
33
|
blockchain_result = data["Blockchain"].reduce({}) do |result, (key, value)|
|
34
|
-
result[key] = BigDecimal
|
34
|
+
result[key] = BigDecimal(value["last"].to_s)
|
35
35
|
result
|
36
36
|
end
|
37
37
|
|
@@ -27,9 +27,9 @@ module CurrencyRate
|
|
27
27
|
key = ASSET_MAP[key] || key
|
28
28
|
|
29
29
|
if pair_name.index(ANCHOR_CURRENCY) == 0
|
30
|
-
result[key] = BigDecimal
|
30
|
+
result[key] = BigDecimal(pair_info[7].to_s)
|
31
31
|
elsif pair_name.index(ANCHOR_CURRENCY) == 3
|
32
|
-
result[key] = 1 / BigDecimal
|
32
|
+
result[key] = 1 / BigDecimal(pair_info[7].to_s)
|
33
33
|
end
|
34
34
|
|
35
35
|
result
|
@@ -20,7 +20,7 @@ module CurrencyRate
|
|
20
20
|
def normalize(data)
|
21
21
|
return nil unless super
|
22
22
|
data.reject { |rate| rate["code"] == ANCHOR_CURRENCY }.reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, rate|
|
23
|
-
result["#{rate['code'].upcase}"] = BigDecimal
|
23
|
+
result["#{rate['code'].upcase}"] = BigDecimal(rate["rate"].to_s)
|
24
24
|
result
|
25
25
|
end
|
26
26
|
end
|
@@ -1,17 +1,23 @@
|
|
1
1
|
module CurrencyRate
|
2
2
|
class BitstampAdapter < Adapter
|
3
3
|
SUPPORTED_CURRENCIES = %w(
|
4
|
-
BCH
|
4
|
+
BCH ETH LTC XRP
|
5
5
|
)
|
6
6
|
|
7
|
-
ANCHOR_CURRENCY = "
|
7
|
+
ANCHOR_CURRENCY = "BTC"
|
8
8
|
|
9
|
-
FETCH_URL = Hash[SUPPORTED_CURRENCIES.collect { |currency| [ currency, "https://www.bitstamp.net/api/v2/ticker/#{currency}
|
9
|
+
FETCH_URL = Hash[SUPPORTED_CURRENCIES.collect { |currency| [ currency, "https://www.bitstamp.net/api/v2/ticker/#{currency}#{ANCHOR_CURRENCY}/".downcase ] }]
|
10
|
+
FETCH_URL["USD"] = "https://www.bitstamp.net/api/ticker/"
|
10
11
|
|
11
12
|
def normalize(data)
|
12
13
|
return nil unless super
|
13
|
-
data.reduce({ "anchor" => ANCHOR_CURRENCY
|
14
|
-
|
14
|
+
data.reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, (key, value)|
|
15
|
+
if key == "USD"
|
16
|
+
result[key] = BigDecimal(value["last"].to_s)
|
17
|
+
else
|
18
|
+
result[key] = 1 / BigDecimal(value["last"].to_s)
|
19
|
+
end
|
20
|
+
|
15
21
|
result
|
16
22
|
end
|
17
23
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module CurrencyRate
|
2
|
+
class CoinMarketCapAdapter < Adapter
|
3
|
+
# No need to use it for fetching, just additional information about supported currencies
|
4
|
+
SUPPORTED_CURRENCIES = %w(
|
5
|
+
ADA AE AION AOA ARDR ARK BAT BCD BCH BCN BCZERO BNB BNT BSV
|
6
|
+
BTC BTG BTM BTS CNX CRO DAI DASH DCN DCR DEX DGB DGD DGTX DOGE
|
7
|
+
ELA EOS ETC ETH ETN ETP FCT GNT GUSD HOT ICX INB IOST KCS KMD
|
8
|
+
LINK LKY LRC LSK LTC MAID MANA MCO MGO MIOTA MKR MONA MXM NANO
|
9
|
+
NEO NEXO NPXS ODE OMG ONT PAX PIVX POLY PPT QTUM RDD REP REPO
|
10
|
+
RVN SNT STEEM STRAT TRX TUSD USDC USDT VET WAN WAVES WAX WTC
|
11
|
+
XEM XIN XLM XMR XRP XTZ XVG XZC ZEC ZIL ZRX
|
12
|
+
)
|
13
|
+
|
14
|
+
ANCHOR_CURRENCY = "BTC"
|
15
|
+
|
16
|
+
FETCH_URL = "https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest"
|
17
|
+
API_KEY_PARAM = "CMC_PRO_API_KEY"
|
18
|
+
|
19
|
+
def normalize(data)
|
20
|
+
return nil unless super
|
21
|
+
data["data"].each_with_object({ "anchor" => ANCHOR_CURRENCY }) do |payload, result|
|
22
|
+
if payload["symbol"] == ANCHOR_CURRENCY
|
23
|
+
result["USD"] = BigDecimal(payload["quote"]["USD"]["price"].to_s)
|
24
|
+
else
|
25
|
+
result[payload["symbol"]] = result["USD"] / BigDecimal(payload["quote"]["USD"]["price"].to_s)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -21,7 +21,7 @@ module CurrencyRate
|
|
21
21
|
def normalize(response)
|
22
22
|
return nil unless super
|
23
23
|
response["data"]["rates"].reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, (currency, rate)|
|
24
|
-
result[currency] = BigDecimal
|
24
|
+
result[currency] = BigDecimal(rate.to_s)
|
25
25
|
result
|
26
26
|
end
|
27
27
|
end
|
@@ -15,9 +15,9 @@ module CurrencyRate
|
|
15
15
|
return nil unless super
|
16
16
|
data.reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, (key, value)|
|
17
17
|
if key.split("_")[0] == ANCHOR_CURRENCY
|
18
|
-
result[key.sub("#{self.class::ANCHOR_CURRENCY}_", "")] = BigDecimal
|
18
|
+
result[key.sub("#{self.class::ANCHOR_CURRENCY}_", "")] = BigDecimal(value["avg"].to_s)
|
19
19
|
elsif key.split("_")[1] == ANCHOR_CURRENCY
|
20
|
-
result[key.sub("_#{self.class::ANCHOR_CURRENCY}", "")] = 1 / BigDecimal
|
20
|
+
result[key.sub("_#{self.class::ANCHOR_CURRENCY}", "")] = 1 / BigDecimal(value["avg"].to_s)
|
21
21
|
end
|
22
22
|
result
|
23
23
|
end
|
@@ -2,31 +2,37 @@ module CurrencyRate
|
|
2
2
|
class KrakenAdapter < Adapter
|
3
3
|
SUPPORTED_CURRENCIES = %w(
|
4
4
|
ADA BCH BSV BTC DASH EOS ETC ETH GNO LTC MLN
|
5
|
-
NMC QTUM REP
|
5
|
+
NMC QTUM REP XDG XLM XMR XRP XTZ ZEC
|
6
6
|
)
|
7
7
|
|
8
8
|
ASSET_MAP = {
|
9
9
|
"XXBTZ" => "BTC",
|
10
|
-
"
|
11
|
-
"
|
12
|
-
"
|
13
|
-
"
|
14
|
-
"
|
15
|
-
"
|
16
|
-
"
|
17
|
-
"
|
18
|
-
"
|
19
|
-
"
|
10
|
+
"XETCX" => "ETC",
|
11
|
+
"XETHX" => "ETH",
|
12
|
+
"XLTCX" => "LTC",
|
13
|
+
"XREPX" => "REP",
|
14
|
+
"XXLMX" => "XLM",
|
15
|
+
"XXMRX" => "XMR",
|
16
|
+
"XXRPX" => "XRP",
|
17
|
+
"XZECX" => "ZEC",
|
18
|
+
"XZUSD" => "USD",
|
19
|
+
"BTC" => "XBT",
|
20
20
|
}
|
21
21
|
|
22
|
-
ANCHOR_CURRENCY = "
|
22
|
+
ANCHOR_CURRENCY = "BTC"
|
23
23
|
|
24
|
-
FETCH_URL = "https://api.kraken.com/0/public/Ticker?pair=#{ %w(
|
24
|
+
FETCH_URL = "https://api.kraken.com/0/public/Ticker?pair=#{ %w(ADAXBT BCHXBT BSVXBT DASHXBT EOSXBT GNOXBT QTUMXBT XTZXBT XETCXXBT XETHXXBT XLTCXXBT XREPXXBT XXLMXXBT XXMRXXBT XXRPXXBT XZECXXBT XXBTZUSD).join(",") }"
|
25
25
|
|
26
26
|
def normalize(data)
|
27
27
|
return nil unless super
|
28
|
-
data["result"].reduce({ "anchor" => ANCHOR_CURRENCY
|
29
|
-
|
28
|
+
data["result"].reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, (pair, value)|
|
29
|
+
key = ta(pair.sub(ta(ANCHOR_CURRENCY), ""))
|
30
|
+
|
31
|
+
if key == "USD"
|
32
|
+
result[key] = BigDecimal(value["c"].first.to_s)
|
33
|
+
else
|
34
|
+
result[key] = 1 / BigDecimal(value["c"].first.to_s)
|
35
|
+
end
|
30
36
|
result
|
31
37
|
end
|
32
38
|
end
|