Class: Xpost::Orders
- Inherits:
-
Object
- Object
- Xpost::Orders
- Defined in:
- lib/xpost/orders.rb
Class Method Summary collapse
-
.all(auth_token, status = nil) ⇒ Object
cant actually get all orders since its paginated.
- .cancel(auth_token, tracking_number) ⇒ Object
- .confirm(auth_token, tracking_number, payment_reference_id = nil) ⇒ Object
- .create(auth_token, order = nil, shipment = nil, reference_id = nil) ⇒ Object
- .exists?(auth_token, tracking_number) ⇒ Boolean
-
.find(auth_token, tracking_number) ⇒ Object
gets all the details of an order.
- .for_pickup(auth_token, tracking_number, pickup_address) ⇒ Object
- .get_shipping_labels(auth_token, tracking_number) ⇒ Object
-
.track(auth_token, tracking_number) ⇒ Object
only gets the order tat (turnaround time) info.
Class Method Details
.all(auth_token, status = nil) ⇒ Object
cant actually get all orders since its paginated
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/xpost/orders.rb', line 13 def self.all(auth_token, status = nil) valid_xpost_statuses = ["pending", "confirmed", "for_pickup", "picked_up", "failed_pickup", "failed_delivery", "claimed", "return_in_transit", "returned", "failed_return", "out_for_delivery", "for_consolidation", "consolidated", "for_dropoff", "dropped_off", "for_transfer", "for_acceptance", "accepted", "canceled", "in_transit", "delivered"] if valid_xpost_statuses.include?(status) all_orders_url = "orders?status=#{status}" else all_orders_url = "orders" end get_url(all_orders_url, headers: auth_header(auth_token)) end |
.cancel(auth_token, tracking_number) ⇒ Object
85 86 87 88 89 90 91 |
# File 'lib/xpost/orders.rb', line 85 def self.cancel(auth_token, tracking_number) cancel_order_url = "orders/#{tracking_number}/cancel" raise "Order isn't pending" if Xpost::Orders.find(auth_token, tracking_number)[:status] != "pending" res = put_url(cancel_order_url, headers: auth_header(auth_token)) res = res[:message] == "Not Found" ? "Not Found" : res end |
.confirm(auth_token, tracking_number, payment_reference_id = nil) ⇒ Object
62 63 64 65 66 67 68 69 70 71 |
# File 'lib/xpost/orders.rb', line 62 def self.confirm(auth_token, tracking_number, payment_reference_id = nil) # TODO: these checks are expensive (potentially three back and forth requests) raise "Order not found" unless Xpost::Orders.exists?(auth_token, tracking_number) raise "Order isn't pending" if Xpost::Orders.find(auth_token, tracking_number)[:status] != "pending" confirm_order_url = "orders/#{tracking_number}/confirm" res = put_url(confirm_order_url, data: payment_reference_id, headers: auth_header(auth_token)) res = res[:message] == "Not Found" ? "Not Found" : res end |
.create(auth_token, order = nil, shipment = nil, reference_id = nil) ⇒ Object
52 53 54 55 56 57 58 59 60 |
# File 'lib/xpost/orders.rb', line 52 def self.create(auth_token, order = nil, shipment = nil, reference_id = nil) raise "Missing order data" if order.nil? raise "Missing shipment data" if shipment.nil? order.shipment = shipment order.reference_id = reference_id res = post_url("orders", data: order, headers: auth_header(auth_token)) end |
.exists?(auth_token, tracking_number) ⇒ Boolean
46 47 48 49 50 |
# File 'lib/xpost/orders.rb', line 46 def self.exists?(auth_token, tracking_number) find_order_url = "orders/#{tracking_number}" res = get_url(find_order_url, headers: auth_header(auth_token)) res[:status] != 404 && res[:message] != "Not Found" end |
.find(auth_token, tracking_number) ⇒ Object
gets all the details of an order
31 32 33 34 35 36 |
# File 'lib/xpost/orders.rb', line 31 def self.find(auth_token, tracking_number) find_order_url = "orders/#{tracking_number}" res = get_url(find_order_url, headers: auth_header(auth_token)) res = res[:message] == "Not Found" ? "Not Found" : res end |
.for_pickup(auth_token, tracking_number, pickup_address) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/xpost/orders.rb', line 73 def self.for_pickup(auth_token, tracking_number, pickup_address) raise "Order isn't confirmed" if Xpost::Orders.find(auth_token, tracking_number)[:status] != "confirmed" for_pickup_url = "orders/#{tracking_number}/for-pickup" raise "Missing pickup address" if pickup_address.nil? raise "Invalid pickup address" unless pickup_address.valid? pickup_address = { pickup_address: pickup_address.attributes } res = put_url(for_pickup_url, data: pickup_address, headers: auth_header(auth_token)) res = res[:message] == "Not Found" ? "Not Found" : res end |
.get_shipping_labels(auth_token, tracking_number) ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/xpost/orders.rb', line 93 def self.get_shipping_labels(auth_token, tracking_number) if tracking_number.kind_of?(Array) shipping_labels_url = "orders/download/awb/zebra" res = post_url(shipping_labels_url, data: tracking_number, headers: auth_header(auth_token)) res = res[:message] == "Not Found" ? "Not Found" : res else raise "Order isn't for_pickup" if Xpost::Orders.find(auth_token, tracking_number)[:status] != "for_pickup" shipping_label_url = "orders/#{tracking_number}/awb?type=zebra" res = get_url(shipping_label_url, headers: auth_header(auth_token)) res = res[:message] == "Not Found" ? "Not Found" : res end end |
.track(auth_token, tracking_number) ⇒ Object
only gets the order tat (turnaround time) info
39 40 41 42 43 44 |
# File 'lib/xpost/orders.rb', line 39 def self.track(auth_token, tracking_number) track_order_url = "orders/#{tracking_number}" res = get_url(track_order_url, headers: auth_header(auth_token)) res = res[:message] == "Not Found" ? "Not Found" : { timeline: res[:tat], events: res[:events] } end |