redd 0.6.5 → 0.7.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.
- checksums.yaml +4 -4
- data/.gitignore +34 -33
- data/.rspec +3 -4
- data/.rubocop.yml +5 -5
- data/.travis.yml +9 -7
- data/{LICENSE.md → LICENSE.txt} +22 -22
- data/README.md +126 -241
- data/Rakefile +5 -6
- data/{RedditKit.LICENSE.md → RedditKit.LICENSE.txt} +13 -13
- data/lib/redd.rb +50 -4
- data/lib/redd/access.rb +76 -0
- data/lib/redd/clients/base.rb +178 -0
- data/lib/redd/clients/base/account.rb +20 -0
- data/lib/redd/clients/base/identity.rb +22 -0
- data/lib/redd/clients/base/none.rb +27 -0
- data/lib/redd/clients/base/privatemessages.rb +28 -0
- data/lib/redd/clients/base/read.rb +66 -0
- data/lib/redd/clients/base/stream.rb +74 -0
- data/lib/redd/clients/base/submit.rb +54 -0
- data/lib/redd/clients/base/utilities.rb +80 -0
- data/lib/redd/clients/base/wikiread.rb +33 -0
- data/lib/redd/clients/installed.rb +55 -0
- data/lib/redd/clients/script.rb +37 -0
- data/lib/redd/clients/userless.rb +31 -0
- data/lib/redd/clients/web.rb +57 -0
- data/lib/redd/error.rb +138 -153
- data/lib/redd/objects/base.rb +36 -0
- data/lib/redd/objects/comment.rb +22 -0
- data/lib/redd/objects/listing.rb +29 -0
- data/lib/redd/objects/more_comments.rb +10 -0
- data/lib/redd/objects/private_message.rb +18 -0
- data/lib/redd/objects/submission.rb +72 -0
- data/lib/redd/objects/subreddit.rb +152 -0
- data/lib/redd/objects/thing.rb +33 -0
- data/lib/redd/objects/thing/editable.rb +22 -0
- data/lib/redd/objects/thing/hideable.rb +18 -0
- data/lib/redd/objects/thing/inboxable.rb +25 -0
- data/lib/redd/objects/thing/messageable.rb +34 -0
- data/lib/redd/objects/thing/moderatable.rb +43 -0
- data/lib/redd/objects/thing/refreshable.rb +14 -0
- data/lib/redd/objects/thing/saveable.rb +21 -0
- data/lib/redd/objects/thing/votable.rb +33 -0
- data/lib/redd/objects/user.rb +52 -0
- data/lib/redd/objects/wiki_page.rb +15 -0
- data/lib/redd/rate_limit.rb +50 -49
- data/lib/redd/response/parse_json.rb +17 -33
- data/lib/redd/response/raise_error.rb +16 -25
- data/lib/redd/version.rb +4 -5
- data/redd.gemspec +30 -31
- data/spec/redd/objects/base_spec.rb +1 -0
- data/spec/redd/rate_limit_spec.rb +29 -29
- data/spec/redd/response/parse_json_spec.rb +12 -0
- data/spec/redd/response/raise_error_spec.rb +11 -0
- data/spec/redd_spec.rb +7 -5
- data/spec/spec_helper.rb +69 -50
- metadata +73 -136
- data/.yardopts +0 -1
- data/lib/redd/base.rb +0 -56
- data/lib/redd/client/authenticated.rb +0 -83
- data/lib/redd/client/authenticated/account.rb +0 -13
- data/lib/redd/client/authenticated/apps.rb +0 -13
- data/lib/redd/client/authenticated/flair.rb +0 -71
- data/lib/redd/client/authenticated/gold.rb +0 -13
- data/lib/redd/client/authenticated/links_comments.rb +0 -189
- data/lib/redd/client/authenticated/live.rb +0 -13
- data/lib/redd/client/authenticated/moderation.rb +0 -126
- data/lib/redd/client/authenticated/multis.rb +0 -9
- data/lib/redd/client/authenticated/private_messages.rb +0 -73
- data/lib/redd/client/authenticated/subreddits.rb +0 -172
- data/lib/redd/client/authenticated/users.rb +0 -9
- data/lib/redd/client/authenticated/wiki.rb +0 -9
- data/lib/redd/client/oauth2.rb +0 -71
- data/lib/redd/client/oauth2/authorization.rb +0 -108
- data/lib/redd/client/oauth2/identity.rb +0 -16
- data/lib/redd/client/oauth2_script.rb +0 -24
- data/lib/redd/client/oauth2_script/authorization.rb +0 -21
- data/lib/redd/client/unauthenticated.rb +0 -118
- data/lib/redd/client/unauthenticated/account.rb +0 -30
- data/lib/redd/client/unauthenticated/captcha.rb +0 -27
- data/lib/redd/client/unauthenticated/links_comments.rb +0 -60
- data/lib/redd/client/unauthenticated/listing.rb +0 -65
- data/lib/redd/client/unauthenticated/live.rb +0 -9
- data/lib/redd/client/unauthenticated/moderation.rb +0 -26
- data/lib/redd/client/unauthenticated/subreddits.rb +0 -49
- data/lib/redd/client/unauthenticated/users.rb +0 -67
- data/lib/redd/client/unauthenticated/utilities.rb +0 -109
- data/lib/redd/client/unauthenticated/wiki.rb +0 -33
- data/lib/redd/oauth2_access.rb +0 -70
- data/lib/redd/object/comment.rb +0 -74
- data/lib/redd/object/listing.rb +0 -29
- data/lib/redd/object/more_comments.rb +0 -14
- data/lib/redd/object/private_message.rb +0 -35
- data/lib/redd/object/submission.rb +0 -94
- data/lib/redd/object/subreddit.rb +0 -74
- data/lib/redd/object/user.rb +0 -34
- data/lib/redd/object/wiki_page.rb +0 -27
- data/lib/redd/thing.rb +0 -27
- data/lib/redd/thing/commentable.rb +0 -27
- data/lib/redd/thing/editable.rb +0 -16
- data/lib/redd/thing/hideable.rb +0 -16
- data/lib/redd/thing/inboxable.rb +0 -20
- data/lib/redd/thing/messageable.rb +0 -12
- data/lib/redd/thing/moderatable.rb +0 -32
- data/lib/redd/thing/reportable.rb +0 -12
- data/lib/redd/thing/saveable.rb +0 -16
- data/lib/redd/thing/voteable.rb +0 -22
- data/spec/README.md +0 -18
- data/spec/redd/base_spec.rb +0 -36
- data/spec/redd/client/authenticated/account_spec.rb +0 -5
- data/spec/redd/client/authenticated/apps_spec.rb +0 -2
- data/spec/redd/client/authenticated/flair_spec.rb +0 -26
- data/spec/redd/client/authenticated/gold_spec.rb +0 -2
- data/spec/redd/client/authenticated/links_comments_spec.rb +0 -231
- data/spec/redd/client/authenticated/live_spec.rb +0 -2
- data/spec/redd/client/unauthenticated/account_spec.rb +0 -15
- data/spec/redd/client/unauthenticated/captcha_spec.rb +0 -23
- data/spec/redd/client/unauthenticated/links_comments_spec.rb +0 -28
- data/spec/redd/client/unauthenticated/listing_spec.rb +0 -23
- data/spec/redd/client/unauthenticated/live_spec.rb +0 -2
- data/spec/redd/client/unauthenticated/moderation_spec.rb +0 -14
- data/spec/redd/client/unauthenticated/subreddits_spec.rb +0 -35
- data/spec/redd/client/unauthenticated/users_spec.rb +0 -34
- data/spec/redd/client/unauthenticated/wiki_spec.rb +0 -18
- data/spec/redd/oauth2_access_spec.rb +0 -83
- data/spec/redd/thing_spec.rb +0 -22
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
module Redd
|
|
2
|
-
module Client
|
|
3
|
-
class OAuth2
|
|
4
|
-
# Methods to interact with the user logged-in via OAuth2
|
|
5
|
-
module Identity
|
|
6
|
-
# @return [Redd::Object::User] The logged-in user.
|
|
7
|
-
# @note This overrides the Authenticated class's method, since that
|
|
8
|
-
# method doesn't apply here but does the same thing.
|
|
9
|
-
def me
|
|
10
|
-
response = get "/api/v1/me.json"
|
|
11
|
-
object_from_body kind: "t2", data: response
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
require "redd/client/oauth2"
|
|
2
|
-
|
|
3
|
-
module Redd
|
|
4
|
-
module Client
|
|
5
|
-
class OAuth2Script < Redd::Client::OAuth2
|
|
6
|
-
require "redd/client/oauth2_script/authorization"
|
|
7
|
-
|
|
8
|
-
include Redd::Client::OAuth2Script::Authorization
|
|
9
|
-
|
|
10
|
-
attr_reader :username
|
|
11
|
-
|
|
12
|
-
def initialize(client_id, secret, username, password, options = {})
|
|
13
|
-
@client_id = client_id
|
|
14
|
-
@secret = secret
|
|
15
|
-
@username = username
|
|
16
|
-
@password = password
|
|
17
|
-
|
|
18
|
-
@rate_limit = options[:rate_limit] || Redd::RateLimit.new(1)
|
|
19
|
-
@api_endpoint = options[:api_endpoint] || "https://oauth.reddit.com/"
|
|
20
|
-
@auth_endpoint = options[:auth_endpoint] || "https://ssl.reddit.com/"
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
require "redd/oauth2_access"
|
|
2
|
-
|
|
3
|
-
module Redd
|
|
4
|
-
module Client
|
|
5
|
-
class OAuth2Script
|
|
6
|
-
# Methods for obtaining an access token
|
|
7
|
-
module Authorization
|
|
8
|
-
def request_access(set_access = true)
|
|
9
|
-
response = auth_connection.post "/api/v1/access_token",
|
|
10
|
-
grant_type: "password",
|
|
11
|
-
username: @username,
|
|
12
|
-
password: @password
|
|
13
|
-
|
|
14
|
-
access = Redd::OAuth2Access.new(response.body)
|
|
15
|
-
@access = access if set_access
|
|
16
|
-
access
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
require "faraday"
|
|
2
|
-
require "redd/version"
|
|
3
|
-
require "redd/rate_limit"
|
|
4
|
-
require "redd/response/parse_json"
|
|
5
|
-
require "redd/response/raise_error"
|
|
6
|
-
|
|
7
|
-
module Redd
|
|
8
|
-
module Client
|
|
9
|
-
# The Client used to connect without needing login credentials.
|
|
10
|
-
class Unauthenticated
|
|
11
|
-
require "redd/client/unauthenticated/account"
|
|
12
|
-
require "redd/client/unauthenticated/captcha"
|
|
13
|
-
require "redd/client/unauthenticated/links_comments"
|
|
14
|
-
require "redd/client/unauthenticated/listing"
|
|
15
|
-
require "redd/client/unauthenticated/live"
|
|
16
|
-
require "redd/client/unauthenticated/moderation"
|
|
17
|
-
require "redd/client/unauthenticated/subreddits"
|
|
18
|
-
require "redd/client/unauthenticated/utilities"
|
|
19
|
-
require "redd/client/unauthenticated/users"
|
|
20
|
-
require "redd/client/unauthenticated/wiki"
|
|
21
|
-
|
|
22
|
-
include Redd::Client::Unauthenticated::Account
|
|
23
|
-
include Redd::Client::Unauthenticated::Captcha
|
|
24
|
-
include Redd::Client::Unauthenticated::LinksComments
|
|
25
|
-
include Redd::Client::Unauthenticated::Listing
|
|
26
|
-
include Redd::Client::Unauthenticated::Live
|
|
27
|
-
include Redd::Client::Unauthenticated::Moderation
|
|
28
|
-
include Redd::Client::Unauthenticated::Subreddits
|
|
29
|
-
include Redd::Client::Unauthenticated::Utilities
|
|
30
|
-
include Redd::Client::Unauthenticated::Users
|
|
31
|
-
include Redd::Client::Unauthenticated::Wiki
|
|
32
|
-
|
|
33
|
-
# @!attribute [r] api_endpoint
|
|
34
|
-
# @return [String] The site to connect to.
|
|
35
|
-
attr_accessor :api_endpoint
|
|
36
|
-
|
|
37
|
-
# @!attribute [r] user_agent
|
|
38
|
-
# @return [String] The user-agent used to communicate with reddit.
|
|
39
|
-
attr_accessor :user_agent
|
|
40
|
-
|
|
41
|
-
# @!attribute [r] rate_limit
|
|
42
|
-
# @return [#after_limit] The handler that takes care of rate limiting.
|
|
43
|
-
attr_accessor :rate_limit
|
|
44
|
-
|
|
45
|
-
# Set up an unauthenticated connection to reddit.
|
|
46
|
-
#
|
|
47
|
-
# @param [Hash] options A hash of options to connect using.
|
|
48
|
-
# @option options [#after_limit] :rate_limit The handler that takes care
|
|
49
|
-
# of rate limiting.
|
|
50
|
-
# @option options [String] :user_agent The User-Agent string to use in the
|
|
51
|
-
# header of every request.
|
|
52
|
-
# @option options [String] :api_endpoint The main domain to connect
|
|
53
|
-
# to, in this case, the URL for reddit.
|
|
54
|
-
def initialize(options = {})
|
|
55
|
-
@rate_limit = options[:rate_limit] || Redd::RateLimit.new
|
|
56
|
-
@user_agent = options[:user_agent] || "Redd/Ruby, v#{Redd::VERSION}"
|
|
57
|
-
@api_endpoint = options[:api_endpoint] || "https://www.reddit.com/"
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
private
|
|
61
|
-
|
|
62
|
-
# @return [Hash] The headers that are sent with every request.
|
|
63
|
-
def headers
|
|
64
|
-
@headers ||= {"User-Agent" => @user_agent}
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# Gets the Faraday connection or creates one if it doesn't exist yet.
|
|
68
|
-
#
|
|
69
|
-
# @return [Faraday] A new or existing Faraday connection.
|
|
70
|
-
def connection
|
|
71
|
-
@connection ||= Faraday.new(url: api_endpoint) do |faraday|
|
|
72
|
-
faraday.use Faraday::Request::UrlEncoded
|
|
73
|
-
faraday.use Redd::Response::RaiseError
|
|
74
|
-
faraday.use Redd::Response::ParseJson
|
|
75
|
-
faraday.adapter Faraday.default_adapter
|
|
76
|
-
|
|
77
|
-
faraday.headers = headers
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
# Send a request to the given path.
|
|
82
|
-
#
|
|
83
|
-
# @param [#to_sym] method The HTTP verb to use.
|
|
84
|
-
# @param [String] path The path under the api endpoint to request from.
|
|
85
|
-
# @param [Hash] params The additional parameters to send.
|
|
86
|
-
# @return [Faraday::Response] The faraday response.
|
|
87
|
-
def request(method, path, params = {})
|
|
88
|
-
rate_limit.after_limit do
|
|
89
|
-
connection.send(method.to_sym, path, params)
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
# Performs a GET request via {#request}.
|
|
94
|
-
# @see #request
|
|
95
|
-
def get(*args)
|
|
96
|
-
request(:get, *args).body
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
# Performs a POST request via {#request}.
|
|
100
|
-
# @see #request
|
|
101
|
-
def post(*args)
|
|
102
|
-
request(:post, *args).body
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
# Performs a PUT request via {#request}.
|
|
106
|
-
# @see #request
|
|
107
|
-
def put(*args)
|
|
108
|
-
request(:put, *args).body
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
# Performs a DELETE request via {#request}.
|
|
112
|
-
# @see #request
|
|
113
|
-
def delete(*args)
|
|
114
|
-
request(:delete, *args).body
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
module Redd
|
|
2
|
-
module Client
|
|
3
|
-
class Unauthenticated
|
|
4
|
-
# Methods for managing accounts.
|
|
5
|
-
module Account
|
|
6
|
-
# Login to the reddit account.
|
|
7
|
-
#
|
|
8
|
-
# @param username [String] The username.
|
|
9
|
-
# @param password [String] The password.
|
|
10
|
-
# @param remember [Boolean] Indicates whether you intend to use the
|
|
11
|
-
# returned cookie for a long time.
|
|
12
|
-
# @param options [Hash] The options to create an instance of
|
|
13
|
-
# {Redd::Client::Authenticated}.
|
|
14
|
-
def login(username, password, remember = false, options = {})
|
|
15
|
-
response = post "/api/login",
|
|
16
|
-
api_type: "json",
|
|
17
|
-
user: username,
|
|
18
|
-
passwd: password,
|
|
19
|
-
rem: remember
|
|
20
|
-
data = response[:json][:data]
|
|
21
|
-
|
|
22
|
-
require "redd/client/authenticated"
|
|
23
|
-
Redd::Client::Authenticated.new(
|
|
24
|
-
data[:cookie], data[:modhash], options
|
|
25
|
-
)
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
module Redd
|
|
2
|
-
module Client
|
|
3
|
-
class Unauthenticated
|
|
4
|
-
# Methods to get captchas.
|
|
5
|
-
# Many things like sending messages and posting links require captchas.
|
|
6
|
-
module Captcha
|
|
7
|
-
# @return [Boolean] Whether a captcha is required for some API methods.
|
|
8
|
-
def needs_captcha?
|
|
9
|
-
get "/api/needs_captcha.json"
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
# Create a new captcha identifier.
|
|
13
|
-
# @return [String] The identifier.
|
|
14
|
-
def new_captcha
|
|
15
|
-
response = post "/api/new_captcha", api_type: "json"
|
|
16
|
-
response[:json][:data][:iden]
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
# @param identifier [String] The captcha identifier.
|
|
20
|
-
# @return The url for the captcha image.
|
|
21
|
-
def captcha_url(identifier)
|
|
22
|
-
"http://www.reddit.com/captcha/#{identifier}.png"
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
module Redd
|
|
2
|
-
module Client
|
|
3
|
-
class Unauthenticated
|
|
4
|
-
module LinksComments
|
|
5
|
-
# @param params [Hash] A hash of parameters to send to reddit.
|
|
6
|
-
# @option params [String] :id The fullname of a thing.
|
|
7
|
-
# @option params [String] :url The url of a thing. If an id is also
|
|
8
|
-
# provided, the id will take precedence.
|
|
9
|
-
# @return [Redd::Object::Listing] Listing of the object or objects.
|
|
10
|
-
#
|
|
11
|
-
# @note Reddit does accept a subreddit, but with fullnames and urls, I
|
|
12
|
-
# assumed that was unnecessary.
|
|
13
|
-
def get_info(params = {})
|
|
14
|
-
object_from_response :get, "/api/info.json", params
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
# Get the comments for a submission.
|
|
18
|
-
#
|
|
19
|
-
# @param submission [String, Redd::Object::Submission] The submission
|
|
20
|
-
# to get the comments for.
|
|
21
|
-
# @return [Redd::Object::Listing] A listing of comments.
|
|
22
|
-
def submission_comments(submission)
|
|
23
|
-
id = extract_id(submission)
|
|
24
|
-
comments_from_response :get, "/comments/#{id}.json"
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# Get the replies for a comment.
|
|
28
|
-
#
|
|
29
|
-
# @param comment [String, Redd::Object::Submission] The comment to get
|
|
30
|
-
# the replies for.
|
|
31
|
-
# @return [Redd::Object::Listing] A listing of comments.
|
|
32
|
-
def get_replies(comment)
|
|
33
|
-
replies = comment.attributes[:replies]
|
|
34
|
-
return [] unless replies.is_a?(Hash) && replies.key?(:kind)
|
|
35
|
-
object_from_body(replies)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def expand_morecomments(morecomments, submission = nil)
|
|
39
|
-
parent_id = morecomments.parent_id
|
|
40
|
-
link_id =
|
|
41
|
-
if submission
|
|
42
|
-
extract_fullname(submission)
|
|
43
|
-
elsif parent_id.start_with?("t3_")
|
|
44
|
-
parent_id
|
|
45
|
-
elsif parent_id.start_with?("t1_")
|
|
46
|
-
get_info(id: parent_id).first.link_id
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
response = post "/api/morechildren.json",
|
|
50
|
-
api_type: "json",
|
|
51
|
-
link_id: link_id,
|
|
52
|
-
children: morecomments.children.join(",")
|
|
53
|
-
comments = response[:json][:data][:things]
|
|
54
|
-
|
|
55
|
-
object_from_body(kind: "Listing", data: {children: comments})
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
module Redd
|
|
2
|
-
module Client
|
|
3
|
-
class Unauthenticated
|
|
4
|
-
# Methods that return a listing
|
|
5
|
-
module Listing
|
|
6
|
-
# Get an object based on its id.
|
|
7
|
-
#
|
|
8
|
-
# @param fullname [String] The fullname of a thing.
|
|
9
|
-
# @return [Redd::Object] The object with the id.
|
|
10
|
-
def by_id(fullname)
|
|
11
|
-
object_from_response :get, "/by_id/#{fullname}.json"
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
# @!method get_hot
|
|
15
|
-
# @!method get_new
|
|
16
|
-
# @!method get_top
|
|
17
|
-
# @!method get_controversial
|
|
18
|
-
# @!method get_comments
|
|
19
|
-
#
|
|
20
|
-
# Get the appropriate listing.
|
|
21
|
-
# @param subreddit [Redd::Object::Subreddit] The subreddit to query.
|
|
22
|
-
# @param params [Hash] A list of params to send with the request.
|
|
23
|
-
# @return [Redd::Object::Listing]
|
|
24
|
-
#
|
|
25
|
-
# @see #get_listing
|
|
26
|
-
%w(hot new top controversial comments).each do |sort|
|
|
27
|
-
define_method :"get_#{sort}" do |subreddit = nil, params = {}|
|
|
28
|
-
get_listing(sort, subreddit, params)
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
private
|
|
33
|
-
|
|
34
|
-
# Get the front page of reddit or a subreddit sorted by type.
|
|
35
|
-
#
|
|
36
|
-
# @param type [:hot, :new, :random, :top, :controversial, :comments]
|
|
37
|
-
# The type of listing to return
|
|
38
|
-
# @param subreddit [Redd::Object::Subreddit, String] The subreddit to
|
|
39
|
-
# query.
|
|
40
|
-
# @param params [Hash] A list of params to send with the request.
|
|
41
|
-
# @option params [String] :after Return results after the given
|
|
42
|
-
# fullname.
|
|
43
|
-
# @option params [String] :before Return results before the given
|
|
44
|
-
# fullname.
|
|
45
|
-
# @option params [Integer] :count (0) The number of items already seen
|
|
46
|
-
# in the listing.
|
|
47
|
-
# @option params [1..100] :limit (25) The maximum number of things to
|
|
48
|
-
# return.
|
|
49
|
-
# @option params [:hour, :day, :week, :month, :year, :all] :t The
|
|
50
|
-
# time period to consider when sorting.
|
|
51
|
-
# @return [Redd::Object::Listing] A listing of submissions or comments.
|
|
52
|
-
#
|
|
53
|
-
# @note The option :t only applies to the top and controversial sorts.
|
|
54
|
-
def get_listing(type, subreddit = nil, params = {})
|
|
55
|
-
name = extract_attribute(subreddit, :display_name) if subreddit
|
|
56
|
-
|
|
57
|
-
path = "/#{type}.json"
|
|
58
|
-
path = path.prepend("/r/#{name}") if name
|
|
59
|
-
|
|
60
|
-
object_from_response :get, path, params
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
module Redd
|
|
2
|
-
module Client
|
|
3
|
-
class Unauthenticated
|
|
4
|
-
# Methods that deal with subreddit styles
|
|
5
|
-
module Moderation
|
|
6
|
-
# @param subreddit [Redd::Object::Subreddit, String] The subreddit to
|
|
7
|
-
# query.
|
|
8
|
-
# @return [String] The url for the subreddit's css stylesheet.
|
|
9
|
-
def stylesheet_url(subreddit = nil)
|
|
10
|
-
name = extract_attribute(subreddit, :display_name) if subreddit
|
|
11
|
-
path = "/stylesheet"
|
|
12
|
-
path = path.prepend("/r/#{name}") if subreddit
|
|
13
|
-
|
|
14
|
-
request(:get, path).headers[:location]
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
# @param subreddit [Redd::Object::Subreddit, String] The subreddit to
|
|
18
|
-
# query.
|
|
19
|
-
# @return [String] The css stylesheet for the subreddit.
|
|
20
|
-
def stylesheet(subreddit = nil)
|
|
21
|
-
get stylesheet_url(subreddit)
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
module Redd
|
|
2
|
-
module Client
|
|
3
|
-
class Unauthenticated
|
|
4
|
-
# Methods that deal with subreddits
|
|
5
|
-
module Subreddits
|
|
6
|
-
# Return a Subreddit object from the title of a subreddit.
|
|
7
|
-
# @param title [String] The name of the subreddit.
|
|
8
|
-
# @return [Redd::Object::Subreddit]
|
|
9
|
-
def subreddit(title)
|
|
10
|
-
object_from_response :get, "/r/#{title}/about.json"
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
# Get a list of subreddits sorted by the given parameter.
|
|
14
|
-
# @param where [:popular, :new] The type of subreddits to look for.
|
|
15
|
-
# @param params [Hash] A hash of parameters to send with the request.
|
|
16
|
-
# @option params [String] :after Return results after the given
|
|
17
|
-
# fullname.
|
|
18
|
-
# @option params [String] :before Return results before the given
|
|
19
|
-
# fullname.
|
|
20
|
-
# @option params [Integer] :count (0) The number of items already seen
|
|
21
|
-
# in the listing.
|
|
22
|
-
# @option params [1..100] :limit (25) The maximum number of things to
|
|
23
|
-
# return.
|
|
24
|
-
# @return [Redd::Object::Listing] A listing of subreddits.
|
|
25
|
-
def get_subreddits(where = :popular, params = {})
|
|
26
|
-
object_from_response :get, "/subreddits/#{where}.json", params
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# Look for subreddits matching the given query.
|
|
30
|
-
#
|
|
31
|
-
# @param query [String] The search query.
|
|
32
|
-
# @param params [Hash] A hash of parameters to send with the request.
|
|
33
|
-
# @option params [String] :after Return results after the given
|
|
34
|
-
# fullname.
|
|
35
|
-
# @option params [String] :before Return results before the given
|
|
36
|
-
# fullname.
|
|
37
|
-
# @option params [Integer] :count (0) The number of items already seen
|
|
38
|
-
# in the listing.
|
|
39
|
-
# @option params [1..100] :limit (25) The maximum number of things to
|
|
40
|
-
# return.
|
|
41
|
-
# @return [Redd::Object::Listing] A listing of subreddits.
|
|
42
|
-
def search_subreddits(query, params = {})
|
|
43
|
-
params[:q] = query
|
|
44
|
-
object_from_response :get, "/subreddits/search.json", params
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|