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.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +22 -0
  3. data/Gemfile +3 -8
  4. data/Rakefile +6 -25
  5. data/api_keys.yml.sample +1 -0
  6. data/currency-rate.gemspec +33 -133
  7. data/lib/adapters/crypto/binance_adapter.rb +3 -3
  8. data/lib/adapters/crypto/bitfinex_adapter.rb +2 -2
  9. data/lib/adapters/crypto/bitpay_adapter.rb +1 -1
  10. data/lib/adapters/crypto/bitstamp_adapter.rb +11 -5
  11. data/lib/adapters/crypto/btc_china_adapter.rb +1 -1
  12. data/lib/adapters/crypto/btc_e_adapter.rb +1 -1
  13. data/lib/adapters/crypto/coin_market_cap_adapter.rb +31 -0
  14. data/lib/adapters/crypto/coinbase_adapter.rb +1 -1
  15. data/lib/adapters/crypto/exmo_adapter.rb +2 -2
  16. data/lib/adapters/crypto/huobi_adapter.rb +1 -1
  17. data/lib/adapters/crypto/kraken_adapter.rb +21 -15
  18. data/lib/adapters/crypto/localbitcoins_adapter.rb +1 -1
  19. data/lib/adapters/crypto/okcoin_adapter.rb +1 -1
  20. data/lib/adapters/fiat/bonbast_adapter.rb +25 -0
  21. data/lib/adapters/fiat/currency_layer_adapter.rb +1 -1
  22. data/lib/adapters/fiat/fixer_adapter.rb +1 -1
  23. data/lib/adapters/fiat/forge_adapter.rb +1 -1
  24. data/lib/adapters/fiat/free_forex_adapter.rb +1 -1
  25. data/lib/adapters/fiat/yahoo_adapter.rb +1 -1
  26. data/lib/configuration.rb +4 -0
  27. data/lib/currency_rate.rb +3 -1
  28. data/lib/currency_rate/version.rb +3 -0
  29. data/lib/fetcher.rb +26 -6
  30. data/lib/synchronizer.rb +1 -1
  31. metadata +23 -95
  32. data/VERSION +0 -1
  33. data/spec/fixtures/adapters/binance_rates.yml +0 -993
  34. data/spec/fixtures/adapters/bitfinex_rates.yml +0 -4050
  35. data/spec/fixtures/adapters/bitpay_rates.yml +0 -490
  36. data/spec/fixtures/adapters/bitstamp_rates.yml +0 -61
  37. data/spec/fixtures/adapters/btc_china_rates.yml +0 -11
  38. data/spec/fixtures/adapters/btce_rates.yml +0 -60
  39. data/spec/fixtures/adapters/coinbase_rates.yml +0 -181
  40. data/spec/fixtures/adapters/currency_layer_rates.yml +0 -174
  41. data/spec/fixtures/adapters/exmo_rates.yml +0 -1251
  42. data/spec/fixtures/adapters/fixer_rates.yml +0 -174
  43. data/spec/fixtures/adapters/forge_rates.yml +0 -75
  44. data/spec/fixtures/adapters/free_forex_rates.yml +0 -59
  45. data/spec/fixtures/adapters/huobi_rates.yml +0 -22
  46. data/spec/fixtures/adapters/kraken_rates.yml +0 -507
  47. data/spec/fixtures/adapters/localbitcoins_rates.yml +0 -493
  48. data/spec/fixtures/adapters/normalized/binance_rates.yml +0 -134
  49. data/spec/fixtures/adapters/normalized/bitfinex_rates.yml +0 -95
  50. data/spec/fixtures/adapters/normalized/bitpay_rates.yml +0 -164
  51. data/spec/fixtures/adapters/normalized/bitstamp_rates.yml +0 -9
  52. data/spec/fixtures/adapters/normalized/btc_china_rates.yml +0 -1
  53. data/spec/fixtures/adapters/normalized/btce_rates.yml +0 -5
  54. data/spec/fixtures/adapters/normalized/coinbase_rates.yml +0 -179
  55. data/spec/fixtures/adapters/normalized/currency_layer_rates.yml +0 -169
  56. data/spec/fixtures/adapters/normalized/exmo_rates.yml +0 -42
  57. data/spec/fixtures/adapters/normalized/fixer_rates.yml +0 -170
  58. data/spec/fixtures/adapters/normalized/forge_rates.yml +0 -16
  59. data/spec/fixtures/adapters/normalized/free_forex_rates.yml +0 -16
  60. data/spec/fixtures/adapters/normalized/huobi_rates.yml +0 -2
  61. data/spec/fixtures/adapters/normalized/kraken_rates.yml +0 -21
  62. data/spec/fixtures/adapters/normalized/localbitcoins_rates.yml +0 -73
  63. data/spec/fixtures/adapters/normalized/okcoin_rates.yml +0 -4
  64. data/spec/fixtures/adapters/normalized/yahoo_rates.yml +0 -160
  65. data/spec/fixtures/adapters/okcoin_rates.yml +0 -40
  66. data/spec/fixtures/adapters/yahoo_rates.yml +0 -1119
  67. data/spec/lib/adapter_spec.rb +0 -54
  68. data/spec/lib/adapters/crypto/binance_adapter_spec.rb +0 -13
  69. data/spec/lib/adapters/crypto/bitfinex_adapter_spec.rb +0 -13
  70. data/spec/lib/adapters/crypto/bitpay_adapter_spec.rb +0 -13
  71. data/spec/lib/adapters/crypto/bitstamp_adapter_spec.rb +0 -13
  72. data/spec/lib/adapters/crypto/btc_china_adapter_spec.rb +0 -13
  73. data/spec/lib/adapters/crypto/btc_e_adapter_spec.rb +0 -13
  74. data/spec/lib/adapters/crypto/coinbase_adapter_spec.rb +0 -13
  75. data/spec/lib/adapters/crypto/exmo_adapter_spec.rb +0 -13
  76. data/spec/lib/adapters/crypto/huobi_adapter_spec.rb +0 -13
  77. data/spec/lib/adapters/crypto/kraken_adapter_spec.rb +0 -13
  78. data/spec/lib/adapters/crypto/localbitcoins_adapter_spec.rb +0 -13
  79. data/spec/lib/adapters/crypto/okcoin_adapter_spec.rb +0 -13
  80. data/spec/lib/adapters/fiat/currency_layer_adapter_spec.rb +0 -23
  81. data/spec/lib/adapters/fiat/fixer_adapter_spec.rb +0 -13
  82. data/spec/lib/adapters/fiat/forge_adapter_spec.rb +0 -23
  83. data/spec/lib/adapters/fiat/free_forex_adapter_spec.rb +0 -13
  84. data/spec/lib/adapters/fiat/yahoo_adapter_spec.rb +0 -13
  85. data/spec/lib/currency_rate_spec.rb +0 -9
  86. data/spec/lib/fetcher_spec.rb +0 -124
  87. data/spec/lib/storage/file_storage_spec.rb +0 -38
  88. data/spec/lib/synchronizer_spec.rb +0 -99
  89. data/spec/spec_helper.rb +0 -28
  90. 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: 7ba5e25c02543d961b4806289dbe718957c31cf1350af31a0b19898fd409841c
4
- data.tar.gz: 53f4d584d115d88bfb62ed75679a60e5aa2c46b20e48c6ebd5bfe168bda3c100
3
+ metadata.gz: e2b3592a76d84c04886ccbf012e9219cece2cdc83291671490321bfe34a648e9
4
+ data.tar.gz: ed430865a39659096db69c0b7d8ff6d3118d06a3982ffe2cc84149579038311d
5
5
  SHA512:
6
- metadata.gz: 44fceddd1f172848b0c67506d061a24f3b80cdb494a752acbd40a72e82e66f5b7524debff9c96bcdef3153efe6601e12d1dc75f4b5db96d7c1414a50091061a9
7
- data.tar.gz: 96a8c935a0dba5d299501898e052c098b4db93dcaa727ed4bb45ad167e88b3213372775eca21abcfe6b24005de65309d22bf37b7c2d6c1cd44a2e2c79f649925
6
+ metadata.gz: 958c61580032047f811e8172244a3773a4151598f454337cc797beeab2438b2c1dcf0a5ff2251ec4dc76eb3d21dca1def1d6b0f755a9278af3abb9093eb7357a
7
+ data.tar.gz: dccc3366ce853113f925843ebe9deba636a0e02a60cb6a136e056ea7456621b64344e027229b899c20dfb57c0780d7ca8d00f465a398a22e4d505e5ce511050f
@@ -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
- gem "http"
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
- group :development do
6
- gem "byebug"
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")
@@ -1,3 +1,4 @@
1
1
  ForgeAdapter: "<your_key>"
2
2
  CurrencyLayerAdapter: "<your_key>"
3
3
  FixerAdapter: "<your_key>"
4
+ CoinMarketCapAdapter: "<your_key>"
@@ -1,141 +1,41 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
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 |s|
8
- s.name = "currency-rate".freeze
9
- s.version = "1.4.0"
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
- s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
- s.require_paths = ["lib".freeze]
13
- s.authors = ["Roman Snitko".freeze]
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
- if s.respond_to? :specification_version then
115
- s.specification_version = 4
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
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
118
- s.add_runtime_dependency(%q<http>.freeze, [">= 0"])
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
- s.add_dependency(%q<http>.freeze, [">= 0"])
134
- s.add_dependency(%q<byebug>.freeze, [">= 0"])
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.new(hash["price"].to_s)
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.new(hash["price"].to_s)
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.new(value["last"].to_s)
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.new(pair_info[7].to_s)
30
+ result[key] = BigDecimal(pair_info[7].to_s)
31
31
  elsif pair_name.index(ANCHOR_CURRENCY) == 3
32
- result[key] = 1 / BigDecimal.new(pair_info[7].to_s)
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.new(rate["rate"].to_s)
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 BTC ETH EUR LTC XRP
4
+ BCH ETH LTC XRP
5
5
  )
6
6
 
7
- ANCHOR_CURRENCY = "USD"
7
+ ANCHOR_CURRENCY = "BTC"
8
8
 
9
- FETCH_URL = Hash[SUPPORTED_CURRENCIES.collect { |currency| [ currency, "https://www.bitstamp.net/api/v2/ticker/#{currency}usd/".downcase ] }]
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, ANCHOR_CURRENCY => BigDecimal.new("1") }) do |result, (key, value)|
14
- result[key] = 1 / BigDecimal.new(value["last"].to_s)
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
@@ -4,7 +4,7 @@ module CurrencyRate
4
4
 
5
5
  def normalize(data)
6
6
  return nil unless super
7
- { "BTC_CNY" => BigDecimal.new(data["ticker"]["last"].to_s) }
7
+ { "BTC_CNY" => BigDecimal(data["ticker"]["last"].to_s) }
8
8
  end
9
9
 
10
10
  end
@@ -9,7 +9,7 @@ module CurrencyRate
9
9
  def normalize(data)
10
10
  return nil unless super
11
11
  data.reduce({}) do |result, (pair, value)|
12
- result[pair] = BigDecimal.new(value["ticker"]["last"].to_s)
12
+ result[pair] = BigDecimal(value["ticker"]["last"].to_s)
13
13
  result
14
14
  end
15
15
  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.new(rate.to_s)
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.new(value["avg"].to_s)
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.new(value["avg"].to_s)
20
+ result[key.sub("_#{self.class::ANCHOR_CURRENCY}", "")] = 1 / BigDecimal(value["avg"].to_s)
21
21
  end
22
22
  result
23
23
  end
@@ -8,7 +8,7 @@ module CurrencyRate
8
8
  def normalize(data)
9
9
  return nil unless super
10
10
  data.reduce({}) do |result, (pair, value)|
11
- result[pair] = BigDecimal.new(value["ticker"]["last"].to_s)
11
+ result[pair] = BigDecimal(value["ticker"]["last"].to_s)
12
12
  result
13
13
  end
14
14
  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 USDT XDG XLM XMR XRP XTZ ZEC
5
+ NMC QTUM REP XDG XLM XMR XRP XTZ ZEC
6
6
  )
7
7
 
8
8
  ASSET_MAP = {
9
9
  "XXBTZ" => "BTC",
10
- "XETCZ" => "ETC",
11
- "XETHZ" => "ETH",
12
- "XLTCZ" => "LTC",
13
- "XREPZ" => "REP",
14
- "XXLMZ" => "XLM",
15
- "XXMRZ" => "XMR",
16
- "XXRPZ" => "XRP",
17
- "XZECZ" => "ZEC",
18
- "USDTZ" => "USDT",
19
- "TZUSD" => "USDT",
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 = "USD"
22
+ ANCHOR_CURRENCY = "BTC"
23
23
 
24
- FETCH_URL = "https://api.kraken.com/0/public/Ticker?pair=#{ %w(ADAUSD BCHUSD BSVUSD DASHUSD EOSUSD GNOUSD QTUMUSD XTZUSD USDTZUSD XETCZUSD XETHZUSD XLTCZUSD XREPZUSD XXLMZUSD XXMRZUSD XXRPZUSD XZECZUSD XXBTZUSD).join(",") }"
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, ANCHOR_CURRENCY => BigDecimal.new("1") }) do |result, (pair, value)|
29
- result[ta(pair.sub(ANCHOR_CURRENCY, ""))] = 1 / BigDecimal.new(value["c"].first.to_s)
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