lib/grape/batch.rb in grape-batch-1.1.3 vs lib/grape/batch.rb in grape-batch-1.1.4

- old
+ new

@@ -1,8 +1,7 @@ require 'active_support' require 'grape/batch/log_subscriber' - require 'grape/batch/version' require 'grape/batch/errors' require 'grape/batch/configuration' require 'grape/batch/hash_converter' require 'grape/batch/parser' @@ -48,14 +47,18 @@ def dispatch(env, batch_requests) ActiveSupport::Notifications.instrument 'dispatch.batch' do |event| event[:requests] = [] + session_data = env[Grape::Batch.configuration.session_header] + env['api.session'] = Grape::Batch.configuration.session_proc.call(session_data) + # iterate + batch_env = env.dup batch_requests.map do |request| # init env for Grape resource - tmp_env = prepare_tmp_env(env.dup, request) + tmp_env = prepare_tmp_env(batch_env, request) status, headers, response = @app.call(tmp_env) # format response @response_klass::format(status, headers, response).tap do |formatted_response| # log call @@ -67,21 +70,23 @@ def prepare_tmp_env(tmp_env, request) method = request['method'] path = request['path'] body = request['body'].is_a?(Hash) ? request['body'] : {} + query_string = '' + rack_input = '{}' - tmp_env.tap do |env| - env['REQUEST_METHOD'] = method - env['PATH_INFO'] = path - - if method == 'GET' - env['rack.input'] = StringIO.new('{}') - env['QUERY_STRING'] = URI.encode_www_form(HashConverter.encode(body).to_a) - else - env['rack.input'] = StringIO.new(MultiJson.encode(body)) - end + if method == 'GET' + query_string = URI.encode_www_form(HashConverter.encode(body).to_a) + else + rack_input = StringIO.new(MultiJson.encode(body)) end + + tmp_env['REQUEST_METHOD'] = method + tmp_env['PATH_INFO'] = path + tmp_env['QUERY_STRING'] = query_string + tmp_env['rack.input'] = rack_input + tmp_env end end end end