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