Class: Ifqar::StatsDeserializer

Inherits:
Object
  • Object
show all
Defined in:
lib/ifqar/stats_deserializer.rb

Overview

Convert XML stats to DailyFundsStats

Constant Summary collapse

QUOTES_XPATH =
"//Dato[Espacios = '3']".freeze

Class Method Summary collapse

Class Method Details

.deserialze(date, type, xml) ⇒ Object



8
9
10
11
12
13
14
15
16
# File 'lib/ifqar/stats_deserializer.rb', line 8

def self.deserialze(date, type, xml)
  xml_doc = Nokogiri::XML(xml)

  daily_stats = DailyFundsStats.new(date)
  xml_doc.xpath(QUOTES_XPATH).each do |data|
    daily_stats.funds_quotes << quote_builder(date, type, data)
  end
  daily_stats
end

.parse_float(text) ⇒ Object



28
29
30
# File 'lib/ifqar/stats_deserializer.rb', line 28

def self.parse_float(text)
  text.delete('.').sub(',', '.').to_f
end

.parse_int(text) ⇒ Object



32
33
34
# File 'lib/ifqar/stats_deserializer.rb', line 32

def self.parse_int(text)
  text.delete('.').sub(',', '.').to_i
end

.quote_builder(date, type, data_node) ⇒ Object



18
19
20
21
22
23
24
25
26
# File 'lib/ifqar/stats_deserializer.rb', line 18

def self.quote_builder(date, type, data_node)
  name = data_node.xpath('Nombre').text
  shares = parse_int(data_node.xpath('QCP').text)
  share_value = parse_float(data_node.xpath('VCP').text) / 1000
  net_asset_value = parse_int(data_node.xpath('PN').text)

  fund = Fund.new(name, type)
  FundQuote.new(fund, date, shares, share_value, net_asset_value)
end