Class: RouteNGNClient::Response

Inherits:
Object
  • Object
show all
Defined in:
lib/routengn_client/response.rb

Constant Summary collapse

METADATA_KEYS =
[
  :total_count,
  :current_page,
  :per_page,
  :offset,
  :total_pages
]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(request, faraday_response) ⇒ Response

Returns a new instance of Response.



14
15
16
17
# File 'lib/routengn_client/response.rb', line 14

def initialize(request, faraday_response)
  @request = request
  @faraday_response = faraday_response
end

Instance Attribute Details

#faraday_responseObject

Returns the value of attribute faraday_response.



12
13
14
# File 'lib/routengn_client/response.rb', line 12

def faraday_response
  @faraday_response
end

#requestObject

Returns the value of attribute request.



12
13
14
# File 'lib/routengn_client/response.rb', line 12

def request
  @request
end

Instance Method Details

#bodyObject



31
32
33
# File 'lib/routengn_client/response.rb', line 31

def body
  self.env[:body]
end

#build_model(collection_name, klass) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/routengn_client/response.rb', line 94

def build_model(collection_name, klass)
  raise RouteNGNResponseException, 'could not create Model from Response' if self.error_status?

  model = nil

  if r = self.body[collection_name.singularize.to_sym]
    model = klass.send :from_hash, r
    model. = @request.
  end

  model
end

#build_models(collection_name, klass, &blk) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/routengn_client/response.rb', line 75

def build_models(collection_name, klass, &blk)
  raise RouteNGNResponseException, 'could not create Models from Response' if self.error_status?

  models = []

  self.body[collection_name.to_sym].each do |h|
    if r = h[collection_name.singularize.to_sym]
      m = klass.send :from_hash, r
      m. = @request.
      models << m
      blk.call(m) if blk
    else
      next
    end
  end

  models
end

#current_pageObject



55
56
57
# File 'lib/routengn_client/response.rb', line 55

def current_page
  self.[:current_page] if self.
end

#envObject



19
20
21
# File 'lib/routengn_client/response.rb', line 19

def env
  @faraday_response.env
end

#error_status?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/routengn_client/response.rb', line 27

def error_status?
  (400...600).include? self.status
end

#metadataObject



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/routengn_client/response.rb', line 35

def 
  return @metadata if defined?(@metadata)

  if status == 200 && self.body.kind_of?(Hash)
    @metadata = {}.with_indifferent_access

    METADATA_KEYS.each { |k| @metadata[k] = self.body[k] }

    @metadata
  end
end

#pages_leftObject



47
48
49
50
51
52
53
# File 'lib/routengn_client/response.rb', line 47

def pages_left
  if self. && self.[:current_page] && self.[:total_pages]
    self.[:total_pages] - self.[:current_page]
  else
    0
  end
end

#pages_left?Boolean

Returns:

  • (Boolean)


63
64
65
# File 'lib/routengn_client/response.rb', line 63

def pages_left?
  self.current_page && self.total_pages ? (self.current_page < self.total_pages) : false
end

#statusObject



23
24
25
# File 'lib/routengn_client/response.rb', line 23

def status
  self.env[:status]
end

#to_modelObject



71
72
73
# File 'lib/routengn_client/response.rb', line 71

def to_model
  self.build_model(@request.resource_attributes[:collection_name], @request.klass)      
end

#to_models(&blk) ⇒ Object



67
68
69
# File 'lib/routengn_client/response.rb', line 67

def to_models(&blk)
  self.build_models(@request.resource_attributes[:collection_name], @request.klass, &blk)      
end

#total_pagesObject



59
60
61
# File 'lib/routengn_client/response.rb', line 59

def total_pages
  self.[:total_pages] if self.
end