repltalk 0.5.0 → 1.2.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 +63 -0
  3. data/lib/repltalk.rb +103 -5
  4. metadata +19 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4becb6db34fded69130f61fe1c0bee4eadd9d9aa2e1e832c48f84a51e48f013d
4
- data.tar.gz: 348eb30ee7f72b57de14f7a3edcd6b99d0c4b48bee827e29e540e30aaafbb4c9
3
+ metadata.gz: a90787033dba7f358725b78a75e013fe4dce8f6ba58129097efbebf908bb74ea
4
+ data.tar.gz: de1143f3aa2068eef3a62e781bd3cea4bc734623f39167b7a38f77538eb77bc8
5
5
  SHA512:
6
- metadata.gz: 62fc89da26c4217cdddc3f6c7f472197480f32173d83137189219566b27fe9bdf1559ae77f32df43e43dffd46741cd1a02d582f3f487ab68520f729f0a396536
7
- data.tar.gz: 899726ce8b541957128993cff59183a8945d4173b5daf02e18fbdb07d38b888d6dbe3132f463471a9793b7a99fe9b63dd611fb3b3c112f776c08ef22fbbd3319
6
+ metadata.gz: 9695086e996e64538e30321da4163b3891e0f72561f97e1a329346dd681de05c62fd8cebacd0b6301986d1ce5b57513395057c6c64f260dbb12640a391ac7831
7
+ data.tar.gz: 5b940e9378ef07c3f42b1b7cd2ce1906a6acebbe470bcc67bfec605c8cbdcb3e0ffedaa8bc6c35fad91618ed4e77e1992f60788283e46f857a68220c6c6029ea
data/lib/queries.rb CHANGED
@@ -9,6 +9,18 @@ class Queries
9
9
  @@organization = "
10
10
  id
11
11
  name
12
+ country
13
+ postalCode
14
+ state
15
+ city
16
+ timeCreated
17
+ "
18
+
19
+ @@subscription = "
20
+ id
21
+ planId
22
+ quantity
23
+ timeCreated
12
24
  "
13
25
 
14
26
  @@language = "
@@ -17,12 +29,14 @@ class Queries
17
29
  displayName
18
30
  tagline
19
31
  icon
32
+ category
20
33
  "
21
34
 
22
35
  @@board = "
23
36
  id
24
37
  name
25
38
  color
39
+ description
26
40
  "
27
41
 
28
42
  @@user = "
@@ -40,6 +54,9 @@ class Queries
40
54
  organization {
41
55
  #{@@organization}
42
56
  }
57
+ subscription {
58
+ #{@@subscription}
59
+ }
43
60
  languages {
44
61
  #{@@language}
45
62
  }
@@ -50,6 +67,7 @@ class Queries
50
67
  url
51
68
  title
52
69
  description
70
+ size
53
71
  imageUrl
54
72
  isPrivate
55
73
  isAlwaysOn
@@ -59,6 +77,9 @@ class Queries
59
77
  user {
60
78
  #{@@user}
61
79
  }
80
+ origin {
81
+ url
82
+ }
62
83
  "
63
84
 
64
85
  @@comment = "
@@ -277,6 +298,14 @@ class Queries
277
298
  }"
278
299
  end
279
300
 
301
+ def Queries.get_board
302
+ "query boardBySlug($slug: String!) {
303
+ board: boardBySlug(slug: $slug) {
304
+ #{@@board}
305
+ }
306
+ }"
307
+ end
308
+
280
309
  def Queries.get_posts
281
310
  "query PostsFeed($order: String, $after: String, $searchQuery: String, $languages: [String!], $count: Int, $boardSlugs: [String!], $pinAnnouncements: Boolean, $pinPinned: Boolean) {
282
311
  posts(order: $order, after: $after, searchQuery: $searchQuery, languages: $languages, count: $count, boardSlugs: $boardSlugs, pinAnnouncements: $pinAnnouncements, pinPinned: $pinPinned) {
@@ -286,4 +315,38 @@ class Queries
286
315
  }
287
316
  }"
288
317
  end
318
+
319
+ def Queries.get_leaderboard
320
+ "query LeaderboardQuery($count: Int, $after: String, $since: KarmaSince) {
321
+ leaderboard(count: $count, after: $after, since: $since) {
322
+ items {
323
+ #{@@user}
324
+ karmaSince: karma(since: $since)
325
+ }
326
+ }
327
+ }"
328
+ end
329
+ end
330
+
331
+
332
+ class Mutations < Queries
333
+ def Mutations.create_post
334
+ "mutation createPost($input: CreatePostInput!) {
335
+ createPost(input: $input) {
336
+ post {
337
+ #{@@post}
338
+ }
339
+ }
340
+ }"
341
+ end
342
+
343
+ def Mutations.create_comment
344
+ "mutation createComment($input: CreateCommentInput!) {
345
+ createComment(input: $input) {
346
+ comment {
347
+ #{@@comment}
348
+ }
349
+ }
350
+ }"
351
+ end
289
352
  end
data/lib/repltalk.rb CHANGED
@@ -21,11 +21,16 @@ end
21
21
 
22
22
 
23
23
  class Organization
24
- attr_reader :id, :name
24
+ attr_reader :id, :name, :country, :postal_code, :state, :city, :timestamp
25
25
 
26
26
  def initialize(organization)
27
27
  @id = organization["id"]
28
28
  @name = organization["name"]
29
+ @country = organization["country"]
30
+ @postal_code = organization["postalCode"]
31
+ @state = organization["state"]
32
+ @city = organization["city"]
33
+ @timestamp = organization["timeCreated"]
29
34
  end
30
35
 
31
36
  def to_s
@@ -35,8 +40,25 @@ end
35
40
 
36
41
 
37
42
 
43
+ class Subscription
44
+ attr_reader :id, :plan_id, :quantity, :timestamp
45
+
46
+ def initialize(subscription)
47
+ @id = subscription["id"]
48
+ @plan_id = subscription["planId"]
49
+ @quantity = subscription["quantity"]
50
+ @timestamp = subscription["timeCreated"]
51
+ end
52
+
53
+ def to_s
54
+ @plan_id
55
+ end
56
+ end
57
+
58
+
59
+
38
60
  class Language
39
- attr_reader :id, :key, :name, :tagline, :icon
61
+ attr_reader :id, :key, :name, :tagline, :icon, :category
40
62
 
41
63
  def initialize(lang)
42
64
  @id = lang["id"]
@@ -44,6 +66,7 @@ class Language
44
66
  @name = lang["displayName"]
45
67
  @tagline = lang["tagline"]
46
68
  @icon = lang["icon"]
69
+ @category = lang["category"]
47
70
  end
48
71
 
49
72
  def to_s
@@ -74,7 +97,7 @@ end
74
97
 
75
98
 
76
99
  class Repl
77
- attr_reader :id, :url, :title, :author, :description, :language, :img_url, :is_private, :is_always_on
100
+ attr_reader :id, :url, :title, :author, :description, :size, :language, :img_url, :origin_url, :is_private, :is_always_on
78
101
 
79
102
  def initialize(client, repl)
80
103
  @client = client
@@ -84,8 +107,10 @@ class Repl
84
107
  @title = repl["title"]
85
108
  @author = User.new(@client, repl["user"])
86
109
  @description = repl["description"]
110
+ @size = repl["size"]
87
111
  @language = Language.new(repl["lang"])
88
112
  @image_url = repl["imageUrl"]
113
+ @origin_url = repl["origin"] == nil ? nil : $BASE_URL + repl["origin"]["url"]
89
114
 
90
115
  @is_private = repl["isPrivate"]
91
116
  @is_always_on = repl["isAlwaysOn"]
@@ -121,12 +146,13 @@ end
121
146
 
122
147
 
123
148
  class Board
124
- attr_reader :id, :name, :color
149
+ attr_reader :id, :name, :color, :description
125
150
 
126
151
  def initialize(board)
127
152
  @id = board["id"]
128
153
  @name = board["name"]
129
154
  @color = board["color"]
155
+ @description = board["description"]
130
156
  end
131
157
 
132
158
  def to_s
@@ -182,6 +208,19 @@ class Comment
182
208
  c["comment"]["parentComment"] == nil ? nil : Comment.new(@client, c["comment"]["parentComment"])
183
209
  end
184
210
 
211
+ def create_comment(content)
212
+ c = @client.graphql(
213
+ "createComment",
214
+ Mutations.create_comment,
215
+ input: {
216
+ postId: @post_id,
217
+ commentId: @id,
218
+ body: content
219
+ }
220
+ )
221
+ Comment.new(@client, c["createComment"]["comment"])
222
+ end
223
+
185
224
  def to_s
186
225
  @content
187
226
  end
@@ -244,6 +283,18 @@ class Post
244
283
  u["post"]["votes"]["items"].map { |vote| User.new(@client, vote["user"]) }
245
284
  end
246
285
 
286
+ def create_comment(content)
287
+ c = @client.graphql(
288
+ "createComment",
289
+ Mutations.create_comment,
290
+ input: {
291
+ postId: @id,
292
+ body: content
293
+ }
294
+ )
295
+ Comment.new(@client, c["createComment"]["comment"])
296
+ end
297
+
247
298
  def to_s
248
299
  @title
249
300
  end
@@ -252,7 +303,7 @@ end
252
303
 
253
304
 
254
305
  class User
255
- attr_reader :id, :username, :name, :pfp, :bio, :cycles, :is_hacker, :timestamp, :roles, :organization, :languages
306
+ attr_reader :id, :username, :name, :pfp, :bio, :cycles, :is_hacker, :timestamp, :subscription, :roles, :organization, :languages
256
307
 
257
308
  def initialize(client, user)
258
309
  @client = client
@@ -265,6 +316,7 @@ class User
265
316
  @cycles = user["karma"]
266
317
  @is_hacker = user["isHacker"]
267
318
  @timestamp = user["timeCreated"]
319
+ @subscription = user["subscription"] == nil ? nil : Subscription.new(user["subscription"])
268
320
  @roles = user["roles"].map { |role| Role.new(role) }
269
321
  @organization = user["organization"] == nil ? nil : Organization.new(user["organization"])
270
322
  @languages = user["languages"].map { |lang| Language.new(lang) }
@@ -317,6 +369,17 @@ end
317
369
 
318
370
 
319
371
 
372
+ class LeaderboardUser < User
373
+ attr_reader :cycles_since
374
+
375
+ def initialize(client, user)
376
+ super(client, user)
377
+ @cycles_since = user["karmaSince"]
378
+ end
379
+ end
380
+
381
+
382
+
320
383
  class Client
321
384
  attr_writer :sid
322
385
 
@@ -399,6 +462,26 @@ class Client
399
462
  )
400
463
  Repl.new(self, r["repl"])
401
464
  end
465
+
466
+ def get_board(name)
467
+ b = graphql(
468
+ "boardBySlug",
469
+ Queries.get_board,
470
+ slug: name
471
+ )
472
+ Board.new(b["board"])
473
+ end
474
+
475
+ def get_leaderboard(count: nil, since: nil, after: nil)
476
+ u = graphql(
477
+ "LeaderboardQuery",
478
+ Queries.get_leaderboard,
479
+ count: count,
480
+ since: since,
481
+ after: after
482
+ )
483
+ u["leaderboard"]["items"].map { |user| LeaderboardUser.new(self, user) }
484
+ end
402
485
 
403
486
  def get_posts(board: "all", order: "new", count: nil, after: nil, search: nil, languages: nil)
404
487
  p = graphql(
@@ -413,4 +496,19 @@ class Client
413
496
  )
414
497
  p["posts"]["items"].map { |post| Post.new(self, post) }
415
498
  end
499
+
500
+ def create_post(board_name, title, content, repl_id: nil, show_hosted: false)
501
+ p = graphql(
502
+ "createPost",
503
+ Mutations.create_post,
504
+ input: {
505
+ boardId: get_board(board_name).id,
506
+ title: title,
507
+ body: content,
508
+ replId: repl_id,
509
+ showHosted: show_hosted
510
+ }
511
+ )
512
+ Post.new(self, p["createPost"]["post"])
513
+ end
416
514
  end
metadata CHANGED
@@ -1,43 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: repltalk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 1.2.0
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-06 00:00:00.000000000 Z
11
+ date: 2021-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.4'
17
20
  - - ">="
18
21
  - !ruby/object:Gem::Version
19
- version: '0'
22
+ version: 4.4.1
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '4.4'
24
30
  - - ">="
25
31
  - !ruby/object:Gem::Version
26
- version: '0'
32
+ version: 4.4.1
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: json
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.5'
31
40
  - - ">="
32
41
  - !ruby/object:Gem::Version
33
- version: '0'
42
+ version: 2.5.1
34
43
  type: :runtime
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '2.5'
38
50
  - - ">="
39
51
  - !ruby/object:Gem::Version
40
- version: '0'
52
+ version: 2.5.1
41
53
  description: With the repltalk gem, you can easily interect with the repltalk graphql
42
54
  api. See https://github.com/Coding-Cactus/repltalk for documentation
43
55
  email: codingcactus.cc@gmail.com
@@ -47,7 +59,7 @@ extra_rdoc_files: []
47
59
  files:
48
60
  - lib/queries.rb
49
61
  - lib/repltalk.rb
50
- homepage:
62
+ homepage: https://github.com/Coding-Cactus/repltalk
51
63
  licenses:
52
64
  - MIT
53
65
  metadata: