class ConsoleUtils::RequestUtils::Remo::Curl
Constants
- HEADER_JOIN_PROC
- KEY_MAP
- OUT_FORMAT
Attributes
payload[R]
request[R]
response[R]
Public Class Methods
call(*args) { |to_h, payload| ... }
click to toggle source
# File lib/console_utils/request_utils/remo.rb, line 72 def self.call(*args) result = new(*args) yield(result.to_h, result.payload) end
new(request_method, url, data: nil, headers: nil)
click to toggle source
# File lib/console_utils/request_utils/remo.rb, line 79 def initialize(request_method, url, data: nil, headers: nil) cmd = %W(#{ConsoleUtils.curl_bin} --silent -v -g) cmd.push("-X#{request_method}") cmd.push(url) cmd.concat(headers.flat_map(&HEADER_JOIN_PROC)) if headers.present? cmd.push("-d", data) if data.present? cmd_line = Shellwords.join(cmd) cmd_line << %( --write-out "#{OUT_FORMAT}") puts "$ #{cmd_line}" if verbose? @response = {} @request = {} @payload = [] Open3.popen3(cmd_line) do |stdin, stdout, stderr, thr| # stdin.close { stderr: stderr, stdout: stdout }.each do |key, io| Thread.new do begin until (line = io.gets).nil? do key == :stderr ? process_stderr(line) : @payload << line end rescue => e warn e end end end thr.join end end
Public Instance Methods
process_stderr(line)
click to toggle source
# File lib/console_utils/request_utils/remo.rb, line 115 def process_stderr(line) # warn(line) if type = KEY_MAP[line.chr] line = line[2, line.size-1].strip return if line.size == 0 case type when :request; set_request(line) when :response; set_response(line) end end end
set_request(line)
click to toggle source
# File lib/console_utils/request_utils/remo.rb, line 129 def set_request(line) # warn("Request: #{line}") if !@request.key?(:http_version) && line =~ /^(GET|POST|PUT|PATCH|HEAD|OPTION|DELETE) (.+?) HTTP\/(.+)$/ @request.merge!(method: $1, url: $2, http_version: $3) else header, value = line.split(": ", 2) @request[header] = value end end
set_response(line)
click to toggle source
# File lib/console_utils/request_utils/remo.rb, line 139 def set_response(line) # warn("Response: #{line}") if !@response.key?(:http_version) && line =~ /^HTTP\/(.+) (\d+?) (.+)$/ @response.merge!(http_version: $1, http_code: $2.to_i, http_status: $3) else header, value = line.split(": ", 2) @response[header] = value end end
to_h()
click to toggle source
# File lib/console_utils/request_utils/remo.rb, line 149 def to_h { response: @response, request: @request } end
verbose?()
click to toggle source
# File lib/console_utils/request_utils/remo.rb, line 153 def verbose? !ConsoleUtils.curl_silence end