class RailsCloudTasks::Rack::Tasks

Public Class Methods

call(env) click to toggle source
# File lib/rails_cloud_tasks/rack/tasks.rb, line 8
def call(env)
  request = ::Rack::Request.new(env)
  job = extract_job(request)

  RailsCloudTasks::Instrumentation.transaction_name!(
    "RailsCloudTasks/#{job['job_class']}/perform_now"
  )

  ActiveJob::Base.execute(job)
  response(200, {})
rescue Rack::InvalidPayloadError => e
  response(400, { error: e.cause.message })
end

Private Class Methods

extract_job(request) click to toggle source
# File lib/rails_cloud_tasks/rack/tasks.rb, line 24
def extract_job(request)
  body = request.body.read
  JSON.parse(body).fetch('job')
rescue JSON::ParserError, KeyError
  raise Rack::InvalidPayloadError
end
response(status, body) click to toggle source
# File lib/rails_cloud_tasks/rack/tasks.rb, line 31
def response(status, body)
  [status, { 'Content-Type' => 'application/json' }, [body.to_json]]
end