eba 2.0.1 → 2.0.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 +4 -4
- data/lib/eba/bcb.rb +33 -19
- data/lib/eba/data.rb +8 -9
- data/lib/eba/helper.rb +29 -23
- data/lib/eba/version.rb +4 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c56777e9040d1597b33becb8043eb514fa610ebc
|
4
|
+
data.tar.gz: 382aa6bf66a61e127f215535594b9b59f5433f0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4dc1de3cb1aa0d03cc2990dda14c2dcb5c01667b8e2fce69698e008252c9cfecbea67a70f421378ed776ccc6b7f9eafc8444000be8022b9bb9a7e55c1ce88c14
|
7
|
+
data.tar.gz: efde2e490fde9f0c2fe212e4853f8e2a2d37d92b9712eddf749bce4d5277990c18e7a5d3ff2c9071b753137624bbb38f29f00e55a11cffebf9316999278f05f2
|
data/lib/eba/bcb.rb
CHANGED
@@ -21,6 +21,7 @@ class BCB < Helper
|
|
21
21
|
|
22
22
|
def initialize(path_to_ca_certificate)
|
23
23
|
@ca = path_to_ca_certificate
|
24
|
+
@attempts = 0
|
24
25
|
connect_to_service()
|
25
26
|
end
|
26
27
|
|
@@ -88,56 +89,69 @@ class BCB < Helper
|
|
88
89
|
# VALOR = VALUe
|
89
90
|
|
90
91
|
return build_bcb_data(xmlResult.search("NOME").text.sub("-_1532_-", "&"),
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
92
|
+
series_code,
|
93
|
+
xmlResult.search("PERIODICIDADE").text,
|
94
|
+
xmlResult.search("UNIDADE").text.sub("-_1532_-", "&"),
|
95
|
+
xmlResult.search("DIA").text,
|
96
|
+
xmlResult.search("MES").text,
|
97
|
+
xmlResult.search("ANO").text,
|
98
|
+
xmlResult.search("VALOR").text, false)
|
98
99
|
end
|
99
100
|
|
100
101
|
# Ensure that date is in the format dd/MM/YYY
|
101
|
-
def get_all_data_for_array(array_of_codes, min_date, max_date = Time.now.strftime('%d/%m/%Y').to_s)
|
102
|
+
def get_all_data_for_array(array_of_codes, min_date, max_date = Time.now.strftime('%d/%m/%Y').to_s, slice_size=50)
|
102
103
|
result = nil
|
103
|
-
data_collection =
|
104
|
+
data_collection = []
|
104
105
|
|
105
106
|
# This request has a limit of series he can get at a time, thus
|
106
107
|
# it's way simpler to break a composite requests in various smaller
|
107
108
|
# requests. The Data_bcb class serves as a way to organize such data
|
108
109
|
# and allow the developer to easily identify which series each data
|
109
110
|
# object pertains.
|
111
|
+
|
112
|
+
if slice_size > 50 then
|
113
|
+
slice_size = 50
|
114
|
+
end
|
115
|
+
|
110
116
|
array_of_codes.each_slice(50).to_a.each do |array|
|
111
117
|
hash = hash_by_periodicity(array)
|
112
118
|
|
113
119
|
hash.each do |periodicity, array|
|
114
|
-
|
115
|
-
data_array = []
|
120
|
+
code_x_data = {}
|
116
121
|
|
117
122
|
array.each do |data|
|
118
|
-
|
119
|
-
codes << data.pk
|
123
|
+
code_x_data[data.pk] = data
|
120
124
|
end
|
121
125
|
|
122
126
|
# Build the message from the start of the historical series
|
123
|
-
message = {
|
124
|
-
|
125
|
-
|
127
|
+
message = {in0: {long: code_x_data.keys},
|
128
|
+
in1: min_date,
|
129
|
+
in2: max_date}
|
126
130
|
|
127
131
|
result = send_message(message)
|
128
|
-
|
132
|
+
|
129
133
|
if result != nil then
|
130
134
|
i = 0
|
131
135
|
|
132
136
|
result.css("SERIE").each do |serie|
|
133
|
-
extract_an_item(serie,
|
137
|
+
extract_an_item(serie, code_x_data, data_collection)
|
134
138
|
i = i + 1
|
135
139
|
end
|
136
140
|
end
|
137
141
|
end
|
138
142
|
end
|
139
143
|
|
140
|
-
|
144
|
+
if data_collection.size == 0 && array_of_codes.size > 0 && @attempts < 5 then
|
145
|
+
@attempts = @attempts + 1
|
146
|
+
|
147
|
+
puts "BCB WARNING: No data returned for #{array_of_codes}. Trying again #{@attempts}/5"
|
148
|
+
sleep(1 * @attempts)
|
149
|
+
|
150
|
+
data_collection = get_all_data_for_array(array_of_codes, min_date, max_date)
|
151
|
+
@attemps = 0
|
152
|
+
end
|
153
|
+
|
154
|
+
data_collection
|
141
155
|
end
|
142
156
|
|
143
157
|
def send_message(message)
|
data/lib/eba/data.rb
CHANGED
@@ -35,44 +35,43 @@ class Data_bcb
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def is_valid?
|
38
|
-
|
39
38
|
if @name == nil or @name == '' then
|
40
|
-
puts "Found invalid name! Value is '#{@name}'"
|
39
|
+
puts "BCB ERROR: Found invalid name! Value is '#{@name}' for #{@pk}."
|
41
40
|
return false
|
42
41
|
end
|
43
42
|
|
44
43
|
if @periodicity == nil or @periodicity == '' or @periodicity.length > 1 then
|
45
|
-
puts "Found invalid periodicity! Value is '#{@periodicity}'"
|
44
|
+
puts "BCB ERROR: Found invalid periodicity! Value is '#{@periodicity}' for #{@pk}."
|
46
45
|
return false
|
47
46
|
end
|
48
47
|
|
49
48
|
if @unit == nil or @unit == '' then
|
50
|
-
puts "Found invalid unit! Value is '#{@unit}'"
|
49
|
+
puts "BCB ERROR: Found invalid unit! Value is '#{@unit}' for #{@pk}."
|
51
50
|
return false
|
52
51
|
end
|
53
52
|
|
54
53
|
if @date == nil or @date == '' then
|
55
|
-
puts "Found invalid date! Value is '#{@date}'"
|
54
|
+
puts "BCB ERROR: Found invalid date! Value is '#{@date}' for #{@pk}."
|
56
55
|
return false
|
57
56
|
else
|
58
57
|
if !(DateTime.parse(@date).to_date != nil rescue false) then
|
59
|
-
puts "Found invalid date! Value is '#{@date}'"
|
58
|
+
puts "BCB ERROR: Found invalid date! Value is '#{@date}' for #{@pk}."
|
60
59
|
return false
|
61
60
|
end
|
62
61
|
end
|
63
62
|
|
64
63
|
if @value == nil then
|
65
|
-
puts "Found invalid value! Value is '#{@value}'"
|
64
|
+
puts "BCB ERROR: Found invalid value! Value is '#{@value}' for #{@pk}."
|
66
65
|
return false
|
67
66
|
else
|
68
67
|
if !(@value.to_f != nil rescue false) then
|
69
|
-
puts "Found invalid value! Value is '#{@value}'"
|
68
|
+
puts "BCB ERROR: Found invalid value! Value is '#{@value}' for #{@pk}."
|
70
69
|
return false
|
71
70
|
end
|
72
71
|
end
|
73
72
|
|
74
73
|
if @pk == nil or @pk <= 0 then
|
75
|
-
puts "Found invalid pk! Value is '#{@pk}'"
|
74
|
+
puts "BCB ERROR: Found invalid pk! Value is '#{@pk}'"
|
76
75
|
return false
|
77
76
|
end
|
78
77
|
|
data/lib/eba/helper.rb
CHANGED
@@ -42,33 +42,39 @@ class Helper < Encoder
|
|
42
42
|
return result
|
43
43
|
end
|
44
44
|
|
45
|
-
def extract_an_item(serie,
|
45
|
+
def extract_an_item(serie, code_x_data_hash, collection)
|
46
46
|
# recover identifying data from the getLastValue method,
|
47
47
|
# as the get_valores_series_xml desn't have identifying data
|
48
|
-
# as series name, periodicity, etc.
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
dia = "01"
|
53
|
-
mes = "1"
|
54
|
-
ano = "1"
|
55
|
-
data = item.css("DATA").text.split("/")
|
48
|
+
# as series name, periodicity, etc.
|
49
|
+
if serie.to_s.inspect["SERIE ID"] != nil then
|
50
|
+
code = serie.to_s.match(/SERIE ID=\"([0-9]+)\"/)[1].to_i
|
51
|
+
base_data = code_x_data_hash[code]
|
56
52
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
ano = data[1]
|
64
|
-
end
|
53
|
+
if base_data != nil then
|
54
|
+
serie.css("ITEM").each do |item|
|
55
|
+
dia = "01"
|
56
|
+
mes = "1"
|
57
|
+
ano = "1"
|
58
|
+
data = item.css("DATA").text.split("/")
|
65
59
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
60
|
+
if base_data.periodicity == 'D' then
|
61
|
+
dia = data[0]
|
62
|
+
mes = data[1]
|
63
|
+
ano = data[2]
|
64
|
+
else
|
65
|
+
mes = data[0]
|
66
|
+
ano = data[1]
|
67
|
+
end
|
68
|
+
|
69
|
+
collection << build_bcb_data(base_data.name, code,
|
70
|
+
base_data.periodicity,
|
71
|
+
base_data.unit,
|
72
|
+
dia, mes, ano,
|
73
|
+
item.css("VALOR").text,
|
74
|
+
base_data.seasonally_adjusted)
|
75
|
+
end
|
76
|
+
else
|
77
|
+
puts "ERROR BCB: Failure do locate #{code} in the data collection #{code_x_data_hash.keys}"
|
72
78
|
end
|
73
79
|
end
|
74
80
|
end
|
data/lib/eba/version.rb
CHANGED
@@ -5,7 +5,7 @@ module Eba
|
|
5
5
|
# ff - commits on feature
|
6
6
|
# hh - commits on hotfix
|
7
7
|
|
8
|
-
VERSION = "2.0.
|
8
|
+
VERSION = "2.0.2"
|
9
9
|
|
10
10
|
#Version 1.0.1
|
11
11
|
#
|
@@ -89,4 +89,7 @@ module Eba
|
|
89
89
|
|
90
90
|
#Version 2.0.1
|
91
91
|
# Removes useless certificate and supplies only CA.
|
92
|
+
|
93
|
+
#Version 2.0.2
|
94
|
+
# Improves reliability for getting data and identifying it.
|
92
95
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eba
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rafael Campos Cruz
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|