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
Returns the AddressValidationResult
.
# File lib/ship_compliant/check_compliance_result.rb, line 68 def address_validation_result response[:address_validation_result] end
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
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
Returns a float of the recommended sales tax due for a SalesOrder.
# File lib/ship_compliant/check_compliance_result.rb, line 24 def recommended_tax_due response[:sales_order][:sales_tax_rates][:recommended_sales_tax_due].to_f end
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
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
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
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
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
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