nexus-invision 1.10.1 → 1.10.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/Gemfile.lock +2 -0
- data/lib/nexus/invision/client.rb +30 -21
- data/lib/nexus/invision/resources/ensure_member.rb +12 -0
- data/lib/nexus/invision/resources/field.rb +31 -0
- data/lib/nexus/invision/resources/field_group.rb +32 -0
- data/lib/nexus/invision/resources/forum.rb +43 -0
- data/lib/nexus/invision/resources/group.rb +12 -0
- data/lib/nexus/invision/resources/login_link.rb +11 -0
- data/lib/nexus/invision/resources/member.rb +41 -1
- data/lib/nexus/invision/resources/poll.rb +38 -0
- data/lib/nexus/invision/resources/post.rb +21 -1
- data/lib/nexus/invision/resources/question.rb +32 -0
- data/lib/nexus/invision/resources/rank.rb +33 -0
- data/lib/nexus/invision/resources/topic.rb +37 -0
- data/lib/nexus/invision/resources/unread_count.rb +11 -0
- data/lib/nexus/invision/resources/user.rb +11 -0
- data/lib/nexus/invision/resources/warning.rb +11 -0
- data/lib/nexus/invision/version.rb +2 -2
- data/sorbet/rbi/gems/vcr@6.2.0.rbi +3036 -0
- metadata +10 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6fbcb3cb66d480ad35a8b1098b2304280ec7335904dfcfd23678354a1223138e
|
4
|
+
data.tar.gz: d79352c041faaf55387bf1a0dd2ba4beb81d6a524bfd88d133ce65faa86d239e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af3dcb05992c5e2e16d1b7fa773fea94eef6b55ed7f747b86b1fe31cfb7f20c7a64868e9ec78663e8484931399c1188c4bb8477954eb59003958c43d3f84ae35
|
7
|
+
data.tar.gz: de36438d81f7b99a97c0c6b78dad40a1851bae56cd8dac25f27ca74e5dcd0bb14732c6404c1d00c710c059e8340490c4da4e895b150f72bc8f15b3e9e85bdb5f
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -87,6 +87,7 @@ GEM
|
|
87
87
|
yard-sorbet
|
88
88
|
thor (1.3.0)
|
89
89
|
unicode-display_width (2.5.0)
|
90
|
+
vcr (6.2.0)
|
90
91
|
yard (0.9.34)
|
91
92
|
yard-sorbet (0.8.1)
|
92
93
|
sorbet-runtime (>= 0.5)
|
@@ -105,6 +106,7 @@ DEPENDENCIES
|
|
105
106
|
sorbet
|
106
107
|
sorbet-runtime
|
107
108
|
tapioca
|
109
|
+
vcr
|
108
110
|
|
109
111
|
BUNDLED WITH
|
110
112
|
2.4.13
|
@@ -2,6 +2,9 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
require "faraday"
|
5
|
+
require "sorbet-runtime"
|
6
|
+
require "uri"
|
7
|
+
|
5
8
|
require "nexus/invision/client_interface"
|
6
9
|
require "nexus/invision/errors/bad_request"
|
7
10
|
require "nexus/invision/errors/unexpected_response"
|
@@ -12,23 +15,27 @@ require "nexus/invision/requests/create_member_warning"
|
|
12
15
|
require "nexus/invision/requests/create_message"
|
13
16
|
require "nexus/invision/requests/delete_member"
|
14
17
|
require "nexus/invision/requests/edit_member"
|
15
|
-
require "nexus/invision/requests/list_forum_topics"
|
16
|
-
require "nexus/invision/requests/remove_member_from_secondary_group"
|
17
18
|
require "nexus/invision/requests/edit_member_primary_group"
|
18
19
|
require "nexus/invision/requests/ensure_member"
|
20
|
+
require "nexus/invision/requests/list_forum_topics"
|
21
|
+
require "nexus/invision/requests/remove_member_from_secondary_group"
|
19
22
|
require "nexus/invision/requests/unread_count"
|
23
|
+
require "nexus/invision/resources/ensure_member"
|
24
|
+
require "nexus/invision/resources/field"
|
25
|
+
require "nexus/invision/resources/field_group"
|
26
|
+
require "nexus/invision/resources/forum"
|
20
27
|
require "nexus/invision/resources/group"
|
21
28
|
require "nexus/invision/resources/login_link"
|
22
29
|
require "nexus/invision/resources/member"
|
23
30
|
require "nexus/invision/resources/page"
|
31
|
+
require "nexus/invision/resources/poll"
|
24
32
|
require "nexus/invision/resources/post"
|
33
|
+
require "nexus/invision/resources/question"
|
34
|
+
require "nexus/invision/resources/rank"
|
25
35
|
require "nexus/invision/resources/topic"
|
36
|
+
require "nexus/invision/resources/unread_count"
|
26
37
|
require "nexus/invision/resources/user"
|
27
38
|
require "nexus/invision/resources/warning"
|
28
|
-
require "nexus/invision/resources/ensure_member"
|
29
|
-
require "nexus/invision/resources/unread_count"
|
30
|
-
require "sorbet-runtime"
|
31
|
-
require "uri"
|
32
39
|
|
33
40
|
module Nexus
|
34
41
|
module Invision
|
@@ -96,7 +103,7 @@ module Nexus
|
|
96
103
|
endpoint: URI("forums/posts/#{post_id}"),
|
97
104
|
)
|
98
105
|
|
99
|
-
Resources::Post.
|
106
|
+
Resources::Post.from_response(response.body)
|
100
107
|
end
|
101
108
|
|
102
109
|
sig { override.params(request: Requests::ListForumTopics).returns(Resources::Page[Resources::Topic]) }
|
@@ -114,7 +121,9 @@ module Nexus
|
|
114
121
|
per_page: body.fetch("perPage"),
|
115
122
|
total_results: body.fetch("totalResults"),
|
116
123
|
total_pages: body.fetch("totalPages"),
|
117
|
-
results: body.fetch("results").map
|
124
|
+
results: body.fetch("results").map do |result|
|
125
|
+
Resources::Topic.from_response(result)
|
126
|
+
end,
|
118
127
|
)
|
119
128
|
end
|
120
129
|
|
@@ -126,7 +135,7 @@ module Nexus
|
|
126
135
|
params: request.serialize,
|
127
136
|
)
|
128
137
|
|
129
|
-
Resources::Topic.
|
138
|
+
Resources::Topic.from_response(response.body)
|
130
139
|
end
|
131
140
|
|
132
141
|
sig { override.params(request: Requests::CreateForumPost).returns(Resources::Post) }
|
@@ -137,7 +146,7 @@ module Nexus
|
|
137
146
|
params: request.serialize,
|
138
147
|
)
|
139
148
|
|
140
|
-
Resources::Post.
|
149
|
+
Resources::Post.from_response(response.body)
|
141
150
|
end
|
142
151
|
|
143
152
|
sig { override.params(nexusmods_member_id: Integer).returns(Resources::LoginLink) }
|
@@ -147,7 +156,7 @@ module Nexus
|
|
147
156
|
endpoint: URI("core/loginlinks/#{nexusmods_member_id}"),
|
148
157
|
)
|
149
158
|
|
150
|
-
Resources::LoginLink.
|
159
|
+
Resources::LoginLink.from_response(response.body)
|
151
160
|
end
|
152
161
|
|
153
162
|
sig { override.params(nexusmods_member_id: Integer).returns(Resources::Member) }
|
@@ -157,7 +166,7 @@ module Nexus
|
|
157
166
|
endpoint: URI("core/members/#{nexusmods_member_id}"),
|
158
167
|
)
|
159
168
|
|
160
|
-
Resources::Member.
|
169
|
+
Resources::Member.from_response(response.body)
|
161
170
|
end
|
162
171
|
|
163
172
|
sig { override.params(request: Requests::EnsureMember).returns(Resources::EnsureMember) }
|
@@ -168,7 +177,7 @@ module Nexus
|
|
168
177
|
params: request.serialize.except("id"),
|
169
178
|
)
|
170
179
|
|
171
|
-
Resources::EnsureMember.
|
180
|
+
Resources::EnsureMember.from_response(response.body)
|
172
181
|
end
|
173
182
|
|
174
183
|
sig { override.params(request: Requests::CreateMessage).void }
|
@@ -187,7 +196,7 @@ module Nexus
|
|
187
196
|
endpoint: URI("core/unreadcount/#{request.id}"),
|
188
197
|
)
|
189
198
|
|
190
|
-
Resources::UnreadCount.
|
199
|
+
Resources::UnreadCount.from_response(response.body)
|
191
200
|
end
|
192
201
|
|
193
202
|
sig { override.params(request: Requests::EditMemberPrimaryGroup).returns(Resources::Member) }
|
@@ -197,7 +206,7 @@ module Nexus
|
|
197
206
|
endpoint: URI("core/members/#{request.member_id}"),
|
198
207
|
params: request.serialize.except("member_id"),
|
199
208
|
)
|
200
|
-
Resources::Member.
|
209
|
+
Resources::Member.from_response(response.body)
|
201
210
|
end
|
202
211
|
|
203
212
|
sig { override.params(request: Requests::AddMemberToSecondaryGroup).returns(Resources::User) }
|
@@ -207,7 +216,7 @@ module Nexus
|
|
207
216
|
endpoint: URI("core/members/#{request.member_id}/secgroup/#{request.group_id}"),
|
208
217
|
)
|
209
218
|
|
210
|
-
Resources::User.
|
219
|
+
Resources::User.from_response(response.body)
|
211
220
|
end
|
212
221
|
|
213
222
|
sig { override.params(request: Requests::RemoveMemberFromSecondaryGroup).returns(Resources::User) }
|
@@ -217,7 +226,7 @@ module Nexus
|
|
217
226
|
endpoint: URI("core/members/#{request.member_id}/secgroup/#{request.group_id}"),
|
218
227
|
)
|
219
228
|
|
220
|
-
Resources::User.
|
229
|
+
Resources::User.from_response(response.body)
|
221
230
|
end
|
222
231
|
|
223
232
|
sig { override.params(request: Requests::CreateMemberWarning).returns(Resources::Warning) }
|
@@ -228,7 +237,7 @@ module Nexus
|
|
228
237
|
params: request.serialize.except("member_id"),
|
229
238
|
)
|
230
239
|
|
231
|
-
Resources::Warning.
|
240
|
+
Resources::Warning.from_response(response.body)
|
232
241
|
end
|
233
242
|
|
234
243
|
sig { override.params(member_id: Integer).returns(Resources::User) }
|
@@ -238,7 +247,7 @@ module Nexus
|
|
238
247
|
endpoint: URI("core/bans/#{member_id}"),
|
239
248
|
)
|
240
249
|
|
241
|
-
Resources::User.
|
250
|
+
Resources::User.from_response(response.body)
|
242
251
|
end
|
243
252
|
|
244
253
|
sig { override.params(member_id: Integer).returns(Resources::User) }
|
@@ -248,7 +257,7 @@ module Nexus
|
|
248
257
|
endpoint: URI("core/bans/#{member_id}"),
|
249
258
|
)
|
250
259
|
|
251
|
-
Resources::User.
|
260
|
+
Resources::User.from_response(response.body)
|
252
261
|
end
|
253
262
|
|
254
263
|
sig { override.params(request: Requests::DeleteMember).void }
|
@@ -269,7 +278,7 @@ module Nexus
|
|
269
278
|
endpoint: URI("core/members/#{request.member_id}"),
|
270
279
|
params: request.serialize.except("member_id"),
|
271
280
|
)
|
272
|
-
Resources::User.
|
281
|
+
Resources::User.from_response(response.body)
|
273
282
|
end
|
274
283
|
|
275
284
|
private
|
@@ -12,6 +12,18 @@ module Nexus
|
|
12
12
|
|
13
13
|
const :id, Integer
|
14
14
|
const :created, T::Boolean
|
15
|
+
|
16
|
+
class << self
|
17
|
+
extend T::Sig
|
18
|
+
|
19
|
+
sig { params(response: T::Hash[String, T.untyped]).returns(EnsureMember) }
|
20
|
+
def from_response(response)
|
21
|
+
EnsureMember.new(
|
22
|
+
id: response["id"],
|
23
|
+
created: response["created"],
|
24
|
+
)
|
25
|
+
end
|
26
|
+
end
|
15
27
|
end
|
16
28
|
end
|
17
29
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "sorbet-runtime"
|
5
|
+
|
6
|
+
require "nexus/invision/value_object"
|
7
|
+
|
8
|
+
module Nexus
|
9
|
+
module Invision
|
10
|
+
module Resources
|
11
|
+
class Field < T::Struct
|
12
|
+
include ValueObject
|
13
|
+
|
14
|
+
const :name, String
|
15
|
+
const :value, String
|
16
|
+
|
17
|
+
class << self
|
18
|
+
extend T::Sig
|
19
|
+
|
20
|
+
sig { params(response: T::Hash[String, T.untyped]).returns(Field) }
|
21
|
+
def from_response(response)
|
22
|
+
Field.new(
|
23
|
+
name: response["name"],
|
24
|
+
value: response["value"],
|
25
|
+
)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "sorbet-runtime"
|
5
|
+
|
6
|
+
require "nexus/invision/value_object"
|
7
|
+
require "nexus/invision/resources/field"
|
8
|
+
|
9
|
+
module Nexus
|
10
|
+
module Invision
|
11
|
+
module Resources
|
12
|
+
class FieldGroup < T::Struct
|
13
|
+
include ValueObject
|
14
|
+
|
15
|
+
const :name, Integer
|
16
|
+
const :fields, T::Hash[String, Field]
|
17
|
+
|
18
|
+
class << self
|
19
|
+
extend T::Sig
|
20
|
+
|
21
|
+
sig { params(response: T::Hash[String, T.untyped]).returns(FieldGroup) }
|
22
|
+
def from_response(response)
|
23
|
+
FieldGroup.new(
|
24
|
+
name: response["name"],
|
25
|
+
fields: response["fields"].map { |f| Field.from_response(f) },
|
26
|
+
)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "sorbet-runtime"
|
5
|
+
|
6
|
+
require "nexus/invision/value_object"
|
7
|
+
|
8
|
+
module Nexus
|
9
|
+
module Invision
|
10
|
+
module Resources
|
11
|
+
class Forum < T::Struct
|
12
|
+
include ValueObject
|
13
|
+
|
14
|
+
const :id, Integer
|
15
|
+
const :name, String
|
16
|
+
const :path, String
|
17
|
+
const :type, String
|
18
|
+
const :topics, Integer
|
19
|
+
const :url, String
|
20
|
+
const :parentId, T.nilable(Integer)
|
21
|
+
const :permissions, T.nilable(T::Hash[T.untyped, T.untyped])
|
22
|
+
|
23
|
+
class << self
|
24
|
+
extend T::Sig
|
25
|
+
|
26
|
+
sig { params(response: T::Hash[String, T.untyped]).returns(Forum) }
|
27
|
+
def from_response(response)
|
28
|
+
Forum.new(
|
29
|
+
id: response["id"],
|
30
|
+
name: response["name"],
|
31
|
+
path: response["path"],
|
32
|
+
type: response["type"],
|
33
|
+
topics: response["topics"],
|
34
|
+
url: response["url"],
|
35
|
+
parentId: response["parentId"],
|
36
|
+
permissions: response["permissions"],
|
37
|
+
)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -12,6 +12,18 @@ module Nexus
|
|
12
12
|
|
13
13
|
const :id, Integer
|
14
14
|
const :name, String
|
15
|
+
|
16
|
+
class << self
|
17
|
+
extend T::Sig
|
18
|
+
|
19
|
+
sig { params(response: T::Hash[String, T.untyped]).returns(Group) }
|
20
|
+
def from_response(response)
|
21
|
+
Group.new(
|
22
|
+
id: response["id"],
|
23
|
+
name: response["name"],
|
24
|
+
)
|
25
|
+
end
|
26
|
+
end
|
15
27
|
end
|
16
28
|
end
|
17
29
|
end
|
@@ -11,6 +11,17 @@ module Nexus
|
|
11
11
|
include ValueObject
|
12
12
|
|
13
13
|
const :id, Integer
|
14
|
+
|
15
|
+
class << self
|
16
|
+
extend T::Sig
|
17
|
+
|
18
|
+
sig { params(response: T::Hash[String, T.untyped]).returns(LoginLink) }
|
19
|
+
def from_response(response)
|
20
|
+
LoginLink.new(
|
21
|
+
id: response["id"],
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
14
25
|
end
|
15
26
|
end
|
16
27
|
end
|
@@ -1,9 +1,12 @@
|
|
1
1
|
# typed: strict
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require "nexus/invision/value_object"
|
5
4
|
require "sorbet-runtime"
|
6
5
|
|
6
|
+
require "nexus/invision/value_object"
|
7
|
+
require "nexus/invision/resources/rank"
|
8
|
+
require "nexus/invision/resources/field_group"
|
9
|
+
|
7
10
|
module Nexus
|
8
11
|
module Invision
|
9
12
|
module Resources
|
@@ -12,7 +15,44 @@ module Nexus
|
|
12
15
|
include ValueObject
|
13
16
|
|
14
17
|
const :id, Integer
|
18
|
+
# const :name, String
|
19
|
+
# const :title, T.nilable(String)
|
20
|
+
# const :timeZone, String
|
21
|
+
# const :formattedName, String
|
15
22
|
const :primaryGroup, Group
|
23
|
+
# const :secondaryGroups, T::Array[Group]
|
24
|
+
# const :email, String
|
25
|
+
# const :joined, Time
|
26
|
+
# const :registrationIpAddress, String
|
27
|
+
# const :warningPoints, Integer
|
28
|
+
# const :reputationPoints, Integer
|
29
|
+
# const :photoUrl, String
|
30
|
+
# const :photoUrlIsDefault, T::Boolean
|
31
|
+
# const :coverPhotoUrl, String
|
32
|
+
# const :profileUrl, T.nilable(String)
|
33
|
+
# const :validating, T::Boolean
|
34
|
+
# const :posts, Integer
|
35
|
+
# const :lastActivity, Time
|
36
|
+
# const :lastVisit, Time
|
37
|
+
# const :birthday, Date
|
38
|
+
# const :profileViews, Integer
|
39
|
+
# const :customFields, T::Hash[String, FieldGroup]
|
40
|
+
# const :rank, Rank
|
41
|
+
# const :achievements_points, Integer
|
42
|
+
# const :allowAdminEmails, T::Boolean
|
43
|
+
# const :completed, T::Boolean
|
44
|
+
|
45
|
+
class << self
|
46
|
+
extend T::Sig
|
47
|
+
|
48
|
+
sig { params(response: T::Hash[String, T.untyped]).returns(Member) }
|
49
|
+
def from_response(response)
|
50
|
+
Member.new(
|
51
|
+
id: response["id"],
|
52
|
+
primaryGroup: Group.from_response(response["primaryGroup"]),
|
53
|
+
)
|
54
|
+
end
|
55
|
+
end
|
16
56
|
end
|
17
57
|
end
|
18
58
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "sorbet-runtime"
|
5
|
+
|
6
|
+
require "nexus/invision/resources/question"
|
7
|
+
require "nexus/invision/value_object"
|
8
|
+
|
9
|
+
module Nexus
|
10
|
+
module Invision
|
11
|
+
module Resources
|
12
|
+
# Member is a User with additional information about their membership.
|
13
|
+
class Poll < T::Struct
|
14
|
+
include ValueObject
|
15
|
+
|
16
|
+
const :id, Integer
|
17
|
+
# const :title, String
|
18
|
+
# const :start_date, DateTime
|
19
|
+
# const :closed, T::Boolean
|
20
|
+
# const :closedDate, String
|
21
|
+
# const :public, T::Boolean
|
22
|
+
# const :votes, Integer
|
23
|
+
# const :questions, T::Array[Question]
|
24
|
+
|
25
|
+
class << self
|
26
|
+
extend T::Sig
|
27
|
+
|
28
|
+
sig { params(response: T::Hash[String, T.untyped]).returns(Poll) }
|
29
|
+
def from_response(response)
|
30
|
+
Poll.new(
|
31
|
+
id: response["id"],
|
32
|
+
)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -1,9 +1,11 @@
|
|
1
1
|
# typed: strict
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require "nexus/invision/value_object"
|
5
4
|
require "sorbet-runtime"
|
6
5
|
|
6
|
+
require "nexus/invision/value_object"
|
7
|
+
require "nexus/invision/resources/member"
|
8
|
+
|
7
9
|
module Nexus
|
8
10
|
module Invision
|
9
11
|
module Resources
|
@@ -12,6 +14,24 @@ module Nexus
|
|
12
14
|
|
13
15
|
const :id, Integer
|
14
16
|
const :item_id, Integer
|
17
|
+
# const :author, Member
|
18
|
+
# const :date, Time
|
19
|
+
# const :content, String
|
20
|
+
# const :hidden, T::Boolean
|
21
|
+
# const :url, String
|
22
|
+
# const :reactions, T::Hash[String, T::Array[String]]
|
23
|
+
|
24
|
+
class << self
|
25
|
+
extend T::Sig
|
26
|
+
|
27
|
+
sig { params(response: T::Hash[String, T.untyped]).returns(Post) }
|
28
|
+
def from_response(response)
|
29
|
+
Post.new(
|
30
|
+
id: response["id"],
|
31
|
+
item_id: response["item_id"],
|
32
|
+
)
|
33
|
+
end
|
34
|
+
end
|
15
35
|
end
|
16
36
|
end
|
17
37
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "sorbet-runtime"
|
5
|
+
|
6
|
+
require "nexus/invision/value_object"
|
7
|
+
|
8
|
+
module Nexus
|
9
|
+
module Invision
|
10
|
+
module Resources
|
11
|
+
# Member is a User with additional information about their membership.
|
12
|
+
class Question < T::Struct
|
13
|
+
include ValueObject
|
14
|
+
|
15
|
+
const :question, String
|
16
|
+
const :options, T::Hash[String, T.untyped]
|
17
|
+
|
18
|
+
class << self
|
19
|
+
extend T::Sig
|
20
|
+
|
21
|
+
sig { params(response: T::Hash[String, T.untyped]).returns(Question) }
|
22
|
+
def from_response(response)
|
23
|
+
Question.new(
|
24
|
+
question: response["question"],
|
25
|
+
options: response["options"],
|
26
|
+
)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "sorbet-runtime"
|
5
|
+
|
6
|
+
module Nexus
|
7
|
+
module Invision
|
8
|
+
module Resources
|
9
|
+
class Rank < T::Struct
|
10
|
+
include ValueObject
|
11
|
+
|
12
|
+
const :id, Integer
|
13
|
+
const :name, String
|
14
|
+
const :icon, String
|
15
|
+
const :points, Integer
|
16
|
+
|
17
|
+
class << self
|
18
|
+
extend T::Sig
|
19
|
+
|
20
|
+
sig { params(response: T::Hash[String, T.untyped]).returns(Rank) }
|
21
|
+
def from_response(response)
|
22
|
+
Rank.new(
|
23
|
+
id: response["id"],
|
24
|
+
name: response["name"],
|
25
|
+
icon: response["icon"],
|
26
|
+
points: response["points"],
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -2,6 +2,9 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
require "nexus/invision/value_object"
|
5
|
+
require "nexus/invision/resources/forum"
|
6
|
+
require "nexus/invision/resources/post"
|
7
|
+
require "nexus/invision/resources/poll"
|
5
8
|
require "sorbet-runtime"
|
6
9
|
|
7
10
|
module Nexus
|
@@ -12,6 +15,40 @@ module Nexus
|
|
12
15
|
|
13
16
|
const :id, Integer
|
14
17
|
const :title, String
|
18
|
+
# const :forum, Forum
|
19
|
+
# const :posts, Integer
|
20
|
+
# const :views, Integer
|
21
|
+
# const :prefix, String
|
22
|
+
# const :tags, T::Array[String]
|
23
|
+
const :first_post, T.nilable(Post), default: nil
|
24
|
+
const :last_post, T.nilable(Post), default: nil
|
25
|
+
# const :best_answer, T.nilable(Post)
|
26
|
+
# const :locked, T::Boolean
|
27
|
+
# const :hidden, T::Boolean
|
28
|
+
# const :pinned, T::Boolean
|
29
|
+
# const :featured, T::Boolean
|
30
|
+
# const :archived, T::Boolean
|
31
|
+
# const :poll, Poll
|
32
|
+
# const :url, String
|
33
|
+
# const :rating, Float
|
34
|
+
|
35
|
+
class << self
|
36
|
+
extend T::Sig
|
37
|
+
|
38
|
+
sig { params(response: T::Hash[String, T.untyped]).returns(Topic) }
|
39
|
+
def from_response(response)
|
40
|
+
Resources::Topic.new(
|
41
|
+
id: response["id"],
|
42
|
+
title: response["title"],
|
43
|
+
first_post: response["firstPost"]&.then do |fp|
|
44
|
+
Resources::Post.from_response(fp)
|
45
|
+
end,
|
46
|
+
last_post: response["lastPost"]&.then do |lp|
|
47
|
+
Resources::Post.from_response(lp)
|
48
|
+
end,
|
49
|
+
)
|
50
|
+
end
|
51
|
+
end
|
15
52
|
end
|
16
53
|
end
|
17
54
|
end
|
@@ -11,6 +11,17 @@ module Nexus
|
|
11
11
|
include ValueObject
|
12
12
|
|
13
13
|
const :count, Integer
|
14
|
+
|
15
|
+
class << self
|
16
|
+
extend T::Sig
|
17
|
+
|
18
|
+
sig { params(response: T::Hash[String, T.untyped]).returns(UnreadCount) }
|
19
|
+
def from_response(response)
|
20
|
+
UnreadCount.new(
|
21
|
+
count: response["count"],
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
14
25
|
end
|
15
26
|
end
|
16
27
|
end
|
@@ -11,6 +11,17 @@ module Nexus
|
|
11
11
|
include ValueObject
|
12
12
|
|
13
13
|
const :id, Integer
|
14
|
+
|
15
|
+
class << self
|
16
|
+
extend T::Sig
|
17
|
+
|
18
|
+
sig { params(response: T::Hash[String, T.untyped]).returns(User) }
|
19
|
+
def from_response(response)
|
20
|
+
User.new(
|
21
|
+
id: Integer(response["id"]),
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
14
25
|
end
|
15
26
|
end
|
16
27
|
end
|
@@ -11,6 +11,17 @@ module Nexus
|
|
11
11
|
include ValueObject
|
12
12
|
|
13
13
|
const :id, Integer
|
14
|
+
|
15
|
+
class << self
|
16
|
+
extend T::Sig
|
17
|
+
|
18
|
+
sig { params(response: T::Hash[String, T.untyped]).returns(Warning) }
|
19
|
+
def from_response(response)
|
20
|
+
Warning.new(
|
21
|
+
id: response["id"],
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
14
25
|
end
|
15
26
|
end
|
16
27
|
end
|