repltalk 0.5.0 → 1.2.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 +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: