Class: LazyResource::Request

Inherits:
Typhoeus::Request
  • Object
show all
Defined in:
lib/lazy_resource/request.rb

Constant Summary collapse

SUCCESS_STATUSES =
[200, 201]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url, resource, options = {}) ⇒ Request

Returns a new instance of Request.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/lazy_resource/request.rb', line 7

def initialize(url, resource, options={})
  options = options.dup
  options[:headers] ||= {}
  options[:headers][:Accept] ||= 'application/json'
  options[:headers].merge!(Thread.current[:default_headers]) unless Thread.current[:default_headers].nil?
  options[:method] ||= :get

  super(url, options)

  @resource = resource
  self.on_complete do
    log_response(response) if LazyResource.debug && LazyResource.logger
    @response = response
    handle_errors unless SUCCESS_STATUSES.include?(@response.code)
    parse
  end

  self
end

Instance Attribute Details

#resourceObject

Returns the value of attribute resource.



5
6
7
# File 'lib/lazy_resource/request.rb', line 5

def resource
  @resource
end

#responseObject

Returns the value of attribute response.



5
6
7
# File 'lib/lazy_resource/request.rb', line 5

def response
  @response
end

Instance Method Details

#handle_errorsObject



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/lazy_resource/request.rb', line 37

def handle_errors
  case @response.code
  when 300...400
    raise Redirection.new(@response)
  when 400
    raise BadRequest.new(@response)
  when 401
    raise UnauthorizedAccess.new(@response)
  when 403
    raise ForbiddenAccess.new(@response)
  when 404
    raise ResourceNotFound.new(@response)
  when 405
    raise MethodNotAllowed.new(@response)
  when 409
    raise ResourceConflict.new(@response)
  when 410
    raise ResourceGone.new(@response)
  when 422
    raise UnprocessableEntity.new(@response)
  when 400...500
    raise ClientError.new(@response)
  when 500...600
    raise ServerError.new(@response)
  end
end

#log_response(response) ⇒ Object



27
28
29
# File 'lib/lazy_resource/request.rb', line 27

def log_response(response)
  LazyResource.logger.info "\t[#{response.code}](#{((response.time || 0) * 1000).ceil}ms): #{self.url}"
end

#parseObject



31
32
33
34
35
# File 'lib/lazy_resource/request.rb', line 31

def parse
  unless self.response.body.nil? || self.response.body == ''
    @resource.load(JSON.parse(self.response.body))
  end
end