require 'rest_client' module Biro module Bvs class Request < BaseRequest def production_url "https://www.bvsnet.com.br/cgi-bin/db2www/netpo028.mbr/string?consulta=" end def development_url "https://bvsntt.bvsnet.com.br/cgi-bin/db2www/netpo028.mbr/string?consulta=" end def required_params [:username, :password] end def find(document, options = {}) bvs_results = {} bvs_results[:score] = score(document) if options.keys.include?(:score) bvs_results[:debits] = debits(document) if options.keys.include?(:debits) get_response(bvs_results) end private def get_response(result) response = Response.new result raise DocumentNotFoundError.new("BVS Error: Document not found - SCORE: #{response.score_error_message} - DEBITS: #{response.debits_error_message}" ) if auth_error?(response) raise AuthenticationError.new("BVS Error: Invalid user or password - SCORE: #{response.score_error_message} - DEBITS: #{response.debits_error_message}" ) if document_error?(response) raise StandardError.new("Error at BVS Request: SCORE: #{response.score_error_message} - DEBITS: #{response.debits_error_message}" ) unless response.score_error_message.blank? && response.debits_error_message.blank? response end def document_error?(response) response.score_error_message == "SENHA INVALIDA" || response.debits_error_message == "SENHA INVALIDA" end def auth_error?(response) response.score_error_message == "DOCUMENTO INVALIDO" || response.debits_error_message == "DOCUMENTO INVALIDO" end def score(document) require 'pry'; binding.pry params = ScoreRequestBuilder.new(document, @username, @password).build begin response = RestClient::Request.execute(url: url + URI.encode(params), method: :get, verify_ssl: false) return response rescue => e Biro.log(:warn, "Unable to process BVS score request") raise StandardError.new("Error at BVS score request: #{e.message}") end end def debits(document) params = DebitsRequestBuilder.new(document, @username, @password).build begin response = RestClient::Request.execute(url: url + URI.encode(params), method: :get, verify_ssl: false) return response rescue => e Biro.log(:warn, "Unable to process BVS debits request") raise StandardError.new("Error at BVS debits request: #{e.message}") end end end end end