diff options
-rw-r--r-- | app/controllers/projects/milestones_controller.rb | 4 | ||||
-rw-r--r-- | app/observers/milestone_observer.rb | 13 | ||||
-rw-r--r-- | app/services/milestones/base_service.rb | 4 | ||||
-rw-r--r-- | app/services/milestones/close_service.rb | 11 | ||||
-rw-r--r-- | app/services/milestones/create_service.rb | 13 | ||||
-rw-r--r-- | app/services/milestones/reopen_service.rb | 11 | ||||
-rw-r--r-- | app/services/milestones/update_service.rb | 20 | ||||
-rw-r--r-- | config/application.rb | 3 | ||||
-rw-r--r-- | lib/api/milestones.rb | 35 |
9 files changed, 78 insertions, 36 deletions
diff --git a/app/controllers/projects/milestones_controller.rb b/app/controllers/projects/milestones_controller.rb index 05237bbd2d2..227cc1dfba7 100644 --- a/app/controllers/projects/milestones_controller.rb +++ b/app/controllers/projects/milestones_controller.rb @@ -37,7 +37,7 @@ class Projects::MilestonesController < Projects::ApplicationController end def create - @milestone = @project.milestones.new(params[:milestone]) + @milestone = Milestones::CreateService.new(project, current_user, params[:milestone]).execute if @milestone.save redirect_to project_milestone_path(@project, @milestone) @@ -47,7 +47,7 @@ class Projects::MilestonesController < Projects::ApplicationController end def update - @milestone.update_attributes(params[:milestone]) + @milestone = Milestones::UpdateService.new(project, current_user, params[:milestone]).execute(milestone) respond_to do |format| format.js diff --git a/app/observers/milestone_observer.rb b/app/observers/milestone_observer.rb deleted file mode 100644 index a1a62a99a8f..00000000000 --- a/app/observers/milestone_observer.rb +++ /dev/null @@ -1,13 +0,0 @@ -class MilestoneObserver < BaseObserver - def after_create(milestone) - event_service.open_milestone(milestone, current_user) - end - - def after_close(milestone, transition) - event_service.close_milestone(milestone, current_user) - end - - def after_reopen(milestone, transition) - event_service.reopen_milestone(milestone, current_user) - end -end diff --git a/app/services/milestones/base_service.rb b/app/services/milestones/base_service.rb new file mode 100644 index 00000000000..176ab9f1ab5 --- /dev/null +++ b/app/services/milestones/base_service.rb @@ -0,0 +1,4 @@ +module Milestones + class BaseService < ::BaseService + end +end diff --git a/app/services/milestones/close_service.rb b/app/services/milestones/close_service.rb new file mode 100644 index 00000000000..608fc49d766 --- /dev/null +++ b/app/services/milestones/close_service.rb @@ -0,0 +1,11 @@ +module Milestones + class CloseService < Milestones::BaseService + def execute(milestone) + if milestone.close + event_service.close_milestone(milestone, current_user) + end + + milestone + end + end +end diff --git a/app/services/milestones/create_service.rb b/app/services/milestones/create_service.rb new file mode 100644 index 00000000000..b8e08c9f1eb --- /dev/null +++ b/app/services/milestones/create_service.rb @@ -0,0 +1,13 @@ +module Milestones + class CreateService < Milestones::BaseService + def execute + milestone = project.milestones.new(params) + + if milestone.save + event_service.open_milestone(milestone, current_user) + end + + milestone + end + end +end diff --git a/app/services/milestones/reopen_service.rb b/app/services/milestones/reopen_service.rb new file mode 100644 index 00000000000..ff1ba23bdb2 --- /dev/null +++ b/app/services/milestones/reopen_service.rb @@ -0,0 +1,11 @@ +module Milestones + class ReopenService < Milestones::BaseService + def execute(milestone) + if milestone.reopen + event_service.reopen_milestone(milestone, current_user) + end + + milestone + end + end +end diff --git a/app/services/milestones/update_service.rb b/app/services/milestones/update_service.rb new file mode 100644 index 00000000000..69254a79670 --- /dev/null +++ b/app/services/milestones/update_service.rb @@ -0,0 +1,20 @@ +module Milestones + class UpdateService < Milestones::BaseService + def execute(milestone) + state = params.delete('state_event') + + case state + when 'reopen' + Milestones::ReopenService.new(project, current_user, {}).execute(milestone) + when 'close' + Milestones::CloseService.new(project, current_user, {}).execute(milestone) + end + + if params.present? + milestone.update_attributes(params) + end + + milestone + end + end +end diff --git a/config/application.rb b/config/application.rb index f087d3507bc..540426b6672 100644 --- a/config/application.rb +++ b/config/application.rb @@ -19,8 +19,7 @@ module Gitlab # config.plugins = [ :exception_notification, :ssl_requirement, :all ] # Activate observers that should always be running. - config.active_record.observers = :milestone_observer, - :project_activity_cache_observer, + config.active_record.observers = :project_activity_cache_observer, :note_observer, :project_observer, :system_hook_observer, diff --git a/lib/api/milestones.rb b/lib/api/milestones.rb index f7e63b23093..a4fdb752d69 100644 --- a/lib/api/milestones.rb +++ b/lib/api/milestones.rb @@ -40,17 +40,15 @@ module API # Example Request: # POST /projects/:id/milestones post ":id/milestones" do - set_current_user_for_thread do - authorize! :admin_milestone, user_project - required_attributes! [:title] + authorize! :admin_milestone, user_project + required_attributes! [:title] + attrs = attributes_for_keys [:title, :description, :due_date] + milestone = ::Milestones::CreateService.new(user_project, current_user, attrs).execute - attrs = attributes_for_keys [:title, :description, :due_date] - @milestone = user_project.milestones.new attrs - if @milestone.save - present @milestone, with: Entities::Milestone - else - not_found! - end + if milestone.valid? + present milestone, with: Entities::Milestone + else + not_found! end end @@ -66,16 +64,15 @@ module API # Example Request: # PUT /projects/:id/milestones/:milestone_id put ":id/milestones/:milestone_id" do - set_current_user_for_thread do - authorize! :admin_milestone, user_project + authorize! :admin_milestone, user_project + attrs = attributes_for_keys [:title, :description, :due_date, :state_event] + milestone = user_project.milestones.find(params[:milestone_id]) + milestone = ::Milestones::UpdateService.new(user_project, current_user, attrs).execute(milestone) - @milestone = user_project.milestones.find(params[:milestone_id]) - attrs = attributes_for_keys [:title, :description, :due_date, :state_event] - if @milestone.update_attributes attrs - present @milestone, with: Entities::Milestone - else - not_found! - end + if milestone.valid? + present milestone, with: Entities::Milestone + else + not_found! end end end |