Sha256: dcdef18ce4fd7d29e2d6f8df208aeb9af5b4a922fb2aac283e2d8998659eecb0

Contents?: true

Size: 1.93 KB

Versions: 6

Compression:

Stored size: 1.93 KB

Contents

require "bigdecimal"
require "logger"
require "singleton"
require "json"
require "http"

require_relative "configuration"
require_relative "adapter"
require_relative "fetcher"
require_relative "synchronizer"

Dir["#{File.expand_path __dir__}/adapters/**/*.rb"].each { |f| require f }
Dir["#{File.expand_path __dir__}/storage/**/*.rb"].each { |f| require f }

module CurrencyRate
  class << self
    attr_writer :configuration
  end

  def self.method_missing(m, *args, &block)
    if m.to_s.end_with? "_adapters"
      self.send(:adapters, m[0..-10])
    else
      super
    end
  end

  def self.adapters(type)
    Dir[File.join self.root, "lib/adapters/#{type}/*"].map do |file|
      File.basename(file, ".rb").split('_')[0...-1].map {|w| w.capitalize}.join
    end
  end

  def self.configuration
    @configuration ||= Configuration.new
  end

  def self.configure
    yield(configuration)
  end

  def self.fetcher
    @fetcher ||= Fetcher.new(fiat_exchanges: configuration.fiat_adapters,
                             crypto_exchanges: configuration.crypto_adapters,
                             limit_sources_for_fiat_currencies: configuration.limit_sources_for_fiat_currencies)
  end

  def self.fetch_crypto(exchange, from, to)
    fetcher.fetch_crypto(exchange, from, to)
  end

  def self.fetch_fiat(from, to)
    fetcher.fetch_fiat(from, to)
  end

  def self.logger
    return @logger if @logger
    @logger = Logger.new(configuration.logger[:device])
    @logger.progname = "CurrencyRate"
    @logger.level = configuration.logger[:level]
    @logger.formatter = configuration.logger[:formatter] if configuration.logger[:formatter]
    @logger
  end

  def self.synchronizer
    @synchronizer ||= Synchronizer.new
  end

  def self.sync_crypto!
    synchronizer.sync_crypto!
  end

  def self.sync_fiat!
    synchronizer.sync_fiat!
  end

  def self.sync!
    synchronizer.sync!
  end

  def self.root
    File.expand_path("../", File.dirname(__FILE__))
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
currency-rate-1.6.1 lib/currency_rate.rb
currency-rate-1.6.0 lib/currency_rate.rb
currency-rate-1.5.4 lib/currency_rate.rb
currency-rate-1.5.3 lib/currency_rate.rb
currency-rate-1.5.2 lib/currency_rate.rb
currency-rate-1.5.1 lib/currency_rate.rb