Class: FaradayMiddleware::Tracable

Inherits:
Faraday::Middleware
  • Object
show all
Defined in:
lib/faraday_middleware/tracable/request/tracable.rb

Instance Method Summary collapse

Constructor Details

#initialize(app, type_or_options, &block) ⇒ Tracable

You need to specify type as symbol

or

header_name: and block or header_value:



7
8
9
10
11
12
13
14
15
16
17
# File 'lib/faraday_middleware/tracable/request/tracable.rb', line 7

def initialize(app, type_or_options, &block)
  if type_or_options.is_a?(Hash)
    @header_name  = type_or_options[:header_name]
    @header_value = block || type_or_options[:header_value]
  elsif type_map.has_key?(type_or_options)
    @header_name  = type_map[type_or_options][:header_name]
    @header_value = type_map[type_or_options][:header_value]
  end

  super(app)
end

Instance Method Details

#call(env) ⇒ Object



19
20
21
22
23
24
# File 'lib/faraday_middleware/tracable/request/tracable.rb', line 19

def call(env)
  if @header_name && @header_value
    env[:request_headers][@header_name] = @header_value.is_a?(Proc) ? instance_eval(&@header_value) : @header_value
  end
  @app.call(env)
end

#type_mapObject



26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/faraday_middleware/tracable/request/tracable.rb', line 26

def type_map
  {
    stackdriver: {
      header_name: "X-Cloud-Trace-Context",
      header_value: ->(_) {
        trace_id = 32.times.map { [*("0".."9"), *("a".."f")].sample }.join

        "#{trace_id}/0;o=1"
      }
    },
  }
end