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

Version Path
canvas_sync-0.16.4 lib/canvas_sync/job_chain.rb
canvas_sync-0.16.3 lib/canvas_sync/job_chain.rb
canvas_sync-0.16.2 lib/canvas_sync/job_chain.rb
canvas_sync-0.16.1 lib/canvas_sync/job_chain.rb
canvas_sync-0.15.1 lib/canvas_sync/job_chain.rb
canvas_sync-0.15.0 lib/canvas_sync/job_chain.rb
canvas_sync-0.14.0 lib/canvas_sync/job_chain.rb
canvas_sync-0.13.0 lib/canvas_sync/job_chain.rb