57 lines
1.5 KiB
Ruby
57 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require_relative '../log/loggable'
|
|
require_relative '../vendors/broad_sign/broad_sign_tokens'
|
|
require_relative '../vendors/broad_sign/broad_sign_fetch_schedule'
|
|
require_relative '../vendors/vistar/vistar_tokens'
|
|
require_relative '../vendors/vistar/vistar_fetch_schedule'
|
|
|
|
module SchedulePipeline
|
|
class FetchSchedule
|
|
include Log::Loggable
|
|
|
|
def initialize(in_queue, out_queue, errors)
|
|
@in_queue = in_queue
|
|
@out_queue = out_queue
|
|
@errors = errors
|
|
end
|
|
|
|
def start
|
|
@in_queue.subscribe { |msg| process_msg(msg) }
|
|
end
|
|
|
|
def process_msg(msg)
|
|
logger.debug("fetch schedule: #{msg}")
|
|
vendor = msg[:vendor]
|
|
vendor_fetch = for_vendor(vendor)
|
|
unless vendor_fetch
|
|
@errors.push("FetchSchedule: Unknown vendor #{vendor}")
|
|
return
|
|
end
|
|
|
|
params = msg[:params]
|
|
fetched = vendor_fetch.call(params)
|
|
unless fetched
|
|
@errors.push("FetchSchedule: No ads returned from vendor #{vendor}")
|
|
return
|
|
end
|
|
Models::ScheduleProcessMsg.new(vendor, params[:player], fetched).push(@out_queue) if fetched
|
|
true
|
|
rescue StandardError => e
|
|
@errors.push(e.message)
|
|
end
|
|
|
|
private
|
|
def for_vendor(vendor)
|
|
vendor_map[vendor&.to_sym]
|
|
end
|
|
|
|
def vendor_map
|
|
@vendor_map ||= {
|
|
broad_sign: Vendors::BroadSign::BroadSignFetchSchedule.new(Vendors::BroadSign::BroadSignTokens.instance),
|
|
vistar: Vendors::Vistar::VistarFetchSchedule.new(Vendors::Vistar::VistarTokens.instance)
|
|
}
|
|
end
|
|
end
|
|
end
|