Class: Tcat::WorkerClient
- Inherits:
-
Object
- Object
- Tcat::WorkerClient
- Defined in:
- lib/tcat/worker_client.rb
Overview
WorkerClient provides a simple interface to query T-Cat tracking via Cloudflare Worker This is an alternative to the direct Query class that goes through your deployed Worker
Defined Under Namespace
Classes: APIError, DeliveryItem, NetworkError, WorkerError
Instance Attribute Summary collapse
-
#worker_url ⇒ Object
readonly
Returns the value of attribute worker_url.
Instance Method Summary collapse
-
#healthy? ⇒ Boolean
Check if the Worker is healthy.
-
#history(tracking_number) ⇒ Array<DeliveryItem>
Get the complete delivery history.
-
#initialize(worker_url = nil, timeout: 30, token: nil) ⇒ WorkerClient
constructor
Initialize a new WorkerClient.
-
#latest_status(tracking_number) ⇒ DeliveryItem?
Get the latest delivery status.
-
#query(tracking_number) ⇒ Hash
Query a tracking number through the Worker.
-
#status_code(tracking_number) ⇒ Symbol?
Get the current status code for a tracking number.
Constructor Details
#initialize(worker_url = nil, timeout: 30, token: nil) ⇒ WorkerClient
Initialize a new WorkerClient
26 27 28 29 30 31 32 33 34 |
# File 'lib/tcat/worker_client.rb', line 26 def initialize(worker_url = nil, timeout: 30, token: nil) url = worker_url || Tcat.configuration.worker_url raise ArgumentError, 'Worker URL must be configured' if url.nil? || url.empty? @worker_url = url.chomp('/') @timeout = timeout @token = token || Tcat.configuration.worker_token validate_url! end |
Instance Attribute Details
#worker_url ⇒ Object (readonly)
Returns the value of attribute worker_url.
17 18 19 |
# File 'lib/tcat/worker_client.rb', line 17 def worker_url @worker_url end |
Instance Method Details
#healthy? ⇒ Boolean
Check if the Worker is healthy
91 92 93 94 95 96 97 98 |
# File 'lib/tcat/worker_client.rb', line 91 def healthy? uri = URI("#{@worker_url}/health") response = make_request(uri) data = JSON.parse(response.body, symbolize_names: true) data[:status] == 'ok' rescue StandardError false end |
#history(tracking_number) ⇒ Array<DeliveryItem>
Get the complete delivery history
67 68 69 70 71 72 73 74 |
# File 'lib/tcat/worker_client.rb', line 67 def history(tracking_number) result = query(tracking_number) items = result[:items] || [] items.map { |item| parse_delivery_item(item) } rescue WorkerError => e warn "Error getting history: #{e.}" if $DEBUG [] end |
#latest_status(tracking_number) ⇒ DeliveryItem?
Get the latest delivery status
79 80 81 82 83 84 85 86 87 |
# File 'lib/tcat/worker_client.rb', line 79 def latest_status(tracking_number) result = query(tracking_number) return nil unless result[:latest] parse_delivery_item(result[:latest]) rescue WorkerError => e warn "Error getting latest status: #{e.}" if $DEBUG nil end |
#query(tracking_number) ⇒ Hash
Query a tracking number through the Worker
39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/tcat/worker_client.rb', line 39 def query(tracking_number) raise ArgumentError, 'Tracking number cannot be nil or empty' if tracking_number.nil? || tracking_number.empty? uri = URI("#{@worker_url}/query") uri.query = URI.encode_www_form(no: tracking_number) response = make_request(uri) parse_response(response) rescue SocketError, Net::HTTPError => e raise NetworkError, "Network error: #{e.}" rescue JSON::ParserError => e raise APIError, "Invalid JSON response: #{e.}" end |
#status_code(tracking_number) ⇒ Symbol?
Get the current status code for a tracking number
56 57 58 59 60 61 62 |
# File 'lib/tcat/worker_client.rb', line 56 def status_code(tracking_number) result = query(tracking_number) result[:status_code]&.to_sym rescue WorkerError => e warn "Error getting status: #{e.}" if $DEBUG nil end |