repltalk 0.0.1

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 +7 -0
  2. data/lib/queries.rb +5 -0
  3. data/lib/repltalk.rb +100 -0
  4. metadata +46 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 13027c3d3c0836aef9c475c378f3d9925279120baff4d78c257791e0ccd42e6d
4
+ data.tar.gz: 9c01fe5c68960314f4324fb19e8531222f88bfc06a76d26831c05d8518466177
5
+ SHA512:
6
+ metadata.gz: 868d939d3d8ab8a1899046304746f97f1b7ab17e6d81cdd3799642c81e7fffb8ada236c17adf90632f7f464f73f1345453fa775c45d251a0e67256d905d545af
7
+ data.tar.gz: 8bff217952da08561b76038defe334f15f3b225e937b66813d576d6d3c614cb7fa0a3d99c0429a803e8f08e16085482200dd4c7726006bcadba968bdba066d55
data/lib/queries.rb ADDED
@@ -0,0 +1,5 @@
1
+ class Queries
2
+ def Queries.get_user
3
+ "query userByUsername($username: String!) {\n currentUser {\n id\n hasAchievementsGate: gate(feature: \"flag-achievements-v0\")\n __typename\n }\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}"
4
+ end
5
+ end
data/lib/repltalk.rb ADDED
@@ -0,0 +1,100 @@
1
+ require "http"
2
+ require "json"
3
+ require_relative "queries"
4
+
5
+ class Role
6
+ attr_reader :name, :key, :tagline
7
+
8
+ def initialize(role)
9
+ @name = role["name"]
10
+ @key = role["key"]
11
+ @tagline = role["tagline"]
12
+ end
13
+
14
+ def to_s
15
+ @name
16
+ end
17
+ end
18
+
19
+ class Language
20
+ attr_reader :id, :key, :name, :tagline, :icon
21
+
22
+ def initialize(lang)
23
+ @id = lang["id"]
24
+ @key = lang["key"]
25
+ @name = lang["displayName"]
26
+ @tagline = lang["tagline"]
27
+ @icon = lang["icon"]
28
+ end
29
+
30
+ def to_s
31
+ @id
32
+ end
33
+ end
34
+
35
+ class User
36
+ attr_reader :id, :username, :name, :pfp, :bio, :cycles, :is_hacker, :roles, :languages
37
+
38
+ def initialize(user)
39
+ @id = user["id"]
40
+ @username = user["username"]
41
+ @name = user["fullName"]
42
+ @pfp = user["image"]
43
+ @bio = user["bio"]
44
+ @cycles = user["karma"]
45
+ @is_hacker = user["isHacker"]
46
+ @roles = user["roles"].map { |role| Role.new(role) }
47
+ @languages = user["languages"].map { |lang| Language.new(lang) }
48
+ end
49
+
50
+ def to_s
51
+ @username
52
+ end
53
+ end
54
+
55
+ class Client
56
+ attr_writer :sid
57
+
58
+ def initialize(sid=nil)
59
+ @sid = sid
60
+ end
61
+
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
+
72
+ private
73
+
74
+ def graphql(name, query, **variables)
75
+ payload = {
76
+ operationName: name,
77
+ query: query,
78
+ variables: variables.to_json
79
+ }
80
+ r = HTTP
81
+ .cookies(
82
+ "connect.sid": @sid
83
+ )
84
+ .headers(
85
+ referer: "https://repl.it/@CodingCactus/repltalk",
86
+ "X-Requested-With": "ReplTalk"
87
+ )
88
+ .post(
89
+ "https://repl.it/graphql",
90
+ form: payload
91
+ )
92
+ begin data = JSON.parse(r)
93
+ rescue
94
+ puts "\e[31mERROR\n#{r}\e[0m"
95
+ return nil
96
+ end
97
+ data = data["data"] if data.include?("data")
98
+ data
99
+ end
100
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: repltalk
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - CodingCactus
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-03-03 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: With the repltalk gem, you can easily interect with the repltalk graphql
14
+ api.
15
+ email: codingcactus.cc@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/queries.rb
21
+ - lib/repltalk.rb
22
+ homepage:
23
+ licenses: []
24
+ metadata:
25
+ source_code_uri: https://github.com/Codin-Cactus/repltalk
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.7.6
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: A ruby client for the repltalk api
46
+ test_files: []