Commit c4b02642d2ca74f463e64dd591796aabe5c54af9

Authored by Dmitriy Zaporozhets
1 parent f8ea52c3

Replace milestone observer with services

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
app/controllers/projects/milestones_controller.rb
... ... @@ -37,7 +37,7 @@ class Projects::MilestonesController &lt; Projects::ApplicationController
37 37 end
38 38  
39 39 def create
40   - @milestone = @project.milestones.new(params[:milestone])
  40 + @milestone = Milestones::CreateService.new(project, current_user, params[:milestone]).execute
41 41  
42 42 if @milestone.save
43 43 redirect_to project_milestone_path(@project, @milestone)
... ... @@ -47,7 +47,7 @@ class Projects::MilestonesController &lt; Projects::ApplicationController
47 47 end
48 48  
49 49 def update
50   - @milestone.update_attributes(params[:milestone])
  50 + @milestone = Milestones::UpdateService.new(project, current_user, params[:milestone]).execute(milestone)
51 51  
52 52 respond_to do |format|
53 53 format.js
... ...
app/observers/milestone_observer.rb
... ... @@ -1,13 +0,0 @@
1   -class MilestoneObserver < BaseObserver
2   - def after_create(milestone)
3   - event_service.open_milestone(milestone, current_user)
4   - end
5   -
6   - def after_close(milestone, transition)
7   - event_service.close_milestone(milestone, current_user)
8   - end
9   -
10   - def after_reopen(milestone, transition)
11   - event_service.reopen_milestone(milestone, current_user)
12   - end
13   -end
app/services/milestones/base_service.rb 0 → 100644
... ... @@ -0,0 +1,4 @@
  1 +module Milestones
  2 + class BaseService < ::BaseService
  3 + end
  4 +end
... ...
app/services/milestones/close_service.rb 0 → 100644
... ... @@ -0,0 +1,11 @@
  1 +module Milestones
  2 + class CloseService < Milestones::BaseService
  3 + def execute(milestone)
  4 + if milestone.close
  5 + event_service.close_milestone(milestone, current_user)
  6 + end
  7 +
  8 + milestone
  9 + end
  10 + end
  11 +end
... ...
app/services/milestones/create_service.rb 0 → 100644
... ... @@ -0,0 +1,13 @@
  1 +module Milestones
  2 + class CreateService < Milestones::BaseService
  3 + def execute
  4 + milestone = project.milestones.new(params)
  5 +
  6 + if milestone.save
  7 + event_service.open_milestone(milestone, current_user)
  8 + end
  9 +
  10 + milestone
  11 + end
  12 + end
  13 +end
... ...
app/services/milestones/reopen_service.rb 0 → 100644
... ... @@ -0,0 +1,11 @@
  1 +module Milestones
  2 + class ReopenService < Milestones::BaseService
  3 + def execute(milestone)
  4 + if milestone.reopen
  5 + event_service.reopen_milestone(milestone, current_user)
  6 + end
  7 +
  8 + milestone
  9 + end
  10 + end
  11 +end
... ...
app/services/milestones/update_service.rb 0 → 100644
... ... @@ -0,0 +1,20 @@
  1 +module Milestones
  2 + class UpdateService < Milestones::BaseService
  3 + def execute(milestone)
  4 + state = params.delete('state_event')
  5 +
  6 + case state
  7 + when 'reopen'
  8 + Milestones::ReopenService.new(project, current_user, {}).execute(milestone)
  9 + when 'close'
  10 + Milestones::CloseService.new(project, current_user, {}).execute(milestone)
  11 + end
  12 +
  13 + if params.present?
  14 + milestone.update_attributes(params)
  15 + end
  16 +
  17 + milestone
  18 + end
  19 + end
  20 +end
... ...
config/application.rb
... ... @@ -19,8 +19,7 @@ module Gitlab
19 19 # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
20 20  
21 21 # Activate observers that should always be running.
22   - config.active_record.observers = :milestone_observer,
23   - :project_activity_cache_observer,
  22 + config.active_record.observers = :project_activity_cache_observer,
24 23 :note_observer,
25 24 :project_observer,
26 25 :system_hook_observer,
... ...
lib/api/milestones.rb
... ... @@ -40,17 +40,15 @@ module API
40 40 # Example Request:
41 41 # POST /projects/:id/milestones
42 42 post ":id/milestones" do
43   - set_current_user_for_thread do
44   - authorize! :admin_milestone, user_project
45   - required_attributes! [:title]
  43 + authorize! :admin_milestone, user_project
  44 + required_attributes! [:title]
  45 + attrs = attributes_for_keys [:title, :description, :due_date]
  46 + milestone = ::Milestones::CreateService.new(user_project, current_user, attrs).execute
46 47  
47   - attrs = attributes_for_keys [:title, :description, :due_date]
48   - @milestone = user_project.milestones.new attrs
49   - if @milestone.save
50   - present @milestone, with: Entities::Milestone
51   - else
52   - not_found!
53   - end
  48 + if milestone.valid?
  49 + present milestone, with: Entities::Milestone
  50 + else
  51 + not_found!
54 52 end
55 53 end
56 54  
... ... @@ -66,16 +64,15 @@ module API
66 64 # Example Request:
67 65 # PUT /projects/:id/milestones/:milestone_id
68 66 put ":id/milestones/:milestone_id" do
69   - set_current_user_for_thread do
70   - authorize! :admin_milestone, user_project
  67 + authorize! :admin_milestone, user_project
  68 + attrs = attributes_for_keys [:title, :description, :due_date, :state_event]
  69 + milestone = user_project.milestones.find(params[:milestone_id])
  70 + milestone = ::Milestones::UpdateService.new(user_project, current_user, attrs).execute(milestone)
71 71  
72   - @milestone = user_project.milestones.find(params[:milestone_id])
73   - attrs = attributes_for_keys [:title, :description, :due_date, :state_event]
74   - if @milestone.update_attributes attrs
75   - present @milestone, with: Entities::Milestone
76   - else
77   - not_found!
78   - end
  72 + if milestone.valid?
  73 + present milestone, with: Entities::Milestone
  74 + else
  75 + not_found!
79 76 end
80 77 end
81 78 end
... ...