Class: Tasker::TasksController

Inherits:
ApplicationController show all
Includes:
PageSort
Defined in:
app/controllers/tasker/tasks_controller.rb

Instance Method Summary collapse

Methods included from PageSort

#build_page_sort_params, #page_sort_params

Instance Method Details

#createObject

POST /tasks



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'app/controllers/tasker/tasks_controller.rb', line 36

def create
  if task_params_as_symbolized_hash[:name].blank?
    return render(status: :bad_request,
                  json: { error: 'invalid parameters: requires task name' })
  end
  set_task_request
  begin
    # Use namespace and version from task request for handler lookup
    handler = handler_factory.get(
      @task_request.name,
      namespace_name: @task_request.namespace,
      version: @task_request.version
    )
    @task = handler.initialize_task!(@task_request)
  rescue Tasker::ProceduralError => e
    @task = Tasker::Task.new
    @task.errors.add(:name, e.to_s)
  rescue StandardError => e
    @task = Tasker::Task.new
    error_message = "Handler error for #{@task_request.namespace}.#{@task_request.name}@#{@task_request.version}: #{e.message}"
    @task.errors.add(:handler, error_message)
  end

  # we don't want to re-run save here because it will remove the
  # context validation from the handler and check "valid?"
  if @task.errors.empty?
    render(json: @task, status: :created, adapter: :json, root: :task, serializer: Tasker::TaskSerializer)
  else
    render(status: :bad_request, json: { error: @task.errors })
  end
end

#destroyObject

DELETE /tasks/1



78
79
80
81
82
# File 'app/controllers/tasker/tasks_controller.rb', line 78

def destroy
  # Use state machine to transition task to cancelled
  @task.state_machine.transition_to!(Tasker::Constants::TaskStatuses::CANCELLED)
  render(status: :ok, json: { cancelled: true })
end

#indexObject

GET /tasks



15
16
17
18
19
# File 'app/controllers/tasker/tasks_controller.rb', line 15

def index
  @tasks =
    query_base.limit(page_sort_params[:limit]).offset(page_sort_params[:offset]).order(page_sort_params[:order]).all
  render(json: @tasks, status: :ok, adapter: :json, root: :tasks, each_serializer: Tasker::TaskSerializer)
end

#showObject

GET /tasks/1



22
23
24
25
26
27
28
29
30
31
32
33
# File 'app/controllers/tasker/tasks_controller.rb', line 22

def show
  include_dependencies = ActiveModel::Type::Boolean.new.cast(params[:include_dependencies])

  render(
    json: @task,
    status: :ok,
    adapter: :json,
    root: :task,
    serializer: Tasker::TaskSerializer,
    include_dependencies: include_dependencies
  )
end

#updateObject

PATCH/PUT /tasks/1



69
70
71
72
73
74
75
# File 'app/controllers/tasker/tasks_controller.rb', line 69

def update
  if @task.update(update_task_params)
    render(json: @task, status: :ok, adapter: :json, root: :task, serializer: Tasker::TaskSerializer)
  else
    render(json: { error: @task.errors }, status: :unprocessable_entity)
  end
end