Class: Lab::Lims::Api::WsApi

Inherits:
Object
  • Object
show all
Defined in:
app/services/lab/lims/api/ws_api.rb

Overview

Retrieve results from LIMS only through a websocket

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ WsApi

Returns a new instance of WsApi.



11
12
13
14
15
# File 'app/services/lab/lims/api/ws_api.rb', line 11

def initialize(config)
  @config = config
  @results_queue = []
  @socket = nil
end

Instance Method Details

#consume_orders(**_kwargs) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'app/services/lab/lims/api/ws_api.rb', line 17

def consume_orders(**_kwargs)
  loop do
    results = fetch_results
    unless results
      Rails.logger.debug('No results available... Waiting for results...')
      sleep(Lab::Lims::Config.updates_poll_frequency)
      next
    end

    Rails.logger.info("Received result for ##{results['tracking_number']}")
    order = find_order(results['tracking_number'])
    next unless order

    Rails.logger.info("Updating result for order ##{order.order_id}")
    yield make_order_dto(order, results), OpenStruct.new(last_seq: 1)
  end
end