Sha256: e2f2ab3619f34930b49ee7eefeddc24c939edae9323c6aefa807aef94cce1e99
Contents?: true
Size: 1.44 KB
Versions: 8
Compression:
Stored size: 1.44 KB
Contents
module CanvasSync class JobChain attr_reader :chain_data delegate_missing_to :chain_data VALID_PLACEMENT_PARAMETERS = %i[before after].freeze def initialize(chain_data) @chain_data = chain_data end def jobs chain_data[:jobs] end def global_options chain_data[:global_options] end def merge_options(job, options) jobs.each do |j| j[:options].deep_merge!(options) if job_matches_pattern(j, job) end end def insert(new_job, **kwargs) invalid_params = kwargs.keys - VALID_PLACEMENT_PARAMETERS raise "Invalid placement parameters: #{invalid_params.map(&:to_s).join(', ')}" if invalid_params.present? raise "Exactly one placement parameter may be provided" if kwargs.values.compact!.length > 1 if !kwargs.present? jobs << new_job else placement = kwargs.keys[0] relative_to = kwargs.values[0] index = jobs.index { |job| job_matches_pattern(job, relative_to) } raise "Could not find a \"#{relative_to}\" job in the chain" if index.nil? index += 1 if placement == :after new_job[:job] = new_job[:job].to_s jobs.insert(index, new_job) end end def process!(extra_options: {}) CanvasSync::invoke_next(self, extra_options: extra_options) end private def job_matches_pattern(job_entry, pattern) job_entry[:job].to_s == pattern.to_s end end end
Version data entries
8 entries across 8 versions & 1 rubygems