Class: RailsExecution::TasksController
Instance Method Summary
collapse
#can_close_task?, #can_create_task?, #can_edit_task?, #can_execute_task?, #display_decide?, #display_owner?, #display_reviewers?, #how_to_executable, #in_solo_mode?, #show_form_sidebar?
Methods included from BaseHelper
#current_owner
Instance Method Details
#approve ⇒ Object
144
145
146
147
148
149
150
151
152
|
# File 'app/controllers/rails_execution/tasks_controller.rb', line 144
def approve
if ::RailsExecution::Services::Approvement.new(current_task, reviewer: current_owner).approve
::RailsExecution.configuration.notifier.new(current_task).after_approve(current_owner)
flash[:notice] = 'Your decision is updated!'
else
flash[:alert] = "Your decision is can't update!"
end
redirect_to action: :show
end
|
#closed ⇒ Object
117
118
119
120
121
|
# File 'app/controllers/rails_execution/tasks_controller.rb', line 117
def closed
paging = ::RailsExecution::Services::Paging.new(page: params[:page], per_page: params[:per_page])
closed_tasks = ::RailsExecution::Task.is_closed.descending.includes(:owner)
@tasks = paging.call(closed_tasks)
end
|
#completed ⇒ Object
111
112
113
114
115
|
# File 'app/controllers/rails_execution/tasks_controller.rb', line 111
def completed
paging = ::RailsExecution::Services::Paging.new(page: params[:page], per_page: params[:per_page])
completed_tasks = ::RailsExecution::Task.is_completed.descending.includes(:owner)
@tasks = paging.call(completed_tasks)
end
|
#create ⇒ Object
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'app/controllers/rails_execution/tasks_controller.rb', line 18
def create
raise(::RailsExecution::AccessDeniedError, 'Create task') unless can_create_task?
@task = ::RailsExecution::Task.new({
status: :created,
owner_id: current_owner&.id,
owner_type: ::RailsExecution.configuration.owner_model.to_s,
title: params.dig(:task, :title),
description: params.dig(:task, :description),
script: params.dig(:task, :script),
})
@task.assign_reviewers(params.dig(:task, :task_review_ids).to_a)
@task.syntax_status = ::RailsExecution::Services::SyntaxChecker.new(@task.script).call ? 'good' : 'bad'
if @task.save
@task.add_files(params[:attachments]&.permit!.to_h, current_owner) if ::RailsExecution.configuration.file_upload
::RailsExecution.configuration.notifier.new(@task).after_create
flash[:notice] = 'Create the request is successful!'
redirect_to action: :index
else
render action: :new
end
end
|
#destroy ⇒ Object
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'app/controllers/rails_execution/tasks_controller.rb', line 61
def destroy
unless can_close_task?(current_task)
flash[:alert] = "You can't close this Task right now"
redirect_to(:back) and return
end
if current_task.update(status: :closed)
current_task.activities.create(owner: current_owner, message: 'Closed the task')
::RailsExecution.configuration.notifier.new(current_task).after_close
redirect_to(action: :show) and return
else
flash[:alert] = "Has problem when close this Task: #{current_task.errors.full_messages.join(', ')}"
redirect_to(:back) and return
end
end
|
#edit ⇒ Object
77
78
79
80
81
|
# File 'app/controllers/rails_execution/tasks_controller.rb', line 77
def edit
raise(::RailsExecution::AccessDeniedError, 'Edit task') unless can_edit_task?(current_task)
@task = current_task
end
|
#execute ⇒ Object
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
# File 'app/controllers/rails_execution/tasks_controller.rb', line 154
def execute
unless can_execute_task?(current_task)
flash[:alert] = "This task can't execute: #{how_to_executable(current_task)}"
redirect_to(action: :show) and return
end
execute_service = ::RailsExecution::Services::Execution.new(current_task)
if execute_service.call
current_task.update(status: :completed)
current_task.activities.create(owner: current_owner, message: 'Execute: The task is completed')
::RailsExecution.configuration.notifier.new(current_task).after_execute_success(current_owner)
flash[:notice] = 'This task is executed'
else
::RailsExecution.configuration.notifier.new(current_task).after_execute_fail(current_owner)
flash[:alert] = "Sorry!!! This task can't execute right now"
end
redirect_to(action: :show)
end
|
#index ⇒ Object
6
7
8
9
10
|
# File 'app/controllers/rails_execution/tasks_controller.rb', line 6
def index
paging = ::RailsExecution::Services::Paging.new(page: params[:page], per_page: params[:per_page])
processing_tasks = ::RailsExecution::Task.processing.descending.includes(:owner)
@tasks = paging.call(processing_tasks)
end
|
#reject ⇒ Object
134
135
136
137
138
139
140
141
142
|
# File 'app/controllers/rails_execution/tasks_controller.rb', line 134
def reject
if ::RailsExecution::Services::Approvement.new(current_task, reviewer: current_owner).reject
::RailsExecution.configuration.notifier.new(current_task).after_reject(current_owner)
flash[:notice] = 'Your decision is updated!'
else
flash[:alert] = "Your decision is can't update!"
end
redirect_to action: :show
end
|
#reopen ⇒ Object
123
124
125
126
127
128
129
130
131
132
|
# File 'app/controllers/rails_execution/tasks_controller.rb', line 123
def reopen
if current_task.update(status: :created)
current_task.activities.create(owner: current_owner, message: 'Re-opened the Task')
::RailsExecution.configuration.notifier.new(current_task).after_reopen
flash[:notice] = 'Your task is re-opened'
else
flash[:alert] = "Re-open is failed: #{current_task.errors.full_messages.join(', ')}"
end
redirect_to action: :show
end
|
#show ⇒ Object
58
59
|
# File 'app/controllers/rails_execution/tasks_controller.rb', line 58
def show
end
|
#update ⇒ Object
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
# File 'app/controllers/rails_execution/tasks_controller.rb', line 83
def update
raise(::RailsExecution::AccessDeniedError, 'Edit task') unless can_edit_task?(current_task)
@task = current_task
old_script = @task.script
old_reviewer_ids = @task.task_reviews.pluck(:owner_id)
checked_owner_ids = @task.task_reviews.checked.pluck(:owner_id)
update_data = {
title: params.dig(:task, :title),
description: params.dig(:task, :description),
}
update_data[:script] = params.dig(:task, :script) if @task.in_processing?
@task.assign_reviewers(params.dig(:task, :task_review_ids).to_a)
@task.syntax_status = ::RailsExecution::Services::SyntaxChecker.new(update_data[:script]).call ? 'good' : 'bad'
if @task.update(update_data)
@task.add_files(params[:attachments]&.permit!.to_h, current_owner) if ::RailsExecution.configuration.file_upload
@task.activities.create(owner: current_owner, message: 'Updated the Task')
::RailsExecution.configuration.notifier.new(@task).after_update_script(current_owner, checked_owner_ids) if old_script != @task.script
::RailsExecution.configuration.notifier.new(@task).after_assign_reviewers(current_owner, @task.task_reviews.reload.pluck(:owner_id) - old_reviewer_ids)
redirect_to action: :show
else
render action: :edit
end
end
|