ruqqus 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +4 -1
- data/CHANGELOG.md +24 -1
- data/Gemfile +1 -1
- data/README.md +152 -23
- data/Rakefile +1 -2
- data/TODO.md +27 -0
- data/exe/ruqqus-oauth +98 -0
- data/lib/ruqqus.rb +55 -72
- data/lib/ruqqus/client.rb +474 -0
- data/lib/ruqqus/routes.rb +68 -0
- data/lib/ruqqus/token.rb +148 -0
- data/lib/ruqqus/types.rb +11 -0
- data/lib/ruqqus/{badge.rb → types/badge.rb} +0 -0
- data/lib/ruqqus/types/comment.rb +38 -0
- data/lib/ruqqus/{guild.rb → types/guild.rb} +0 -0
- data/lib/ruqqus/{item_base.rb → types/item_base.rb} +4 -2
- data/lib/ruqqus/{post.rb → types/post.rb} +0 -33
- data/lib/ruqqus/{submission.rb → types/submission.rb} +5 -20
- data/lib/ruqqus/{title.rb → types/title.rb} +0 -0
- data/lib/ruqqus/{user.rb → types/user.rb} +0 -3
- data/lib/ruqqus/version.rb +1 -1
- data/ruqqus.gemspec +4 -2
- metadata +48 -15
- data/lib/ruqqus/comment.rb +0 -61
@@ -0,0 +1,68 @@
|
|
1
|
+
module Ruqqus
|
2
|
+
|
3
|
+
##
|
4
|
+
# A module containing constants that define the method routes for the Ruqqus REST API.
|
5
|
+
module Routes
|
6
|
+
|
7
|
+
##
|
8
|
+
# The Ruqqus API version.
|
9
|
+
API_VERSION = 1
|
10
|
+
|
11
|
+
##
|
12
|
+
# The top-level site URL.
|
13
|
+
HOME = 'https://ruqqus.com'.freeze
|
14
|
+
|
15
|
+
##
|
16
|
+
# The base URL for the Ruqqus REST API.
|
17
|
+
API_BASE = "#{HOME}/api/v#{API_VERSION}".freeze
|
18
|
+
|
19
|
+
##
|
20
|
+
# The endpoint for the GET method to obtain user information.
|
21
|
+
USER = "#{API_BASE}/user/".freeze
|
22
|
+
|
23
|
+
##
|
24
|
+
# The endpoint for the GET method to obtain guild information.
|
25
|
+
GUILD = "#{API_BASE}/guild/".freeze
|
26
|
+
|
27
|
+
##
|
28
|
+
# The endpoint for the GET method to obtain post information.
|
29
|
+
POST = "#{API_BASE}/post/".freeze
|
30
|
+
|
31
|
+
##
|
32
|
+
# The endpoint for the GET method to obtain comment information.
|
33
|
+
COMMENT = "#{API_BASE}/comment/".freeze
|
34
|
+
|
35
|
+
##
|
36
|
+
# The endpoint for the POST method to place a vote on a post.
|
37
|
+
POST_VOTE = "#{API_BASE}/vote/post/".freeze
|
38
|
+
|
39
|
+
##
|
40
|
+
# The endpoint for the GET method to query guild availability.
|
41
|
+
GUILD_AVAILABLE = "#{HOME}/api/board_available/".freeze
|
42
|
+
|
43
|
+
##
|
44
|
+
# The endpoint for the GET method to query username availability.
|
45
|
+
USERNAME_AVAILABLE = "#{HOME}/api/is_available/".freeze
|
46
|
+
|
47
|
+
##
|
48
|
+
# The endpoint for the POST method to submit a post.
|
49
|
+
SUBMIT = "#{Routes::API_BASE}/submit/".freeze
|
50
|
+
|
51
|
+
##
|
52
|
+
# The endpoint for the GET method to get the current user.
|
53
|
+
IDENTITY = "#{Routes::API_BASE}/identity".freeze
|
54
|
+
|
55
|
+
##
|
56
|
+
# The endpoint for the GET method to get the guild listings.
|
57
|
+
GUILDS = "#{Routes::API_BASE}/guilds".freeze
|
58
|
+
|
59
|
+
##
|
60
|
+
# The endpoint for the GET method to get the front page listings.
|
61
|
+
FRONT_PAGE = "#{Routes::API_BASE}/front/listing".freeze
|
62
|
+
|
63
|
+
##
|
64
|
+
# The endpoint for the GET method to get all post listings.
|
65
|
+
ALL_LISTINGS = "#{Routes::API_BASE}/all/listing".freeze
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
data/lib/ruqqus/token.rb
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
module Ruqqus
|
2
|
+
|
3
|
+
##
|
4
|
+
# Represents a Ruqqus [OAuth2](https://oauth.net/2/) access token.
|
5
|
+
class Token
|
6
|
+
|
7
|
+
##
|
8
|
+
# @!attribute [r] access_token
|
9
|
+
# @return [String] the access token value.
|
10
|
+
|
11
|
+
##
|
12
|
+
# @!attribute [r] refresh_token
|
13
|
+
# @return [String] the refresh token value.
|
14
|
+
|
15
|
+
##
|
16
|
+
# @!attribute [r] expires
|
17
|
+
# @return [Time] the time the token expires and will require a refresh.
|
18
|
+
|
19
|
+
##
|
20
|
+
# @!attribute [r] type
|
21
|
+
# @return [String] the token type to specify in the HTTP header.
|
22
|
+
|
23
|
+
##
|
24
|
+
# @!attribute [r] scopes
|
25
|
+
# @return [Array<Symbol>] an array of scopes this token authorizes.
|
26
|
+
|
27
|
+
##
|
28
|
+
# Grants access to a user account and returns an a newly created {Token} to use as authentication for it.
|
29
|
+
#
|
30
|
+
# @param client_id [String] the ID of client application.
|
31
|
+
# @param client_secret [String] the secret of the client application.
|
32
|
+
# @param code [String] the code received in the redirect response when the user requested API access.
|
33
|
+
# @param persist [Boolean] `true` if token will be reusable, otherwise `false`.
|
34
|
+
#
|
35
|
+
# @return [Token] a newly created {Token} object.
|
36
|
+
def initialize(client_id, client_secret, code, persist = true)
|
37
|
+
headers = { 'User-Agent': Client::USER_AGENT, 'Accept': 'application/json', 'Content-Type': 'application/json' }
|
38
|
+
params = { code: code, client_id: client_id, client_secret: client_secret, grant_type: 'code', permanent: persist }
|
39
|
+
resp = RestClient.post('https://ruqqus.com/oauth/grant', params, headers )
|
40
|
+
|
41
|
+
@client_id = client_id
|
42
|
+
@client_secret = client_secret
|
43
|
+
@data = JSON.parse(resp.body, symbolize_names: true)
|
44
|
+
|
45
|
+
raise(Ruqqus::Error, 'failed to grant access for token') if @data[:oauth_error]
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
def access_token
|
50
|
+
@data[:access_token]
|
51
|
+
end
|
52
|
+
|
53
|
+
def refresh_token
|
54
|
+
@data[:refresh_token]
|
55
|
+
end
|
56
|
+
|
57
|
+
def type
|
58
|
+
@data[:token_type]
|
59
|
+
end
|
60
|
+
|
61
|
+
def expires
|
62
|
+
Time.at(@data[:expires_at])
|
63
|
+
end
|
64
|
+
|
65
|
+
def scopes
|
66
|
+
@data[:scopes].split(',').map(&:to_sym)
|
67
|
+
end
|
68
|
+
|
69
|
+
##
|
70
|
+
# Refreshes the access token and resets its time of expiration.
|
71
|
+
#
|
72
|
+
# @return [void]
|
73
|
+
def refresh
|
74
|
+
headers = { 'User-Agent': Client::USER_AGENT, Authorization: "Bearer #{access_token}" }
|
75
|
+
params = { client_id: @client_id, client_secret: @client_secret, refresh_token: refresh_token, grant_type: 'refresh' }
|
76
|
+
resp = RestClient.post('https://ruqqus.com/oauth/grant', params, headers )
|
77
|
+
|
78
|
+
data = JSON.parse(resp.body, symbolize_names: true)
|
79
|
+
raise(Ruqqus::Error, 'failed to refresh authentication token') unless resp.code == 200 || data[:oauth_error]
|
80
|
+
@data.merge!(data)
|
81
|
+
@refreshed&.call(self)
|
82
|
+
end
|
83
|
+
|
84
|
+
##
|
85
|
+
# Sets a callback block that will be invoked when the token is refresh. This can be used to automate saving the
|
86
|
+
# token after its gets updated.
|
87
|
+
#
|
88
|
+
# @yieldparam token [Token] yields the token to the block.
|
89
|
+
#
|
90
|
+
# @return [self]
|
91
|
+
#
|
92
|
+
# @example Auto-save updated token
|
93
|
+
# token = Token.load_json('./token.json')
|
94
|
+
# token.on_refresh { |t| t.save_json('./token.json') }
|
95
|
+
def on_refresh(&block)
|
96
|
+
raise(LocalJumpError, "block required") unless block_given?
|
97
|
+
@refreshed = block
|
98
|
+
self
|
99
|
+
end
|
100
|
+
|
101
|
+
##
|
102
|
+
# @return [Boolean] `true` if token is expired, otherwise `false`.
|
103
|
+
def expired?
|
104
|
+
expires <= Time.now
|
105
|
+
end
|
106
|
+
|
107
|
+
##
|
108
|
+
# @return [String] the object as a JSON-formatted string.
|
109
|
+
def to_json
|
110
|
+
{ client_id: @client_id, client_secret: @client_secret, data: @data }.to_json
|
111
|
+
end
|
112
|
+
|
113
|
+
##
|
114
|
+
# Saves this token in JSON format to the specified file.
|
115
|
+
#
|
116
|
+
# @param filename [String] the path to a file where the token will be written to.
|
117
|
+
# @return [Integer] the number of bytes written.
|
118
|
+
# @note **Security Alert:** The token is essentially the equivalent to login credentials in regards to security,
|
119
|
+
# so it is important to not share or store it somewhere that it can be easily compromised.
|
120
|
+
def save_json(filename)
|
121
|
+
File.open(filename, 'wb') { |io| io.write(to_json) }
|
122
|
+
end
|
123
|
+
|
124
|
+
##
|
125
|
+
# Loads a token in JSON format from a file.
|
126
|
+
#
|
127
|
+
# @param filename [String] the path to a file where the token is written to.
|
128
|
+
# @return [Token] a newly created {Token} instance.
|
129
|
+
def self.load_json(filename)
|
130
|
+
from_json(File.read(filename))
|
131
|
+
end
|
132
|
+
|
133
|
+
##
|
134
|
+
# Loads the object from a JSON-formatted string.
|
135
|
+
#
|
136
|
+
# @param json [String] a JSON string representing the object.
|
137
|
+
#
|
138
|
+
# @return [Object] the loaded object.
|
139
|
+
def self.from_json(payload)
|
140
|
+
data = JSON.parse(payload, symbolize_names: true)
|
141
|
+
token = allocate
|
142
|
+
token.instance_variable_set(:@client_id, data[:client_id])
|
143
|
+
token.instance_variable_set(:@client_secret, data[:client_secret])
|
144
|
+
token.instance_variable_set(:@data, data[:data])
|
145
|
+
token
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
data/lib/ruqqus/types.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
|
2
|
+
# Bootstrap script to load all concrete Ruqqus types
|
3
|
+
|
4
|
+
require_relative 'types/item_base'
|
5
|
+
require_relative 'types/submission'
|
6
|
+
require_relative 'types/comment'
|
7
|
+
require_relative 'types/guild'
|
8
|
+
require_relative 'types/post'
|
9
|
+
require_relative 'types/badge'
|
10
|
+
require_relative 'types/title'
|
11
|
+
require_relative 'types/user'
|
File without changes
|
@@ -0,0 +1,38 @@
|
|
1
|
+
|
2
|
+
module Ruqqus
|
3
|
+
|
4
|
+
##
|
5
|
+
# Describes a comment in a post.
|
6
|
+
class Comment < Submission
|
7
|
+
|
8
|
+
##
|
9
|
+
# @return [Integer] the level of "nesting" in the comment tree, starting at `1` when in direct reply to the post.
|
10
|
+
def level
|
11
|
+
@data[:level]
|
12
|
+
end
|
13
|
+
|
14
|
+
##
|
15
|
+
# @return [String] the unique ID of the parent for this comment.
|
16
|
+
def parent_id
|
17
|
+
@data[:parent]
|
18
|
+
end
|
19
|
+
|
20
|
+
##
|
21
|
+
# @return [Boolean] `true` if {#parent_id} refers to a comment, otherwise `false` if a post.
|
22
|
+
def parent_comment?
|
23
|
+
level > 1
|
24
|
+
end
|
25
|
+
|
26
|
+
##
|
27
|
+
# @return [Boolean] `true` if {#parent_id} refers to a post, otherwise `false` if a comment.
|
28
|
+
def parent_post?
|
29
|
+
level == 1
|
30
|
+
end
|
31
|
+
|
32
|
+
##
|
33
|
+
# @return [String] the ID of the post this comment belongs to.
|
34
|
+
def post_id
|
35
|
+
@data[:post]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
File without changes
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'json'
|
2
1
|
|
3
2
|
module Ruqqus
|
4
3
|
|
@@ -46,10 +45,13 @@ module Ruqqus
|
|
46
45
|
##
|
47
46
|
# Loads the object from a JSON-formatted string.
|
48
47
|
#
|
48
|
+
# @param json [String,Hash] a JSON string representing the object.
|
49
|
+
#
|
49
50
|
# @return [Object] the loaded object.
|
50
51
|
def self.from_json(json)
|
51
52
|
obj = allocate
|
52
|
-
|
53
|
+
data = json.is_a?(Hash) ? json : JSON.parse(json, symbolize_names: true)
|
54
|
+
obj.instance_variable_set(:@data, data)
|
53
55
|
obj
|
54
56
|
end
|
55
57
|
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require_relative 'submission'
|
2
1
|
|
3
2
|
module Ruqqus
|
4
3
|
|
@@ -6,10 +5,6 @@ module Ruqqus
|
|
6
5
|
# Represents a post on Ruqqus.
|
7
6
|
class Post < Submission
|
8
7
|
|
9
|
-
##
|
10
|
-
# Captures the ID of a post from a Ruqqus URL
|
11
|
-
POST_REGEX = /ruqqus.com\/post\/([A-Za-z0-9]+)\/?.*/.freeze
|
12
|
-
|
13
8
|
##
|
14
9
|
# @return [Title?] the title assigned to the author, or `nil` if none is defined.
|
15
10
|
def author_title
|
@@ -41,12 +36,6 @@ module Ruqqus
|
|
41
36
|
@data[:original_guild_name]
|
42
37
|
end
|
43
38
|
|
44
|
-
##
|
45
|
-
# @return [Guild] the guild this post was originally posted in.
|
46
|
-
def original_guild
|
47
|
-
@original_guild ||= Ruqqus.guild(original_guild_name)
|
48
|
-
end
|
49
|
-
|
50
39
|
##
|
51
40
|
# @return [String?] the URL of the post's thumbnail image, or `nil` if none exists.
|
52
41
|
def thumb_url
|
@@ -59,27 +48,5 @@ module Ruqqus
|
|
59
48
|
#noinspection RubyYardReturnMatch
|
60
49
|
@data[:url]&.empty? ? nil : @data[:url]
|
61
50
|
end
|
62
|
-
|
63
|
-
##
|
64
|
-
# @return [String] the string representation of the object.
|
65
|
-
def to_s
|
66
|
-
@data[:title] || inspect
|
67
|
-
end
|
68
|
-
|
69
|
-
##
|
70
|
-
# Creates a new {Post} instance from the specified URL.
|
71
|
-
#
|
72
|
-
# @param url [String] a URL link to a post.
|
73
|
-
#
|
74
|
-
# @return [Post] the {Post} instance the URL links to.
|
75
|
-
#
|
76
|
-
# @raise [ArgumentError] then `url` is `nil`.
|
77
|
-
# @raise [Ruqqus::Error] when the link is not for a Ruqqus post.
|
78
|
-
def self.from_url(url)
|
79
|
-
raise(ArgumentError, 'url cannot be nil') unless url
|
80
|
-
match = POST_REGEX.match(url)
|
81
|
-
raise(ArgumentError, 'invalid URL for a post') unless match
|
82
|
-
Ruqqus.post($1)
|
83
|
-
end
|
84
51
|
end
|
85
52
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require_relative 'item_base'
|
2
1
|
|
3
2
|
module Ruqqus
|
4
3
|
|
@@ -13,13 +12,6 @@ module Ruqqus
|
|
13
12
|
@data[:author]
|
14
13
|
end
|
15
14
|
|
16
|
-
##
|
17
|
-
# @return [String] the creator of the item, or `nil` if deleted account.
|
18
|
-
def author
|
19
|
-
#noinspection RubyYardReturnMatch
|
20
|
-
@author ||= author_name ? Ruqqus.user(author_name) : nil
|
21
|
-
end
|
22
|
-
|
23
15
|
##
|
24
16
|
# @return [String] the text body of the item.
|
25
17
|
def body
|
@@ -111,22 +103,15 @@ module Ruqqus
|
|
111
103
|
end
|
112
104
|
|
113
105
|
##
|
114
|
-
# @return [
|
115
|
-
def
|
116
|
-
|
117
|
-
@guild ||= guild_name ? Ruqqus.guild(guild_name) : nil
|
106
|
+
# @return [String] the name/title of this item.
|
107
|
+
def title
|
108
|
+
@data[:title]
|
118
109
|
end
|
119
110
|
|
120
111
|
##
|
121
|
-
# @return [String]
|
122
|
-
def
|
112
|
+
# @return [String] the string representation of the object.
|
113
|
+
def to_s
|
123
114
|
@data[:id]
|
124
115
|
end
|
125
|
-
|
126
|
-
##
|
127
|
-
# @return [String] the name/title of this item.
|
128
|
-
def title
|
129
|
-
@data[:title]
|
130
|
-
end
|
131
116
|
end
|
132
117
|
end
|
File without changes
|
data/lib/ruqqus/version.rb
CHANGED
data/ruqqus.gemspec
CHANGED
@@ -7,8 +7,8 @@ Gem::Specification.new do |spec|
|
|
7
7
|
spec.version = Ruqqus::VERSION
|
8
8
|
spec.authors = ['ForeverZer0']
|
9
9
|
spec.email = ['efreed09@gmail.com']
|
10
|
-
spec.summary = %q{A Ruby API implementation for Ruqqus, an open-source platform for online communities
|
11
|
-
spec.description = %q{A Ruby API implementation for Ruqqus, an open-source platform for online communities, free of censorship and moderator abuse by design.
|
10
|
+
spec.summary = %q{A Ruby API implementation for Ruqqus, an open-source platform for online communities.}
|
11
|
+
spec.description = %q{A Ruby API implementation for Ruqqus, an open-source platform for online communities, free of censorship and moderator abuse by design.}
|
12
12
|
spec.homepage = 'https://github.com/ForeverZer0/ruqqus'
|
13
13
|
spec.license = 'MIT'
|
14
14
|
spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
|
@@ -35,6 +35,8 @@ Gem::Specification.new do |spec|
|
|
35
35
|
# Dependencies
|
36
36
|
spec.add_runtime_dependency('rest-client', '~> 2.1')
|
37
37
|
|
38
|
+
spec.add_development_dependency('mechanize', '~> 2.7')
|
38
39
|
spec.add_development_dependency('rake', '~> 13.0')
|
40
|
+
spec.add_development_dependency('tty-prompt', '~> 0.22')
|
39
41
|
spec.add_development_dependency('yard', '~> 0.9')
|
40
42
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruqqus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ForeverZer0
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: mechanize
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.7'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.7'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +52,20 @@ dependencies:
|
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '13.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: tty-prompt
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.22'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.22'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: yard
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,12 +81,11 @@ dependencies:
|
|
53
81
|
- !ruby/object:Gem::Version
|
54
82
|
version: '0.9'
|
55
83
|
description: A Ruby API implementation for Ruqqus, an open-source platform for online
|
56
|
-
communities, free of censorship and moderator abuse by design.
|
57
|
-
still in Beta at this time and the public API for it is still quite limited, this
|
58
|
-
gem will be actively updated as it continues to grow and is developed.
|
84
|
+
communities, free of censorship and moderator abuse by design.
|
59
85
|
email:
|
60
86
|
- efreed09@gmail.com
|
61
|
-
executables:
|
87
|
+
executables:
|
88
|
+
- ruqqus-oauth
|
62
89
|
extensions: []
|
63
90
|
extra_rdoc_files: []
|
64
91
|
files:
|
@@ -70,17 +97,23 @@ files:
|
|
70
97
|
- LICENSE.txt
|
71
98
|
- README.md
|
72
99
|
- Rakefile
|
100
|
+
- TODO.md
|
73
101
|
- bin/console
|
74
102
|
- bin/setup
|
103
|
+
- exe/ruqqus-oauth
|
75
104
|
- lib/ruqqus.rb
|
76
|
-
- lib/ruqqus/
|
77
|
-
- lib/ruqqus/
|
78
|
-
- lib/ruqqus/
|
79
|
-
- lib/ruqqus/
|
80
|
-
- lib/ruqqus/
|
81
|
-
- lib/ruqqus/
|
82
|
-
- lib/ruqqus/
|
83
|
-
- lib/ruqqus/
|
105
|
+
- lib/ruqqus/client.rb
|
106
|
+
- lib/ruqqus/routes.rb
|
107
|
+
- lib/ruqqus/token.rb
|
108
|
+
- lib/ruqqus/types.rb
|
109
|
+
- lib/ruqqus/types/badge.rb
|
110
|
+
- lib/ruqqus/types/comment.rb
|
111
|
+
- lib/ruqqus/types/guild.rb
|
112
|
+
- lib/ruqqus/types/item_base.rb
|
113
|
+
- lib/ruqqus/types/post.rb
|
114
|
+
- lib/ruqqus/types/submission.rb
|
115
|
+
- lib/ruqqus/types/title.rb
|
116
|
+
- lib/ruqqus/types/user.rb
|
84
117
|
- lib/ruqqus/version.rb
|
85
118
|
- ruqqus.gemspec
|
86
119
|
homepage: https://github.com/ForeverZer0/ruqqus
|
@@ -112,5 +145,5 @@ rubygems_version: 3.1.4
|
|
112
145
|
signing_key:
|
113
146
|
specification_version: 4
|
114
147
|
summary: A Ruby API implementation for Ruqqus, an open-source platform for online
|
115
|
-
communities
|
148
|
+
communities.
|
116
149
|
test_files: []
|