Sha256: fbccf695889a11d499f0c19fff76f3569ebb8e1db884e206c677aa45a948ec83

Contents?: true

Size: 1.57 KB

Versions: 1

Compression:

Stored size: 1.57 KB

Contents

# encoding: UTF-8
module Correios
  module Frete
    class Pacote
      attr_reader :peso, :comprimento, :altura, :largura, :volume

      MIN_DIMENSIONS = {
        :comprimento => 16.0,
        :largura => 11.0,
        :altura => 2.0
      }

      def initialize(itens = nil)
        @peso = @comprimento = @largura = @altura = @volume = 0.0
        @itens = []

        itens.each { |item| adicionar_item(item) } if itens
      end

      def formato
        :caixa_pacote
      end

      def itens
        @itens
      end
      alias items itens

      def adicionar_item(item)
        return unless item

        item = Correios::Frete::PacoteItem.new(item) if item.is_a?(Hash)
        @itens << item

        calcular_medidas(item)
        item
      end
      alias add_item adicionar_item

      private

      def calcular_medidas(item)
        @peso += item.peso
        @volume += item.volume

        if @itens.size == 1
          @comprimento = item.comprimento
          @largura = item.largura
          @altura = item.altura
        else
          dimensao = @volume.to_f**(1.0/3)
          @comprimento = @largura = @altura = dimensao
        end

        min_dimension_values
      end

      def min_dimension_values()
        @comprimento = min(@comprimento, MIN_DIMENSIONS[:comprimento])
        @largura = min(@largura, MIN_DIMENSIONS[:largura])
        @altura = min(@altura, MIN_DIMENSIONS[:altura])
      end

      def min(value, minimum)
        (value < minimum) ? minimum : value
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
correios-frete-alternative-1.10.2 lib/correios/frete/pacote.rb