Sha256: 13ed54538281e5233644052bdd2f6f322d9d063fe3582ec824ef95aefc9c15e0

Contents?: true

Size: 1.5 KB

Versions: 1

Compression:

Stored size: 1.5 KB

Contents

# encoding: UTF-8
require 'sax-machine'

class Correios::Frete::Servico
  include SAXMachine

  TYPES = {
    :pac => "41106",
    :sedex => "40010",
    :sedex_10 => "40215",
    :sedex_hoje => "40290"
  }

  element :Codigo, :as => :codigo
  element :Valor, :as => :valor
  element :PrazoEntrega, :as => :prazo_entrega
  element :ValorMaoPropria, :as => :valor_mao_propria
  element :ValorAvisoRecebimento, :as => :valor_aviso_recebimento
  element :ValorValorDeclarado, :as => :valor_valor_declarado
  element :EntregaDomiciliar, :as => :entrega_domiciliar
  element :EntregaSabado, :as => :entrega_sabado
  element :Erro, :as => :erro
  element :MsgErro, :as => :msg_erro
  attr_reader :tipo

  alias_method :original_parse, :parse

  def parse(xml_text)
    original_parse xml_text
    @tipo = TYPES.key(codigo)
    cast_to_float! :valor, :valor_mao_propria, :valor_aviso_recebimento, :valor_valor_declarado
    cast_to_int! :prazo_entrega
    cast_to_boolean! :entrega_domiciliar, :entrega_sabado
    self
  end

  def success?
    erro == "0"
  end

  def error?
    !success?
  end

  private

  def cast_to_float!(*attributes)
    attributes.each do |attr|
      instance_variable_set("@#{attr}", send(attr).to_s.gsub("," ,".").to_f)
    end
  end

  def cast_to_int!(*attributes)
    attributes.each do |attr|
      instance_variable_set("@#{attr}", send(attr).to_i)
    end
  end

  def cast_to_boolean!(*attributes)
    attributes.each do |attr|
      instance_variable_set("@#{attr}", send(attr) == "S")
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
correios-frete-0.1.0 lib/correios/frete/servico.rb