nexus-invision 1.10.1 → 1.11.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bf10a8da5ec2072130dbedb0d765bcbc9c24acd4400f06ab97e5bf63fbae1d76
4
- data.tar.gz: 924f770f88d420759088e00832205ff55d687b41c4dc1afb8a9064681a5c1fde
3
+ metadata.gz: c0b337b979579f1c60c832c5c26a537d53677e6f656af941079a083f3916849d
4
+ data.tar.gz: a845ba2c6b4ac3f1513ae9da46098893e64cd04e506c04435ed0ca52d9c0cc8f
5
5
  SHA512:
6
- metadata.gz: b421b755ce1379a81ea8ee231d9b1e2a4374edb073d32066f2395e187da6dc512448183ae967adf3cea7f92c8f596db5c17b403ab30705df7f7b17df68639c8f
7
- data.tar.gz: 79e1642bdab18d0a217d2d35dd4adfee945377acfce144f5ca2ee1491bac2ba5096866772e919f4452c131038470d50072e57fff2a43a666745f34a0889d9d9b
6
+ metadata.gz: c143cb42c3a74a32bafaa18d48eb7290e6509c63b650873d3774942561c0172a2e112c7bb9c07ee7dec48997e2df57f60afc4d2707cd187f2d18ace388c8fa31
7
+ data.tar.gz: 4b96b0d6bc5e1b4a55cccc0609354e9f7ea89f6da2ea0582b201d9009ddc04da78e12ec5b72f2242b415b4ab07293033dfceeba0e7ff56d09a64193427f21da0
data/Gemfile CHANGED
@@ -18,4 +18,5 @@ end
18
18
 
19
19
  group :test do
20
20
  gem "rspec", "~> 3.12"
21
+ gem "vcr"
21
22
  end
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,25 @@ 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"
19
- require "nexus/invision/requests/unread_count"
20
+ require "nexus/invision/requests/list_forum_topics"
21
+ require "nexus/invision/requests/remove_member_from_secondary_group"
22
+ require "nexus/invision/resources/ensure_member"
23
+ require "nexus/invision/resources/field"
24
+ require "nexus/invision/resources/field_group"
25
+ require "nexus/invision/resources/forum"
20
26
  require "nexus/invision/resources/group"
21
27
  require "nexus/invision/resources/login_link"
22
28
  require "nexus/invision/resources/member"
23
29
  require "nexus/invision/resources/page"
30
+ require "nexus/invision/resources/poll"
24
31
  require "nexus/invision/resources/post"
32
+ require "nexus/invision/resources/question"
33
+ require "nexus/invision/resources/rank"
25
34
  require "nexus/invision/resources/topic"
26
35
  require "nexus/invision/resources/user"
27
36
  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
37
 
33
38
  module Nexus
34
39
  module Invision
@@ -96,7 +101,7 @@ module Nexus
96
101
  endpoint: URI("forums/posts/#{post_id}"),
97
102
  )
98
103
 
99
- Resources::Post.from_hash(response.body)
104
+ Resources::Post.from_response(response.body)
100
105
  end
101
106
 
102
107
  sig { override.params(request: Requests::ListForumTopics).returns(Resources::Page[Resources::Topic]) }
@@ -114,7 +119,9 @@ module Nexus
114
119
  per_page: body.fetch("perPage"),
115
120
  total_results: body.fetch("totalResults"),
116
121
  total_pages: body.fetch("totalPages"),
117
- results: body.fetch("results").map { |result| Resources::Topic.from_hash(result) },
122
+ results: body.fetch("results").map do |result|
123
+ Resources::Topic.from_response(result)
124
+ end,
118
125
  )
119
126
  end
120
127
 
@@ -126,7 +133,7 @@ module Nexus
126
133
  params: request.serialize,
127
134
  )
128
135
 
129
- Resources::Topic.from_hash(response.body)
136
+ Resources::Topic.from_response(response.body)
130
137
  end
131
138
 
132
139
  sig { override.params(request: Requests::CreateForumPost).returns(Resources::Post) }
@@ -137,7 +144,7 @@ module Nexus
137
144
  params: request.serialize,
138
145
  )
139
146
 
140
- Resources::Post.from_hash(response.body)
147
+ Resources::Post.from_response(response.body)
141
148
  end
142
149
 
143
150
  sig { override.params(nexusmods_member_id: Integer).returns(Resources::LoginLink) }
@@ -147,7 +154,7 @@ module Nexus
147
154
  endpoint: URI("core/loginlinks/#{nexusmods_member_id}"),
148
155
  )
149
156
 
150
- Resources::LoginLink.from_hash(response.body)
157
+ Resources::LoginLink.from_response(response.body)
151
158
  end
152
159
 
153
160
  sig { override.params(nexusmods_member_id: Integer).returns(Resources::Member) }
@@ -157,7 +164,7 @@ module Nexus
157
164
  endpoint: URI("core/members/#{nexusmods_member_id}"),
158
165
  )
159
166
 
160
- Resources::Member.from_hash(response.body)
167
+ Resources::Member.from_response(response.body)
161
168
  end
162
169
 
163
170
  sig { override.params(request: Requests::EnsureMember).returns(Resources::EnsureMember) }
@@ -168,7 +175,7 @@ module Nexus
168
175
  params: request.serialize.except("id"),
169
176
  )
170
177
 
171
- Resources::EnsureMember.from_hash(response.body)
178
+ Resources::EnsureMember.from_response(response.body)
172
179
  end
173
180
 
174
181
  sig { override.params(request: Requests::CreateMessage).void }
@@ -180,16 +187,6 @@ module Nexus
180
187
  )
181
188
  end
182
189
 
183
- sig { override.params(request: Requests::UnreadCount).returns(Resources::UnreadCount) }
184
- def unread_count(request)
185
- response = request(
186
- http_method: HTTPMethod::GET,
187
- endpoint: URI("core/unreadcount/#{request.id}"),
188
- )
189
-
190
- Resources::UnreadCount.from_hash(response.body)
191
- end
192
-
193
190
  sig { override.params(request: Requests::EditMemberPrimaryGroup).returns(Resources::Member) }
194
191
  def edit_member_primary_group(request)
195
192
  response = request(
@@ -197,7 +194,7 @@ module Nexus
197
194
  endpoint: URI("core/members/#{request.member_id}"),
198
195
  params: request.serialize.except("member_id"),
199
196
  )
200
- Resources::Member.from_hash(response.body)
197
+ Resources::Member.from_response(response.body)
201
198
  end
202
199
 
203
200
  sig { override.params(request: Requests::AddMemberToSecondaryGroup).returns(Resources::User) }
@@ -207,7 +204,7 @@ module Nexus
207
204
  endpoint: URI("core/members/#{request.member_id}/secgroup/#{request.group_id}"),
208
205
  )
209
206
 
210
- Resources::User.from_hash(response.body)
207
+ Resources::User.from_response(response.body)
211
208
  end
212
209
 
213
210
  sig { override.params(request: Requests::RemoveMemberFromSecondaryGroup).returns(Resources::User) }
@@ -217,7 +214,7 @@ module Nexus
217
214
  endpoint: URI("core/members/#{request.member_id}/secgroup/#{request.group_id}"),
218
215
  )
219
216
 
220
- Resources::User.from_hash(response.body)
217
+ Resources::User.from_response(response.body)
221
218
  end
222
219
 
223
220
  sig { override.params(request: Requests::CreateMemberWarning).returns(Resources::Warning) }
@@ -228,7 +225,7 @@ module Nexus
228
225
  params: request.serialize.except("member_id"),
229
226
  )
230
227
 
231
- Resources::Warning.from_hash(response.body)
228
+ Resources::Warning.from_response(response.body)
232
229
  end
233
230
 
234
231
  sig { override.params(member_id: Integer).returns(Resources::User) }
@@ -238,7 +235,7 @@ module Nexus
238
235
  endpoint: URI("core/bans/#{member_id}"),
239
236
  )
240
237
 
241
- Resources::User.from_hash(response.body)
238
+ Resources::User.from_response(response.body)
242
239
  end
243
240
 
244
241
  sig { override.params(member_id: Integer).returns(Resources::User) }
@@ -248,7 +245,7 @@ module Nexus
248
245
  endpoint: URI("core/bans/#{member_id}"),
249
246
  )
250
247
 
251
- Resources::User.from_hash(response.body)
248
+ Resources::User.from_response(response.body)
252
249
  end
253
250
 
254
251
  sig { override.params(request: Requests::DeleteMember).void }
@@ -269,7 +266,7 @@ module Nexus
269
266
  endpoint: URI("core/members/#{request.member_id}"),
270
267
  params: request.serialize.except("member_id"),
271
268
  )
272
- Resources::User.from_hash(response.body)
269
+ Resources::User.from_response(response.body)
273
270
  end
274
271
 
275
272
  private
@@ -15,7 +15,6 @@ require "nexus/invision/requests/list_forum_topics"
15
15
  require "nexus/invision/requests/remove_member_from_secondary_group"
16
16
  require "nexus/invision/requests/edit_member_primary_group"
17
17
  require "nexus/invision/requests/ensure_member"
18
- require "nexus/invision/requests/unread_count"
19
18
  require "nexus/invision/resources/group"
20
19
  require "nexus/invision/resources/login_link"
21
20
  require "nexus/invision/resources/member"
@@ -25,7 +24,6 @@ require "nexus/invision/resources/topic"
25
24
  require "nexus/invision/resources/user"
26
25
  require "nexus/invision/resources/warning"
27
26
  require "nexus/invision/resources/ensure_member"
28
- require "nexus/invision/resources/unread_count"
29
27
  require "sorbet-runtime"
30
28
  require "uri"
31
29
 
@@ -66,9 +64,6 @@ module Nexus
66
64
  sig { abstract.params(request: Requests::CreateMessage).void }
67
65
  def create_message(request) end
68
66
 
69
- sig { abstract.params(request: Requests::UnreadCount).returns(Resources::UnreadCount) }
70
- def unread_count(request) end
71
-
72
67
  sig { abstract.params(request: Requests::EditMemberPrimaryGroup).returns(Resources::Member) }
73
68
  def edit_member_primary_group(request) end
74
69
 
@@ -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 :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