Class: HttpspecSimple::Request

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

Defined Under Namespace

Classes: CONFIG_CLASS

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url, opt = {}) ⇒ Request

Returns a new instance of Request.



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
# File 'lib/httpspec_simple/request.rb', line 8

def initialize(url, opt = {})
  @url = URI.parse(url)
  http = Net::HTTP.new(@url.host, @url.port)
  http.open_timeout = opt[:timeout] || Request.configuration.timeout
  http.read_timeout = opt[:timeout] || Request.configuration.timeout
  retry_count = (opt[:retry] || Request.configuration.retry).to_i
  res, @response_time = process_time do
    http.start do |http|
      open_timeout_error = if Net.const_defined?(:OpenTimeout) then Net::OpenTimeout else Timeout::Error end
      read_timeout_error = if Net.const_defined?(:ReadTimeout) then Net::ReadTimeout else Timeout::Error end
      begin
        req = Net::HTTP::Get.new(@url.request_uri)
        if (headers = opt[:headers] || Request.configuration.headers)
          headers.each {|k, v| req[k] = v }
        end
        if (basic_auth = opt[:basic_auth] || Request.configuration.basic_auth)
          req.basic_auth *basic_auth if Array === basic_auth
        end
        res = http.request(req)
        raise RequestError.new if res.kind_of?(Net::HTTPClientError) or res.kind_of?(Net::HTTPServerError)
      rescue open_timeout_error, read_timeout_error, RequestError
        retry if (retry_count-=1) > 0
      end
      res
    end
  end
  @status = res ? res.code : 'timeout'
  unless res.nil?
    @body = res.body
    charset = (res['content-type'] || '').split(';').select{|i| i.start_with?('charset=')}.map{|i| i.sub('charset=', '')}[0]
    @body.force_encoding(charset) unless charset.nil?
  end
end

Instance Attribute Details

#bodyObject (readonly)

Returns the value of attribute body.



6
7
8
# File 'lib/httpspec_simple/request.rb', line 6

def body
  @body
end

#response_timeObject (readonly)

Returns the value of attribute response_time.



6
7
8
# File 'lib/httpspec_simple/request.rb', line 6

def response_time
  @response_time
end

#statusObject (readonly)

Returns the value of attribute status.



6
7
8
# File 'lib/httpspec_simple/request.rb', line 6

def status
  @status
end

Class Method Details

.configurationObject



64
65
66
# File 'lib/httpspec_simple/request.rb', line 64

def configuration
  @config ||= reset_configuration
end

.configure {|config| ... } ⇒ Object

Yields:

  • (config)


53
54
55
56
57
58
59
60
# File 'lib/httpspec_simple/request.rb', line 53

def configure
  config = CONFIG_CLASS.new(20, 0)
  yield config if block_given?
  configuration.timeout = config.timeout
  configuration.retry = config.retry
  configuration.headers = config.headers
  configuration.basic_auth = config.basic_auth
end

.reset_configurationObject



68
69
70
# File 'lib/httpspec_simple/request.rb', line 68

def reset_configuration
  @config = CONFIG_CLASS.new(20, 0, {})
end

Instance Method Details

#process_timeObject



42
43
44
45
46
# File 'lib/httpspec_simple/request.rb', line 42

def process_time
  start_time = Time.now
  ret = yield
  [ret, Time.now - start_time]
end

#to_sObject



48
49
50
# File 'lib/httpspec_simple/request.rb', line 48

def to_s
  @url.to_s
end