Class: Calculator::Shipping::Correios::Base

Inherits:
ShippingCalculator
  • Object
show all
Defined in:
app/models/spree/calculator/shipping/correios/base.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.descriptionObject

Raises:

  • (StandardError)


18
19
20
# File 'app/models/spree/calculator/shipping/correios/base.rb', line 18

def self.description
  raise StandardError, "Subclass must implement description"
end

.service_codeObject

Raises:

  • (StandardError)


22
23
24
# File 'app/models/spree/calculator/shipping/correios/base.rb', line 22

def self.service_code
  raise StandardError, "Subclass must implement service code"
end

Instance Method Details

#available?(package) ⇒ Boolean

Returns:

  • (Boolean)


10
11
12
13
14
15
16
# File 'app/models/spree/calculator/shipping/correios/base.rb', line 10

def available?(package)
  is_package_shippable?(package)

  !compute(package).nil?
rescue Spree::ShippingError
  false
end

#compute_package(package) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'app/models/spree/calculator/shipping/correios/base.rb', line 26

def compute_package(package)
  service_code = self.class.service_code
  retrieve_correios_response(package)

  return nil if @rates_result.kind_of?(Spree::ShippingError)
  return nil if @rates_result.empty?
  return nil unless @rates_result.is_a?(Hash)

  rate = @rates_result[service_code][:price]

  return nil unless rate
  return nil if rate.to_f == 0.0

  return rate
end

#timing_info(package) ⇒ Object



42
43
44
45
46
# File 'app/models/spree/calculator/shipping/correios/base.rb', line 42

def timing_info(package)
  @rates_result ||= retrieve_correios_response(package)
  service_code = self.class.service_code
  @rates_result[service_code][:timing_info]
end