class Deliveries::Couriers::CorreosExpress::Labels::Generate

Attributes

tracking_codes[RW]

Public Class Methods

new(tracking_codes:) click to toggle source
# File lib/deliveries/couriers/correos_express/labels/generate.rb, line 12
def initialize(tracking_codes:)
  self.tracking_codes = tracking_codes.respond_to?(:each) ? tracking_codes : [tracking_codes]
end

Public Instance Methods

execute() click to toggle source
# File lib/deliveries/couriers/correos_express/labels/generate.rb, line 16
def execute
  auth = {
    username: CorreosExpress.config(:username),
    password: CorreosExpress.config(:password)
  }
  decoded_labels = []
  tracking_codes.each do |tracking_code|
    params = {
      keyCli: CorreosExpress.config(:shipment_sender_code),
      nenvio: tracking_code,
      tipo: '1' # "1" - pdf, "2" - zpl image
    }.to_json

    headers = { 'Content-Type' => 'application/json' }
    response = self.class.post(
      api_endpoint,
      basic_auth: auth,
      body: params,
      headers: headers,
      debug_output: Deliveries.debug ? Deliveries.logger : nil
    )
    parsed_response = JSON.parse(response.body)
    if (parsed_response['codErr']).zero?
      if parsed_response['listaEtiquetas'].any?
        parsed_response['listaEtiquetas'].each do |encoded_label|
          decoded_labels << Base64.decode64(encoded_label).force_encoding('binary')
        end
      end
    else
      raise Deliveries::APIError.new(
        parsed_response['desErr'],
        parsed_response['codErr']
      )
    end
  end

  decoded_labels
end

Private Instance Methods

api_endpoint() click to toggle source
# File lib/deliveries/couriers/correos_express/labels/generate.rb, line 57
def api_endpoint
  if CorreosExpress.live?
    CorreosExpress::LABELS_ENDPOINT_LIVE
  else
    CorreosExpress::LABELS_ENDPOINT_TEST
  end
end