currency-rate 1.5.2 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 950e602e798e7f28304ac975f823d6fae3206948d5727265c7cf26691d8ed7b5
4
- data.tar.gz: 3f5681d9fd1493f0db80ff439c66825d75db5b3039fb4ec78a591b8dbc324033
3
+ metadata.gz: db91dd121b519bd89adba8d9576c0746792e5a9e40206347284ed4fc9acc3089
4
+ data.tar.gz: ae3c3b6b260e4e202d25e602fc215ff7f2f55837a8b0e355da6d8e3c565961b6
5
5
  SHA512:
6
- metadata.gz: 9a4c75d34c15879cc85d1ec7fce511f2d20513fc037c92f5c3636abf505006c5c60516819b623706bb194a86626e54eb77beafdec59c5f2070ee638aa87faec6
7
- data.tar.gz: 8fa6692c0d139a956a1e5a18cd89f9140189a3db4976496c52017537a5a446e5474d3dd5d7aa0dfc4171b78ed67a9a9c448ca6d90f3469bda75d369b3e6149ea
6
+ metadata.gz: 6dbceacbf49cfb2d1f06174e443748ae6fced938b1ab2504e2a213d437afad3bf0cb822cd08041675e69fb55b9abc7e108c7433ed0c9e19621c9a17ab9f1da0c
7
+ data.tar.gz: 7fa1c6d94d9c34f9fd3ce672e044b24ee30ca081bda69bd19354902bd8df902bb6f5e073aac0525714f30d6d01bad1c7bb2cf21c835ebe278d457277e3760588
data/.gitignore CHANGED
@@ -16,7 +16,5 @@ pkg
16
16
 
17
17
  .byebug_history
18
18
 
19
- Gemfile.lock
20
-
21
19
  # Private API keys for adapters
22
20
  api_keys.yml
@@ -0,0 +1,68 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ currency-rate (1.7.0)
5
+ http (>= 4.3)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ addressable (2.7.0)
11
+ public_suffix (>= 2.0.2, < 5.0)
12
+ byebug (11.0.1)
13
+ crack (0.4.3)
14
+ safe_yaml (~> 1.0.0)
15
+ diff-lcs (1.3)
16
+ domain_name (0.5.20190701)
17
+ unf (>= 0.0.5, < 1.0.0)
18
+ ffi (1.13.1)
19
+ ffi-compiler (1.0.1)
20
+ ffi (>= 1.0.0)
21
+ rake
22
+ hashdiff (1.0.0)
23
+ http (4.4.1)
24
+ addressable (~> 2.3)
25
+ http-cookie (~> 1.0)
26
+ http-form_data (~> 2.2)
27
+ http-parser (~> 1.2.0)
28
+ http-cookie (1.0.3)
29
+ domain_name (~> 0.5)
30
+ http-form_data (2.3.0)
31
+ http-parser (1.2.1)
32
+ ffi-compiler (>= 1.0, < 2.0)
33
+ public_suffix (4.0.1)
34
+ rake (10.5.0)
35
+ rspec (3.9.0)
36
+ rspec-core (~> 3.9.0)
37
+ rspec-expectations (~> 3.9.0)
38
+ rspec-mocks (~> 3.9.0)
39
+ rspec-core (3.9.0)
40
+ rspec-support (~> 3.9.0)
41
+ rspec-expectations (3.9.0)
42
+ diff-lcs (>= 1.2.0, < 2.0)
43
+ rspec-support (~> 3.9.0)
44
+ rspec-mocks (3.9.0)
45
+ diff-lcs (>= 1.2.0, < 2.0)
46
+ rspec-support (~> 3.9.0)
47
+ rspec-support (3.9.0)
48
+ safe_yaml (1.0.5)
49
+ unf (0.1.4)
50
+ unf_ext
51
+ unf_ext (0.0.7.7)
52
+ webmock (3.7.6)
53
+ addressable (>= 2.3.6)
54
+ crack (>= 0.3.2)
55
+ hashdiff (>= 0.4.0, < 2.0.0)
56
+
57
+ PLATFORMS
58
+ ruby
59
+
60
+ DEPENDENCIES
61
+ byebug
62
+ currency-rate!
63
+ rake (~> 10.0)
64
+ rspec (~> 3.0)
65
+ webmock
66
+
67
+ BUNDLED WITH
68
+ 2.1.2
data/README.md CHANGED
@@ -20,8 +20,8 @@ CurrencyRate.configure do |config|
20
20
  # Empty array by default
21
21
  config.api_keys["ForgeAdapter"] = "forge_api_key"
22
22
 
23
- # CurrencyRate::FileStorage configuration has only 'path' attribute
24
- config.file_storage[:path] = "/home/user/data" # default: ""
23
+ # CurrencyRate::FileStorage is built-in storage provider and has only `path` parameter
24
+ config.storage << CurrencyRate::FileStorage(path: "/home/user/data")
25
25
 
26
26
  # CurrencyRate uses default Logger from Ruby core library
27
27
  # It can be replaced with any compatible object
data/Rakefile CHANGED
@@ -9,7 +9,7 @@ RSpec::Core::RakeTask.new(:spec)
9
9
  task :default => :spec
10
10
 
11
11
  desc "Update rates for specified adapter"
12
- task :update_rates, [:exchange] do |t, args|
12
+ task :update_rates, [:exchange] do |_, args|
13
13
  api_keys = YAML.load_file("api_keys.yml")
14
14
 
15
15
  CurrencyRate.configure do |config|
@@ -20,15 +20,24 @@ task :update_rates, [:exchange] do |t, args|
20
20
 
21
21
  print "Loading data for #{args.exchange}... "
22
22
  exchange_data = adapter.exchange_data
23
- raw_storage = CurrencyRate::FileStorage.new(File.expand_path("spec/fixtures/adapters", __dir__))
23
+ raw_storage = CurrencyRate::FileStorage.new(path: File.expand_path("spec/fixtures/adapters", __dir__))
24
24
  raw_storage.write(args.exchange, exchange_data)
25
25
  puts "Success!"
26
26
 
27
27
  print "Normalizing data for #{args.exchange}..."
28
28
  normalized_data = adapter.normalize exchange_data
29
- normalized_storage = CurrencyRate::FileStorage.new(File.expand_path("spec/fixtures/adapters/normalized", __dir__))
29
+ normalized_storage = CurrencyRate::FileStorage.new(path: File.expand_path("spec/fixtures/adapters/normalized", __dir__))
30
30
  normalized_storage.write(args.exchange, normalized_data)
31
31
  puts "Success!"
32
32
 
33
33
  puts "#{args.exchange} fixtures update finished!"
34
34
  end
35
+
36
+ desc "Update rates for all defined adapters"
37
+ task :update_all_rates do |_, _|
38
+ CurrencyRate.constants.grep(/.Adapter$/).each do |name|
39
+ short_name = name.to_s.sub("Adapter", "")
40
+ Rake::Task[:update_rates].invoke(short_name)
41
+ Rake::Task[:update_rates].reenable
42
+ end
43
+ end
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
32
  spec.require_paths = ["lib"]
33
33
 
34
- spec.add_dependency "http", ">= 0"
34
+ spec.add_dependency "http", ">= 4.3"
35
35
 
36
36
  spec.add_development_dependency "byebug"
37
37
  spec.add_development_dependency "rake", "~> 10.0"
@@ -1,4 +1,3 @@
1
-
2
1
  module CurrencyRate
3
2
  class Adapter
4
3
  include Singleton
@@ -59,7 +58,13 @@ module CurrencyRate
59
58
  fetch_url << "#{param_symbol}#{self.class::API_KEY_PARAM}=#{api_key}" if api_key
60
59
  end
61
60
  http_client = HTTP.timeout(connect: CurrencyRate.configuration.connect_timeout, read: CurrencyRate.configuration.read_timeout)
62
- JSON.parse(http_client.get(fetch_url).to_s)
61
+ JSON.parse(
62
+ http_client
63
+ .headers("Accept" => "application/json; version=1")
64
+ .headers("Content-Type" => "text/plain")
65
+ .get(fetch_url)
66
+ .to_s
67
+ )
63
68
  end
64
69
 
65
70
  end
@@ -6,13 +6,14 @@ module CurrencyRate
6
6
  DAD DAI DAT DGB DASH DTA DTH EDO ELF EOS ESS ETC ETH ETP EUR FSN FUN GBP
7
7
  GNT HOT IOS IOT IQX JPY KNC LRC LTC LYM MIT MKR MNA MTN NCA NEO ODE OMG
8
8
  OMNI ORS PAI POA POY QSH QTM RBT RCN RDN REP REQ RLC RRT SAN SEE SEN SNG
9
- SNT SPK STJ TNB TRX USD UTK VEE VET WAX WPR XLM XMR XRP XTZ XVG YYW ZCN
9
+ SNT SPK STJ TNB TRX USD USDT UTK VEE VET WAX WPR XLM XMR XRP XTZ XVG YYW ZCN
10
10
  ZEC ZIL ZRX
11
11
  )
12
12
 
13
13
  ASSET_MAP = {
14
14
  "DSH" => "DASH",
15
15
  "OMN" => "OMNI",
16
+ "UST" => "USDT",
16
17
  }
17
18
 
18
19
  ANCHOR_CURRENCY = "BTC"
@@ -0,0 +1,61 @@
1
+ module CurrencyRate
2
+ class HitBTCAdapter < Adapter
3
+ SUPPORTED_CURRENCIES = %w(ZRC EDG IHT AEON SOC HBAR ZRX OPT APPC DRGN PTOY
4
+ XDN OKB CHSB NCT GUSD GET FUN EXP EMRX REV GHOST
5
+ BMH SNC DTR ERD SCL HMQ ACT ETC QTUM MTX SBTC
6
+ KIND SMT BTB SWFTC 1ST UTT AXPR NMR EVX IOTA XPRM
7
+ STMX SALT DGB NTK AMM ALGO ORMEUS BDG BQX EKO FYP
8
+ IPX HOT MG BTS ADX CRPT WAXP POA PLBT SHIP HTML
9
+ BOX GNO UBT BTT ZEN VEO POA20 BCPT SRN XPR ETHBNT
10
+ MANA QKC MLN FLP SOLO TRUE VSYS JST GNT BOS PHB
11
+ ZEC ESH SWM NANO VIBE HVN SOLVE ELEC LRC AGI LNC
12
+ WAVES WTC ONT STRAT GNX NEU BCN XPNT ECA ARDR KIN
13
+ LSK USE IOTX CRO IDH LINK OAX CPT NGC XNS KEY TKY
14
+ HSR TNT SMART TRST DCR WINGS GT MKR ONE DOGE ARN
15
+ ACAT BMC RAISE EXM TIME REX FDZ HT MTH SCC BET
16
+ DENT IDRT IPL ZAP CMCT TDP XAUR MTL NEBL SUSDT BAT
17
+ STEEM CUR BYTZ PRO LOOM USD DRG DICE ADK COMP DRT
18
+ XTZ WETH EURS CHZ NEO NPLC XCON LEVL PAX AIM PART
19
+ PRE ERK HEDG FET PAXG DAG AVA CUTE NEXO DAY PITCH
20
+ MITX NXT POWR PLR CVCOIN TUSD MYST DLT REM RLC DNA
21
+ FOTA SBD ELF TEL C20 PNT CND UTK ASI CVC ETP ETH
22
+ ZIL ARPA INK NPXS LEO MESH NIM DATX FXT PBT GST
23
+ BSV GAS CBC MCO SENT GBX XRC POE SUR LOC WIKI PPT
24
+ CVT APM LEND NUT DOV KMD AYA LUN XEM RVN BCD XMR
25
+ NWC USG CLO NLC2 BBTC BERRY ART GRIN VITAE XBP OMG
26
+ MDA KRL BCH POLY PLA BANCA ENJ TRIGX UUU PASS ANT
27
+ LAMB BIZZ RFR AMB ROOBEE BST LCC RCN MIN BUSD DIT
28
+ PPC AE IQ BNK CENNZ SUB OCN DGD VRA STX AERGO HGT
29
+ TRAD IGNIS REP DAPP DNT CDT YCC SNGLS ICX PKT COV
30
+ PAY ABYSS BLZ DAV TKN ERT SPC SEELE XZC MAID AUTO
31
+ REN DATA AUC TV LAVA KAVA DAI DAPS ADA COCOS MITH
32
+ SETH NRG PHX DASH VLX CHAT VET EOSDT ZSC KNC DGTX
33
+ CEL SHORTUSD IOST BNB PBTT XMC EMC VIB BNT STORJ
34
+ ATOM LCX SC FTT BTM XLM TRX CELR BRD DBIX ETN SNT
35
+ MOF HEX XUC PLU FACE TNC SIG PXG BDP BTX TAU DCT
36
+ YOYOW SYBC SWT MAN GLEEC EOS XVG NAV CURE XRP KICK
37
+ BRDG LTC USDC MATIC FTX BTG PMA).freeze
38
+
39
+ ANCHOR_CURRENCY = "BTC".freeze
40
+
41
+ FETCH_URL = "https://api.hitbtc.com/api/2/public/ticker".freeze
42
+
43
+ def normalize(data)
44
+ return nil unless super
45
+
46
+ data.each_with_object({ "anchor" => ANCHOR_CURRENCY }) do |pair_info, result|
47
+ pair_name = pair_info["symbol"]
48
+ next unless pair_name.include?(ANCHOR_CURRENCY)
49
+
50
+ key = pair_name.sub(ANCHOR_CURRENCY, "")
51
+
52
+ result[key] =
53
+ if pair_name.index(ANCHOR_CURRENCY) == 0
54
+ BigDecimal(pair_info["last"])
55
+ else
56
+ 1 / BigDecimal(pair_info["last"])
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -1,17 +1,25 @@
1
1
  module CurrencyRate
2
2
  class HuobiAdapter < Adapter
3
- FETCH_URL = {
4
- "BTC_CNY" => "http://api.huobi.com/staticmarket/ticker_btc_json.js",
5
- "LTC_CNY" => "http://api.huobi.com/staticmarket/ticker_ltc_json.js"
6
- }
3
+ FETCH_URL = "https://api.huobi.pro/market/tickers".freeze
4
+
5
+ ANCHOR_CURRENCY = "BTC"
7
6
 
8
7
  def normalize(data)
9
8
  return nil unless super
10
- data.reduce({}) do |result, (pair, value)|
11
- result[pair] = BigDecimal(value["ticker"]["last"].to_s)
12
- result
9
+
10
+ data["data"].each_with_object({ "anchor" => ANCHOR_CURRENCY }) do |pair_info, result|
11
+ pair_name = pair_info["symbol"].upcase
12
+ next unless pair_name.include?(ANCHOR_CURRENCY)
13
+
14
+ key = pair_name.sub(ANCHOR_CURRENCY, "")
15
+
16
+ result[key] =
17
+ if pair_name.index(ANCHOR_CURRENCY) == 0
18
+ BigDecimal(pair_info["close"].to_s)
19
+ else
20
+ 1 / BigDecimal(pair_info["close"].to_s)
21
+ end
13
22
  end
14
23
  end
15
-
16
24
  end
17
25
  end
@@ -1,8 +1,8 @@
1
1
  module CurrencyRate
2
2
  class KrakenAdapter < Adapter
3
3
  SUPPORTED_CURRENCIES = %w(
4
- ADA BCH BSV BTC DASH EOS ETC ETH GNO LTC MLN
5
- NMC QTUM REP XDG XLM XMR XRP XTZ ZEC
4
+ ADA BCH BSV BTC DAI DASH EOS ETC ETH GNO LTC MLN
5
+ NMC QTUM REP USDC XDG XLM XMR XRP XTZ ZEC
6
6
  )
7
7
 
8
8
  ASSET_MAP = {
@@ -21,14 +21,14 @@ module CurrencyRate
21
21
 
22
22
  ANCHOR_CURRENCY = "BTC"
23
23
 
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(",") }"
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 XBTDAI XBTUSDC).join(",") }"
25
25
 
26
26
  def normalize(data)
27
27
  return nil unless super
28
28
  data["result"].reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, (pair, value)|
29
29
  key = ta(pair.sub(ta(ANCHOR_CURRENCY), ""))
30
30
 
31
- if key == "USD"
31
+ if %w(USD DAI USDC).include?(key)
32
32
  result[key] = BigDecimal(value["c"].first.to_s)
33
33
  else
34
34
  result[key] = 1 / BigDecimal(value["c"].first.to_s)
@@ -0,0 +1,18 @@
1
+ module CurrencyRate
2
+ class PaxfulAdapter < Adapter
3
+ SUPPORTED_CURRENCIES = %w(USD)
4
+
5
+ ANCHOR_CURRENCY = "BTC"
6
+
7
+ FETCH_URL = "https://paxful.com/api/currency/btc"
8
+
9
+ def normalize(data)
10
+ return nil unless super
11
+
12
+ {
13
+ "anchor" => ANCHOR_CURRENCY,
14
+ "USD" => BigDecimal(data["price"].to_s)
15
+ }
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,33 @@
1
+ module CurrencyRate
2
+ class PoloniexAdapter < Adapter
3
+ SUPPORTED_CURRENCIES = %w(BTS DASH DOGE LTC NXT STR XEM XMR XRP USDT
4
+ ETH SC DCR LSK STEEM ETC REP ARDR ZEC STRAT
5
+ GNT ZRX CVC OMG GAS STORJ EOS SNT KNC BAT
6
+ LOOM QTUM USDC MANA BNT BCHABC BCHSV FOAM
7
+ NMR POLY LPT ATOM TRX ETHBNT LINK XTZ PAX
8
+ USDJ SNX MATIC MKR DAI NEO SWFTC FXC AVA
9
+ CHR BNB BUSD MDT XFIL LEND REN LRC WRX SXP
10
+ STPT SWAP EXE).freeze
11
+
12
+ ANCHOR_CURRENCY = "BTC".freeze
13
+
14
+ FETCH_URL = "https://poloniex.com/public?command=returnTicker".freeze
15
+
16
+ def normalize(data)
17
+ return nil unless super
18
+
19
+ data.each_with_object({ "anchor" => ANCHOR_CURRENCY }) do |(pair_name, pair_info), result|
20
+ next unless pair_name.include?(ANCHOR_CURRENCY)
21
+
22
+ key = pair_name.sub(ANCHOR_CURRENCY, "").sub("_", "")
23
+
24
+ result[key] =
25
+ if pair_name.index(ANCHOR_CURRENCY) == 0
26
+ 1 / BigDecimal(pair_info["last"])
27
+ else
28
+ BigDecimal(pair_info["last"])
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,19 @@
1
+ module CurrencyRate
2
+ class YadioAdapter < Adapter
3
+ SUPPORTED_CURRENCIES = %w(VES)
4
+
5
+ ANCHOR_CURRENCY = "BTC"
6
+
7
+ FETCH_URL = "https://api.yadio.io/rate/BTC"
8
+
9
+ def normalize(data)
10
+ return nil unless super
11
+
12
+ {
13
+ "anchor" => ANCHOR_CURRENCY,
14
+ "USD" => BigDecimal(data["usd"].to_s),
15
+ "VES" => BigDecimal(data["rate"].to_s),
16
+ }
17
+ end
18
+ end
19
+ end
@@ -1,18 +1,17 @@
1
1
  module CurrencyRate
2
2
  class Configuration
3
3
  attr_accessor :api_keys
4
- attr_accessor :file_storage
5
4
  attr_accessor :logger
6
5
  attr_accessor :crypto_adapters
7
6
  attr_accessor :fiat_adapters
8
7
  attr_accessor :connect_timeout
9
8
  attr_accessor :read_timeout
9
+ attr_accessor :storage
10
10
  attr_accessor :limit_sources_for_fiat_currencies
11
11
  attr_accessor :crypto_currencies
12
12
 
13
13
  def initialize
14
14
  @api_keys = { }
15
- @file_storage = { path: "" }
16
15
  @logger = {
17
16
  device: $stdout,
18
17
  level: :info,
@@ -4,6 +4,7 @@ require "singleton"
4
4
  require "json"
5
5
  require "http"
6
6
 
7
+ require_relative "exceptions"
7
8
  require_relative "configuration"
8
9
  require_relative "adapter"
9
10
  require_relative "fetcher"
@@ -1,3 +1,3 @@
1
1
  module CurrencyRate
2
- VERSION = "1.5.2"
2
+ VERSION = "1.7.0"
3
3
  end
@@ -0,0 +1,9 @@
1
+ module CurrencyRate
2
+ class CurrencyRateError < StandardError; end
3
+
4
+ class StorageNotDefinedError < CurrencyRateError
5
+ def initialize
6
+ super("Storage is not configured for currency-rate gem.")
7
+ end
8
+ end
9
+ end
@@ -6,7 +6,9 @@ module CurrencyRate
6
6
  attr_accessor :limit_sources_for_fiat_currencies
7
7
 
8
8
  def initialize(fiat_exchanges: nil, crypto_exchanges: nil, storage: nil, limit_sources_for_fiat_currencies: {})
9
- @storage = storage || FileStorage.new
9
+ @storage = storage || CurrencyRate.configuration.storage
10
+ raise CurrencyRate::StorageNotDefinedError unless @storage
11
+
10
12
  @fiat_exchanges = fiat_exchanges || ["Yahoo", "Fixer", "Forge"]
11
13
  @crypto_exchanges = crypto_exchanges || ["Bitstamp", "Binance"]
12
14
  @limit_sources_for_fiat_currencies = limit_sources_for_fiat_currencies
@@ -3,8 +3,8 @@ module CurrencyRate
3
3
  attr_reader :path
4
4
  attr_accessor :serializer
5
5
 
6
- def initialize(path = nil, serializer: nil)
7
- @path = path || CurrencyRate.configuration.file_storage[:path]
6
+ def initialize(path:, serializer: nil)
7
+ @path = path
8
8
  @serializer = serializer || Storage::YAMLSerializer.new
9
9
  end
10
10
 
@@ -3,7 +3,8 @@ module CurrencyRate
3
3
  attr_accessor :storage
4
4
 
5
5
  def initialize(storage: nil)
6
- @storage = storage || FileStorage.new
6
+ @storage = storage || CurrencyRate.configuration.storage
7
+ raise CurrencyRate::StorageNotDefinedError unless @storage
7
8
  end
8
9
 
9
10
  def sync_fiat!
@@ -28,14 +29,16 @@ module CurrencyRate
28
29
  adapters.each do |provider|
29
30
  adapter_name = "#{provider}Adapter"
30
31
  begin
31
- adapter = CurrencyRate::const_get(adapter_name).instance
32
+ adapter = CurrencyRate.const_get(adapter_name).instance
32
33
  rates = adapter.fetch_rates
34
+
33
35
  unless rates
34
36
  CurrencyRate.logger.warn("Synchronizer#sync!: rates for #{provider} not found")
35
37
  failed.push(provider)
36
38
  next
37
39
  end
38
- exchange_name = provider.downcase
40
+
41
+ exchange_name = provider
39
42
  @storage.write(exchange_name, rates)
40
43
  successfull.push(provider)
41
44
  rescue StandardError => e
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: currency-rate
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roman Snitko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-29 00:00:00.000000000 Z
11
+ date: 2020-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '4.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '4.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: byebug
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -90,12 +90,11 @@ files:
90
90
  - ".gitignore"
91
91
  - ".rspec"
92
92
  - Gemfile
93
+ - Gemfile.lock
93
94
  - LICENSE.txt
94
95
  - README.md
95
96
  - Rakefile
96
97
  - api_keys.yml.sample
97
- - bin/rake
98
- - bin/rspec
99
98
  - currency-rate.gemspec
100
99
  - lib/adapter.rb
101
100
  - lib/adapters/crypto/binance_adapter.rb
@@ -107,10 +106,14 @@ files:
107
106
  - lib/adapters/crypto/coin_market_cap_adapter.rb
108
107
  - lib/adapters/crypto/coinbase_adapter.rb
109
108
  - lib/adapters/crypto/exmo_adapter.rb
109
+ - lib/adapters/crypto/hit_btc_adapter.rb
110
110
  - lib/adapters/crypto/huobi_adapter.rb
111
111
  - lib/adapters/crypto/kraken_adapter.rb
112
112
  - lib/adapters/crypto/localbitcoins_adapter.rb
113
113
  - lib/adapters/crypto/okcoin_adapter.rb
114
+ - lib/adapters/crypto/paxful_adapter.rb
115
+ - lib/adapters/crypto/poloniex_adapter.rb
116
+ - lib/adapters/crypto/yadio_adapter.rb
114
117
  - lib/adapters/fiat/bonbast_adapter.rb
115
118
  - lib/adapters/fiat/coinmonitor_adapter.rb
116
119
  - lib/adapters/fiat/currency_layer_adapter.rb
@@ -121,6 +124,7 @@ files:
121
124
  - lib/configuration.rb
122
125
  - lib/currency_rate.rb
123
126
  - lib/currency_rate/version.rb
127
+ - lib/exceptions.rb
124
128
  - lib/fetcher.rb
125
129
  - lib/storage/file_storage.rb
126
130
  - lib/storage/serializers/yaml_serializer.rb
@@ -146,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
150
  - !ruby/object:Gem::Version
147
151
  version: '0'
148
152
  requirements: []
149
- rubygems_version: 3.0.3
153
+ rubygems_version: 3.1.4
150
154
  signing_key:
151
155
  specification_version: 4
152
156
  summary: Converter for fiat and crypto currencies
data/bin/rake DELETED
@@ -1,29 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- #
5
- # This file was generated by Bundler.
6
- #
7
- # The application 'rake' is installed as part of a gem, and
8
- # this file is here to facilitate running it.
9
- #
10
-
11
- require "pathname"
12
- ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
- Pathname.new(__FILE__).realpath)
14
-
15
- bundle_binstub = File.expand_path("../bundle", __FILE__)
16
-
17
- if File.file?(bundle_binstub)
18
- if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
- load(bundle_binstub)
20
- else
21
- abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
- Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
- end
24
- end
25
-
26
- require "rubygems"
27
- require "bundler/setup"
28
-
29
- load Gem.bin_path("rake", "rake")
data/bin/rspec DELETED
@@ -1,29 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- #
5
- # This file was generated by Bundler.
6
- #
7
- # The application 'rspec' is installed as part of a gem, and
8
- # this file is here to facilitate running it.
9
- #
10
-
11
- require "pathname"
12
- ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
- Pathname.new(__FILE__).realpath)
14
-
15
- bundle_binstub = File.expand_path("../bundle", __FILE__)
16
-
17
- if File.file?(bundle_binstub)
18
- if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
- load(bundle_binstub)
20
- else
21
- abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
- Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
- end
24
- end
25
-
26
- require "rubygems"
27
- require "bundler/setup"
28
-
29
- load Gem.bin_path("rspec-core", "rspec")