Sha256: 5967c4f00a6fbaecb2894e3b426cfa0ca0433dfff748193622c4202990969f90

Contents?: true

Size: 1.06 KB

Versions: 20

Compression:

Stored size: 1.06 KB

Contents

# (c) Copyright IBM Corp. 2021
# (c) Copyright Instana Inc. 2016

require "instana/rack"

module Instana
  module RodaPathTemplateExtractor
    module RequestMethods
      TERM = defined?(::Roda) ? ::Roda::RodaPlugins::Base::RequestMethods::TERM : Object

      def if_match(args, &blk)
        path = @remaining_path
        captures = @captures.clear

        if match_all(args)
          (env['INSTANA_PATH_TEMPLATE_FRAGMENTS'] ||= []).concat(named_args(args, blk))
          block_result(blk.(*captures))
          env['INSTANA_HTTP_PATH_TEMPLATE'] = env['INSTANA_PATH_TEMPLATE_FRAGMENTS']
            .join('/')
            .prepend('/')
          throw :halt, response.finish
        else
          @remaining_path = path
          false
        end
      end

      def named_args(args, blk)
        parameters = blk.parameters
        args.map do |a|
          case a
          when String
            a
          when TERM
            nil
          else
            _, name = parameters.pop
            "{#{name}}"
          end
        end.compact
      end
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
instana-1.200.0.pre1 lib/instana/frameworks/roda.rb
instana-1.199.6 lib/instana/frameworks/roda.rb
instana-1.199.5 lib/instana/frameworks/roda.rb
instana-1.199.4 lib/instana/frameworks/roda.rb
instana-1.199.3 lib/instana/frameworks/roda.rb
instana-1.199.2 lib/instana/frameworks/roda.rb
instana-1.199.1 lib/instana/frameworks/roda.rb
instana-1.199.0 lib/instana/frameworks/roda.rb
instana-1.198.0 lib/instana/frameworks/roda.rb
instana-1.198.0.pre1 lib/instana/frameworks/roda.rb
instana-1.197.0 lib/instana/frameworks/roda.rb
instana-1.197.0.pre2 lib/instana/frameworks/roda.rb
instana-1.197.0.pre1 lib/instana/frameworks/roda.rb
instana-1.195.4 lib/instana/frameworks/roda.rb
instana-1.195.3 lib/instana/frameworks/roda.rb
instana-1.195.2 lib/instana/frameworks/roda.rb
instana-1.195.1 lib/instana/frameworks/roda.rb
instana-1.195.0 lib/instana/frameworks/roda.rb
instana-1.193.6 lib/instana/frameworks/roda.rb
instana-1.193.5 lib/instana/frameworks/roda.rb