nexus-invision 1.10.1 → 1.10.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bf10a8da5ec2072130dbedb0d765bcbc9c24acd4400f06ab97e5bf63fbae1d76
4
- data.tar.gz: 924f770f88d420759088e00832205ff55d687b41c4dc1afb8a9064681a5c1fde
3
+ metadata.gz: 6fbcb3cb66d480ad35a8b1098b2304280ec7335904dfcfd23678354a1223138e
4
+ data.tar.gz: d79352c041faaf55387bf1a0dd2ba4beb81d6a524bfd88d133ce65faa86d239e
5
5
  SHA512:
6
- metadata.gz: b421b755ce1379a81ea8ee231d9b1e2a4374edb073d32066f2395e187da6dc512448183ae967adf3cea7f92c8f596db5c17b403ab30705df7f7b17df68639c8f
7
- data.tar.gz: 79e1642bdab18d0a217d2d35dd4adfee945377acfce144f5ca2ee1491bac2ba5096866772e919f4452c131038470d50072e57fff2a43a666745f34a0889d9d9b
6
+ metadata.gz: af3dcb05992c5e2e16d1b7fa773fea94eef6b55ed7f747b86b1fe31cfb7f20c7a64868e9ec78663e8484931399c1188c4bb8477954eb59003958c43d3f84ae35
7
+ data.tar.gz: de36438d81f7b99a97c0c6b78dad40a1851bae56cd8dac25f27ca74e5dcd0bb14732c6404c1d00c710c059e8340490c4da4e895b150f72bc8f15b3e9e85bdb5f
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,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.from_hash(response.body)
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 { |result| Resources::Topic.from_hash(result) },
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.from_hash(response.body)
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.from_hash(response.body)
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.from_hash(response.body)
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.from_hash(response.body)
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.from_hash(response.body)
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.from_hash(response.body)
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.from_hash(response.body)
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.from_hash(response.body)
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.from_hash(response.body)
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.from_hash(response.body)
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.from_hash(response.body)
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.from_hash(response.body)
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.from_hash(response.body)
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