Module: BrCotacao::Moeda

Defined in:
lib/brcotacao/moedas.rb

Overview

Esse Modulo possui os metodos que trazem as cotacoes da Classe moeda que incluir Este moulo A classe que incluir este modulo precisa instanciar um objeto em @dados que permita trazer o código da moeda através da chamada @dados.codigo

Author

Bruno Vicenzo

Licença

GPL

Constant Summary collapse

FONTE_INFORMACAO =
'http://www4.bcb.gov.br/Download/fechamento/'.freeze
FONTE_INFORMACAO_TEMPO_REAL =
'http://download.finance.yahoo.com/d/quotes.body?'
POSICAO_CODIGO_MOEDA =
1
POSICAO_VALOR_COMPRA =
4
POSICAO_VALOR_VENDA =
5

Instance Method Summary collapse

Instance Method Details

#compra(data_pesquisa) ⇒ Object

Devolve o valor de compra da moeda no fechamento do dia informado. Parametros:

  • data_pesquisa

Um objeto que represente a data do dia em que se deseja receber o valor de compra da moeda. Este parametro precisa responder para o metodo strftime



27
28
29
30
31
# File 'lib/brcotacao/moedas.rb', line 27

def compra(data_pesquisa)
  cotacao_encontrada = cotacao(data_pesquisa)

  cotacao_encontrada.nil? ? nil : cotacao_encontrada[:compra]
end

#cotacao(data_pesquisa) ⇒ Object

Devolve o valor de compra e venda em um Hash da moeda no fechamento do dia informado. Parametros:

  • data_pesquisa

Um objeto que represente a data do dia em que se deseja receber o valor de compra da moeda. Este parametro precisa responder para o metodo strftime



49
50
51
52
53
# File 'lib/brcotacao/moedas.rb', line 49

def cotacao(data_pesquisa)
  cotacoes_moeda = dados_cotacoes(data_pesquisa).detect{|dado| dado.first.eql? self.dados.codigo}

  cotacoes_moeda.nil? ? nil : {:compra => cotacoes_moeda[1].gsub(',', '.').to_f, :venda => cotacoes_moeda[2].gsub(',', '.').to_f}
end

#cotacao_agoraObject

Devolve o valor da cotação em tempo real de acordo com o serviço do Yahoo!. É retornado um hash contendo o valor de compra da moeda e a data que foi feita a consulta (dia e horário)



57
58
59
60
61
62
63
64
65
66
67
# File 'lib/brcotacao/moedas.rb', line 57

def cotacao_agora
  endereco             = URI.parse("#{FONTE_INFORMACAO_TEMPO_REAL}s=#{dados.simbolo}BRL=X&f=nl1d1t1")
  conexao              = Net::HTTP.new(endereco.host)
  resposta             = conexao.get("#{endereco.path}?#{endereco.query}")
  raise BrCotacao::Errors::CotacaoAgoraNaoEncontradaError.new(Time.now) unless resposta.msg.eql? 'OK'

  cotacao = CSV.parse(resposta.body).first
  data = Date.strptime(cotacao[2], '%m/%d/%Y').strftime('%Y-%m-%d')

  {:compra => cotacao[1].to_f, :data => Time.parse("#{data} #{cotacao[3]} -0400")}
end

#venda(data_pesquisa) ⇒ Object

Devolve o valor de venda da moeda no fechamento do dia informado. Parametros:

  • data_pesquisa

Um objeto que represente a data do dia em que se deseja receber o valor de venda da moeda. Este parametro precisa responder para o metodo strftime



38
39
40
41
42
# File 'lib/brcotacao/moedas.rb', line 38

def venda(data_pesquisa)
  cotacao_encontrada = cotacao(data_pesquisa)

  cotacao_encontrada.nil? ? nil : cotacao_encontrada[:venda]
end