42 lines
754 B
Ruby
42 lines
754 B
Ruby
class PipelinesFinder
|
|
attr_reader :project, :pipelines
|
|
|
|
def initialize(project)
|
|
@project = project
|
|
@pipelines = project.pipelines
|
|
end
|
|
|
|
def execute(scope: nil)
|
|
scoped_pipelines =
|
|
case scope
|
|
when 'running'
|
|
pipelines.running_or_pending
|
|
when 'branches'
|
|
from_ids(ids_for_ref(branches))
|
|
when 'tags'
|
|
from_ids(ids_for_ref(tags))
|
|
else
|
|
pipelines
|
|
end
|
|
|
|
scoped_pipelines.order(id: :desc)
|
|
end
|
|
|
|
private
|
|
|
|
def ids_for_ref(refs)
|
|
pipelines.where(ref: refs).group(:ref).select('max(id)')
|
|
end
|
|
|
|
def from_ids(ids)
|
|
pipelines.unscoped.where(id: ids)
|
|
end
|
|
|
|
def branches
|
|
project.repository.branch_names
|
|
end
|
|
|
|
def tags
|
|
project.repository.tag_names
|
|
end
|
|
end
|