Files
old-vendor-scheduler-service/app/services/schedule_pipeline/fetch_schedule.rb
2022-03-23 05:44:42 +01:00

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