module Datadog::Tracing::Contrib::Rack::MiddlewareNamePatcher

def call(env)

def call(env)
  env['RESPONSE_MIDDLEWARE'] = self.class.to_s
  __call(env)
end

def get_option(option)

def get_option(option)
  Datadog.configuration.tracing[:rack].get_option(option)
end

def patch

def patch
  patch_middleware_names
end

def patch_middleware_names

def patch_middleware_names
  retain_middleware_name(get_option(:application))
rescue => e
  # We can safely ignore these exceptions since they happen only in the
  # context of middleware patching outside a Rails server process (eg. a
  # process that doesn't serve HTTP requests but has Rails environment
  # loaded such as a Resque master process)
  Datadog.logger.debug("Error patching middleware stack: #{e}")
end

def retain_middleware_name(middleware)

def retain_middleware_name(middleware)
  return unless middleware && middleware.respond_to?(:call)
  middleware.singleton_class.class_eval do
    alias_method :__call, :call
    def call(env)
      env['RESPONSE_MIDDLEWARE'] = self.class.to_s
      __call(env)
    end
  end
  following = (middleware.instance_variable_get('@app') if middleware.instance_variable_defined?('@app'))
  retain_middleware_name(following)
end

def target_version

def target_version
  Integration.version
end