module Biro module Midia100 class Request < BaseRequest include Utils::Soap def production_url 'http://177.70.121.160/WSSisconsulta/consulta.asmx?wsdl' end def required_params [:username, :password] end def find(document, options = {}) responses = { registration: soap.call(:consultar, message: params(document)) } verify_response responses [:rf, :equity, :job, :default].each do |i| if options.keys.include?("include_#{i}".to_sym) begin responses[i] = soap.call(:consultar, message: params(document, SearchType.by(i))) rescue Biro.log(:warn, "Unable to process Midia100 #{i} request") raise StandardError.new("Error at Midia100 request: #{e.message}") end end end Response.new(responses) end private def savon_options { strip_namespaces: false } end def verify_response responses raise AuthenticationError.new("Error at Midia100 request: #{responses[:registration].body[:consultar_response][:consultar_result]}") if responses[:registration]&.body[:consultar_response][:consultar_result]&.include? "Usuário ou Senha Estão Incorretos" raise DocumentNotFoundError.new("Error at Midia100 request: #{responses[:registration].body[:consultar_response][:consultar_result]}") if responses[:registration]&.body[:consultar_response][:consultar_result]&.include? "Cpf Inválido" raise StandardError.new("Error at Midia100 request: #{responses[:registration].body[:consultar_response][:consultar_result]}") if responses[:registration]&.body[:consultar_response][:consultar_result]&.include? "" end def params(document, search_type = SearchType.by(:registration)) { 'usuario' => @username, 'senha' => @password, 'CodConsulta' => search_type, 'parametros' => document } end end module SearchType TYPES = { registration: 2004, rf: 2076, equity: 2010, job: 2017, default: 2075 } def self.by(type) TYPES[type.to_sym] end end end end