diff --git a/lib/travis/api/app/endpoint/builds.rb b/lib/travis/api/app/endpoint/builds.rb index ffa6b90a..e04dc25f 100644 --- a/lib/travis/api/app/endpoint/builds.rb +++ b/lib/travis/api/app/endpoint/builds.rb @@ -1,7 +1,7 @@ require 'travis/api/app' require 'travis/api/workers/build_cancellation' require 'travis/api/workers/build_restart' -require 'travis/api/enqueue/services/enqueue_build' +require 'travis/api/enqueue/services/restart_model' class Travis::Api::App class Endpoint @@ -50,7 +50,7 @@ class Travis::Api::App post '/:id/restart' do Metriks.meter("api.request.restart_build").mark if Travis::Features.owner_active?(:enqueue_to_hub, current_user) - service = Travis::Enqueue::Services::EnqueueBuild.new(current_user, params[:id]) + service = Travis::Enqueue::Services::RestartModel.new(current_user, { build_id: params[:id] }) if !service.accept? status 400 result = false diff --git a/lib/travis/api/enqueue/services/enqueue_build.rb b/lib/travis/api/enqueue/services/restart_model.rb similarity index 56% rename from lib/travis/api/enqueue/services/enqueue_build.rb rename to lib/travis/api/enqueue/services/restart_model.rb index 8776a5e6..7b7ae649 100644 --- a/lib/travis/api/enqueue/services/enqueue_build.rb +++ b/lib/travis/api/enqueue/services/restart_model.rb @@ -2,12 +2,13 @@ module Travis module Enqueue module Services - class EnqueueBuild - attr_reader :current_user, :build + class RestartModel + attr_reader :current_user, :target - def initialize(current_user, build_id) + def initialize(current_user, params) @current_user = current_user - @build = Build.find(build_id) + @params = params + target end def push(event, payload) @@ -24,20 +25,32 @@ module Travis def messages messages = [] - messages << { notice: "The build was successfully restarted." } if accept? + messages << { notice: "The #{type} was successfully restarted." } if accept? messages << { error: 'You do not seem to have sufficient permissions.' } unless permission? - messages << { error: "This build currently can not be restarted." } unless resetable? + messages << { error: "This #{type} currently can not be restarted." } unless resetable? messages end + def type + @type ||= @params[:build_id] ? :build : :job + end + + def target + if type == :build + @target = Build.find(@params[:build_id]) + else + @target = Job.find(@params[:job_id]) + end + end + private def permission? - current_user.permission?(required_role, repository_id: build.repository_id) + current_user.permission?(required_role, repository_id: target.repository_id) end def resetable? - build.resetable? + target.resetable? end def required_role