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

- old
+ new

@@ -1,7 +1,6 @@ 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' @@ -22,20 +21,20 @@ end def batch_call(env) status = 200 headers = { 'Content-Type' => 'application/json' } - + logger.info('--- Grape::Batch BEGIN') begin batch_requests = Grape::Batch::Validator::parse(env, Grape::Batch.configuration.limit) result = dispatch(env, batch_requests) body = MultiJson.encode(result) rescue Grape::Batch::RequestBodyError, Grape::Batch::TooManyRequestsError => e e.class == TooManyRequestsError ? status = 429 : status = 400 body = e.message end - + logger.info('--- Grape::Batch END') [status, headers, [body]] end private @@ -44,29 +43,22 @@ env['REQUEST_METHOD'] == 'POST' && env['CONTENT_TYPE'] == 'application/json' end 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) - 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(batch_env, request) + status, headers, response = @app.call(tmp_env) - # iterate - batch_env = env.dup - batch_requests.map do |request| - # init env for Grape resource - 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 - event[:requests] << [tmp_env, formatted_response] - end - end + # format response + @response_klass::format(status, headers, response) end end def prepare_tmp_env(tmp_env, request) method = request['method'] @@ -84,9 +76,24 @@ 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 + + def logger + @logger ||= Grape::Batch.configuration.logger || rails_logger || default_logger + end + + def default_logger + logger = Logger.new($stdout) + logger.level = Logger::INFO + logger + end + + # Get the Rails logger if it's defined. + def rails_logger + defined?(::Rails) && ::Rails.respond_to?(:logger) && ::Rails.logger end end end end