Class: TusClient::HttpService

Inherits:
Object
  • Object
show all
Defined in:
lib/http_service.rb

Overview

Provides basic http calls (head, patch, post), with detailed logging

Class Method Summary collapse

Class Method Details

._log_request(http_request, logger) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/http_service.rb', line 29

def self._log_request(http_request, logger)
  logger.info do
    uri = http_request.uri

    header_info = {}
    http_request.each_header do |key, value|
      header_info[key] = value
    end

    request_info = { uri: uri.to_s, header: header_info }

    request_body = http_request.body.to_s
    request_info[:body_md5] = Digest::MD5.hexdigest(request_body) unless request_body.blank?
    request_info[:body_size] = request_body.size unless request_body.blank?

    formatted_body =  case request_body.encoding
                      when Encoding::ASCII_8BIT
                        request_body.encoding.inspect
                      else
                        request_body.truncate_middle(60)
                      end
    request_info[:body] = formatted_body

    [ "TUS #{http_request.method}",
      { request: request_info },
      TusClient.log_info,
    ]
  end
end

._log_response(http_method, http_response, logger) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/http_service.rb', line 59

def self._log_response(http_method, http_response, logger)
  header_info = {}
  http_response.each_header do |key, value|
    header_info[key] = value
  end

  logger.info do
    [ "TUS #{http_method}",
      { response: {
       status: http_response.code,
       header: header_info,
       body: http_response.body.to_s.truncate_middle(60)
      }},
      TusClient.log_info,
    ]
  end
end

._perform(http_request:, logger:) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/http_service.rb', line 77

def self._perform(http_request:, logger:)
  _log_request(http_request, logger)

  uri = http_request.uri
  http_response = Net::HTTP.start(
    uri.host,
    uri.port,
    use_ssl: uri.scheme == 'https'
  ) do |http|
    http.request http_request
  end

  _log_response(http_request.method, http_response, logger)
  http_response
end

.head(uri:, headers:, logger:) ⇒ Object



7
8
9
10
# File 'lib/http_service.rb', line 7

def self.head(uri:, headers:, logger:)
  request = Net::HTTP::Head.new(uri, headers)
  _perform(http_request: request, logger: logger)
end

.options(uri:, headers:, logger:) ⇒ Object



12
13
14
15
# File 'lib/http_service.rb', line 12

def self.options(uri:, headers:, logger:)
  request = Net::HTTP::Options.new(uri, headers)
  _perform(http_request: request, logger: logger)
end

.patch(uri:, headers:, body:, logger:) ⇒ Object



17
18
19
20
21
# File 'lib/http_service.rb', line 17

def self.patch(uri:, headers:, body:, logger:)
  request = Net::HTTP::Patch.new(uri, headers)
  request.body = body
  _perform(http_request: request, logger: logger)
end

.post(uri:, headers:, body: nil, logger:) ⇒ Object



23
24
25
26
27
# File 'lib/http_service.rb', line 23

def self.post(uri:, headers:, body: nil, logger:)
  request = Net::HTTP::Post.new(uri, headers)
  request.body = body
  _perform(http_request: request, logger: logger)
end