Class: Reach::REST::Page
- Inherits:
-
Object
show all
- Includes:
- Enumerable
- Defined in:
- lib/reach-ruby/framework/rest/page.rb
Overview
Constant Summary
collapse
- META_KEYS =
[
'page',
'pageSize',
'totalPages',
'outOfPageRange'
].freeze
Instance Method Summary
collapse
Constructor Details
#initialize(url, version, response) ⇒ Page
Returns a new instance of Page.
16
17
18
19
20
21
22
23
24
|
# File 'lib/reach-ruby/framework/rest/page.rb', line 16
def initialize(url, version, response)
payload = process_response(response)
@url = url
@version = version
@payload = payload
@solution = {}
@records = load_page(payload)
end
|
Instance Method Details
#each ⇒ Object
133
134
135
136
137
|
# File 'lib/reach-ruby/framework/rest/page.rb', line 133
def each
@records.each do |record|
yield get_instance(record)
end
end
|
#get_instance(payload) ⇒ Object
113
114
115
|
# File 'lib/reach-ruby/framework/rest/page.rb', line 113
def get_instance(payload)
raise Reach::REST::ReachError, 'Page.get_instance() must be implemented in the derived class'
end
|
#load_page(payload) ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/reach-ruby/framework/rest/page.rb', line 34
def load_page(payload)
if payload['meta'] && payload['meta']['key']
return payload[payload['meta']['key']]
else
keys = payload.keys
key = keys - META_KEYS
if key.size == 1
return payload[key.first]
end
if key.size == 2
key1 = key[0]
key2 = key[1]
if key1.length > key2.length
aux = key2
key2 = key1
key1 = aux
end
val = "total" + key1[0,1].upcase + key1[1..-1]
if val == key2
return payload[key1]
end
end
end
raise Reach::REST::ReachError, 'Page Records can not be deserialized'
end
|
#next_page ⇒ Object
125
126
127
128
129
130
131
|
# File 'lib/reach-ruby/framework/rest/page.rb', line 125
def next_page
return nil unless next_page_url
response = @version.domain.request('GET', next_page_url)
self.class.new(@url, @version, response, @solution)
end
|
#next_page_url ⇒ Object
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
# File 'lib/reach-ruby/framework/rest/page.rb', line 83
def next_page_url
page = 0
if @payload.key?('page')
page = @payload['page']
end
pageSize = 1
if @payload.key?('pageSize')
pageSize = @payload['pageSize']
end
= true
if @payload.key?('outOfPageRange')
= @payload['outOfPageRange']
end
totalPages = 1
if @payload.key?('totalPages')
totalPages = @payload['totalPages']
end
if !( || (page + 1 >= totalPages))
query = "pageSize=#{pageSize}&page=#{page+1}"
uri = URI.parse(@url)
if (!(uri.query == nil || uri.query.length == 0))
query = uri.query + "&" + query
end
uri.query = query
return uri.to_s
end
nil
end
|
#previous_page ⇒ Object
117
118
119
120
121
122
123
|
# File 'lib/reach-ruby/framework/rest/page.rb', line 117
def previous_page
return nil unless previous_page_url
response = @version.domain.request('GET', previous_page_url)
self.class.new(@url, @version, response, @solution)
end
|
#previous_page_url ⇒ Object
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# File 'lib/reach-ruby/framework/rest/page.rb', line 61
def previous_page_url
page = 0
if @payload.key?('page')
page = @payload['page']
end
pageSize = 1
if @payload.key?('pageSize')
pageSize = @payload['pageSize']
end
if page > 0
query = "pageSize=#{pageSize}&page=#{page-1}"
uri = URI.parse(@url)
if (!(uri.query == nil || uri.query.length == 0))
query = uri.query + "&" + query
end
uri.query = query
return uri.to_s
end
nil
end
|
#process_response(response) ⇒ Object
26
27
28
29
30
31
32
|
# File 'lib/reach-ruby/framework/rest/page.rb', line 26
def process_response(response)
if response.status_code != 200
raise Reach::REST::RestError.new('Unable to fetch page', response)
end
response.body
end
|
#to_s ⇒ Object
139
140
141
|
# File 'lib/reach-ruby/framework/rest/page.rb', line 139
def to_s
'#<Page>'
end
|