52
53
54
55
56
57
58
59
60
61
62
63
64
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
|
# File 'lib/active_shipping/tracking_response.rb', line 52
class TrackingResponse < Response
attr_reader :carrier,:carrier_name,
:status,:status_code, :status_description,
:ship_time, :scheduled_delivery_date, :actual_delivery_date, :attempted_delivery_date,
:delivery_signature, :tracking_number, :shipment_events,
:shipper_address, :origin, :destination
def initialize(success, message, params = {}, options = {})
@carrier = options[:carrier].parameterize.to_sym
@carrier_name = options[:carrier]
@status = options[:status]
@status_code = options[:status_code]
@status_description = options[:status_description]
@ship_time = options[:ship_time]
@scheduled_delivery_date = options[:scheduled_delivery_date]
@actual_delivery_date = options[:actual_delivery_date]
@attempted_delivery_date = options[:attempted_delivery_date]
@delivery_signature = options[:delivery_signature]
@tracking_number = options[:tracking_number]
@shipment_events = Array(options[:shipment_events])
@shipper_address = options[:shipper_address]
@origin = options[:origin]
@destination = options[:destination]
super
end
def latest_event
@shipment_events.last
end
def is_delivered?
@status == :delivered
end
def has_exception?
@status == :exception
end
alias_method :exception_event, :latest_event
alias_method :delivered?, :is_delivered?
alias_method :exception?, :has_exception?
alias_method :scheduled_delivery_time, :scheduled_delivery_date
alias_method :actual_delivery_time, :actual_delivery_date
alias_method :attempted_delivery_time, :attempted_delivery_date
def ==(other)
attributes = i(carrier carrier_name status status_code status_description ship_time scheduled_delivery_date
actual_delivery_date attempted_delivery_date delivery_signature tracking_number shipper_address
origin destination
)
attributes.all? { |attr| self.public_send(attr) == other.public_send(attr) } && compare_shipment_events(other)
end
private
def compare_shipment_events(other)
shipment_events.sort_by(&:time) == other.shipment_events.sort_by(&:time)
end
end
|