module BatchRequestApi::BatchParallel

Public Instance Methods

batch_parallel(env) click to toggle source
# File lib/batch_request_api/batch_parallel.rb, line 7
def batch_parallel(env)
  requests = get_payload(env)
  first_request = requests.first
  # Post and Delete methods do not need any processing
  set_id_on_record_for_patch(requests) if first_request['method'] == 'PATCH'
  responses = process_parallel_request(env, first_request, requests)
  build_response(responses)
end

Private Instance Methods

handoff_to_rails(env) click to toggle source
# File lib/batch_request_api/batch_parallel.rb, line 32
def handoff_to_rails(env)
  status, headers, body = @app.call(env)
  body.close if body.respond_to? :close
  { status: status, headers: headers, response: JSON.parse(body.body) }
end
process_parallel_request(env, first_request, requests) click to toggle source
# File lib/batch_request_api/batch_parallel.rb, line 18
def process_parallel_request(env, first_request, requests)
  json_body = requests.map { |item| item['body'] }.to_json
  setup_env(env, first_request, json_body)
  handoff_to_rails(env)
end
set_id_on_record_for_patch(requests) click to toggle source
# File lib/batch_request_api/batch_parallel.rb, line 24
def set_id_on_record_for_patch(requests)
  ids = requests.map { |request| request['url'].match(%r((?<=\/)\d+$|(?<=\/)(\d+)(?=\.json$))).to_s }
  requests.each_with_index do |request, index|
    request['body']['data']['attributes']['id'] = ids[index] # dependency on json api spec
  end
  requests
end