class RailsCloudTasks::Rack::Jobs
Public Class Methods
call(env)
click to toggle source
# File lib/rails_cloud_tasks/rack/jobs.rb, line 8 def call(env) job_class = extract_job_class(env) RailsCloudTasks::Instrumentation.transaction_name!( "RailsCloudTasks/#{job_class}/perform_now" ) request = ::Rack::Request.new(env) job_args = extract_args(request) job_class.perform_now(*job_args) response(200, {}) rescue Rack::InvalidPayloadError => e response(422, { error: e.message }) end
Private Class Methods
extract_args(request)
click to toggle source
# File lib/rails_cloud_tasks/rack/jobs.rb, line 32 def extract_args(request) body = request.body.read JSON.parse(body) || [] rescue JSON::ParserError, KeyError raise Rack::InvalidPayloadError end
extract_job_class(env)
click to toggle source
# File lib/rails_cloud_tasks/rack/jobs.rb, line 27 def extract_job_class(env) env.dig('action_dispatch.request.path_parameters', :job_class) .constantize end
response(status, body)
click to toggle source
# File lib/rails_cloud_tasks/rack/jobs.rb, line 39 def response(status, body) [status, { 'Content-Type' => 'application/json' }, [body.to_json]] end