Class: RailsExecution::TasksController

Inherits:
BaseController
  • Object
show all
Defined in:
app/controllers/rails_execution/tasks_controller.rb

Instance Method Summary collapse

Methods included from PolicyHelper

#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

#approveObject



118
119
120
121
122
123
124
125
# File 'app/controllers/rails_execution/tasks_controller.rb', line 118

def approve
  if ::RailsExecution::Services::Approvement.new(current_task, reviewer: current_owner).approve
    flash[:notice] = 'Your decision is updated!'
  else
    flash[:alert] = "Your decision is can't update!"
  end
  redirect_to action: :show
end

#closedObject



93
94
95
96
97
# File 'app/controllers/rails_execution/tasks_controller.rb', line 93

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

#completedObject



87
88
89
90
91
# File 'app/controllers/rails_execution/tasks_controller.rb', line 87

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

#createObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 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
    flash[:notice] = 'Create the request is successful!'
    redirect_to action: :index
  else
    render action: :new
  end
end

#destroyObject



44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'app/controllers/rails_execution/tasks_controller.rb', line 44

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')
    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

#editObject



59
60
61
62
63
# File 'app/controllers/rails_execution/tasks_controller.rb', line 59

def edit
  raise(::RailsExecution::AccessDeniedError, 'Edit task') unless can_edit_task?(current_task)

  @task = current_task
end

#executeObject



127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'app/controllers/rails_execution/tasks_controller.rb', line 127

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')
    flash[:notice] = 'This task is executed'
  else
    flash[:alert] = "Sorry!!! This task can't execute right now"
  end

  redirect_to(action: :show)
end

#indexObject



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

#newObject



12
13
14
15
16
# File 'app/controllers/rails_execution/tasks_controller.rb', line 12

def new
  raise(::RailsExecution::AccessDeniedError, 'Create task') unless can_create_task?

  @task = ::RailsExecution::Task.new
end

#rejectObject



109
110
111
112
113
114
115
116
# File 'app/controllers/rails_execution/tasks_controller.rb', line 109

def reject
  if ::RailsExecution::Services::Approvement.new(current_task, reviewer: current_owner).reject
    flash[:notice] = 'Your decision is updated!'
  else
    flash[:alert] = "Your decision is can't update!"
  end
  redirect_to action: :show
end

#reopenObject



99
100
101
102
103
104
105
106
107
# File 'app/controllers/rails_execution/tasks_controller.rb', line 99

def reopen
  if current_task.update(status: :created)
    current_task.activities.create(owner: current_owner, message: 'Re-opened the Task')
    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

#showObject



41
42
# File 'app/controllers/rails_execution/tasks_controller.rb', line 41

def show
end

#updateObject



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'app/controllers/rails_execution/tasks_controller.rb', line 65

def update
  raise(::RailsExecution::AccessDeniedError, 'Edit task') unless can_edit_task?(current_task)

  @task = current_task
  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')
    redirect_to action: :show
  else
    render action: :edit
  end
end