summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/projects/milestones_controller.rb4
-rw-r--r--app/observers/milestone_observer.rb13
-rw-r--r--app/services/milestones/base_service.rb4
-rw-r--r--app/services/milestones/close_service.rb11
-rw-r--r--app/services/milestones/create_service.rb13
-rw-r--r--app/services/milestones/reopen_service.rb11
-rw-r--r--app/services/milestones/update_service.rb20
-rw-r--r--config/application.rb3
-rw-r--r--lib/api/milestones.rb35
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