debian-mirror-gitlab/lib/gitlab/ci/pipeline/seed/stage.rb
2019-10-12 21:52:04 +05:30

63 lines
1.5 KiB
Ruby

# frozen_string_literal: true
module Gitlab
module Ci
module Pipeline
module Seed
class Stage < Seed::Base
include Gitlab::Utils::StrongMemoize
delegate :size, to: :seeds
delegate :dig, to: :seeds
def initialize(pipeline, attributes, previous_stages)
@pipeline = pipeline
@attributes = attributes
@previous_stages = previous_stages
@builds = attributes.fetch(:builds).map do |attributes|
Seed::Build.new(@pipeline, attributes, previous_stages)
end
end
def attributes
{ name: @attributes.fetch(:name),
position: @attributes.fetch(:index),
pipeline: @pipeline,
project: @pipeline.project }
end
def seeds
strong_memoize(:seeds) do
@builds.select(&:included?)
end
end
def errors
strong_memoize(:errors) do
seeds.flat_map(&:errors).compact
end
end
def seeds_names
strong_memoize(:seeds_names) do
seeds.map(&:name).to_set
end
end
def included?
seeds.any?
end
def to_resource
strong_memoize(:stage) do
::Ci::Stage.new(attributes).tap do |stage|
stage.statuses = seeds.map(&:to_resource)
end
end
end
end
end
end
end
end