repltalk 0.0.4 → 0.4.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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/queries.rb +428 -10
  3. data/lib/repltalk.rb +101 -10
  4. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 640639f4f0a1f4ab9ba6dab62ab76813e3b1aaab87083c584392dd981042f630
4
- data.tar.gz: cacc2efc694130135eafa0ea768c696875a5c14ba4fad8d6fed42e67985f1da3
3
+ metadata.gz: 8cc752c9239aae73a834123704fefdd7646f448130d67c16a024b394d405a7a4
4
+ data.tar.gz: dedee8b09c539ee85244bdf0d336d513ff1ee08b221f87c2db2dfa6dcfe8e7c7
5
5
  SHA512:
6
- metadata.gz: 298f683ee539b0a13afc39d60abb1b3bde2b003aea988632109e5f8e33ce64932fe2db2ac7f3aeabceb00e1e1db9526adad5e221c5919a81b20827350f0faadc
7
- data.tar.gz: 005e485bd1f425971fe02d654694b70282d6b8843d8acca964c7a26b454b3fc31a078e328ae072d06a6faffb12e9bc2168a67f14d958b6743ebc9a58fa4dac26
6
+ metadata.gz: 687b6e3f7b8ae25c9c2fca8a3fb023f3e176057623c7e0e7ed771e1e6caceec0cd321213a375ed537b29f7b26d29a9d4c4bf450aee743bb4eb66de0d6518191c
7
+ data.tar.gz: c8f334e85bf25c6508a2a141c4ffa0c0d4aeafd5696cbadcdb7fc3be87e33320ffc60e5c456146b53fd7c06a3c7393d8b50435f2857dbc9d123413c291930a47
data/lib/queries.rb CHANGED
@@ -20,6 +20,7 @@ class Queries
20
20
  bio
21
21
  karma
22
22
  isHacker
23
+ timeCreated
23
24
  roles {
24
25
  id
25
26
  name
@@ -65,6 +66,7 @@ class Queries
65
66
  bio
66
67
  karma
67
68
  isHacker
69
+ timeCreated
68
70
  roles {
69
71
  id
70
72
  name
@@ -165,12 +167,6 @@ class Queries
165
167
  color
166
168
  __typename
167
169
  }
168
- recentComments(count: 3) {
169
- id
170
- ...SimpleCommentComment
171
- __typename
172
- }
173
- __typename
174
170
  }
175
171
 
176
172
  fragment PostVoteControlPost on Post {
@@ -199,6 +195,7 @@ class Queries
199
195
  id
200
196
  url
201
197
  username
198
+ timeCreated
202
199
  roles {
203
200
  id
204
201
  name
@@ -220,18 +217,439 @@ class Queries
220
217
  __typename
221
218
  }
222
219
  __typename
220
+ }"
221
+ end
222
+
223
+ def Queries.get_user_comments
224
+ "query ProfileComments($username: String!, $after: String, $order: String, $count: Int) {
225
+ user: userByUsername(username: $username) {
226
+ id
227
+ displayName
228
+ comments(after: $after, order: $order, count: $count) {
229
+ items {
230
+ id
231
+ ...ProfileCommentsComment
232
+ __typename
233
+ }
234
+ pageInfo {
235
+ nextCursor
236
+ __typename
237
+ }
238
+ __typename
239
+ }
240
+ __typename
241
+ }
223
242
  }
224
243
 
225
- fragment SimpleCommentComment on Comment {
244
+ fragment ProfileCommentsComment on Comment {
226
245
  id
246
+ body
247
+ timeCreated
248
+ url
249
+ isAnswer
250
+ ...CommentVoteControlComment
227
251
  user {
228
252
  id
229
- ...UserLabelUser
230
- ...UserLinkUser
253
+ fullName
254
+ username
255
+ image
256
+ bio
257
+ karma
258
+ isHacker
259
+ timeCreated
260
+ roles {
261
+ id
262
+ name
263
+ key
264
+ tagline
265
+ __typename
266
+ }
267
+ organization {
268
+ id
269
+ name
270
+ __typename
271
+ }
272
+ languages {
273
+ id
274
+ key
275
+ displayName
276
+ tagline
277
+ icon
278
+ __typename
279
+ }
280
+ }
281
+ post {
282
+ id
283
+ title
284
+ url
285
+ user {
286
+ id
287
+ username
288
+ url
289
+ __typename
290
+ }
291
+ board {
292
+ id
293
+ name
294
+ url
295
+ slug
296
+ __typename
297
+ }
298
+ __typename
299
+ }
300
+ __typename
301
+ }
302
+
303
+ fragment CommentVoteControlComment on Comment {
304
+ id
305
+ voteCount
306
+ canVote
307
+ hasVoted
308
+ __typename
309
+ }"
310
+ end
311
+
312
+ def Queries.get_post
313
+ "query post($id: Int!) {
314
+ post(id: $id) {
315
+ id
316
+ title
317
+ preview(removeMarkdown: true, length: 150)
318
+ body
319
+ isAnnouncement
320
+ url
321
+ isAnswerable
322
+ isHidden
323
+ answeredBy {
324
+ id
325
+ ...PostAnsweredCardUser
326
+ __typename
327
+ }
328
+ answer {
329
+ id
330
+ ...PostAnsweredCardComment
331
+ __typename
332
+ }
333
+ board {
334
+ id
335
+ url
336
+ description
337
+ slug
338
+ __typename
339
+ }
340
+ ...PostDetailPost
341
+ __typename
342
+ }
343
+ }
344
+
345
+ fragment PostDetailPost on Post {
346
+ id
347
+ title
348
+ body
349
+ timeCreated
350
+ canReport
351
+ hasReported
352
+ isAnnouncement
353
+ isPinned
354
+ isLocked
355
+ isHidden
356
+ commentCount
357
+ isAnswered
358
+ isAnswerable
359
+ ...PostVoteControlPost
360
+ user {
361
+ id
362
+ timeCreated
363
+ roles {
364
+ id
365
+ name
366
+ key
367
+ tagline
368
+ __typename
369
+ }
370
+ organization {
371
+ id
372
+ name
373
+ __typename
374
+ }
375
+ languages {
376
+ id
377
+ key
378
+ displayName
379
+ tagline
380
+ icon
381
+ __typename
382
+ }
383
+ ...UserPostHeaderUser
384
+ __typename
385
+ }
386
+ repl {
387
+ id
388
+ url
389
+ title
390
+ description
391
+ isPrivate
392
+ isAlwaysOn
393
+ lang {
394
+ id
395
+ icon
396
+ key
397
+ displayName
398
+ tagline
399
+ __typename
400
+ }
401
+ __typename
402
+ }
403
+ board {
404
+ id
405
+ name
406
+ color
407
+ __typename
408
+ }
409
+ __typename
410
+ }
411
+
412
+ fragment PostVoteControlPost on Post {
413
+ id
414
+ voteCount
415
+ canVote
416
+ hasVoted
417
+ __typename
418
+ }
419
+
420
+ fragment UserPostHeaderUser on User {
421
+ id
422
+ image
423
+ isHacker
424
+ isModerator: hasRole(role: MODERATOR)
425
+ isAdmin: hasRole(role: ADMIN)
426
+ ...DepreciatedUserLabelUser
427
+ ...UserLinkUser
428
+ __typename
429
+ }
430
+
431
+ fragment UserLinkUser on User {
432
+ id
433
+ url
434
+ username
435
+ __typename
436
+ }
437
+
438
+ fragment DepreciatedUserLabelUser on User {
439
+ id
440
+ image
441
+ username
442
+ url
443
+ karma
444
+ __typename
445
+ }
446
+
447
+ fragment PostAnsweredCardUser on User {
448
+ id
449
+ username
450
+ ...DepreciatedUserLabelUser
451
+ __typename
452
+ }
453
+
454
+ fragment PostAnsweredCardComment on Comment {
455
+ id
456
+ url
457
+ __typename
458
+ }"
459
+ end
460
+
461
+ def Queries.get_comment
462
+ "query comment ($id: Int!) {
463
+ comment(id: $id) {
464
+ id
465
+ url
466
+ isAnswer
467
+ ...CommentDetailComment
468
+ comments {
469
+ id
470
+ url
471
+ isAnswer
472
+ ...CommentDetailComment
473
+ __typename
474
+ }
475
+ __typename
476
+ }
477
+ }
478
+
479
+ fragment DepreciatedUserLabelUser on User {
480
+ id
481
+ fullName
482
+ username
483
+ image
484
+ bio
485
+ karma
486
+ isHacker
487
+ timeCreated
488
+ roles {
489
+ id
490
+ name
491
+ key
492
+ tagline
493
+ __typename
494
+ }
495
+ organization {
496
+ id
497
+ name
498
+ __typename
499
+ }
500
+ languages {
501
+ id
502
+ key
503
+ displayName
504
+ tagline
505
+ icon
506
+ __typename
507
+ }
508
+ __typename
509
+ }
510
+
511
+ fragment CommentDetailComment on Comment {
512
+ id
513
+ body
514
+ timeCreated
515
+ url
516
+ isAnswer
517
+ ...CommentVoteControlComment
518
+ user {
519
+ id
520
+ username
521
+ ...DepreciatedUserLabelWithImageUser
522
+ __typename
523
+ }
524
+ post {
525
+ id
526
+ __typename
527
+ }
528
+ __typename
529
+ }
530
+
531
+ fragment DepreciatedUserLabelWithImageUser on User {
532
+ id
533
+ image
534
+ ...DepreciatedUserLabelUser
535
+ __typename
536
+ }
537
+
538
+ fragment CommentVoteControlComment on Comment {
539
+ id
540
+ voteCount
541
+ canVote
542
+ hasVoted
543
+ __typename
544
+ }"
545
+ end
546
+
547
+ def Queries.get_posts
548
+ "query PostsFeed($order: String, $after: String, $searchQuery: String, $languages: [String!], $count: Int, $boardSlugs: [String!], $pinAnnouncements: Boolean, $pinPinned: Boolean) {
549
+ posts(order: $order, after: $after, searchQuery: $searchQuery, languages: $languages, count: $count, boardSlugs: $boardSlugs, pinAnnouncements: $pinAnnouncements, pinPinned: $pinPinned) {
550
+ pageInfo {
551
+ nextCursor
552
+ __typename
553
+ }
554
+ items {
555
+ id
556
+ timeCreated
557
+ ...PostsFeedItemPost
558
+ board {
559
+ id
560
+ color
561
+ name
562
+ __typename
563
+ }
564
+ __typename
565
+ }
231
566
  __typename
232
567
  }
233
- preview(removeMarkdown: true, length: 500)
568
+ }
569
+
570
+ fragment PostsFeedItemPost on Post {
571
+ id
572
+ title
573
+ preview(removeMarkdown: true, length: 150)
574
+ url
575
+ commentCount
576
+ isPinned
577
+ isLocked
578
+ isHidden
579
+ isAnnouncement
234
580
  timeCreated
581
+ isAnswered
582
+ isAnswerable
583
+ ...PostVoteControlPost
584
+ ...PostLinkPost
585
+ user {
586
+ id
587
+ fullName
588
+ username
589
+ image
590
+ bio
591
+ karma
592
+ isHacker
593
+ timeCreated
594
+ roles {
595
+ id
596
+ name
597
+ key
598
+ tagline
599
+ __typename
600
+ }
601
+ organization {
602
+ id
603
+ name
604
+ __typename
605
+ }
606
+ languages {
607
+ id
608
+ key
609
+ displayName
610
+ tagline
611
+ icon
612
+ __typename
613
+ }
614
+ __typename
615
+ }
616
+ repl {
617
+ id
618
+ url
619
+ title
620
+ description
621
+ isPrivate
622
+ isAlwaysOn
623
+ lang {
624
+ id
625
+ icon
626
+ key
627
+ displayName
628
+ tagline
629
+ __typename
630
+ }
631
+ __typename
632
+ }
633
+ board {
634
+ id
635
+ name
636
+ color
637
+ __typename
638
+ }
639
+ __typename
640
+ }
641
+
642
+ fragment PostVoteControlPost on Post {
643
+ id
644
+ voteCount
645
+ canVote
646
+ hasVoted
647
+ __typename
648
+ }
649
+
650
+ fragment PostLinkPost on Post {
651
+ id
652
+ url
235
653
  __typename
236
654
  }"
237
655
  end
data/lib/repltalk.rb CHANGED
@@ -16,6 +16,8 @@ class Role
16
16
  end
17
17
  end
18
18
 
19
+
20
+
19
21
  class Organization
20
22
  attr_reader :id, :name
21
23
 
@@ -29,6 +31,8 @@ class Organization
29
31
  end
30
32
  end
31
33
 
34
+
35
+
32
36
  class Language
33
37
  attr_reader :id, :key, :name, :tagline, :icon
34
38
 
@@ -45,6 +49,8 @@ class Language
45
49
  end
46
50
  end
47
51
 
52
+
53
+
48
54
  class Repl
49
55
  attr_reader :id, :url, :title, :description, :language, :is_private, :is_always_on
50
56
 
@@ -64,6 +70,8 @@ class Repl
64
70
  end
65
71
  end
66
72
 
73
+
74
+
67
75
  class Board
68
76
  attr_reader :id, :name, :color
69
77
 
@@ -78,8 +86,46 @@ class Board
78
86
  end
79
87
  end
80
88
 
89
+
90
+
91
+ class Comment
92
+ attr_reader :id, :url, :author, :content, :post_id, :is_answer, :vote_count, :timestamp, :comments, :can_vote, :has_voted
93
+
94
+ def initialize(client, comment)
95
+ @client = client
96
+
97
+ @id = comment["id"]
98
+ @url = comment["url"]
99
+ @author = comment["user"] == nil ? "[deleted user]" : User.new(@client, comment["user"])
100
+ @content = comment["body"]
101
+ @post_id = comment["post"]["id"]
102
+ @is_answer = comment["isAnswer"]
103
+ @vote_count = comment["voteCount"]
104
+ @timestamp = comment["timeCreated"]
105
+ @comments = comment.include?("comments") ? comment["comments"].map { |c| Comment.new(@client, c)} : Array.new
106
+
107
+ @can_vote = comment["canVote"]
108
+ @has_voted = comment["hasVoted"]
109
+ end
110
+
111
+ def get_post
112
+ p = @client.graphql(
113
+ "post",
114
+ Queries.get_post,
115
+ id: @post_id
116
+ )
117
+ Post.new(self, p["post"])
118
+ end
119
+
120
+ def to_s
121
+ @content
122
+ end
123
+ end
124
+
125
+
126
+
81
127
  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
128
+ attr_reader :id, :url, :repl, :board, :title, :author, :content, :preview, :timestamp, :vote_count, :comment_count, :can_vote, :has_voted, :is_answered, :is_answerable, :is_hidden, :is_pinned, :is_locked, :is_announcement
83
129
 
84
130
  def initialize(client, post)
85
131
  @client = client
@@ -92,8 +138,8 @@ class Post
92
138
  @timestamp = post["timeCreated"]
93
139
 
94
140
  @board = Board.new(post["board"])
95
- @author = User.new(@client, post["user"])
96
141
  @repl = post["repl"] == nil ? nil : Repl.new(post["repl"])
142
+ @author = post["user"] == nil ? "[deleted user]" : User.new(@client, post["user"])
97
143
 
98
144
  @vote_count = post["voteCount"]
99
145
  @comment_count = post["commentCount"]
@@ -115,8 +161,10 @@ class Post
115
161
  end
116
162
  end
117
163
 
164
+
165
+
118
166
  class User
119
- attr_reader :id, :username, :name, :pfp, :bio, :cycles, :is_hacker, :roles, :organization, :languages
167
+ attr_reader :id, :username, :name, :pfp, :bio, :cycles, :is_hacker, :timestamp, :roles, :organization, :languages
120
168
 
121
169
  def initialize(client, user)
122
170
  @client = client
@@ -128,12 +176,13 @@ class User
128
176
  @bio = user["bio"]
129
177
  @cycles = user["karma"]
130
178
  @is_hacker = user["isHacker"]
179
+ @timestamp = user["timeCreated"]
131
180
  @roles = user["roles"].map { |role| Role.new(role) }
132
181
  @organization = user["organization"] == nil ? nil : Organization.new(user["organization"])
133
182
  @languages = user["languages"].map { |lang| Language.new(lang) }
134
183
  end
135
184
 
136
- def get_posts(order="top", count=nil, after=nil)
185
+ def get_posts(order: "new", count: nil, after: nil)
137
186
  p = @client.graphql(
138
187
  "ProfilePosts",
139
188
  Queries.get_user_posts,
@@ -142,11 +191,19 @@ class User
142
191
  count: count,
143
192
  after: after
144
193
  )
145
- posts = Array.new
146
- p["user"]["posts"]["items"].each do |post|
147
- posts << Post.new(@client, post)
148
- end
149
- posts
194
+ p["user"]["posts"]["items"].map { |post| Post.new(@client, post) }
195
+ end
196
+
197
+ def get_comments(order: "new", count: nil, after: nil)
198
+ c = @client.graphql(
199
+ "ProfileComments",
200
+ Queries.get_user_comments,
201
+ username: @username,
202
+ order: order,
203
+ count: count,
204
+ after: after
205
+ )
206
+ c["user"]["comments"]["items"].map { |comment| Comment.new(@client, comment) }
150
207
  end
151
208
 
152
209
  def to_s
@@ -154,6 +211,8 @@ class User
154
211
  end
155
212
  end
156
213
 
214
+
215
+
157
216
  class Client
158
217
  attr_writer :sid
159
218
 
@@ -203,6 +262,38 @@ class Client
203
262
  Queries.get_user_by_id,
204
263
  user_id: id
205
264
  )
206
- User.new(u["user"])
265
+ User.new(self, u["user"])
266
+ end
267
+
268
+ def get_post(id)
269
+ p = graphql(
270
+ "post",
271
+ Queries.get_post,
272
+ id: id
273
+ )
274
+ Post.new(self, p["post"])
275
+ end
276
+
277
+ def get_comment(id)
278
+ c = graphql(
279
+ "comment",
280
+ Queries.get_comment,
281
+ id: id
282
+ )
283
+ Comment.new(self, c["comment"])
284
+ end
285
+
286
+ def get_posts(board: "all", order: "new", count: nil, after: nil, search: nil, languages: nil)
287
+ p = graphql(
288
+ "PostsFeed",
289
+ Queries.get_posts,
290
+ baordSlugs: [board],
291
+ order: order,
292
+ count: count,
293
+ after: after,
294
+ searchQuery: search,
295
+ languages: languages
296
+ )
297
+ p["posts"]["items"].map { |post| Post.new(self, post) }
207
298
  end
208
299
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: repltalk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - CodingCactus
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  description: With the repltalk gem, you can easily interect with the repltalk graphql
42
- api.
42
+ api. See https://github.com/Coding-Cactus/repltalk for documentation
43
43
  email: codingcactus.cc@gmail.com
44
44
  executables: []
45
45
  extensions: []
@@ -50,7 +50,7 @@ files:
50
50
  homepage:
51
51
  licenses: []
52
52
  metadata:
53
- source_code_uri: https://github.com/Codin-Cactus/repltalk
53
+ source_code_uri: https://github.com/Coding-Cactus/repltalk
54
54
  post_install_message:
55
55
  rdoc_options: []
56
56
  require_paths: