autorender 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +55 -40
- data/README.md +34 -8
- data/SECURITY.md +2 -2
- data/lib/autorender/internal/page_pagination.rb +35 -22
- data/lib/autorender/internal/transport/base_client.rb +4 -1
- data/lib/autorender/models/file_list_response.rb +103 -158
- data/lib/autorender/models/upload_create_from_url_params.rb +19 -4
- data/lib/autorender/resources/files.rb +2 -1
- data/lib/autorender/resources/uploads.rb +1 -1
- data/lib/autorender/version.rb +1 -1
- data/rbi/autorender/internal/page_pagination.rbi +29 -9
- data/rbi/autorender/models/file_list_response.rbi +80 -173
- data/rbi/autorender/models/upload_create_from_url_params.rbi +33 -6
- data/rbi/autorender/resources/files.rbi +5 -1
- data/rbi/autorender/resources/uploads.rbi +2 -2
- data/sig/autorender/internal/page_pagination.rbs +16 -5
- data/sig/autorender/models/file_list_response.rbs +83 -142
- data/sig/autorender/models/upload_create_from_url_params.rbs +17 -5
- data/sig/autorender/resources/files.rbs +1 -1
- data/sig/autorender/resources/uploads.rbs +1 -1
- metadata +3 -3
|
@@ -43,10 +43,10 @@ module Autorender
|
|
|
43
43
|
optional :random_prefix, String
|
|
44
44
|
|
|
45
45
|
# @!attribute tags
|
|
46
|
-
#
|
|
46
|
+
# Tags array or comma-separated string
|
|
47
47
|
#
|
|
48
|
-
# @return [String, nil]
|
|
49
|
-
optional :tags,
|
|
48
|
+
# @return [Array<String>, String, nil]
|
|
49
|
+
optional :tags, union: -> { Autorender::UploadCreateFromURLParams::Tags }
|
|
50
50
|
|
|
51
51
|
# @!attribute webhook_url
|
|
52
52
|
#
|
|
@@ -66,11 +66,26 @@ module Autorender
|
|
|
66
66
|
#
|
|
67
67
|
# @param random_prefix [String] true/false to append random suffix
|
|
68
68
|
#
|
|
69
|
-
# @param tags [String]
|
|
69
|
+
# @param tags [Array<String>, String] Tags array or comma-separated string
|
|
70
70
|
#
|
|
71
71
|
# @param webhook_url [String]
|
|
72
72
|
#
|
|
73
73
|
# @param request_options [Autorender::RequestOptions, Hash{Symbol=>Object}]
|
|
74
|
+
|
|
75
|
+
# Tags array or comma-separated string
|
|
76
|
+
module Tags
|
|
77
|
+
extend Autorender::Internal::Type::Union
|
|
78
|
+
|
|
79
|
+
variant -> { Autorender::Models::UploadCreateFromURLParams::Tags::StringArray }
|
|
80
|
+
|
|
81
|
+
variant String
|
|
82
|
+
|
|
83
|
+
# @!method self.variants
|
|
84
|
+
# @return [Array(Array<String>, String)]
|
|
85
|
+
|
|
86
|
+
# @type [Autorender::Internal::Type::Converter]
|
|
87
|
+
StringArray = Autorender::Internal::Type::ArrayOf[String]
|
|
88
|
+
end
|
|
74
89
|
end
|
|
75
90
|
end
|
|
76
91
|
end
|
|
@@ -39,7 +39,7 @@ module Autorender
|
|
|
39
39
|
#
|
|
40
40
|
# @param request_options [Autorender::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
41
41
|
#
|
|
42
|
-
# @return [Autorender::Models::FileListResponse]
|
|
42
|
+
# @return [Autorender::Internal::PagePagination<Autorender::Models::FileListResponse>]
|
|
43
43
|
#
|
|
44
44
|
# @see Autorender::Models::FileListParams
|
|
45
45
|
def list(params = {})
|
|
@@ -49,6 +49,7 @@ module Autorender
|
|
|
49
49
|
method: :get,
|
|
50
50
|
path: "api/v1/files",
|
|
51
51
|
query: query,
|
|
52
|
+
page: Autorender::Internal::PagePagination,
|
|
52
53
|
model: Autorender::Models::FileListResponse,
|
|
53
54
|
options: options
|
|
54
55
|
)
|
|
@@ -59,7 +59,7 @@ module Autorender
|
|
|
59
59
|
#
|
|
60
60
|
# @param random_prefix [String] true/false to append random suffix
|
|
61
61
|
#
|
|
62
|
-
# @param tags [String]
|
|
62
|
+
# @param tags [Array<String>, String] Tags array or comma-separated string
|
|
63
63
|
#
|
|
64
64
|
# @param webhook_url [String]
|
|
65
65
|
#
|
data/lib/autorender/version.rb
CHANGED
|
@@ -8,21 +8,41 @@ module Autorender
|
|
|
8
8
|
Elem = type_member
|
|
9
9
|
|
|
10
10
|
sig { returns(T.nilable(T::Array[Elem])) }
|
|
11
|
-
attr_accessor :
|
|
11
|
+
attr_accessor :files
|
|
12
12
|
|
|
13
|
-
sig { returns(
|
|
14
|
-
attr_accessor :
|
|
15
|
-
|
|
16
|
-
sig { returns(T::Boolean) }
|
|
17
|
-
attr_accessor :has_next
|
|
18
|
-
|
|
19
|
-
sig { returns(Integer) }
|
|
20
|
-
attr_accessor :total_results
|
|
13
|
+
sig { returns(Meta) }
|
|
14
|
+
attr_accessor :meta
|
|
21
15
|
|
|
22
16
|
# @api private
|
|
23
17
|
sig { returns(String) }
|
|
24
18
|
def inspect
|
|
25
19
|
end
|
|
20
|
+
|
|
21
|
+
class Meta < Autorender::Internal::Type::BaseModel
|
|
22
|
+
OrHash = T.type_alias { T.any(Meta, Autorender::Internal::AnyHash) }
|
|
23
|
+
|
|
24
|
+
sig { returns(T.nilable(T::Boolean)) }
|
|
25
|
+
attr_reader :has_next
|
|
26
|
+
|
|
27
|
+
sig { params(has_next: T::Boolean).void }
|
|
28
|
+
attr_writer :has_next
|
|
29
|
+
|
|
30
|
+
sig { returns(T.nilable(Integer)) }
|
|
31
|
+
attr_reader :page
|
|
32
|
+
|
|
33
|
+
sig { params(page: Integer).void }
|
|
34
|
+
attr_writer :page
|
|
35
|
+
|
|
36
|
+
sig do
|
|
37
|
+
params(has_next: T::Boolean, page: Integer).returns(T.attached_class)
|
|
38
|
+
end
|
|
39
|
+
def self.new(has_next: nil, page: nil)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
sig { override.returns({ has_next: T::Boolean, page: Integer }) }
|
|
43
|
+
def to_hash
|
|
44
|
+
end
|
|
45
|
+
end
|
|
26
46
|
end
|
|
27
47
|
end
|
|
28
48
|
end
|
|
@@ -11,100 +11,102 @@ module Autorender
|
|
|
11
11
|
)
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
sig { returns(
|
|
15
|
-
attr_accessor :
|
|
14
|
+
sig { returns(String) }
|
|
15
|
+
attr_accessor :id
|
|
16
16
|
|
|
17
|
-
sig { returns(
|
|
18
|
-
|
|
17
|
+
sig { returns(Time) }
|
|
18
|
+
attr_accessor :created_at
|
|
19
19
|
|
|
20
|
-
sig
|
|
21
|
-
|
|
22
|
-
end
|
|
23
|
-
attr_writer :meta
|
|
24
|
-
|
|
25
|
-
# Files list
|
|
26
|
-
sig do
|
|
27
|
-
params(
|
|
28
|
-
files: T::Array[Autorender::Models::FileListResponse::File::OrHash],
|
|
29
|
-
meta: Autorender::Models::FileListResponse::Meta::OrHash
|
|
30
|
-
).returns(T.attached_class)
|
|
31
|
-
end
|
|
32
|
-
def self.new(files:, meta:)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
sig do
|
|
36
|
-
override.returns(
|
|
37
|
-
{
|
|
38
|
-
files: T::Array[Autorender::Models::FileListResponse::File],
|
|
39
|
-
meta: Autorender::Models::FileListResponse::Meta
|
|
40
|
-
}
|
|
41
|
-
)
|
|
42
|
-
end
|
|
43
|
-
def to_hash
|
|
44
|
-
end
|
|
20
|
+
sig { returns(String) }
|
|
21
|
+
attr_accessor :file_no
|
|
45
22
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
T.type_alias do
|
|
49
|
-
T.any(
|
|
50
|
-
Autorender::Models::FileListResponse::File,
|
|
51
|
-
Autorender::Internal::AnyHash
|
|
52
|
-
)
|
|
53
|
-
end
|
|
23
|
+
sig { returns(T.nilable(String)) }
|
|
24
|
+
attr_accessor :folder_name
|
|
54
25
|
|
|
55
|
-
|
|
56
|
-
|
|
26
|
+
sig { returns(T.nilable(String)) }
|
|
27
|
+
attr_accessor :folder_no
|
|
57
28
|
|
|
58
|
-
|
|
59
|
-
|
|
29
|
+
sig { returns(T.nilable(String)) }
|
|
30
|
+
attr_accessor :format_
|
|
60
31
|
|
|
61
|
-
|
|
62
|
-
|
|
32
|
+
sig { returns(T.nilable(Integer)) }
|
|
33
|
+
attr_accessor :height
|
|
63
34
|
|
|
64
|
-
|
|
65
|
-
|
|
35
|
+
sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
|
|
36
|
+
attr_accessor :metadata
|
|
66
37
|
|
|
67
|
-
|
|
68
|
-
|
|
38
|
+
sig { returns(String) }
|
|
39
|
+
attr_accessor :mime_type
|
|
69
40
|
|
|
70
|
-
|
|
71
|
-
|
|
41
|
+
sig { returns(String) }
|
|
42
|
+
attr_accessor :name
|
|
72
43
|
|
|
73
|
-
|
|
74
|
-
|
|
44
|
+
sig { returns(String) }
|
|
45
|
+
attr_accessor :path
|
|
75
46
|
|
|
76
|
-
|
|
77
|
-
|
|
47
|
+
sig { returns(Integer) }
|
|
48
|
+
attr_accessor :size
|
|
78
49
|
|
|
79
|
-
|
|
80
|
-
|
|
50
|
+
sig { returns(String) }
|
|
51
|
+
attr_accessor :source
|
|
81
52
|
|
|
82
|
-
|
|
83
|
-
|
|
53
|
+
sig { returns(T::Array[String]) }
|
|
54
|
+
attr_accessor :tags
|
|
84
55
|
|
|
85
|
-
|
|
86
|
-
|
|
56
|
+
sig { returns(T.nilable(Time)) }
|
|
57
|
+
attr_accessor :updated_at
|
|
87
58
|
|
|
88
|
-
|
|
89
|
-
|
|
59
|
+
sig { returns(String) }
|
|
60
|
+
attr_accessor :url
|
|
90
61
|
|
|
91
|
-
|
|
92
|
-
|
|
62
|
+
sig { returns(T.nilable(Integer)) }
|
|
63
|
+
attr_accessor :width
|
|
93
64
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
65
|
+
sig do
|
|
66
|
+
params(
|
|
67
|
+
id: String,
|
|
68
|
+
created_at: Time,
|
|
69
|
+
file_no: String,
|
|
70
|
+
folder_name: T.nilable(String),
|
|
71
|
+
folder_no: T.nilable(String),
|
|
72
|
+
format_: T.nilable(String),
|
|
73
|
+
height: T.nilable(Integer),
|
|
74
|
+
metadata: T.nilable(T::Hash[Symbol, T.anything]),
|
|
75
|
+
mime_type: String,
|
|
76
|
+
name: String,
|
|
77
|
+
path: String,
|
|
78
|
+
size: Integer,
|
|
79
|
+
source: String,
|
|
80
|
+
tags: T::Array[String],
|
|
81
|
+
updated_at: T.nilable(Time),
|
|
82
|
+
url: String,
|
|
83
|
+
width: T.nilable(Integer)
|
|
84
|
+
).returns(T.attached_class)
|
|
85
|
+
end
|
|
86
|
+
def self.new(
|
|
87
|
+
id:,
|
|
88
|
+
created_at:,
|
|
89
|
+
file_no:,
|
|
90
|
+
folder_name:,
|
|
91
|
+
folder_no:,
|
|
92
|
+
format_:,
|
|
93
|
+
height:,
|
|
94
|
+
metadata:,
|
|
95
|
+
mime_type:,
|
|
96
|
+
name:,
|
|
97
|
+
path:,
|
|
98
|
+
size:,
|
|
99
|
+
source:,
|
|
100
|
+
tags:,
|
|
101
|
+
updated_at:,
|
|
102
|
+
url:,
|
|
103
|
+
width:
|
|
104
|
+
)
|
|
105
|
+
end
|
|
105
106
|
|
|
106
|
-
|
|
107
|
-
|
|
107
|
+
sig do
|
|
108
|
+
override.returns(
|
|
109
|
+
{
|
|
108
110
|
id: String,
|
|
109
111
|
created_at: Time,
|
|
110
112
|
file_no: String,
|
|
@@ -122,105 +124,10 @@ module Autorender
|
|
|
122
124
|
updated_at: T.nilable(Time),
|
|
123
125
|
url: String,
|
|
124
126
|
width: T.nilable(Integer)
|
|
125
|
-
|
|
126
|
-
end
|
|
127
|
-
def self.new(
|
|
128
|
-
id:,
|
|
129
|
-
created_at:,
|
|
130
|
-
file_no:,
|
|
131
|
-
folder_name:,
|
|
132
|
-
folder_no:,
|
|
133
|
-
format_:,
|
|
134
|
-
height:,
|
|
135
|
-
metadata:,
|
|
136
|
-
mime_type:,
|
|
137
|
-
name:,
|
|
138
|
-
path:,
|
|
139
|
-
size:,
|
|
140
|
-
source:,
|
|
141
|
-
tags:,
|
|
142
|
-
updated_at:,
|
|
143
|
-
url:,
|
|
144
|
-
width:
|
|
127
|
+
}
|
|
145
128
|
)
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
sig do
|
|
149
|
-
override.returns(
|
|
150
|
-
{
|
|
151
|
-
id: String,
|
|
152
|
-
created_at: Time,
|
|
153
|
-
file_no: String,
|
|
154
|
-
folder_name: T.nilable(String),
|
|
155
|
-
folder_no: T.nilable(String),
|
|
156
|
-
format_: T.nilable(String),
|
|
157
|
-
height: T.nilable(Integer),
|
|
158
|
-
metadata: T.nilable(T::Hash[Symbol, T.anything]),
|
|
159
|
-
mime_type: String,
|
|
160
|
-
name: String,
|
|
161
|
-
path: String,
|
|
162
|
-
size: Integer,
|
|
163
|
-
source: String,
|
|
164
|
-
tags: T::Array[String],
|
|
165
|
-
updated_at: T.nilable(Time),
|
|
166
|
-
url: String,
|
|
167
|
-
width: T.nilable(Integer)
|
|
168
|
-
}
|
|
169
|
-
)
|
|
170
|
-
end
|
|
171
|
-
def to_hash
|
|
172
|
-
end
|
|
173
129
|
end
|
|
174
|
-
|
|
175
|
-
class Meta < Autorender::Internal::Type::BaseModel
|
|
176
|
-
OrHash =
|
|
177
|
-
T.type_alias do
|
|
178
|
-
T.any(
|
|
179
|
-
Autorender::Models::FileListResponse::Meta,
|
|
180
|
-
Autorender::Internal::AnyHash
|
|
181
|
-
)
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
sig { returns(T::Boolean) }
|
|
185
|
-
attr_accessor :has_next
|
|
186
|
-
|
|
187
|
-
sig { returns(T::Boolean) }
|
|
188
|
-
attr_accessor :has_prev
|
|
189
|
-
|
|
190
|
-
sig { returns(Integer) }
|
|
191
|
-
attr_accessor :limit
|
|
192
|
-
|
|
193
|
-
sig { returns(Integer) }
|
|
194
|
-
attr_accessor :page
|
|
195
|
-
|
|
196
|
-
sig { returns(Integer) }
|
|
197
|
-
attr_accessor :total
|
|
198
|
-
|
|
199
|
-
sig do
|
|
200
|
-
params(
|
|
201
|
-
has_next: T::Boolean,
|
|
202
|
-
has_prev: T::Boolean,
|
|
203
|
-
limit: Integer,
|
|
204
|
-
page: Integer,
|
|
205
|
-
total: Integer
|
|
206
|
-
).returns(T.attached_class)
|
|
207
|
-
end
|
|
208
|
-
def self.new(has_next:, has_prev:, limit:, page:, total:)
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
sig do
|
|
212
|
-
override.returns(
|
|
213
|
-
{
|
|
214
|
-
has_next: T::Boolean,
|
|
215
|
-
has_prev: T::Boolean,
|
|
216
|
-
limit: Integer,
|
|
217
|
-
page: Integer,
|
|
218
|
-
total: Integer
|
|
219
|
-
}
|
|
220
|
-
)
|
|
221
|
-
end
|
|
222
|
-
def to_hash
|
|
223
|
-
end
|
|
130
|
+
def to_hash
|
|
224
131
|
end
|
|
225
132
|
end
|
|
226
133
|
end
|
|
@@ -52,11 +52,17 @@ module Autorender
|
|
|
52
52
|
sig { params(random_prefix: String).void }
|
|
53
53
|
attr_writer :random_prefix
|
|
54
54
|
|
|
55
|
-
#
|
|
56
|
-
sig
|
|
55
|
+
# Tags array or comma-separated string
|
|
56
|
+
sig do
|
|
57
|
+
returns(
|
|
58
|
+
T.nilable(Autorender::UploadCreateFromURLParams::Tags::Variants)
|
|
59
|
+
)
|
|
60
|
+
end
|
|
57
61
|
attr_reader :tags
|
|
58
62
|
|
|
59
|
-
sig
|
|
63
|
+
sig do
|
|
64
|
+
params(tags: Autorender::UploadCreateFromURLParams::Tags::Variants).void
|
|
65
|
+
end
|
|
60
66
|
attr_writer :tags
|
|
61
67
|
|
|
62
68
|
sig { returns(T.nilable(String)) }
|
|
@@ -73,7 +79,7 @@ module Autorender
|
|
|
73
79
|
folder: String,
|
|
74
80
|
metadata: String,
|
|
75
81
|
random_prefix: String,
|
|
76
|
-
tags:
|
|
82
|
+
tags: Autorender::UploadCreateFromURLParams::Tags::Variants,
|
|
77
83
|
webhook_url: String,
|
|
78
84
|
request_options: Autorender::RequestOptions::OrHash
|
|
79
85
|
).returns(T.attached_class)
|
|
@@ -90,7 +96,7 @@ module Autorender
|
|
|
90
96
|
metadata: nil,
|
|
91
97
|
# true/false to append random suffix
|
|
92
98
|
random_prefix: nil,
|
|
93
|
-
#
|
|
99
|
+
# Tags array or comma-separated string
|
|
94
100
|
tags: nil,
|
|
95
101
|
webhook_url: nil,
|
|
96
102
|
request_options: {}
|
|
@@ -106,7 +112,7 @@ module Autorender
|
|
|
106
112
|
folder: String,
|
|
107
113
|
metadata: String,
|
|
108
114
|
random_prefix: String,
|
|
109
|
-
tags:
|
|
115
|
+
tags: Autorender::UploadCreateFromURLParams::Tags::Variants,
|
|
110
116
|
webhook_url: String,
|
|
111
117
|
request_options: Autorender::RequestOptions
|
|
112
118
|
}
|
|
@@ -114,6 +120,27 @@ module Autorender
|
|
|
114
120
|
end
|
|
115
121
|
def to_hash
|
|
116
122
|
end
|
|
123
|
+
|
|
124
|
+
# Tags array or comma-separated string
|
|
125
|
+
module Tags
|
|
126
|
+
extend Autorender::Internal::Type::Union
|
|
127
|
+
|
|
128
|
+
Variants = T.type_alias { T.any(T::Array[String], String) }
|
|
129
|
+
|
|
130
|
+
sig do
|
|
131
|
+
override.returns(
|
|
132
|
+
T::Array[Autorender::UploadCreateFromURLParams::Tags::Variants]
|
|
133
|
+
)
|
|
134
|
+
end
|
|
135
|
+
def self.variants
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
StringArray =
|
|
139
|
+
T.let(
|
|
140
|
+
Autorender::Internal::Type::ArrayOf[String],
|
|
141
|
+
Autorender::Internal::Type::Converter
|
|
142
|
+
)
|
|
143
|
+
end
|
|
117
144
|
end
|
|
118
145
|
end
|
|
119
146
|
end
|
|
@@ -23,7 +23,11 @@ module Autorender
|
|
|
23
23
|
search: String,
|
|
24
24
|
sort: Autorender::FileListParams::Sort::OrSymbol,
|
|
25
25
|
request_options: Autorender::RequestOptions::OrHash
|
|
26
|
-
).returns(
|
|
26
|
+
).returns(
|
|
27
|
+
Autorender::Internal::PagePagination[
|
|
28
|
+
Autorender::Models::FileListResponse
|
|
29
|
+
]
|
|
30
|
+
)
|
|
27
31
|
end
|
|
28
32
|
def list(
|
|
29
33
|
# Filter by folder number
|
|
@@ -51,7 +51,7 @@ module Autorender
|
|
|
51
51
|
folder: String,
|
|
52
52
|
metadata: String,
|
|
53
53
|
random_prefix: String,
|
|
54
|
-
tags:
|
|
54
|
+
tags: Autorender::UploadCreateFromURLParams::Tags::Variants,
|
|
55
55
|
webhook_url: String,
|
|
56
56
|
request_options: Autorender::RequestOptions::OrHash
|
|
57
57
|
).returns(Autorender::Models::UploadCreateFromURLResponse)
|
|
@@ -68,7 +68,7 @@ module Autorender
|
|
|
68
68
|
metadata: nil,
|
|
69
69
|
# true/false to append random suffix
|
|
70
70
|
random_prefix: nil,
|
|
71
|
-
#
|
|
71
|
+
# Tags array or comma-separated string
|
|
72
72
|
tags: nil,
|
|
73
73
|
webhook_url: nil,
|
|
74
74
|
request_options: {}
|
|
@@ -3,15 +3,26 @@ module Autorender
|
|
|
3
3
|
class PagePagination[Elem]
|
|
4
4
|
include Autorender::Internal::Type::BasePage[Elem]
|
|
5
5
|
|
|
6
|
-
attr_accessor
|
|
6
|
+
attr_accessor files: ::Array[Elem]?
|
|
7
7
|
|
|
8
|
-
attr_accessor
|
|
8
|
+
attr_accessor meta: Meta
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
def inspect: -> String
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
type meta = { has_next: bool, page: Integer }
|
|
13
|
+
class Meta < Autorender::Internal::Type::BaseModel
|
|
14
|
+
attr_reader has_next: bool?
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
def has_next=: (bool) -> bool
|
|
17
|
+
|
|
18
|
+
attr_reader page: Integer?
|
|
19
|
+
|
|
20
|
+
def page=: (Integer) -> Integer
|
|
21
|
+
|
|
22
|
+
def initialize: (?has_next: bool, ?page: Integer) -> void
|
|
23
|
+
|
|
24
|
+
def to_hash: -> { has_next: bool, page: Integer }
|
|
25
|
+
end
|
|
15
26
|
end
|
|
16
27
|
end
|
|
17
28
|
end
|