Sha256: cad56c6f044ad241cff3b7f635ee2e318f08094dc47b6a980c848513a0692d86

Contents?: true

Size: 1.17 KB

Versions: 5

Compression:

Stored size: 1.17 KB

Contents

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

if defined?(::Roda)
  ::Instana.logger.debug "Instrumenting Roda"
  Roda.use ::Instana::Rack
  Roda.plugin ::Instana::RodaPathTemplateExtractor
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
instana-1.193.2 lib/instana/frameworks/roda.rb
instana-1.192.1 lib/instana/frameworks/roda.rb
instana-1.192.0 lib/instana/frameworks/roda.rb
instana-1.13.0 lib/instana/frameworks/roda.rb
instana-1.12.0 lib/instana/frameworks/roda.rb