Method: ActiveShipping::RateEstimate#delivery_range
- Defined in:
-
lib/active_shipping/rate_estimate.rb,
lib/active_shipping/rate_estimate.rb
The minimum and maximum date of when the shipment is expected to be delivered.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/active_shipping/rate_estimate.rb', line 65 class RateEstimate attr_reader :origin, :destination, :package_rates, :carrier, :service_name, :service_code, :shipping_date, :delivery_date, :delivery_range, :currency, :negotiated_rate, :insurance_price, :estimate_reference, :expires_at, :pickup_time, :compare_price, :phone_required def initialize(origin, destination, carrier, service_name, = {}) @origin, @destination, @carrier, @service_name = origin, destination, carrier, service_name @service_code = [:service_code] @estimate_reference = [:estimate_reference] @pickup_time = [:pickup_time] @expires_at = [:expires_at] if [:package_rates] @package_rates = [:package_rates].map { |p| p.update(:rate => Package.cents_from(p[:rate])) } else @package_rates = Array([:packages]).map { |p| {:package => p} } end @total_price = Package.cents_from([:total_price]) @negotiated_rate = [:negotiated_rate] ? Package.cents_from([:negotiated_rate]) : nil @compare_price = [:compare_price] ? Package.cents_from([:compare_price]) : nil @phone_required = !![:phone_required] @currency = ActiveUtils::CurrencyCode.standardize([:currency]) @delivery_range = [:delivery_range] ? [:delivery_range].map { |date| date_for(date) }.compact : [] @shipping_date = date_for([:shipping_date]) @delivery_date = @delivery_range.last @insurance_price = Package.cents_from([:insurance_price]) end # The total price of the shipments in cents. # @return [Integer] def total_price @total_price || @package_rates.sum { |pr| pr[:rate] } rescue NoMethodError raise ArgumentError.new("RateEstimate must have a total_price set, or have a full set of valid package rates.") end alias_method :price, :total_price # Adds a package to this rate estimate # @param package [ActiveShipping::Package] The package to add. # @param rate [#cents, Float, String, nil] The rate for this package. This is only required if # there is no total price for this shipment # @return [self] def add(package, rate = nil) cents = Package.cents_from(rate) raise ArgumentError.new("New packages must have valid rate information since this RateEstimate has no total_price set.") if cents.nil? and total_price.nil? @package_rates << {:package => package, :rate => cents} self end # The list of packages for which rate estimates are given. # @return [Array<ActiveShipping::Package>] def packages package_rates.map { |p| p[:package] } end # The number of packages for which rate estimates are given. # @return [Integer] def package_count package_rates.length end private # Returns a Date object for a given input # @param [String, Date, Time, DateTime, ...] The object to infer a date from. # @return [Date, nil] The Date object absed on the input, or `nil` if no date # could be determined. def date_for(date) date && DateTime.strptime(date.to_s, "%Y-%m-%d") rescue ArgumentError nil end end |