NeonRAW 0.1.6 → 0.1.7
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/CHANGELOG.md +22 -0
- data/NeonRAW.gemspec +5 -4
- data/lib/NeonRAW/clients/base.rb +9 -7
- data/lib/NeonRAW/clients/base/objectbuilder.rb +8 -5
- data/lib/NeonRAW/clients/base/utilities.rb +36 -3
- data/lib/NeonRAW/clients/installed.rb +2 -0
- data/lib/NeonRAW/clients/script.rb +2 -0
- data/lib/NeonRAW/clients/web.rb +2 -0
- data/lib/NeonRAW/errors.rb +49 -58
- data/lib/NeonRAW/objects/all.rb +20 -2
- data/lib/NeonRAW/objects/comment.rb +19 -5
- data/lib/NeonRAW/objects/inboxcomment.rb +4 -1
- data/lib/NeonRAW/objects/me.rb +17 -28
- data/lib/NeonRAW/objects/modlogaction.rb +3 -0
- data/lib/NeonRAW/objects/modloguser.rb +3 -0
- data/lib/NeonRAW/objects/morecomments.rb +15 -12
- data/lib/NeonRAW/objects/multireddit.rb +4 -1
- data/lib/NeonRAW/objects/popular.rb +57 -0
- data/lib/NeonRAW/objects/privatemessage.rb +6 -3
- data/lib/NeonRAW/objects/rule.rb +3 -0
- data/lib/NeonRAW/objects/submission.rb +44 -5
- data/lib/NeonRAW/objects/subreddit.rb +9 -10
- data/lib/NeonRAW/objects/subreddit/flair.rb +7 -4
- data/lib/NeonRAW/objects/subreddit/moderation.rb +8 -8
- data/lib/NeonRAW/objects/subreddit/utilities.rb +44 -27
- data/lib/NeonRAW/objects/thing/inboxable.rb +1 -1
- data/lib/NeonRAW/objects/thing/moderateable.rb +7 -4
- data/lib/NeonRAW/objects/thing/refreshable.rb +1 -3
- data/lib/NeonRAW/objects/thing/votable.rb +1 -1
- data/lib/NeonRAW/objects/user.rb +51 -19
- data/lib/NeonRAW/objects/wikipage.rb +5 -2
- data/lib/NeonRAW/objects/wikipagerevision.rb +4 -1
- data/lib/NeonRAW/version.rb +1 -1
- metadata +25 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 258edd85169bec9950d3370ab238087bac331a55
|
4
|
+
data.tar.gz: b1b1e668cf8f36d2a32597c2cbb5e6233e90e3ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e9be8fd451588cb2de972a140273f6cf57934319523d6141dddef76259213789e2124bbe4590353ad9243710eb4006af4dbf3e5d1e30e592b097553c61fa587e
|
7
|
+
data.tar.gz: b36701af359541c021ff5b2fef8e4efb768cb208e0a133fc2b70071ede231ff8c7f77f82de133112dc0922f81c1725617a15c57fab573000eee83a2bf02cd75e
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
## 0.1.7
|
2
|
+
|
3
|
+
* Changed Me#purge! so you can now edit archived posts.
|
4
|
+
* Error handling has been refactored a bit.
|
5
|
+
* Refactored how subreddit#submit buildings submission objects.
|
6
|
+
* Renamed Comment#link_id and Comment#parent_id to link_name and parent_name.
|
7
|
+
* \#distinguished renamed to distinguished!
|
8
|
+
* Subreddit#info was moved to client#info and returns a listing now.
|
9
|
+
* User/Me objects now have a \#username attribute and \#name returns the object's fullname now.
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
* Content streams have been added to user and subreddit objects.
|
14
|
+
* Added support for /r/popular.
|
15
|
+
* You can now sticky distinguished comments.
|
16
|
+
* MoreComments object has a comment? method now to make sifting through listings easier.
|
17
|
+
* Hashie is now a runtime dependency.
|
18
|
+
* You can now fetch duplicates of submissions.
|
19
|
+
* Comments now have a permalink method.
|
20
|
+
* User objects have a \#suspended? attribute now.
|
21
|
+
* Subreddits have a \#moderators method now.
|
22
|
+
|
1
23
|
## 0.1.6
|
2
24
|
|
3
25
|
### Added
|
data/NeonRAW.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.email = ['sirneon618@gmail.com']
|
12
12
|
spec.summary = 'A Reddit API wrapper for Ruby.'
|
13
13
|
spec.description = 'SirNeon\'s wonderful API wrapper for Reddit. BETA'
|
14
|
-
spec.homepage = 'https://
|
14
|
+
spec.homepage = 'https://github.com/SirNeon618/NeonRAW'
|
15
15
|
spec.license = 'MPL-2.0'
|
16
16
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
17
|
spec.bindir = 'exe'
|
@@ -19,8 +19,9 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
spec.required_ruby_version = '>= 2.1.0'
|
21
21
|
|
22
|
-
spec.add_development_dependency 'bundler', '~> 1.
|
23
|
-
spec.add_development_dependency 'rake', '~>
|
22
|
+
spec.add_development_dependency 'bundler', '~> 1.13'
|
23
|
+
spec.add_development_dependency 'rake', '~> 12.0'
|
24
24
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
25
|
-
spec.add_dependency 'typhoeus', '~> 0
|
25
|
+
spec.add_dependency 'typhoeus', '~> 1.0'
|
26
|
+
spec.add_dependency 'hashie', '~> 3.5'
|
26
27
|
end
|
data/lib/NeonRAW/clients/base.rb
CHANGED
@@ -25,13 +25,15 @@ module NeonRAW
|
|
25
25
|
end
|
26
26
|
|
27
27
|
# Connects to Reddit for oAuth2 requests.
|
28
|
-
# @!method api_connection(path, meth, params)
|
28
|
+
# @!method api_connection(path, meth, params, opts = {}, json = true)
|
29
29
|
# @param path [String] The API path.
|
30
30
|
# @param meth [Symbol] The request method.
|
31
31
|
# @param params [Hash] The parameters.
|
32
32
|
# @param opts [Hash] Optional parameters for the request body.
|
33
|
+
# @param json [Boolean] Whether or not the expected response will be JSON.
|
33
34
|
# @return [Typhoeus::Response] Returns the response.
|
34
|
-
def api_connection(path, meth, params, opts = {})
|
35
|
+
def api_connection(path, meth, params, opts = {}, json = true)
|
36
|
+
sleep(@ratelimit_reset) if @requests_remaining <= 0
|
35
37
|
response = Typhoeus::Request.new(
|
36
38
|
'https://oauth.reddit.com' + path,
|
37
39
|
method: meth,
|
@@ -39,9 +41,9 @@ module NeonRAW
|
|
39
41
|
headers: api_headers,
|
40
42
|
params: params
|
41
43
|
).run
|
42
|
-
error = assign_errors(response)
|
44
|
+
error = assign_errors(response, json)
|
43
45
|
raise error unless error.nil?
|
44
|
-
|
46
|
+
update_ratelimit_info(response.headers)
|
45
47
|
response
|
46
48
|
end
|
47
49
|
|
@@ -59,7 +61,7 @@ module NeonRAW
|
|
59
61
|
headers: { 'User-Agent' => @user_agent },
|
60
62
|
params: params
|
61
63
|
).run
|
62
|
-
error = assign_errors(response)
|
64
|
+
error = assign_errors(response, true)
|
63
65
|
raise error unless error.nil?
|
64
66
|
response
|
65
67
|
end
|
@@ -77,7 +79,7 @@ module NeonRAW
|
|
77
79
|
end
|
78
80
|
|
79
81
|
# Requests data from Reddit.
|
80
|
-
# @!method request_data(path, meth, params = {})
|
82
|
+
# @!method request_data(path, meth, params = {}, opts = {})
|
81
83
|
# @param path [String] The API path to connect to.
|
82
84
|
# @param meth [Symbol] The request method to use.
|
83
85
|
# @param params [Hash] Parameters for the request.
|
@@ -102,7 +104,7 @@ module NeonRAW
|
|
102
104
|
# via the request body.
|
103
105
|
def request_nonjson(path, meth, params = {}, opts = {})
|
104
106
|
refresh_access! if @access.expired?
|
105
|
-
api_connection(path, meth, params, opts).body
|
107
|
+
api_connection(path, meth, params, opts, false).body
|
106
108
|
end
|
107
109
|
end
|
108
110
|
end
|
@@ -4,6 +4,7 @@ require_relative '../../objects/me'
|
|
4
4
|
require_relative '../../objects/multireddit'
|
5
5
|
require_relative '../../objects/wikipage'
|
6
6
|
require_relative '../../objects/all'
|
7
|
+
require_relative '../../objects/popular'
|
7
8
|
|
8
9
|
module NeonRAW
|
9
10
|
module Clients
|
@@ -38,13 +39,15 @@ module NeonRAW
|
|
38
39
|
# Fetches a subreddit.
|
39
40
|
# @!method subreddit(name)
|
40
41
|
# @param name [String] The name of the subreddit.
|
41
|
-
# @return [NeonRAW::Objects::Subreddit/All] Returns the
|
42
|
-
# object.
|
42
|
+
# @return [NeonRAW::Objects::Subreddit/All/Popular] Returns the
|
43
|
+
# subreddit/all/popular object.
|
43
44
|
def subreddit(name)
|
44
45
|
if name == 'all'
|
45
46
|
Objects::All.new(self)
|
47
|
+
elsif name == 'popular'
|
48
|
+
Objects::Popular.new(self)
|
46
49
|
else
|
47
|
-
data = request_data("/r/#{name}/about
|
50
|
+
data = request_data("/r/#{name}/about", :get)[:data]
|
48
51
|
Objects::Subreddit.new(self, data)
|
49
52
|
end
|
50
53
|
end
|
@@ -54,7 +57,7 @@ module NeonRAW
|
|
54
57
|
# @param name [String] The name of the user.
|
55
58
|
# @return [NeonRAW::Objects::User] Returns the user object.
|
56
59
|
def user(name)
|
57
|
-
data = request_data("/user/#{name}/about
|
60
|
+
data = request_data("/user/#{name}/about", :get)[:data]
|
58
61
|
Objects::User.new(self, data)
|
59
62
|
end
|
60
63
|
|
@@ -162,7 +165,7 @@ module NeonRAW
|
|
162
165
|
# @return [NeonRAW::Objects::WikiPage] Returns the wiki page object.
|
163
166
|
def wikipage(page)
|
164
167
|
params = { page: page }
|
165
|
-
path = "/wiki/#{page}
|
168
|
+
path = "/wiki/#{page}"
|
166
169
|
data = request_data(path, :get, params)
|
167
170
|
data[:data][:name] = page
|
168
171
|
Objects::WikiPage.new(self, data[:data])
|
@@ -27,7 +27,7 @@ module NeonRAW
|
|
27
27
|
# @option params :show [String] Literally the string 'all'.
|
28
28
|
# @return [NeonRAW::Objects::Listing] Returns a listing of all the
|
29
29
|
# subreddits.
|
30
|
-
%w
|
30
|
+
%w[popular new gold defaults].each do |type|
|
31
31
|
define_method :"#{type}" do |params = { limit: 25 }|
|
32
32
|
type.chop! if type == 'defaults'
|
33
33
|
build_listing("/subreddits/#{type}", params)
|
@@ -45,7 +45,7 @@ module NeonRAW
|
|
45
45
|
stack = comments.dup
|
46
46
|
until stack.empty?
|
47
47
|
comment = stack.shift
|
48
|
-
if comment.is_a?(Objects::Comment)
|
48
|
+
if comment.is_a?(Objects::Comment) # MoreComments can be mixed in.
|
49
49
|
replies = comment.replies
|
50
50
|
stack = replies + stack unless replies.nil?
|
51
51
|
end
|
@@ -58,8 +58,41 @@ module NeonRAW
|
|
58
58
|
# @!method wikipages
|
59
59
|
# @return [Array<String>] Returns a list of wiki pages.
|
60
60
|
def wikipages
|
61
|
-
request_data('/wiki/pages
|
61
|
+
request_data('/wiki/pages', :get)[:data]
|
62
62
|
end
|
63
|
+
|
64
|
+
# Streams listing items continuously.
|
65
|
+
# @!method stream(path, params)
|
66
|
+
# @param path [String] The API path for the listing you want streamed.
|
67
|
+
# @param params [Hash] The optional parameters for the request.
|
68
|
+
# @return [Enumerator] Returns an enumerator for the streamed data.
|
69
|
+
def stream(path, params)
|
70
|
+
Enumerator.new do |data_stream|
|
71
|
+
before = params[:before]
|
72
|
+
loop do
|
73
|
+
params[:before] = before
|
74
|
+
listing = build_listing(path, params)
|
75
|
+
listing.each { |thing| data_stream << thing }
|
76
|
+
before = listing.first.name unless listing.empty?
|
77
|
+
sleep(1)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Get info on a link/comment/subreddit.
|
83
|
+
# @!method info(params = {})
|
84
|
+
# @param params [Hash] The parameters.
|
85
|
+
# @option params :name [String] The fullname of the thing.
|
86
|
+
# @option params :url [String] The URL of the thing.
|
87
|
+
# @return [NeonRAW::Objects::Listing] Returns a listing with the items.
|
88
|
+
# @note :name and :url can take multiple fullnames separated by commas.
|
89
|
+
# @see https://www.reddit.com/dev/api#fullnames
|
90
|
+
def info(params = {})
|
91
|
+
params[:id] = params[:name]
|
92
|
+
params.delete(:name)
|
93
|
+
build_listing('/api/info', params)
|
94
|
+
end
|
95
|
+
private :stream
|
63
96
|
end
|
64
97
|
end
|
65
98
|
end
|
@@ -8,6 +8,8 @@ module NeonRAW
|
|
8
8
|
def initialize(client_id, redirect_uri, opts = {})
|
9
9
|
@client_id = client_id
|
10
10
|
@redirect_uri = redirect_uri
|
11
|
+
@requests_remaining = 1
|
12
|
+
@ratelimit_reset = 0
|
11
13
|
@user_agent = opts[:user_agent] ||
|
12
14
|
"Powered by NeonRAW v#{NeonRAW::VERSION}"
|
13
15
|
end
|
@@ -10,6 +10,8 @@ module NeonRAW
|
|
10
10
|
@client_id = client_id
|
11
11
|
@secret = secret
|
12
12
|
@redirect_uri = opts[:redirect_uri] || 'http://127.0.0.1:'
|
13
|
+
@requests_remaining = 1
|
14
|
+
@ratelimit_reset = 0
|
13
15
|
@user_agent = opts[:user_agent] ||
|
14
16
|
"Powered by NeonRAW v#{NeonRAW::VERSION}"
|
15
17
|
authorize!
|
data/lib/NeonRAW/clients/web.rb
CHANGED
data/lib/NeonRAW/errors.rb
CHANGED
@@ -1,35 +1,43 @@
|
|
1
1
|
# rubocop:disable all
|
2
2
|
|
3
|
+
require 'hashie'
|
4
|
+
|
3
5
|
module NeonRAW
|
4
6
|
# Methods and classes for handling errors.
|
5
7
|
module Errors
|
6
8
|
# Reads the HTTP status of the Typhoeus response and gives an exception to
|
7
9
|
# raise.
|
8
|
-
# @!method assign_errors(response)
|
10
|
+
# @!method assign_errors(response, json)
|
9
11
|
# @param response [Typhoeus::Response] The response object.
|
12
|
+
# @param json [Boolean] Whether or not the response is JSON.
|
10
13
|
# @return [StandardError, nil] Returns either the exception or nil if there
|
11
14
|
# is none.
|
12
|
-
def assign_errors(response)
|
15
|
+
def assign_errors(response, json)
|
13
16
|
code = response.code
|
14
17
|
body = response.body
|
15
18
|
case code
|
16
19
|
when 200
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
20
|
+
if json
|
21
|
+
errors = JSON.parse(body, symbolize_names: true)
|
22
|
+
errors.extend(Hashie::Extensions::DeepFind)
|
23
|
+
errors = errors.deep_find(:error) || errors.deep_find(:errors)
|
24
|
+
errors = errors.first if errors.is_a?(Array)
|
25
|
+
case errors
|
26
|
+
when /access_denied/i then OAuth2AccessDenied
|
27
|
+
when /unsupported_response_type/i then InvalidResponseType
|
28
|
+
when /unsupported_grant_type/i then InvalidGrantType
|
29
|
+
when /invalid_scope/i then InvalidScope
|
30
|
+
when /invalid_request/i then InvalidRequest
|
31
|
+
when /invalid_grant/i then InvalidCredentials
|
32
|
+
when /wrong_password/i then InvalidCredentials
|
33
|
+
when /bad_captcha/i then InvalidCaptcha
|
34
|
+
when /ratelimit/i then RateLimited
|
35
|
+
when /quota_filled/i then QuotaFilled
|
36
|
+
when /bad_css_name/i then InvalidClassName
|
37
|
+
when /too_much_flair_css/i then TooManyClassNames
|
38
|
+
when /user_required/i then AuthenticationRequired
|
39
|
+
when /bad_flair_target/i then BadFlairTarget
|
40
|
+
end
|
33
41
|
end
|
34
42
|
when 302 then UnexpectedRedirect
|
35
43
|
when 400 then BadRequest
|
@@ -57,39 +65,30 @@ module NeonRAW
|
|
57
65
|
# @param data [Array, Hash] The data.
|
58
66
|
def parse_errors(data)
|
59
67
|
# handles returns from toggleable methods
|
60
|
-
assign_data_errors([]) if data.empty?
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
assign_data_errors([]) unless data[:json].key?(:errors)
|
70
|
-
if data[:json][:errors].is_a?(Array)
|
71
|
-
errors = data[:json][:errors][0] || []
|
72
|
-
assign_data_errors(errors)
|
73
|
-
else
|
74
|
-
errors = data[:json][:errors] || []
|
75
|
-
assign_data_errors(errors)
|
76
|
-
end
|
77
|
-
elsif data.key?(:errors) # handles image uploading
|
78
|
-
errors = data[:errors] || []
|
79
|
-
assign_data_errors(errors)
|
80
|
-
elsif data.key?(:jquery) # handles submitting submissions
|
81
|
-
errors = data[:jquery][-7][3]
|
82
|
-
assign_data_errors(errors)
|
68
|
+
return assign_data_errors([]) if data.empty?
|
69
|
+
data.extend(Hashie::Extensions::DeepFind)
|
70
|
+
|
71
|
+
errors = data.deep_find(:errors)
|
72
|
+
return assign_data_errors([]) if errors.nil? || errors.empty?
|
73
|
+
return assign_data_errors(errors.first) if errors.first.is_a?(Array)
|
74
|
+
if errors.is_a?(Hash)
|
75
|
+
messages = errors.map { |_key, error| error } # handles multireddits
|
76
|
+
return assign_data_errors(messages)
|
83
77
|
end
|
78
|
+
return assign_data_errors(errors)
|
84
79
|
end
|
85
80
|
|
86
|
-
# Checks data for any errors that wouldn't have otherwise
|
81
|
+
# Checks data for any errors that wouldn't have otherwise raised an
|
87
82
|
# exception.
|
88
83
|
# @!method assign_data_errors(errors)
|
89
84
|
# @param errors [Array<String>] The errors.
|
90
85
|
def assign_data_errors(errors)
|
91
86
|
return nil if errors.empty?
|
92
|
-
error = errors.first
|
87
|
+
error = if errors.first == :row # handles flair errors
|
88
|
+
errors[1]
|
89
|
+
else
|
90
|
+
errors.first
|
91
|
+
end
|
93
92
|
case error
|
94
93
|
when /improperly formatted row/i then BadFlairRowFormat
|
95
94
|
when /no_subject/i then NoSubject
|
@@ -121,16 +120,16 @@ module NeonRAW
|
|
121
120
|
when /unable to resolve user/i then CouldntResolveUser
|
122
121
|
when /sr_rule_exists/i then RuleExists
|
123
122
|
when /sr_rule_too_many/i then TooManyRules
|
123
|
+
when /too_old/i then Archived
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
127
127
|
# Manages the API ratelimit for requesting stuff from Reddit.
|
128
|
-
# @!method
|
128
|
+
# @!method update_ratelimit_info(headers)
|
129
129
|
# @param headers [Hash] The Typhoeus response headers.
|
130
|
-
def
|
131
|
-
requests_remaining = headers['X-Ratelimit-Remaining'].to_i
|
132
|
-
ratelimit_reset = headers['X-Ratelimit-Reset'].to_i
|
133
|
-
sleep(ratelimit_reset) if requests_remaining <= 0
|
130
|
+
def update_ratelimit_info(headers)
|
131
|
+
@requests_remaining = headers['X-Ratelimit-Remaining'].to_i
|
132
|
+
@ratelimit_reset = headers['X-Ratelimit-Reset'].to_i
|
134
133
|
end
|
135
134
|
|
136
135
|
# That URL has already been submitted.
|
@@ -142,7 +141,7 @@ module NeonRAW
|
|
142
141
|
|
143
142
|
# Thing is archived and can't be edited/replied to.
|
144
143
|
class Archived < StandardError
|
145
|
-
def initialize(msg = 'This thing is too old to
|
144
|
+
def initialize(msg = 'This thing is too old to reply to.')
|
146
145
|
super(msg)
|
147
146
|
end
|
148
147
|
end
|
@@ -232,14 +231,6 @@ module NeonRAW
|
|
232
231
|
end
|
233
232
|
end
|
234
233
|
|
235
|
-
# You already received an access token using this code. They're only good
|
236
|
-
# for one use.
|
237
|
-
class ExpiredCode < StandardError
|
238
|
-
def initialize(msg = 'The code used to get the access token has expired.')
|
239
|
-
super(msg)
|
240
|
-
end
|
241
|
-
end
|
242
|
-
|
243
234
|
# Only gold-only subreddits can do that.
|
244
235
|
class GoldOnlySrRequired < StandardError
|
245
236
|
def initialize(msg = 'Only gold-only subreddits can do that.')
|
@@ -284,7 +275,7 @@ module NeonRAW
|
|
284
275
|
|
285
276
|
# Your username/password is wrong.
|
286
277
|
class InvalidCredentials < StandardError
|
287
|
-
def initialize(msg = 'Invalid username/password')
|
278
|
+
def initialize(msg = 'Invalid username/password/client id/secret')
|
288
279
|
super(msg)
|
289
280
|
end
|
290
281
|
end
|
data/lib/NeonRAW/objects/all.rb
CHANGED
@@ -28,12 +28,30 @@ module NeonRAW
|
|
28
28
|
# @option params :limit [1..1000] The number of items to fetch.
|
29
29
|
# @option params :show [String] Literally the string 'all'.
|
30
30
|
# @return [NeonRAW::Objects::Listing] Returns the listing object.
|
31
|
-
%w
|
31
|
+
%w[hot rising top old new controversial comments].each do |type|
|
32
32
|
define_method :"#{type}" do |params = { limit: 25 }|
|
33
|
-
path = "/r/all/#{type}
|
33
|
+
path = "/r/all/#{type}"
|
34
34
|
@client.send(:build_listing, path, params)
|
35
35
|
end
|
36
36
|
end
|
37
|
+
|
38
|
+
# Streams content from /r/all.
|
39
|
+
# @!method stream(queue, params = { limit: 25 })
|
40
|
+
# @param queue [Symbol] The queue to get data from [hot, top, new,
|
41
|
+
# controversial, gilded, comments]
|
42
|
+
# @param params [Hash] The parameters for the request.
|
43
|
+
# @option params :t [String] Time for relevant sorting [hour, day, week,
|
44
|
+
# month, year, all]
|
45
|
+
# @option params :after [String] The name of the next data block.
|
46
|
+
# @option params :before [String] The name of the previous data block.
|
47
|
+
# @option params :count [Integer] The number of items already in the
|
48
|
+
# listing.
|
49
|
+
# @option params :limit [1..1000] The number of items to fetch.
|
50
|
+
# @option params :show [String] Literally the string 'all'.
|
51
|
+
# @return [Enumerator] Returns an enumerator for the streamed data.
|
52
|
+
def stream(queue, params = { limit: 25 })
|
53
|
+
@client.send(:stream, "/r/all/#{queue}", params)
|
54
|
+
end
|
37
55
|
end
|
38
56
|
end
|
39
57
|
end
|