Coder Social home page Coder Social logo

russian_central_bank's Introduction

Build Status License

RussianCentralBank

This gem provides access to the Central Bank of Russia currency exchange. It can be used as a standalone exchange rates parser and also extends Money::Bank::VariableExchange with Money::Bank::RussianCentralBank

Installation

Add this line to your application's Gemfile:

gem 'russian_central_bank'

And then execute:

$ bundle

Or install it yourself as:

$ gem install russian_central_bank

NOTE: use 0.x version of russian_central_bank for money versions < 6.0

Dependencies

Usage

Standalone currency rates provider

require 'russian_central_bank'

# Today rates
Money::Bank::RussianCentralBankFetcher.new.perform()
# => [{:code=>"USD", :nominal=>1, :value=>65.1639}, ...]

# For any other date
Money::Bank::RussianCentralBankFetcher.new.perform(Date.new(2010, 12, 31))
# => [{:code=>"USD", :nominal=>1, :value=>30.4769}, ...]

Regular usage (with money gem)

require 'russian_central_bank'

Money.locale_backend = :currency
bank = Money::Bank::RussianCentralBank.new

Money.default_bank = bank

# Load today's rates
bank.update_rates

# Exchange 1000 USD to RUB
Money.new(1000_00, "USD").exchange_to('RUB').format  # => 64.592,50 ₽

# Use indirect exchange rates, USD -> RUB -> EUR
Money.new(1000_00, "USD").exchange_to('EUR').format  # => €888,26

Specific date rates

# Specify rates date
bank.update_rates(Date.new(2010, 12, 31))
Money.new(1000_00, "USD").exchange_to('RUB').format  # => 30.476,90 ₽

# Check last rates update
bank.rates_updated_at

# Check on which date rates were updated
bank.rates_updated_on

Autoupdate

# Use ttl attribute to enable rates autoupdate
bank.ttl = 1.day

# Check expiration date
bank.rates_expired_at

Safe rates fetch

There are some cases, when the cbr.ru doesn't return HTTP 200. To avoid issues in production, you use fallback:

bank = Money::Bank::RussianCentralBank.new
begin
  bank.update_rates
rescue Money::Bank::RussianCentralBankFetcher::FetchError => e
  Rails.logger.info "CBR failed: #{e.response}"

  ## fallback
  Money.default_bank = Money::Bank::VariableExchange.new

  Money.default_bank.add_rate(:usd, :eur, 1.3)
  Money.default_bank.add_rate(:eur, :usd, 0.7)
end

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

russian_central_bank's People

Contributors

byreham avatar darthsim avatar devsli avatar exaspark avatar itsnikolay avatar kirs avatar rmustafin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

russian_central_bank's Issues

Error: 302 при обновлении курсов

wasabi-3.2.3/lib/wasabi/resolver.rb:44:in load_from_remote'", wasabi-3.2.3/lib/wasabi/resolver.rb:32:inresolve'", "wasabi-3.2.3/lib/wasabi/document.rb:141:in xml'", "wasabi-3.2.3/lib/wasabi/document.rb:159:inparse'", "wasabi-3.2.3/lib/wasabi/document.rb:146:in parser'", "wasabi-3.2.3/lib/wasabi/document.rb:63:insoap_actions'", "savon-2.3.3/lib/savon/operation.rb:21:in ensure_exists!'", "savon-2.3.3/lib/savon/operation.rb:14:increate'", "savon-2.3.3/lib/savon/client.rb:32:in operation'", "savon-2.3.3/lib/savon/client.rb:36:incall'", "russian_central_bank-0.2.1/lib/russian_central_bank.rb:46:in exchange_rates'", "russian_central_bank-0.2.1/lib/russian_central_bank.rb:20:inblock in update_rates'", "russian_central_bank-0.2.1/lib/russian_central_bank.rb:19:in synchronize'", "russian_central_bank-0.2.1/lib/russian_central_bank.rb:19:inupdate_rates'"

russian_central_bank на wasabi, wasabi на savon, savon не переходит дальше при 302, а центробанк любит его отдавать

"stack level too deep" при попытке использовать BYR

Привет!
Это не фатальный, но неприятный баг встречающийся у тех кто не обновил вовремя библиотеку.
Система уходит в бесконечную рекурсию здесь:
https://github.com/rmustafin/russian_central_bank/blob/master/lib/russian_central_bank.rb#L33

Лечится обновлением библиотеки, но правильно было бы сообщить что для искомой валютной пары нет курса обмена, вместо того чтобы падать из-за переполнения стека.

Ошибка при замене gem 'google_currency' на russian_central_bank

При замене
Money.default_bank = Money::Bank::GoogleCurrency.new
на
Money.default_bank = Money::Bank::RussianCentralBank.new

Получаю следующую ошибку

Undefined method `/' for nil:NilClass
Extracted source (around line #242):

def self.euro_rate
Money.new(1_00, 'EUR').exchange_to(:RUB)
end

/home/bets/.gems/ruby/2.1.0/bundler/gems/russian_central_bank-a2314ec89fd1/lib/russian_central_bank.rb:73:in indirect_rate' /home/bets/.gems/ruby/2.1.0/bundler/gems/russian_central_bank-a2314ec89fd1/lib/russian_central_bank.rb:47:inget_rate'
money (6.5.1) lib/money/bank/variable_exchange.rb:92:in exchange_with' money (6.5.1) lib/money/money.rb:412:inexchange_to'

Caching

Hello.
How to implement caching of exchange rates in Rails application?
For example I want to update rates every 24 hours and not to access CBR on every restart.

As I understand this code should be added to initializer, yes?

bank = Money::Bank::RussianCentralBank.new
bank.update_rates

Money.default_bank = bank

Thanks!

Wrong dependencies

I did notice that last version of this gem does not play with money 6.5.1 i have due API change.

Need update dependencies to spec.add_dependency 'money', '~> 6.7.0'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.