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.
- checksums.yaml +4 -4
- data/lib/queries.rb +231 -2
- data/lib/repltalk.rb +122 -23
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 640639f4f0a1f4ab9ba6dab62ab76813e3b1aaab87083c584392dd981042f630
|
4
|
+
data.tar.gz: cacc2efc694130135eafa0ea768c696875a5c14ba4fad8d6fed42e67985f1da3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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!) {
|
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!) {
|
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.
|
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-
|
11
|
+
date: 2021-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|