Class: Rack::Client::Simple

Inherits:
Base
  • Object
show all
Defined in:
lib/rack/client/adapter/simple.rb

Defined Under Namespace

Classes: CollapsedResponse

Constant Summary

Constants inherited from Base

Base::ASCII_ENCODING

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#ensure_acceptable_input

Constructor Details

#initialize(app, url = nil) ⇒ Simple

Returns a new instance of Simple.



56
57
58
59
# File 'lib/rack/client/adapter/simple.rb', line 56

def initialize(app, url = nil)
  super(app)
  @base_uri = URI.parse(url) unless url.nil?
end

Class Method Details

.inject_middleware(app) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/rack/client/adapter/simple.rb', line 19

def self.inject_middleware(app)
  middlewares = self.middlewares

  Rack::Builder.app do |builder|
    middlewares.each do |(middleware, args)|
      builder.use middleware, *args
    end

    builder.run app
  end
end

.middlewaresObject



11
12
13
# File 'lib/rack/client/adapter/simple.rb', line 11

def self.middlewares
  @middlewares ||= []
end

.new(app, *a, &b) ⇒ Object



5
6
7
8
9
# File 'lib/rack/client/adapter/simple.rb', line 5

def self.new(app, *a, &b)
  app = inject_middleware(app) if middlewares.any?

  super(app, *a, &b)
end

.use(middleware, *args) ⇒ Object



15
16
17
# File 'lib/rack/client/adapter/simple.rb', line 15

def self.use(middleware, *args)
  middlewares << [middleware, args]
end

Instance Method Details

#build_env(request_method, url, headers = {}, body = nil) ⇒ Object



100
101
102
103
104
105
106
107
108
109
# File 'lib/rack/client/adapter/simple.rb', line 100

def build_env(request_method, url, headers = {}, body = nil)
  uri = @base_uri.nil? ? URI.parse(url) : @base_uri + url

  env = super(request_method, uri.to_s, headers, body)

  env['HTTP_HOST']       ||= http_host_for(uri)
  env['HTTP_USER_AGENT'] ||= http_user_agent

  env
end

#http_host_for(uri) ⇒ Object



111
112
113
114
115
116
117
# File 'lib/rack/client/adapter/simple.rb', line 111

def http_host_for(uri)
  if uri.to_s.include?(":#{uri.port}")
    [uri.host, uri.port].join(':')
  else
    uri.host
  end
end

#http_user_agentObject



119
120
121
# File 'lib/rack/client/adapter/simple.rb', line 119

def http_user_agent
  "rack-client #{VERSION} (app: #{@app.class})"
end

#request(method, url, headers = {}, body_or_params = nil, query_params = {}) ⇒ Object



77
78
79
80
81
82
83
84
# File 'lib/rack/client/adapter/simple.rb', line 77

def request(method, url, headers = {}, body_or_params = nil, query_params = {})
  tuple = request_tuple(url, headers, body_or_params, query_params)
  if block_given?
    super(method, *tuple) {|*tuple| yield CollapsedResponse.new(*tuple) }
  else
    CollapsedResponse.new(*super(method, *tuple))
  end
end

#request_tuple(url, headers = {}, body_or_params = nil, query_params = {}, &block) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/rack/client/adapter/simple.rb', line 86

def request_tuple(url, headers = {}, body_or_params = nil, query_params = {}, &block)
  query_hash = Hash === query_params ? query_params : Utils.build_query(query_params)

  uri = url.is_a?(URI) ? url : URI.parse(url)

  unless query_params.empty?
    uri.query = Utils.build_nested_query(Utils.parse_nested_query(uri.query).merge(query_params))
  end

  body = Hash === body_or_params ? Utils.build_nested_query(body_or_params) : body_or_params

  return uri.to_s, headers, body
end