diff options
Diffstat (limited to 'lib/gitlab/data_builder/pipeline.rb')
-rw-r--r-- | lib/gitlab/data_builder/pipeline.rb | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/lib/gitlab/data_builder/pipeline.rb b/lib/gitlab/data_builder/pipeline.rb index e48f1fa8e80..b8ccef03e63 100644 --- a/lib/gitlab/data_builder/pipeline.rb +++ b/lib/gitlab/data_builder/pipeline.rb @@ -2,21 +2,35 @@ module Gitlab module DataBuilder - module Pipeline - extend self + # Some callers want to include retried builds, so we wrap the payload hash + # in a SimpleDelegator with additional methods. + class Pipeline < SimpleDelegator + def self.build(pipeline) + new(pipeline) + end - def build(pipeline) - { + def initialize(pipeline) + @pipeline = pipeline + + super( object_kind: 'pipeline', object_attributes: hook_attrs(pipeline), merge_request: pipeline.merge_request && merge_request_attrs(pipeline.merge_request), user: pipeline.user.try(:hook_attrs), project: pipeline.project.hook_attrs(backward: false), commit: pipeline.commit.try(:hook_attrs), - builds: pipeline.builds.latest.map(&method(:build_hook_attrs)) - } + builds: Gitlab::Lazy.new { pipeline.builds.latest.map(&method(:build_hook_attrs)) } + ) end + def with_retried_builds + merge( + builds: Gitlab::Lazy.new { @pipeline.builds.map(&method(:build_hook_attrs)) } + ) + end + + private + def hook_attrs(pipeline) { id: pipeline.id, |