Class: Tcat::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/tcat/query.rb

Overview

Query class handles making requests to the Tcat system

Defined Under Namespace

Classes: DeliveryItem

Instance Method Summary collapse

Constructor Details

#initialize(tracking_number) ⇒ Query

Returns a new instance of Query.



14
15
16
17
18
19
20
21
22
# File 'lib/tcat/query.rb', line 14

def initialize(tracking_number)
  @secret_string = Tcat.configuration.secret_string
  @secret_key = Tcat.configuration.secret_key
  validate_secrets!

  @tracking_number = tracking_number
  @http_client = HttpClient.new
  @encryption_service = EncryptionService.new(@secret_key)
end

Instance Method Details

#historyArray<DeliveryItem>

Get complete delivery history

Returns:

  • (Array<DeliveryItem>)

    Array of delivery status items, sorted by time (newest first)



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/tcat/query.rb', line 36

def history
  response_body = @http_client.post(data)
  if response_body
    result = Ox.load(response_body, mode: :hash, with_cdata: true)
    return [] if result.dig(:Result, :Status) != '0'
    extract_delivery_history(result)
  end
rescue StandardError => e
  Rails.logger.error("Error getting delivery history: #{e.message}")
  []
end

#latest_statusDeliveryItem?

Get latest delivery status with details

Returns:

  • (DeliveryItem, nil)

    Latest delivery status or nil if no history



50
51
52
53
54
# File 'lib/tcat/query.rb', line 50

def latest_status
  items = history
  return nil if items.empty?
  items.first
end

#status_codeSymbol

Get current delivery status code

Returns:

  • (Symbol)

    Status code (:done, :delivering, :collected, :in_transit, :unknown)



26
27
28
29
30
31
32
# File 'lib/tcat/query.rb', line 26

def status_code
  response_body = @http_client.post(data)
  parse_status_code(response_body) if response_body
rescue HttpClient::RequestError => e
  # Log error or handle it appropriately
  nil
end