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
         |