Initial commit
This commit is contained in:
56
app/services/schedule_pipeline/fetch_schedule.rb
Normal file
56
app/services/schedule_pipeline/fetch_schedule.rb
Normal file
@@ -0,0 +1,56 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user