repltalk 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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