dolar-bna 1.0.7 → 1.0.9.2

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: fbe21a0c2c587369d0cc7ba9b8cecead44949a4ce0ce21b39b6ac8cf2db4efb5
4
- data.tar.gz: c96a1e4cc48f9200be848e29d780a26c493299e94f04316793778071058b3e1b
3
+ metadata.gz: 87544d1d540d3e6488aa9759efbb44898a20d724a13c88249587068d22616b7b
4
+ data.tar.gz: f7fd726bd19f1a97491e7b1185c31615ebbb3428a36cdbf68d74cf1172ed2114
5
5
  SHA512:
6
- metadata.gz: ff0b1db2aebaa03322314d248829603c4ef1f1a8ec8dac47453e0b5f74912afa70512a5a0dfe93d68ba0a0e367883decfcedde32167263ceee847d6e26cd2b91
7
- data.tar.gz: 8e3959749858041a66017badc1b1c0c18f7af237887e5de7f352fe3e119b2a5abed4907fcf8c41eccb4b261793cc91b1fc8249b91847b03c6b830b9203c27758
6
+ metadata.gz: 52ac5fc5dd9b571edea2b562584d4c69991b583a4d2cafaa773f3913359ed620762c734163ee04accbfa6c4c7f0e0b83c6cc12abaf5392ea1f122293cde54683
7
+ data.tar.gz: 804fa06d6cf7f851c70a2d8cd1ca9127b6dc28bbf460ebc8a7cc581e2e069050a01c9b8068ef3348fec68922648bbda3fdf80650ff4b8411c671913c938ebd91
@@ -1,15 +1,16 @@
1
1
  module Dolar
2
2
  module Bna
3
3
  class Convert
4
- def initialize(value=0, conversion="ars_to_usd", dolar_type="Divisa")
4
+ def initialize(value=0, conversion="ars_to_usd", dolar_type="Divisa", date=Date.today)
5
5
  @value ||= value
6
6
  @conversion ||= conversion
7
7
  @dolar_type ||= dolar_type
8
+ @date ||= date
8
9
  end
9
10
 
10
11
  def perform
11
12
  #dolar_query = Dolar::Bna::DolarCotization.where(date: Date.today, dolar_type: @dolar_type).first
12
- dolar_buy, dolar_sell = set_dolar()
13
+ dolar_buy, dolar_sell = set_dolar(@date)
13
14
  if @conversion == "ars_to_usd"
14
15
  ars_to_dolar(dolar_sell)
15
16
  else
@@ -19,32 +20,33 @@ module Dolar
19
20
 
20
21
  private
21
22
 
22
- def set_dolar
23
+ def set_dolar date
23
24
  dolar_buy = 0
24
25
  dolar_sell = 0
25
26
  intents = 0
27
+ date = date.to_date
26
28
  while intents < 5
27
- dolar_query = Dolar::Bna::DolarCotization.where(date: Date.today, dolar_type: @dolar_type).first
28
- if dolar_query.nil?
29
+ dolar_query = Dolar::Bna::DolarCotization.where(date: date, dolar_type: @dolar_type).first
30
+ if dolar_query.blank?
29
31
  intents += 1
30
32
  if @dolar_type.downcase == "divisa"
31
- Dolar::Bna::Exchange.new(Date.today).perform_bna_divisa
32
- dolar_query = Dolar::Bna::DolarCotization.where(date: Date.today, dolar_type: @dolar_type).first
33
- dolar_buy = dolar_query.dolar_buy unless dolar_query.nil?
34
- dolar_sell = dolar_query.dolar_sell unless dolar_query.nil?
33
+ Dolar::Bna::Exchange.new(date).perform_bna_divisa
34
+ dolar_query = Dolar::Bna::DolarCotization.where(date: date, dolar_type: @dolar_type).first
35
+ dolar_buy = dolar_query.dolar_buy unless dolar_query.blank?
36
+ dolar_sell = dolar_query.dolar_sell unless dolar_query.blank?
35
37
  elsif @dolar_type.downcase == "billete"
36
- Dolar::Bna::Exchange.new(Date.today).perform_bna_billete
37
- dolar_query = Dolar::Bna::DolarCotization.where(date: Date.today, dolar_type: @dolar_type).first
38
- dolar_buy = dolar_query.dolar_buy unless dolar_query.nil?
39
- dolar_sell = dolar_query.dolar_sell unless dolar_query.nil?
38
+ Dolar::Bna::Exchange.new(date).perform_bna_billete
39
+ dolar_query = Dolar::Bna::DolarCotization.where(date: date, dolar_type: @dolar_type).first
40
+ dolar_buy = dolar_query.dolar_buy unless dolar_query.blank?
41
+ dolar_sell = dolar_query.dolar_sell unless dolar_query.blank?
40
42
  else
41
- dolar_buy = 0
42
- dolar_sell = dolar_query.dolar_sell unless dolar_query.nil?
43
+ dolar_buy = dolar_query.dolar_buy unless dolar_query.blank?
44
+ dolar_sell = dolar_query.dolar_sell unless dolar_query.blank?
43
45
  break
44
46
  end
45
47
  else
46
- dolar_buy = dolar_query.dolar_buy
47
- dolar_sell = dolar_query.dolar_sell unless dolar_query.nil?
48
+ dolar_buy = dolar_query.dolar_buy unless dolar_query.blank?
49
+ dolar_sell = dolar_query.dolar_sell unless dolar_query.blank?
48
50
  break
49
51
  end
50
52
  end
@@ -7,26 +7,47 @@ module Dolar
7
7
  end
8
8
 
9
9
  def perform_bna_billete
10
- data = check_cotization("Billete", @fecha)
11
- save_in_db(data, "Billete") unless data.blank?
12
- return data
10
+ begin
11
+ Timeout.timeout(15) do
12
+ data = check_cotization("Billete", @fecha)
13
+ save_in_db(data, "Billete") unless data.blank?
14
+ return data
15
+ end
16
+ rescue => ex
17
+ pp ex.message
18
+ return nil
19
+ end
13
20
  end
14
21
 
15
22
  def perform_bna_divisa
16
- data = check_cotization("Divisa", @fecha)
17
- save_in_db(data, "Divisa") unless data.blank?
18
- return data
23
+ begin
24
+ Timeout.timeout(15) do
25
+ data = check_cotization("Divisa", @fecha)
26
+ save_in_db(data, "Divisa") unless data.blank?
27
+ return data
28
+ end
29
+ rescue => ex
30
+ pp ex.message
31
+ return nil
32
+ end
19
33
  end
20
34
 
21
35
  def variation_billete
22
- today_dolar = check_cotization("Billete", @fecha)
23
- yesterday_dolar = check_cotization("Billete", (@fecha - 1.days))
24
- unless (today_dolar.nil? || yesterday_dolar.nil?)
25
- porcentual_variation = ((today_dolar[:venta] - yesterday_dolar[:venta]) / (yesterday_dolar[:venta]))
26
- porcentual_variation = "#{(porcentual_variation * 100).round(2)}%"
27
- return porcentual_variation
28
- else
29
- return "0%"
36
+ begin
37
+ Timeout.timeout(15) do
38
+ today_dolar = check_cotization("Billete", @fecha)
39
+ yesterday_dolar = check_cotization("Billete", (@fecha - 1.days))
40
+ unless (today_dolar.nil? || yesterday_dolar.nil?)
41
+ porcentual_variation = ((today_dolar[:venta] - yesterday_dolar[:venta]) / (yesterday_dolar[:venta]))
42
+ porcentual_variation = "#{(porcentual_variation * 100).round(2)}%"
43
+ return porcentual_variation
44
+ else
45
+ return "0%"
46
+ end
47
+ end
48
+ rescue => ex
49
+ pp ex.message
50
+ return nil
30
51
  end
31
52
  end
32
53
 
@@ -42,7 +63,7 @@ module Dolar
42
63
  ddolar = get_dolar()
43
64
  end
44
65
  else
45
- ddolar = {compra: query.dolar_buy, venta: query.dolar_sell}
66
+ ddolar = {compra: query.dolar_buy, venta: query.dolar_sell, fecha: query.date}
46
67
  end
47
68
  return ddolar
48
69
  end
@@ -53,9 +74,9 @@ module Dolar
53
74
  mechanize = Mechanize.new
54
75
  mechanize.user_agent_alias = "Android"
55
76
  begin
56
- Timeout.timeout(20) do
77
+ Timeout.timeout(15) do
57
78
  url = "http://www.bna.com.ar/Cotizador/HistoricoPrincipales?id=billetes&fecha=#{@fecha.day}%2F#{@fecha.month}%2F#{@fecha.year}&filtroEuro=0&filtroDolar=1"
58
- value = obtain_dolar_from_html(url, mechanize, data)
79
+ value = obtain_dolar_from_html(url, mechanize, data, "billete")
59
80
  return value
60
81
  end
61
82
  rescue => ex
@@ -70,9 +91,9 @@ module Dolar
70
91
  mechanize = Mechanize.new
71
92
  mechanize.user_agent_alias = "Android"
72
93
  begin
73
- Timeout.timeout(20) do
94
+ Timeout.timeout(15) do
74
95
  url = "http://www.bna.com.ar/Cotizador/MonedasHistorico"
75
- value = obtain_dolar_from_html(url, mechanize, data)
96
+ value = obtain_dolar_from_html(url, mechanize, data, "billete")
76
97
  return value
77
98
  end
78
99
  rescue => ex
@@ -81,27 +102,41 @@ module Dolar
81
102
  end
82
103
  end
83
104
 
84
- def obtain_dolar_from_html(url, mechanize, data)
85
-
105
+ def obtain_dolar_from_html(url, mechanize, data, d_type)
106
+ dolar_fecha = nil
86
107
  page = mechanize.get(url)
87
108
  doc = Nokogiri::HTML(page.body, "UTF-8")
88
109
  doc.xpath("//td").each_with_index do |node, index|
89
110
  data[index] = node.text
90
111
  end
112
+ if d_type == "divisa"
113
+ divs_data = {}
114
+ doc.xpath("//div").each_with_index do |node, index|
115
+ divs_data[index] = node.text
116
+ end
117
+ dolar_fecha = divs_data[1]
118
+ end
91
119
  correct_date = "#{@fecha.day.to_i}/#{@fecha.month.to_i}/#{@fecha.year.to_i}"
92
120
  i = data.key(correct_date)
93
121
  if !i.nil?
122
+ dolar_fecha = data[i - 3]
94
123
  dolar_compra = BigDecimal(data[i - 2].tr(",", ".")).truncate(3).to_f
95
124
  dolar_venta = BigDecimal(data[i - 1].tr(",", ".")).truncate(3).to_f
96
125
  else
126
+ dolar_fecha = dolar_fecha.nil? ? data[3] : dolar_fecha
97
127
  dolar_compra = BigDecimal(data[1].tr(",", ".")).truncate(3).to_f
98
128
  dolar_venta = BigDecimal(data[2].tr(",", ".")).truncate(3).to_f
99
129
  end
100
- return {compra: dolar_compra, venta: dolar_venta}
130
+ return {compra: dolar_compra, venta: dolar_venta, fecha: dolar_fecha}
101
131
  end
102
132
 
103
133
  def save_in_db data, dolar_type
104
- Dolar::Bna::DolarCotization.create(date: @fecha, dolar_type: dolar_type, dolar_buy: data[:compra], dolar_sell: data[:venta])
134
+ dr = Dolar::Bna::DolarCotization.where(date: data[:fecha], dolar_type: dolar_type, dolar_buy: data[:compra], dolar_sell: data[:venta]).first_or_initialize
135
+ if dr.save
136
+ pp "todo ok"
137
+ else
138
+ pp dr.errors
139
+ end
105
140
  end
106
141
 
107
142
  end
@@ -1,5 +1,5 @@
1
1
  module Dolar
2
2
  module Bna
3
- VERSION = "1.0.7"
3
+ VERSION = "1.0.9.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dolar-bna
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ version: 1.0.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - LITECODE
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-20 00:00:00.000000000 Z
11
+ date: 2019-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: factory_bot