class ShipCompliant::CheckComplianceResult

ShipCompliant::CheckComplianceResult

CheckComplianceResult wraps the response from the CheckComplianceOfSalesOrderWithAddressValidation API method.

It provides methods to access nested objects and easily iterate over taxes rates for shipments.

compliant_status = ShipCompliant::CheckCompliance.of_sales_order({
  # attributes here
})

compliant_status.compliant? #=> true

Public Instance Methods

address_validation_result() click to toggle source

Returns the AddressValidationResult.

# File lib/ship_compliant/check_compliance_result.rb, line 68
def address_validation_result
  response[:address_validation_result]
end
compliance_rules_for_shipment(shipment_key) click to toggle source

Finds all the compliance rules for a shipment. Returns an instance of ShipmentCompliance.

shipment_compliance = compliance_result.compliance_rules_for_shipment('SHIPMENT-KEY')
puts shipment_compliance.compliant? #=> false
# File lib/ship_compliant/check_compliance_result.rb, line 62
def compliance_rules_for_shipment(shipment_key)
  shipment = shipment_compliance_rules.select { |s| s[:key] == shipment_key }.first
  ShipmentCompliance.new(shipment)
end
compliant?() click to toggle source

Returns true if all shipments of a SalesOrder are compliant.

# File lib/ship_compliant/check_compliance_result.rb, line 19
def compliant?
  response[:sales_order][:is_compliant] == true
end
shipment_compliance_rules() click to toggle source

Returns an array of the ShipmentComplianceResponse node as a Hash.

compliance_result.shipment_compliance_rules.each do |shipment|
  puts "SHIPMENT '#{shipment[:key]}' IS NOT COMPLIANT" unless shipment[:is_compliant]
end
# File lib/ship_compliant/check_compliance_result.rb, line 53
def shipment_compliance_rules
  Array.wrap(response[:sales_order][:shipments][:shipment_compliance_response])
end
shipment_sales_tax_rates() click to toggle source

This method returns an Array containing information about each shipment of a SalesOrder.

# File lib/ship_compliant/check_compliance_result.rb, line 44
def shipment_sales_tax_rates
  Array.wrap(response[:sales_order][:sales_tax_rates][:shipment_sales_tax_rates][:shipment_sales_tax_rate])
end
suggested_address() click to toggle source

Returns an instance of ShipCompliant::SuggestedAddress.

# File lib/ship_compliant/check_compliance_result.rb, line 73
def suggested_address
  SuggestedAddress.new(response[:suggested_address])
end
taxes_for_shipment(shipment_key) click to toggle source

Access the tax information for a shipment. Returns an instance of ShipmentSalesTaxRate.

# File lib/ship_compliant/check_compliance_result.rb, line 30
def taxes_for_shipment(shipment_key)
  shipment = shipment_sales_tax_rates.select { |s| s[:@shipment_key] == shipment_key }.first

  # convert attribute keys to symbols
  freight = attributes_to_symbols(shipment[:freight_sales_tax_rate])

  # wrap products in ProductSalesTaxRate
  products = wrap_products(shipment[:product_sales_tax_rates])

  ShipmentSalesTaxRate.new(shipment_key, FreightSalesTaxRate.new(freight), products)
end

Private Instance Methods

attributes_to_symbols(object) click to toggle source

Nori returns XML attributes as a key beginning with a spiral (@). This removes the spiral and changes key to a symbol.

# File lib/ship_compliant/check_compliance_result.rb, line 81
def attributes_to_symbols(object)
  object.transform_keys do |key|
    key.to_s.gsub('@', '').to_sym
  end
end
wrap_products(products) click to toggle source

Wraps each ProductSalesTaxRates node with ShipCompliant::ProductSalesTaxRate

# File lib/ship_compliant/check_compliance_result.rb, line 89
def wrap_products(products)
  Array.wrap(products[:product_sales_tax_rate]).map do |product|
    ProductSalesTaxRate.new(attributes_to_symbols(product))
  end
end