class InboundRequestLoggerMiddleware
Attributes
only_state_change[RW]
path_regexp[RW]
Public Class Methods
new(app, only_state_change: true, path_regexp: /.*/)
click to toggle source
# File lib/rails_api_logger/inbound_requests_logger_middleware.rb, line 4 def initialize(app, only_state_change: true, path_regexp: /.*/) @app = app self.only_state_change = only_state_change self.path_regexp = path_regexp end
Public Instance Methods
call(env)
click to toggle source
# File lib/rails_api_logger/inbound_requests_logger_middleware.rb, line 10 def call(env) request = ActionDispatch::Request.new(env) logging = log?(env, request) if logging @inbound_request_log = InboundRequestLog.from_request(request) env["inbound_request_log"] = @inbound_request_log request.body.rewind end status, headers, body = @app.call(env) if logging @inbound_request_log.update_columns(response_body: parsed_body(body), response_code: status, ended_at: Time.current) end [status, headers, body] end
Private Instance Methods
log?(env, request)
click to toggle source
# File lib/rails_api_logger/inbound_requests_logger_middleware.rb, line 27 def log?(env, request) env["REQUEST_URI"] =~ path_regexp && (!only_state_change || request_with_state_change?(request)) end
parsed_body(body)
click to toggle source
# File lib/rails_api_logger/inbound_requests_logger_middleware.rb, line 31 def parsed_body(body) return unless body.present? if body.respond_to?(:body) JSON.parse(body.body) elsif body.respond_to?(:[]) JSON.parse(body[0]) else body end rescue JSON::ParserError body end
request_with_state_change?(request)
click to toggle source
# File lib/rails_api_logger/inbound_requests_logger_middleware.rb, line 45 def request_with_state_change?(request) request.post? || request.put? || request.patch? || request.delete? end