lib/elastic_apm/filters.rb



# frozen_string_literal: true

require 'elastic_apm/filters/request_body_filter'
require 'elastic_apm/filters/secrets_filter'

module ElasticAPM
  # @api private
  module Filters
    def self.new(config)
      Container.new(config)
    end

    # @api private
    class Container
      def initialize(config)
        @config = config
        @filters = {
          request_body: RequestBodyFilter.new(config),
          secrets: SecretsFilter.new(config)
        }
      end

      attr_reader :config

      def add(key, filter)
        @filters[key] = filter
      end

      def remove(key)
        @filters.delete(key)
      end

      def apply(payload)
        @filters.reduce(payload) do |result, (_key, filter)|
          filter.call(result)
        end
      end

      def length
        @filters.length
      end
    end
  end
end