-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlist.rb
132 lines (101 loc) · 3.1 KB
/
list.rb
1
2
3
4
5
6
7
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# frozen_string_literal: true
module Kentaa
module Api
module Resources
class List < Base
include Enumerable
def [](index)
resources[index]
end
def size
resources.size
end
def each(&block)
resources.each(&block)
end
def links
body[:links]
end
def pages
links[:pages] if links
end
def total_entries
body[:total_entries]
end
def total_pages
body[:total_pages]
end
def per_page
body[:per_page]
end
def current_page
body[:current_page]
end
def next_page
current_page + 1 if next_page?
end
def next_page?
current_page && current_page < total_pages
end
def previous_page
current_page - 1 if previous_page?
end
def previous_page?
current_page && current_page > 1
end
def next
self.class.new(config, options.merge(resource_class: resource_class, endpoint_path: endpoint_path, page: next_page)) if next_page?
end
def previous
self.class.new(config, options.merge(resource_class: resource_class, endpoint_path: endpoint_path, page: previous_page)) if previous_page?
end
def all
enumerator = Enumerator.new do |yielder|
page = 1
loop do
response = self.class.new(config, options.merge(resource_class: resource_class, endpoint_path: endpoint_path, page: page))
response.each { |item| yielder.yield item }
raise StopIteration unless response.next_page?
page = response.next_page
end
end
enumerator.lazy
end
def get(id, options = {})
resource = resource_class.new(config, id: id, options: options.merge(endpoint_path: endpoint_path))
resource.load
end
def create(attributes, options = {})
resource = resource_class.new(config, options: options.merge(endpoint_path: endpoint_path))
resource.save(attributes)
end
def update(id, attributes, options = {})
resource = resource_class.new(config, id: id, options: options.merge(endpoint_path: endpoint_path))
resource.save(attributes)
end
def delete(id, options = {})
resource = resource_class.new(config, id: id, options: options.merge(endpoint_path: endpoint_path))
resource.delete
end
private
def resources
@resources ||= begin
resources = []
if data
data.each do |resource|
resources << resource_class.new(config, data: resource, options: options)
end
end
resources
end
end
def attribute_key
Util.pluralize(resource_class.attribute_key)
end
def load_resource
request.get(endpoint_path, options)
end
end
end
end
end