eba 1.0.2.3 → 1.3.3

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/eba/bcb.rb +54 -39
  3. data/lib/eba/version.rb +9 -7
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c3cc4b38dcc1309fddf405fc467605d8a5fbad72
4
- data.tar.gz: 50ecdaefb89d5799a4c2f604016fcbe238361f33
3
+ metadata.gz: bf8749b76c5de0c62ecf47f0a883a2e8f867106f
4
+ data.tar.gz: 4fb8d1d541e15f620474e6de1f1e04531f4c54bf
5
5
  SHA512:
6
- metadata.gz: eef17380a0b997937472409619111bef0da85f529ec1cc37d7040bbe54b91b03e4d9b0d6c9759d1b3983456997f10abc53d5738f0c3d578c70d22c94037bc75e
7
- data.tar.gz: a82a757016801e0129989f28cd0523d1132f257c48439db6cc1610e026e631ff00cc5db650c9106a1307791fae204ae9f0420efcb57d45317bc97bf7e2a1b520
6
+ metadata.gz: 18b1a068a9c03f6cf7abd8236cd1606da5bbf8ab15f7faac38fdfc686eb86a8ba8d20f47603d87c89d706641a40a8a1bf2e01479d69e6917a863a868064fd344
7
+ data.tar.gz: fd8d96d343bcf6d1970b4cc064cf015f2dd22e30b3c0ba348a24a277ebaa2636e90872fd3299918e22c9a42c5f6ce587de85c37a3adc896276193cfd8743e328
@@ -34,16 +34,31 @@ class BCB < Encoder
34
34
 
35
35
 
36
36
  @service = Savon.client({wsdl: "https://www3.bcb.gov.br/sgspub/JSP/sgsgeral/FachadaWSSGS.wsdl",
37
- ssl_cert_file: @pub_key,
38
- headers: {'Accept-Encoding' => 'gzip, deflate'}})
37
+ ssl_cert_file: @pub_key})#,
38
+ #headers: {'Accept-Encoding' => 'gzip, deflate'}})
39
39
  end
40
40
 
41
41
  # List of all operations available for the webservice,
42
- # useful for expanding the gem
42
+ # useful for expanding the gem.
43
43
  def list_operations()
44
44
  return @service.operations
45
45
  end
46
46
 
47
+ # Removes all invalid series from an array.
48
+ #
49
+ # An invalid series has last value.
50
+ def purge_invalid_series(array_of_codes)
51
+ result = []
52
+
53
+ array_of_codes.each do |code|
54
+ if get_last_value(code) != nil
55
+ result << code
56
+ end
57
+ end
58
+
59
+ return result
60
+ end
61
+
47
62
  def get_last_value(series_code)
48
63
  begin
49
64
  response = @service.call(:get_ultimo_valor_xml, message: {in0: "#{series_code}"})
@@ -73,57 +88,57 @@ class BCB < Encoder
73
88
 
74
89
  # Ensure that date is in the format dd/MM/YYY
75
90
  def get_all_data_for_array(array_of_codes, date)
76
- results = {}
91
+ result = nil
77
92
  codes = Array.new()
78
93
  data_collection = Array.new()
79
94
 
80
- array_of_codes.each do |code|
81
- codes << code.to_s
95
+ # This request has a limit of series he can get at a time, thus
96
+ # it's way simpler to break a composite requests in various smaller
97
+ # requests. The Data_bcb class serves as a way to organize such data
98
+ # and allow the developer to easily identify which series each data
99
+ # object pertains.
100
+ array_of_codes.each_slice(50).to_a.each do |array|
101
+ array = purge_invalid_series(array)
82
102
 
83
103
  # Build the message from the start of the historical series
84
- message = { in0: {long: codes},
104
+ message = { in0: {long: array},
85
105
  in1: date,
86
106
  in2: Time.now.strftime('%d/%m/%Y').to_s}
87
-
107
+
88
108
  # try and catch, as some series can be discontinued or a code may be broken
89
109
  begin
90
- # This request has a limit of series he can get at a time, thus
91
- # it's way simpler to break a composite requests in various smaller
92
- # requests. The Data_bcb class serves as a way to organize such data
93
- # and allow the developer to easily identify which series each data
94
- # object pertains.
95
110
  response = @service.call(:get_valores_series_xml, message: message)
96
- results[code] = Nokogiri::XML(response.to_hash[:get_valores_series_xml_response] \
111
+ result = Nokogiri::XML(response.to_hash[:get_valores_series_xml_response] \
97
112
  [:get_valores_series_xml_return])
98
- rescue
99
- results[code] = nil
100
- puts "Failure trying to extract #{code}"
113
+
114
+ rescue Exception => erro
115
+ puts "Error requesting! #{erro}"
101
116
  end
102
117
 
103
- codes.clear
104
- end
118
+ i = 0
119
+
120
+ result.css("SERIE").each do |serie|
121
+ # recover identifying data from the getLastValue method,
122
+ # as the get_valores_series_xml desn't have identifying data
123
+ # as series name, periodicity, etc.
124
+ base_data = get_last_value(array[i])
125
+ comp = 'name="ID" value="' + array[i].to_s + '"'
126
+
127
+ if serie.inspect.include? comp
128
+ serie.css("ITEM").each do |item|
129
+ data_collection << Data_bcb.new(encode(base_data.name),
130
+ array[i],
131
+ base_data.periodicity,
132
+ encode(base_data.unit),
133
+ "1",
134
+ item.css("DATA").text.split("/")[0],
135
+ item.css("DATA").text.split("/")[1],
136
+ item.css("VALOR").text)
137
+ end
138
+ end
105
139
 
106
- results.each do |code, result|
107
- # recover identifying data from the getLastValue method,
108
- # as the get_valores_series_xml desn't have identifying data
109
- # as series name, periodicity, etc.
110
- base_data = get_last_value(code)
111
-
112
- if result != nil then
113
- # Encode enforces data data is being read as UTF-8, as
114
- # portuguese uses a huge ammount of special characters and
115
- # accentuations.
116
- result.css("ITEM").each do |item|
117
- data_collection << Data_bcb.new(encode(base_data.name),
118
- code,
119
- base_data.periodicity,
120
- encode(base_data.unit),
121
- "1",
122
- item.css("DATA").text.split("/")[0],
123
- item.css("DATA").text.split("/")[1],
124
- item.css("VALOR").text)
140
+ i = i + 1
125
141
  end
126
- end
127
142
  end
128
143
 
129
144
  return data_collection
@@ -2,33 +2,35 @@ module Eba
2
2
  # For documentation purposes:
3
3
  # VERSION = mm.dd.ff.hh
4
4
  # mm - commits on master
5
- # dd - commits on development
6
5
  # ff - commits on feature
7
6
  # hh - commits on hotfix
8
7
 
9
- VERSION = "1.0.2.3"
8
+ VERSION = "1.3.3"
10
9
 
11
- #Version 1.0.0.1
10
+ #Version 1.0.1
12
11
  #
13
12
  # Updater gemspec.
14
13
  # Added classes Encoder and DataBCB for user.
15
14
 
16
- #Version 1.0.1.1
15
+ #Version 1.1.1
17
16
  # List operations now returns a string instead of printing the methods of the webservice.
18
17
  # get_last_value in BCB will return nil if the supplied code is invalid.
19
18
  # get_all_data_for_array will now return data for an invalid code, but will still prompt an error mesage.
20
19
  # added rspec tests, guarantying consistency
21
20
  # spec/valid_certificate contains a certificate which is valid at this moment (2016-11-22)
22
21
 
23
- #Version 1.0.1.2
22
+ #Version 1.1.2
24
23
  # Now get_all_data_for_array also expects a valid date in the format dd/MM/YYYY.
25
24
 
26
25
 
27
- #Version 1.0.1.3
26
+ #Version 1.1.3
28
27
  # Removed the removal of '.' character from value, it was actually losing data.
29
28
  # Changed DataBCB class name to Data_bcb, to keep with the standard snake case.
30
29
  # updated spec tests accordingly.
31
30
 
32
- #Version 1.0.2.3
31
+ #Version 1.2.3
33
32
  # Added HTTP compression to Savon requests.
33
+
34
+ #Version 1.3.3
35
+ # get_all_data_for_array extracts data now as bulk, in order to make better use of the compression.
34
36
  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: 1.0.2.3
4
+ version: 1.3.3
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: 2016-12-08 00:00:00.000000000 Z
11
+ date: 2016-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler