Sha256: a5a51201d952e00a4fa7217701083d188ffe0b456d9eee23f7d87bfc9e5117f5

Contents?: true

Size: 1.54 KB

Versions: 6

Compression:

Stored size: 1.54 KB

Contents

# frozen_string_literal: true

# Copyright The OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0

module OpenTelemetry
  class Context
    module Propagation
      # @deprecated Use the rack env getter found in the
      # opentelemetry-common gem instead.

      # The RackEnvGetter class provides a common methods for reading
      # keys from a rack environment. It abstracts away the rack-normalization
      # process so that keys can be looked up without having to transform them
      # first. With this class you can get +traceparent+ instead of
      # +HTTP_TRACEPARENT+
      class RackEnvGetter
        # Converts key into a rack-normalized key and reads it from the carrier.
        # Useful for extract operations.
        def get(carrier, key)
          carrier[to_rack_key(key)] || carrier[key]
        end

        # Reads all keys from a carrier and converts them from the rack-normalized
        # form to the original. The resulting keys will be lowercase and
        # underscores will be replaced with dashes.
        def keys(carrier)
          carrier.keys.map(&method(:from_rack_key))
        end

        private

        def to_rack_key(key)
          # Use + for mutable string interpolation in pre-Ruby 3.0.
          ret = +"HTTP_#{key}"
          ret.tr!('-', '_')
          ret.upcase!
          ret
        end

        def from_rack_key(key)
          start = key.start_with?('HTTP_') ? 5 : 0
          ret = key[start..]
          ret.tr!('_', '-')
          ret.downcase!
          ret
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
opentelemetry-api-1.4.0 lib/opentelemetry/context/propagation/rack_env_getter.rb
opentelemetry-api-1.3.0 lib/opentelemetry/context/propagation/rack_env_getter.rb
opentelemetry-api-1.2.5 lib/opentelemetry/context/propagation/rack_env_getter.rb
opentelemetry-api-1.2.4 lib/opentelemetry/context/propagation/rack_env_getter.rb
opentelemetry-api-1.2.3 lib/opentelemetry/context/propagation/rack_env_getter.rb
opentelemetry-api-1.2.2 lib/opentelemetry/context/propagation/rack_env_getter.rb