repltalk 0.0.4 → 0.4.0

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 +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: