File: curl_formatter.rb

package info (click to toggle)
ruby-httparty 0.13.7-1%2Bdeb9u1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 736 kB
  • sloc: ruby: 4,741; xml: 425; sh: 35; makefile: 11
file content (48 lines) | stat: -rw-r--r-- 1,474 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
module HTTParty
  module Logger
    class CurlFormatter #:nodoc:
      TAG_NAME = HTTParty.name
      OUT = ">"
      IN = "<"

      attr_accessor :level, :logger, :current_time

      def initialize(logger, level)
        @logger = logger
        @level  = level.to_sym
      end

      def format(request, response)
        messages        = []
        time            = Time.now.strftime("%Y-%m-%d %H:%M:%S %z")
        http_method     = request.http_method.name.split("::").last.upcase
        path            = request.path.to_s

        messages << print(time, OUT, "#{http_method} #{path}")

        if request.options[:headers] && request.options[:headers].size > 0
          request.options[:headers].each do |k, v|
            messages << print(time, OUT, "#{k}: #{v}")
          end
        end

        messages << print(time, OUT, request.raw_body)
        messages << print(time, OUT, "")
        messages << print(time, IN, "HTTP/#{response.http_version} #{response.code}")

        headers = response.respond_to?(:headers) ? response.headers : response
        response.each_header do |response_header|
          messages << print(time, IN, "#{response_header.capitalize}: #{headers[response_header]}")
        end

        messages << print(time, IN, "\n#{response.body}")

        @logger.send @level, messages.join("\n")
      end

      def print(time, direction, line)
        "[#{TAG_NAME}] [#{time}] #{direction} #{line}"
      end
    end
  end
end