summaryrefslogtreecommitdiff
path: root/app/models/concerns/has_status.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/concerns/has_status.rb')
-rw-r--r--app/models/concerns/has_status.rb26
1 files changed, 16 insertions, 10 deletions
diff --git a/app/models/concerns/has_status.rb b/app/models/concerns/has_status.rb
index aea359e70bb..b819947c9e6 100644
--- a/app/models/concerns/has_status.rb
+++ b/app/models/concerns/has_status.rb
@@ -2,22 +2,21 @@ module HasStatus
extend ActiveSupport::Concern
DEFAULT_STATUS = 'created'.freeze
- AVAILABLE_STATUSES = %w[created pending running success failed canceled skipped].freeze
- STARTED_STATUSES = %w[running success failed skipped].freeze
+ BLOCKED_STATUS = 'manual'.freeze
+ AVAILABLE_STATUSES = %w[created pending running success failed canceled skipped manual].freeze
+ STARTED_STATUSES = %w[running success failed skipped manual].freeze
ACTIVE_STATUSES = %w[pending running].freeze
COMPLETED_STATUSES = %w[success failed canceled skipped].freeze
- ORDERED_STATUSES = %w[failed pending running canceled success skipped].freeze
+ ORDERED_STATUSES = %w[manual failed pending running canceled success skipped].freeze
class_methods do
def status_sql
- scope = if respond_to?(:exclude_ignored)
- exclude_ignored
- else
- all
- end
+ scope = respond_to?(:exclude_ignored) ? exclude_ignored : all
+
builds = scope.select('count(*)').to_sql
created = scope.created.select('count(*)').to_sql
success = scope.success.select('count(*)').to_sql
+ manual = scope.manual.select('count(*)').to_sql
pending = scope.pending.select('count(*)').to_sql
running = scope.running.select('count(*)').to_sql
skipped = scope.skipped.select('count(*)').to_sql
@@ -30,7 +29,8 @@ module HasStatus
WHEN (#{builds})=(#{success})+(#{skipped}) THEN 'success'
WHEN (#{builds})=(#{success})+(#{skipped})+(#{canceled}) THEN 'canceled'
WHEN (#{builds})=(#{created})+(#{skipped})+(#{pending}) THEN 'pending'
- WHEN (#{running})+(#{pending})+(#{created})>0 THEN 'running'
+ WHEN (#{running})+(#{pending})>0 THEN 'running'
+ WHEN (#{manual})>0 THEN 'manual'
ELSE 'failed'
END)"
end
@@ -63,6 +63,7 @@ module HasStatus
state :success, value: 'success'
state :canceled, value: 'canceled'
state :skipped, value: 'skipped'
+ state :manual, value: 'manual'
end
scope :created, -> { where(status: 'created') }
@@ -73,12 +74,13 @@ module HasStatus
scope :failed, -> { where(status: 'failed') }
scope :canceled, -> { where(status: 'canceled') }
scope :skipped, -> { where(status: 'skipped') }
+ scope :manual, -> { where(status: 'manual') }
scope :running_or_pending, -> { where(status: [:running, :pending]) }
scope :finished, -> { where(status: [:success, :failed, :canceled]) }
scope :failed_or_canceled, -> { where(status: [:failed, :canceled]) }
scope :cancelable, -> do
- where(status: [:running, :pending, :created])
+ where(status: [:running, :pending, :created, :manual])
end
end
@@ -94,6 +96,10 @@ module HasStatus
COMPLETED_STATUSES.include?(status)
end
+ def blocked?
+ BLOCKED_STATUS == status
+ end
+
private
def calculate_duration