module Rack::Cargo::BatchProcessor

Constants

ERROR_INVALID_BATCH

Public Class Methods

process(app, env) click to toggle source
# File lib/rack/cargo/batch_processor.rb, line 9
def process(app, env)
  requests = RequestPayloadJSON.from_env(env)

  if RequestValidator.valid?(requests)
    results = process_requests(app, env, requests)
    success(results)
  else
    failure([ERROR_INVALID_BATCH])
  end
end

Private Class Methods

failure(errors) click to toggle source
# File lib/rack/cargo/batch_processor.rb, line 56
def failure(errors)
  { success: false, errors: errors }
end
process_request(app, env, request, previous_responses) click to toggle source
# File lib/rack/cargo/batch_processor.rb, line 38
def process_request(app, env, request, previous_responses)
  initial_state = {
    app: app,
    env: env,
    previous_responses: previous_responses
  }

  result = processors.each_with_object(initial_state) do |proc, state|
    proc.call(request, state)
  end

  result[:response]
end
process_requests(app, env, requests) click to toggle source
# File lib/rack/cargo/batch_processor.rb, line 22
def process_requests(app, env, requests)
  previous_responses = {}

  requests.each do |request|
    response = process_request(
      app,
      env,
      request,
      previous_responses
    )
    previous_responses[response.fetch("name")] = response
  end

  previous_responses.values
end
processors() click to toggle source
# File lib/rack/cargo/batch_processor.rb, line 60
def processors
  Rack::Cargo.config.processors
end
success(responses) click to toggle source
# File lib/rack/cargo/batch_processor.rb, line 52
def success(responses)
  { success: true, responses: responses }
end