Method: ActiveShipping::UPS#create_shipment

Defined in:
lib/active_shipping/carriers/ups.rb

#create_shipment(origin, destination, packages, options = {}) ⇒ Object



182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
# File 'lib/active_shipping/carriers/ups.rb', line 182

def create_shipment(origin, destination, packages, options = {})
  options = @options.merge(options)
  packages = Array(packages)
  access_request = build_access_request

  # STEP 1: Confirm.  Validation step, important for verifying price.
  confirm_request = build_shipment_request(origin, destination, packages, options)
  logger.debug(confirm_request) if logger

  confirm_response = commit(:ship_confirm, save_request(access_request + confirm_request), (options[:test] || false))
  logger.debug(confirm_response) if logger

  # ... now, get the digest, it's needed to get the label.  In theory,
  # one could make decisions based on the price or some such to avoid
  # surprises.  This also has *no* error handling yet.
  xml = parse_ship_confirm(confirm_response)
  success = response_success?(xml)
  message = response_message(xml)
  raise ActiveShipping::ResponseContentError, StandardError.new(message) unless success
  digest  = response_digest(xml)

  # STEP 2: Accept. Use shipment digest in first response to get the actual label.
  accept_request = build_accept_request(digest, options)
  logger.debug(accept_request) if logger

  accept_response = commit(:ship_accept, save_request(access_request + accept_request), (options[:test] || false))
  logger.debug(accept_response) if logger

  # ...finally, build a map from the response that contains
  # the label data and tracking information.
  parse_ship_accept(accept_response)
end