Sha256: 2412c98d3d3ffa6a0e2567623bb413f5a80b315920bb1fe2038734547fe7e69e

Contents?: true

Size: 1.71 KB

Versions: 2

Compression:

Stored size: 1.71 KB

Contents

require 'rack/request'
require 'rack/utils'

module Loga
  module Rack
    class Request < ::Rack::Request
      ACTION_DISPATCH_REQUEST_ID = 'action_dispatch.request_id'.freeze

      def initialize(env)
        super
        @uuid = nil
      end

      def uuid
        @uuid ||= env[ACTION_DISPATCH_REQUEST_ID]
      end

      def original_path
        env['loga.request.original_path']
      end

      def filtered_full_path
        @filtered_full_path ||=
          query_string.empty? ? original_path : "#{original_path}?#{filtered_query_string}"
      end

      def filtered_parameters
        @filtered_parameters ||= filtered_query_hash.merge(filtered_form_hash)
      end

      def filtered_query_hash
        @filtered_query_hash ||= filter_hash(query_hash)
      end

      def filtered_form_hash
        @filter_form_hash ||= filter_hash(form_hash)
      end

      private

      def query_hash
        params
        env['rack.request.query_hash'] || {}
      end

      def form_hash
        params
        env['rack.request.form_hash'] || {}
      end

      def filter_hash(hash)
        parameter_filter.filter(hash)
      end

      KV_RE   = '[^&;=]+'
      PAIR_RE = /(#{KV_RE})=(#{KV_RE})/
      def filtered_query_string
        query_string.gsub(PAIR_RE) do |_|
          parameter_filter.filter([[$1, $2]]).first.join('=')
        end
      end

      def parameter_filter
        @filter_parameters ||=
          ParameterFilter.new(loga_filter_parameters | action_dispatch_filter_params)
      end

      def loga_filter_parameters
        Loga.configuration.filter_parameters || []
      end

      def action_dispatch_filter_params
        env['action_dispatch.parameter_filter'] || []
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
loga-1.1.0 lib/loga/rack/request.rb
loga-1.0.0 lib/loga/rack/request.rb