class InovadoraXml::Xml

Attributes

cert[RW]
errors[RW]
key[RW]
metodo_soap[RW]
retorno[RW]
schema[RW]
wsdl[RW]
xml_gerado[RW]
xml_nfse[RW]

Public Class Methods

new(*args) click to toggle source
# File lib/inovadora_xml.rb, line 22
def initialize(*args)
  self.errors = ActiveModel::Errors.new(self)
  self.xml_gerado = self.gerar_xml()

  self.validar_args()
  # self.valid?
end

Public Instance Methods

assinar(tag_assinar) click to toggle source
# File lib/inovadora_xml.rb, line 84
def assinar(tag_assinar)
  assinador = InovadoraXml::Assinador.new(self.xml_gerado, tag_assinar, self.cert, self.key)
  assinador.assinar_xml

  assinador.errors.full_messages.each do |error|
    self.errors.add(:base, error)
  end
  
  self.xml_gerado = assinador.xml_assinado if assinador.errors.blank?
ensure
  return self.errors.blank?
end
comunicar(request_args = {}) click to toggle source
# File lib/inovadora_xml.rb, line 30
def comunicar(request_args = {})
  if self.valid?
    servidor = InovadoraXml::ServidorWsdl.new(
      self.envelopar(),
      self.metodo_soap,
      self.wsdl,
      self.cert,
      self.key,
      request_args
    )

    unless servidor.enviar
      raise InovadoraXml::CustomExceptions::ServerError.new(servidor), "Server Error"
    end
    #usage: self.retorno.to_xml ou self.retorno.body
    self.retorno = servidor.retorno
  end

rescue InovadoraXml::CustomExceptions::ServerError => e
  e.object.errors.full_messages.each {|e| "Erro na comunicação: #{self.errors.add(:base, e)}"}
rescue Exception => e
  self.errors.add(:base, e.message)
ensure
  return self.errors.blank?
end
valid?() click to toggle source
# File lib/inovadora_xml.rb, line 64
def valid?
  erros = []
  schema = open(self.schema)
  xsd = Nokogiri::XML::Schema(schema)
  xsd.validate(self.xml_gerado).each do |error|
    unless error.message.to_s.include?("{http://www.w3.org/2000/09/xmldsig#}Signature") ||
           error.message.to_s.include?("{http://www.w3.org/2000/09/xmldsig#}SignedInfo")
      erros <<  "(Linha: " + error.line.to_s + ") => " + error.message.to_s
    end
  end

  erros.each {|erro| self.errors.add(:base, erro)}
rescue Errno::ENOENT => e
  self.errors.add(:base, "Arquivo schema não existe")
rescue Exception => e
  self.errors.add(:base, e)
ensure
  self.errors.blank?
end
validar_args() click to toggle source
# File lib/inovadora_xml.rb, line 56
def validar_args
  self.errors.add(:base, "Metodo SOAP não especificado") if self.metodo_soap.blank?
  self.errors.add(:base, "Schema não especificado") if self.schema.blank?
  self.errors.add(:base, "WSDL não especificado") if self.wsdl.blank?

  return self.errors.blank?
end