2016-05-09 19:26:13 -04:00
|
|
|
class PipelinesFinder
|
2016-08-29 12:02:08 -04:00
|
|
|
attr_reader :project, :pipelines
|
2016-05-09 19:26:13 -04:00
|
|
|
|
|
|
|
def initialize(project)
|
|
|
|
@project = project
|
2016-08-29 12:02:08 -04:00
|
|
|
@pipelines = project.pipelines
|
2016-05-09 19:26:13 -04:00
|
|
|
end
|
|
|
|
|
2016-08-29 12:02:08 -04:00
|
|
|
def execute(scope: nil)
|
|
|
|
scoped_pipelines =
|
|
|
|
case scope
|
|
|
|
when 'running'
|
2017-02-15 09:06:00 -05:00
|
|
|
pipelines.running
|
|
|
|
when 'pending'
|
|
|
|
pipelines.pending
|
|
|
|
when 'finished'
|
|
|
|
pipelines.finished
|
2016-08-29 12:02:08 -04:00
|
|
|
when 'branches'
|
|
|
|
from_ids(ids_for_ref(branches))
|
|
|
|
when 'tags'
|
|
|
|
from_ids(ids_for_ref(tags))
|
|
|
|
else
|
|
|
|
pipelines
|
|
|
|
end
|
|
|
|
|
|
|
|
scoped_pipelines.order(id: :desc)
|
2016-05-09 19:26:13 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
2016-08-29 12:02:08 -04:00
|
|
|
def ids_for_ref(refs)
|
2016-05-09 19:26:13 -04:00
|
|
|
pipelines.where(ref: refs).group(:ref).select('max(id)')
|
|
|
|
end
|
|
|
|
|
2016-08-29 12:02:08 -04:00
|
|
|
def from_ids(ids)
|
2016-05-09 19:26:13 -04:00
|
|
|
pipelines.unscoped.where(id: ids)
|
|
|
|
end
|
|
|
|
|
|
|
|
def branches
|
2016-06-29 01:10:18 -04:00
|
|
|
project.repository.branch_names
|
2016-05-09 19:26:13 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def tags
|
2016-06-29 01:10:18 -04:00
|
|
|
project.repository.tag_names
|
2016-05-09 19:26:13 -04:00
|
|
|
end
|
|
|
|
end
|