repltalk 0.0.3 → 0.0.4

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/queries.rb +231 -2
  3. data/lib/repltalk.rb +122 -23
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c1cda8e04a68e4e299b7f80da3003b8c1998ff344b64e6e2eb2e89189a93e038
4
- data.tar.gz: 075ad2f71c0ce004a543e074fc86d4d598340bf299a6d069320a961a8259c3ff
3
+ metadata.gz: 640639f4f0a1f4ab9ba6dab62ab76813e3b1aaab87083c584392dd981042f630
4
+ data.tar.gz: cacc2efc694130135eafa0ea768c696875a5c14ba4fad8d6fed42e67985f1da3
5
5
  SHA512:
6
- metadata.gz: 36c7e81f76f47241badb5ddea3364308c87c661b584dba55fdd8851d094648edeee2ab8df59db3267d0bb37b4e9727eb7d986b21693617e21f62c3162f5a2bbb
7
- data.tar.gz: a373b3ba08598f682f4ca70ab773ebafc343d7831d622a20edfd6c8067776db4d71022bae8a32c71120f6556c95f4637149ca0b738e37c1a2732e9d97af7dbc6
6
+ metadata.gz: 298f683ee539b0a13afc39d60abb1b3bde2b003aea988632109e5f8e33ce64932fe2db2ac7f3aeabceb00e1e1db9526adad5e221c5919a81b20827350f0faadc
7
+ data.tar.gz: 005e485bd1f425971fe02d654694b70282d6b8843d8acca964c7a26b454b3fc31a078e328ae072d06a6faffb12e9bc2168a67f14d958b6743ebc9a58fa4dac26
data/lib/queries.rb CHANGED
@@ -1,9 +1,238 @@
1
1
  class Queries
2
2
  def Queries.get_user
3
- "query userByUsername($username: String!) {\n user: userByUsername(username: $username) {\n id\n username\n fullName\n image\n url\n redirectToTeamDashboard\n ...ProfileHeaderUser\n __typename\n }\n}\n\nfragment ProfileHeaderUser on User {\n id\n fullName\n username\n image\n isLoggedIn\n bio\n karma\n isHacker\n roles {\n id\n name\n key\n tagline\n __typename\n }\n organization {\n id\n name\n __typename\n }\n languages {\n id\n key\n displayName\n tagline\n icon\n __typename\n }\n __typename\n}"
3
+ "query userByUsername($username: String!) {
4
+ user: userByUsername(username: $username) {
5
+ id
6
+ username
7
+ fullName
8
+ image
9
+ url
10
+ ...ProfileHeaderUser
11
+ __typename
12
+ }
13
+ }
14
+
15
+ fragment ProfileHeaderUser on User {
16
+ id
17
+ fullName
18
+ username
19
+ image
20
+ bio
21
+ karma
22
+ isHacker
23
+ roles {
24
+ id
25
+ name
26
+ key
27
+ tagline
28
+ __typename
29
+ }
30
+ organization {
31
+ id
32
+ name
33
+ __typename
34
+ }
35
+ languages {
36
+ id
37
+ key
38
+ displayName
39
+ tagline
40
+ icon
41
+ __typename
42
+ }
43
+ __typename
44
+ }"
4
45
  end
5
46
 
6
47
  def Queries.get_user_by_id
7
- "query user($user_id: Int!) {\n user: user(id: $user_id) {\n id\n username\n fullName\n image\n url\n redirectToTeamDashboard\n ...ProfileHeaderUser\n __typename\n }\n}\n\nfragment ProfileHeaderUser on User {\n id\n fullName\n username\n image\n isLoggedIn\n bio\n karma\n isHacker\n roles {\n id\n name\n key\n tagline\n __typename\n }\n organization {\n id\n name\n __typename\n }\n languages {\n id\n key\n displayName\n tagline\n icon\n __typename\n }\n __typename\n}"
48
+ "query user($user_id: Int!) {
49
+ user: user(id: $user_id) {
50
+ id
51
+ username
52
+ fullName
53
+ image
54
+ url
55
+ ...ProfileHeaderUser
56
+ __typename
57
+ }
58
+ }
59
+
60
+ fragment ProfileHeaderUser on User {
61
+ id
62
+ fullName
63
+ username
64
+ image
65
+ bio
66
+ karma
67
+ isHacker
68
+ roles {
69
+ id
70
+ name
71
+ key
72
+ tagline
73
+ __typename
74
+ }
75
+ organization {
76
+ id
77
+ name
78
+ __typename
79
+ }
80
+ languages {
81
+ id
82
+ key
83
+ displayName
84
+ tagline
85
+ icon
86
+ __typename
87
+ }
88
+ __typename
89
+ }"
90
+ end
91
+
92
+ def Queries.get_user_posts
93
+ "query ProfilePosts($username: String!, $after: String, $order: String, $count: Int) {
94
+ user: userByUsername(username: $username) {
95
+ id
96
+ displayName
97
+ posts(after: $after, order: $order, count: $count) {
98
+ items {
99
+ id
100
+ isHidden
101
+ ...PostsFeedItemPost
102
+ board {
103
+ id
104
+ name
105
+ url
106
+ color
107
+ __typename
108
+ }
109
+ __typename
110
+ }
111
+ pageInfo {
112
+ nextCursor
113
+ __typename
114
+ }
115
+ __typename
116
+ }
117
+ __typename
118
+ }
119
+ }
120
+
121
+ fragment PostsFeedItemPost on Post {
122
+ id
123
+ title
124
+ body
125
+ preview(removeMarkdown: true, length: 150)
126
+ url
127
+ commentCount
128
+ isPinned
129
+ isLocked
130
+ isAnnouncement
131
+ timeCreated
132
+ isAnswered
133
+ isAnswerable
134
+ ...PostVoteControlPost
135
+ ...PostLinkPost
136
+ user {
137
+ id
138
+ username
139
+ isHacker
140
+ image
141
+ ...UserLabelUser
142
+ ...UserLinkUser
143
+ __typename
144
+ }
145
+ repl {
146
+ id
147
+ url
148
+ title
149
+ description
150
+ isPrivate
151
+ isAlwaysOn
152
+ lang {
153
+ id
154
+ icon
155
+ key
156
+ displayName
157
+ tagline
158
+ __typename
159
+ }
160
+ __typename
161
+ }
162
+ board {
163
+ id
164
+ name
165
+ color
166
+ __typename
167
+ }
168
+ recentComments(count: 3) {
169
+ id
170
+ ...SimpleCommentComment
171
+ __typename
172
+ }
173
+ __typename
174
+ }
175
+
176
+ fragment PostVoteControlPost on Post {
177
+ id
178
+ voteCount
179
+ canVote
180
+ hasVoted
181
+ __typename
182
+ }
183
+
184
+ fragment PostLinkPost on Post {
185
+ id
186
+ url
187
+ __typename
188
+ }
189
+
190
+ fragment UserLabelUser on User {
191
+ id
192
+ username
193
+ karma
194
+ ...UserLinkUser
195
+ __typename
196
+ }
197
+
198
+ fragment UserLinkUser on User {
199
+ id
200
+ url
201
+ username
202
+ roles {
203
+ id
204
+ name
205
+ key
206
+ tagline
207
+ __typename
208
+ }
209
+ organization {
210
+ id
211
+ name
212
+ __typename
213
+ }
214
+ languages {
215
+ id
216
+ key
217
+ displayName
218
+ tagline
219
+ icon
220
+ __typename
221
+ }
222
+ __typename
223
+ }
224
+
225
+ fragment SimpleCommentComment on Comment {
226
+ id
227
+ user {
228
+ id
229
+ ...UserLabelUser
230
+ ...UserLinkUser
231
+ __typename
232
+ }
233
+ preview(removeMarkdown: true, length: 500)
234
+ timeCreated
235
+ __typename
236
+ }"
8
237
  end
9
238
  end
data/lib/repltalk.rb CHANGED
@@ -16,6 +16,19 @@ class Role
16
16
  end
17
17
  end
18
18
 
19
+ class Organization
20
+ attr_reader :id, :name
21
+
22
+ def initialize(organization)
23
+ @id = organization["id"]
24
+ @name = organization["name"]
25
+ end
26
+
27
+ def to_s
28
+ @name
29
+ end
30
+ end
31
+
19
32
  class Language
20
33
  attr_reader :id, :key, :name, :tagline, :icon
21
34
 
@@ -32,10 +45,82 @@ class Language
32
45
  end
33
46
  end
34
47
 
48
+ class Repl
49
+ attr_reader :id, :url, :title, :description, :language, :is_private, :is_always_on
50
+
51
+ def initialize(repl)
52
+ @id = repl["id"]
53
+ @url = repl["url"]
54
+ @title = repl["title"]
55
+ @description = repl["description"]
56
+ @language = Language.new(repl["lang"])
57
+
58
+ @is_private = repl["isPrivate"]
59
+ @is_always_on = repl["isAlwaysOn"]
60
+ end
61
+
62
+ def to_s
63
+ @title
64
+ end
65
+ end
66
+
67
+ class Board
68
+ attr_reader :id, :name, :color
69
+
70
+ def initialize(board)
71
+ @id = board["id"]
72
+ @name = board["name"]
73
+ @color = board["color"]
74
+ end
75
+
76
+ def to_s
77
+ @name
78
+ end
79
+ end
80
+
81
+ class Post
82
+ attr_reader :id, :url, :repl, :board, :title, :author, :content, :preview, :timestamp, :vote_count, :comment_count, :can_vote, :has_voted, :is_anwered, :is_answerable, :is_hidden, :is_pinned, :is_locked, :is_announcement
83
+
84
+ def initialize(client, post)
85
+ @client = client
86
+
87
+ @id = post["id"]
88
+ @url = post["url"]
89
+ @title = post["title"]
90
+ @content = post["body"]
91
+ @preview = post["preview"]
92
+ @timestamp = post["timeCreated"]
93
+
94
+ @board = Board.new(post["board"])
95
+ @author = User.new(@client, post["user"])
96
+ @repl = post["repl"] == nil ? nil : Repl.new(post["repl"])
97
+
98
+ @vote_count = post["voteCount"]
99
+ @comment_count = post["commentCount"]
100
+
101
+ @can_vote = post["canVote"]
102
+ @has_voted = post["hasVoted"]
103
+
104
+ @is_answered = post["isAnswered"]
105
+ @is_answerable = post["isAnswerable"]
106
+
107
+ @is_hidden = post["isHidden"]
108
+ @is_pinned = post["isPinned"]
109
+ @is_locked = post["isLocked"]
110
+ @is_announcement = post["isAnnouncement"]
111
+ end
112
+
113
+ def to_s
114
+ @title
115
+ end
116
+ end
117
+
35
118
  class User
36
- attr_reader :id, :username, :name, :pfp, :bio, :cycles, :is_hacker, :roles, :languages
119
+ attr_reader :id, :username, :name, :pfp, :bio, :cycles, :is_hacker, :roles, :organization, :languages
120
+
121
+ def initialize(client, user)
122
+ @client = client
37
123
 
38
- def initialize(user)
39
124
  @id = user["id"]
40
125
  @username = user["username"]
41
126
  @name = user["fullName"]
@@ -44,9 +129,26 @@ class User
44
129
  @cycles = user["karma"]
45
130
  @is_hacker = user["isHacker"]
46
131
  @roles = user["roles"].map { |role| Role.new(role) }
132
+ @organization = user["organization"] == nil ? nil : Organization.new(user["organization"])
47
133
  @languages = user["languages"].map { |lang| Language.new(lang) }
48
134
  end
49
135
 
136
+ def get_posts(order="top", count=nil, after=nil)
137
+ p = @client.graphql(
138
+ "ProfilePosts",
139
+ Queries.get_user_posts,
140
+ username: @username,
141
+ order: order,
142
+ count: count,
143
+ after: after
144
+ )
145
+ posts = Array.new
146
+ p["user"]["posts"]["items"].each do |post|
147
+ posts << Post.new(@client, post)
148
+ end
149
+ posts
150
+ end
151
+
50
152
  def to_s
51
153
  @username
52
154
  end
@@ -59,27 +161,6 @@ class Client
59
161
  @sid = sid
60
162
  end
61
163
 
62
- def get_user(name)
63
- u = graphql(
64
- "userByUsername",
65
- Queries.get_user,
66
- username: name
67
- )
68
- User.new(u["user"])
69
- end
70
-
71
- def get_user_by_id(id)
72
- u = graphql(
73
- "user",
74
- Queries.get_user_by_id,
75
- user_id: id
76
- )
77
- User.new(u["user"])
78
- end
79
-
80
-
81
- private
82
-
83
164
  def graphql(name, query, **variables)
84
165
  payload = {
85
166
  operationName: name,
@@ -106,4 +187,22 @@ class Client
106
187
  data = data["data"] if data.include?("data")
107
188
  data
108
189
  end
190
+
191
+ def get_user(name)
192
+ u = graphql(
193
+ "userByUsername",
194
+ Queries.get_user,
195
+ username: name
196
+ )
197
+ User.new(self, u["user"])
198
+ end
199
+
200
+ def get_user_by_id(id)
201
+ u = graphql(
202
+ "user",
203
+ Queries.get_user_by_id,
204
+ user_id: id
205
+ )
206
+ User.new(u["user"])
207
+ end
109
208
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: repltalk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - CodingCactus
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-03 00:00:00.000000000 Z
11
+ date: 2021-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http