Class: Nanoc3::Extra::CHiCk::RackClient Deprecated

Inherits:
Object
  • Object
show all
Defined in:
lib/nanoc3/extra/chick.rb

Overview

Deprecated.

Use a HTTP library such as [Net::HTTP](ruby-doc.org/stdlib/libdoc/net/http/rdoc/) or [Curb](curb.rubyforge.org/) instead.

Constant Summary collapse

METHOD_TO_CLASS_MAPPING =
{
  'DELETE'  => Net::HTTP::Delete,
  'GET'     => Net::HTTP::Get,
  'HEAD'    => Net::HTTP::Head,
  'POST'    => Net::HTTP::Post,
  'PUT'     => Net::HTTP::Put
}

Class Method Summary collapse

Class Method Details

.call(env) ⇒ Object

Raises:

  • (ArgumentError)


94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/nanoc3/extra/chick.rb', line 94

def self.call(env)
  # Build request
  request = Rack::Request.new(env)

  # Build headers and strip HTTP_
  request_headers = env.inject({}) do |m,(k,v)|
    k =~ /^HTTP_(.*)$/ && v ? m.merge($1.gsub(/_/, '-') => v) : m
  end

  # Build Net::HTTP request
  http = Net::HTTP.new(request.host, request.port)
  net_http_request_class = METHOD_TO_CLASS_MAPPING[request.request_method]
  raise ArgumentError, "Unsupported method: #{request.request_method}" if net_http_request_class.nil?
  net_http_request = net_http_request_class.new(request.fullpath, request_headers)
  net_http_request.body = env['rack.input'].read if [ 'POST', 'PUT' ].include?(request.request_method)

  # Perform request
  http.request(net_http_request) do |response|
    # Build Rack response triplet
    return [
      response.code.to_i,
      response.to_hash.inject({}) { |m,(k,v)| m.merge(k => v[0]) },
      [ response.body ]
    ]
  end
end