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,67 +0,0 @@
|
|
|
1
|
-
module Redd
|
|
2
|
-
module Client
|
|
3
|
-
class Unauthenticated
|
|
4
|
-
# Methods to interact with other redditors
|
|
5
|
-
module Users
|
|
6
|
-
# Return a User object from the username of a redditor.
|
|
7
|
-
# @param username [String] The username.
|
|
8
|
-
# @return [Redd::Object::User]
|
|
9
|
-
def user(username)
|
|
10
|
-
object_from_response :get, "/user/#{username}/about.json"
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
# @!method get_user_overview
|
|
14
|
-
# @!method get_user_submitted
|
|
15
|
-
# @!method get_user_comments
|
|
16
|
-
# @!method get_user_liked
|
|
17
|
-
# @!method get_user_disliked
|
|
18
|
-
# @!method get_user_hidden
|
|
19
|
-
# @!method get_user_saved
|
|
20
|
-
# @!method get_user_gilded
|
|
21
|
-
#
|
|
22
|
-
# Get the appropriate listing.
|
|
23
|
-
# @param user [Redd::Object::User] The user to query.
|
|
24
|
-
# @param params [Hash] A list of params to send with the request.
|
|
25
|
-
# @return [Redd::Object::Listing]
|
|
26
|
-
#
|
|
27
|
-
# @see #get_user_listing
|
|
28
|
-
%w(
|
|
29
|
-
overview submitted comments liked disliked hidden saved gilded
|
|
30
|
-
).each do |sort|
|
|
31
|
-
define_method :"get_user_#{sort}" do |user, params = {}|
|
|
32
|
-
get_user_listing(user, sort, params)
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
private
|
|
37
|
-
|
|
38
|
-
# Get comments and submissions related to a user.
|
|
39
|
-
#
|
|
40
|
-
# @param user [Redd::Object::User, String] The user to query.
|
|
41
|
-
# @param type [:overview, :submitted, :comments, :liked, :disliked,
|
|
42
|
-
# :hidden, :saved, :gilded] The type of listing to return.
|
|
43
|
-
# @param params [Hash] A list of params to send with the request.
|
|
44
|
-
# @option params [String] :after Return results after the given
|
|
45
|
-
# fullname.
|
|
46
|
-
# @option params [String] :before Return results before the given
|
|
47
|
-
# fullname.
|
|
48
|
-
# @option params [Integer] :count (0) The number of items already seen
|
|
49
|
-
# in the listing.
|
|
50
|
-
# @option params [1..100] :limit (25) The maximum number of things to
|
|
51
|
-
# return.
|
|
52
|
-
# @option params [:hot, :new, :top, :controversial] :sort The order to
|
|
53
|
-
# sort the results by.
|
|
54
|
-
# @option params [:hour, :day, :week, :month, :year, :all] :t The
|
|
55
|
-
# time period to consider when sorting.
|
|
56
|
-
# @return [Redd::Object::Listing] A listing of submissions or comments.
|
|
57
|
-
def get_user_listing(user, type, params = {})
|
|
58
|
-
name = extract_attribute(user, :name)
|
|
59
|
-
path = "/user/#{name}/#{type}.json"
|
|
60
|
-
params[:show] ||= :given
|
|
61
|
-
|
|
62
|
-
object_from_response :get, path, params
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
require "redd/thing"
|
|
2
|
-
require "redd/object/listing"
|
|
3
|
-
require "redd/object/comment"
|
|
4
|
-
require "redd/object/more_comments"
|
|
5
|
-
require "redd/object/private_message"
|
|
6
|
-
require "redd/object/submission"
|
|
7
|
-
require "redd/object/subreddit"
|
|
8
|
-
require "redd/object/user"
|
|
9
|
-
require "redd/object/wiki_page"
|
|
10
|
-
|
|
11
|
-
module Redd
|
|
12
|
-
module Client
|
|
13
|
-
class Unauthenticated
|
|
14
|
-
# Non-API methods that make life easier
|
|
15
|
-
module Utilities
|
|
16
|
-
def comment_stream(*args, &block)
|
|
17
|
-
submission_stream(:comments, *args, &block)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def submission_stream(listing, subreddit = nil, params = {}, &block)
|
|
21
|
-
loop do
|
|
22
|
-
# Get the latest comments from the subreddit. By the way, this line
|
|
23
|
-
# is the one where the sleeping/rate-limiting happens.
|
|
24
|
-
objects = get_listing(listing, subreddit, params)
|
|
25
|
-
unless objects.empty?
|
|
26
|
-
# Run the loop for each of the new comments accessed.
|
|
27
|
-
# I should probably add it to a Set to avoid duplicates.
|
|
28
|
-
objects.reverse_each { |object| block.call(object) }
|
|
29
|
-
# Set the latest comment.
|
|
30
|
-
params[:before] = objects.first.fullname
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
private
|
|
36
|
-
|
|
37
|
-
def extract_attribute(object, attribute)
|
|
38
|
-
case object
|
|
39
|
-
when ::String
|
|
40
|
-
object
|
|
41
|
-
else
|
|
42
|
-
object.send(attribute)
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def extract_fullname(object)
|
|
47
|
-
extract_attribute(object, :fullname)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def extract_id(object)
|
|
51
|
-
extract_attribute(object, :id)
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# rubocop:disable Style/MethodLength, Style/CyclomaticComplexity
|
|
55
|
-
def object_from_kind(kind)
|
|
56
|
-
case kind
|
|
57
|
-
when "Listing"
|
|
58
|
-
Redd::Object::Listing
|
|
59
|
-
when "more"
|
|
60
|
-
Redd::Object::MoreComments
|
|
61
|
-
when "t1"
|
|
62
|
-
Redd::Object::Comment
|
|
63
|
-
when "t2"
|
|
64
|
-
Redd::Object::User
|
|
65
|
-
when "t3"
|
|
66
|
-
Redd::Object::Submission
|
|
67
|
-
when "t4"
|
|
68
|
-
Redd::Object::PrivateMessage
|
|
69
|
-
when "t5"
|
|
70
|
-
Redd::Object::Subreddit
|
|
71
|
-
when "wikipage"
|
|
72
|
-
Redd::Object::WikiPage
|
|
73
|
-
else
|
|
74
|
-
Redd::Thing
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
# rubocop:enable Style/MethodLength, Style/CyclomaticComplexity
|
|
78
|
-
|
|
79
|
-
def objects_from_listing(thing)
|
|
80
|
-
thing[:data][:children].map do |child|
|
|
81
|
-
object_from_body(child)
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def object_from_body(body)
|
|
86
|
-
return nil unless body.is_a?(Hash) && body.key?(:kind)
|
|
87
|
-
object = object_from_kind(body[:kind])
|
|
88
|
-
|
|
89
|
-
if object == Redd::Object::Listing
|
|
90
|
-
body[:data][:children] = objects_from_listing(body)
|
|
91
|
-
object.new(body)
|
|
92
|
-
else
|
|
93
|
-
object.new(self, body)
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def comments_from_response(*args)
|
|
98
|
-
body = request(*args).body[1]
|
|
99
|
-
object_from_body(body)
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
def object_from_response(*args)
|
|
103
|
-
body = request(*args).body
|
|
104
|
-
object_from_body(body)
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
end
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
module Redd
|
|
2
|
-
module Client
|
|
3
|
-
class Unauthenticated
|
|
4
|
-
# Methods to interact with subreddit wikis
|
|
5
|
-
module Wiki
|
|
6
|
-
# Get a list of pages in the subreddit wiki.
|
|
7
|
-
# @param subreddit [Redd::Object::Subreddit, String] The subreddit to
|
|
8
|
-
# look in.
|
|
9
|
-
# @return [Array] An array of wikipage titles.
|
|
10
|
-
def get_wikipages(subreddit = nil)
|
|
11
|
-
name = extract_attribute(subreddit, :display_name)
|
|
12
|
-
|
|
13
|
-
path = "/wiki/pages.json"
|
|
14
|
-
path.prepend("/r/#{name}") if subreddit
|
|
15
|
-
get(path)[:data]
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# Get a wiki page.
|
|
19
|
-
# @param page [String] The title of the wiki page.
|
|
20
|
-
# @param subreddit [Redd::Object::Subreddit, String] The subreddit to
|
|
21
|
-
# look in.
|
|
22
|
-
# @return [Redd::Object::WikiPage] A wiki page.
|
|
23
|
-
def wikipage(page, subreddit = nil)
|
|
24
|
-
name = extract_attribute(subreddit, :display_name)
|
|
25
|
-
|
|
26
|
-
path = "/wiki/#{page}.json"
|
|
27
|
-
path.prepend("/r/#{name}") if subreddit
|
|
28
|
-
object_from_response :get, path
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
data/lib/redd/oauth2_access.rb
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
require "multi_json"
|
|
2
|
-
|
|
3
|
-
module Redd
|
|
4
|
-
# A container for the client's access to their account via OAuth2
|
|
5
|
-
class OAuth2Access
|
|
6
|
-
# @!attribute [r] access_token
|
|
7
|
-
# @return [String] The access token used to access the users account.
|
|
8
|
-
attr_reader :access_token
|
|
9
|
-
|
|
10
|
-
# @!attribute [r] refresh_token
|
|
11
|
-
# @return [String, nil] The refresh token, if the access was permanent.
|
|
12
|
-
attr_reader :refresh_token
|
|
13
|
-
|
|
14
|
-
# @!attribute [r] scope
|
|
15
|
-
# @return [Array] The scope that the client is allowed to access.
|
|
16
|
-
attr_reader :scope
|
|
17
|
-
|
|
18
|
-
# @!attribute [r] duration
|
|
19
|
-
# @return [Symbol] Time the client is given access (temporary/permanent)
|
|
20
|
-
attr_reader :duration
|
|
21
|
-
|
|
22
|
-
# @!attribute [r] expires_at
|
|
23
|
-
# @return [Time] The time when the access token expires.
|
|
24
|
-
attr_reader :expires_at
|
|
25
|
-
|
|
26
|
-
# @param response [String] The response body containing the required info.
|
|
27
|
-
def initialize(response)
|
|
28
|
-
@access_token = response[:access_token]
|
|
29
|
-
@refresh_token = response[:refresh_token]
|
|
30
|
-
@scope = response[:scope].split(",").map { |s| s.to_sym }
|
|
31
|
-
@duration = @refresh_token ? :permanent : :temporary
|
|
32
|
-
@expires_at =
|
|
33
|
-
if response[:expires_at]
|
|
34
|
-
Time.at(response[:expires_at])
|
|
35
|
-
else
|
|
36
|
-
Time.now + response[:expires_in]
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Refresh the object with the new response.
|
|
41
|
-
# This happens when a new access token is requested using a request token.
|
|
42
|
-
# @param response [Hash] The new response body.
|
|
43
|
-
def refresh(response)
|
|
44
|
-
@access_token = response[:access_token]
|
|
45
|
-
@expires_at = Time.now + response[:expires_in]
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# @return [Boolean] Whether the access has expired.
|
|
49
|
-
def expired?
|
|
50
|
-
Time.now > @expires_at
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# @return [String] A JSON representation of the data that can be loaded later.
|
|
54
|
-
def to_json
|
|
55
|
-
MultiJson.dump(
|
|
56
|
-
access_token: @access_token,
|
|
57
|
-
refresh_token: @refresh_token,
|
|
58
|
-
scope: @scope.join(","),
|
|
59
|
-
expires_at: @expires_at.to_i
|
|
60
|
-
)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# Create a new instance of the class from the JSON returned from #to_json
|
|
64
|
-
# @return [OAuth2Access]
|
|
65
|
-
def self.from_json(json)
|
|
66
|
-
hash = MultiJson.load(json, symbolize_keys: true)
|
|
67
|
-
new(hash)
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
data/lib/redd/object/comment.rb
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
require "redd/thing"
|
|
2
|
-
|
|
3
|
-
module Redd
|
|
4
|
-
module Object
|
|
5
|
-
# A comment made on links.
|
|
6
|
-
class Comment < Redd::Thing
|
|
7
|
-
require "redd/thing/commentable"
|
|
8
|
-
require "redd/thing/editable"
|
|
9
|
-
require "redd/thing/inboxable"
|
|
10
|
-
require "redd/thing/moderatable"
|
|
11
|
-
require "redd/thing/reportable"
|
|
12
|
-
require "redd/thing/voteable"
|
|
13
|
-
|
|
14
|
-
include Redd::Thing::Commentable
|
|
15
|
-
include Redd::Thing::Editable
|
|
16
|
-
include Redd::Thing::Inboxable
|
|
17
|
-
include Redd::Thing::Moderatable
|
|
18
|
-
include Redd::Thing::Reportable
|
|
19
|
-
include Redd::Thing::Voteable
|
|
20
|
-
|
|
21
|
-
attr_reader :author
|
|
22
|
-
|
|
23
|
-
attr_reader :edited
|
|
24
|
-
attr_reader :saved
|
|
25
|
-
attr_reader :gilded
|
|
26
|
-
|
|
27
|
-
attr_reader :ups
|
|
28
|
-
attr_reader :downs
|
|
29
|
-
attr_reader :score
|
|
30
|
-
attr_reader :likes
|
|
31
|
-
attr_reader :controversiality
|
|
32
|
-
|
|
33
|
-
attr_reader :banned_by
|
|
34
|
-
attr_reader :approved_by
|
|
35
|
-
attr_reader :score_hidden
|
|
36
|
-
attr_reader :distinguished
|
|
37
|
-
attr_reader :num_reports
|
|
38
|
-
|
|
39
|
-
attr_reader :parent_id
|
|
40
|
-
attr_reader :link_id
|
|
41
|
-
attr_reader :body
|
|
42
|
-
attr_reader :body_html
|
|
43
|
-
attr_reader :author_flair_text
|
|
44
|
-
attr_reader :author_flair_css_class
|
|
45
|
-
|
|
46
|
-
alias_method :reports_count, :num_reports
|
|
47
|
-
|
|
48
|
-
def comments
|
|
49
|
-
@comments ||= client.get_replies(self)
|
|
50
|
-
end
|
|
51
|
-
alias_method :replies, :comments
|
|
52
|
-
|
|
53
|
-
def subreddit
|
|
54
|
-
@subreddit ||= client.subreddit(@attributes[:subreddit])
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def submission
|
|
58
|
-
@submission ||= client.get_info(id: link_id).first
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def created
|
|
62
|
-
@created ||= Time.at(@attributes[:created_utc])
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def root?
|
|
66
|
-
!parent_id || parent_id == link_id
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def gilded?
|
|
70
|
-
gilded > 0
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
data/lib/redd/object/listing.rb
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
require "forwardable"
|
|
2
|
-
|
|
3
|
-
module Redd
|
|
4
|
-
module Object
|
|
5
|
-
# A listing of various reddit things.
|
|
6
|
-
# @see http://www.reddit.com/dev/api#listings
|
|
7
|
-
# @see http://stackoverflow.com/a/2080118
|
|
8
|
-
class Listing
|
|
9
|
-
include Enumerable
|
|
10
|
-
extend Forwardable
|
|
11
|
-
def_delegators :@things, :[], :length, :size, :each, :map, :empty?
|
|
12
|
-
|
|
13
|
-
# @!attribute [r] things
|
|
14
|
-
# @return [Array] A list of things in the listing.
|
|
15
|
-
attr_reader :things
|
|
16
|
-
|
|
17
|
-
attr_reader :kind
|
|
18
|
-
attr_reader :after
|
|
19
|
-
attr_reader :before
|
|
20
|
-
|
|
21
|
-
def initialize(listing)
|
|
22
|
-
@kind = "Listing"
|
|
23
|
-
@things = listing[:data][:children]
|
|
24
|
-
@after = listing[:data][:after]
|
|
25
|
-
@before = listing[:data][:before]
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
module Redd
|
|
2
|
-
module Object
|
|
3
|
-
# The model for a morecomments object
|
|
4
|
-
class MoreComments < Redd::Base
|
|
5
|
-
attr_reader :count
|
|
6
|
-
attr_reader :parent_id
|
|
7
|
-
attr_reader :children
|
|
8
|
-
|
|
9
|
-
def expand(submission = nil)
|
|
10
|
-
client.expand_morecomments(self, submission)
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
require "redd/thing"
|
|
2
|
-
|
|
3
|
-
module Redd
|
|
4
|
-
module Object
|
|
5
|
-
# The model for private messages
|
|
6
|
-
class PrivateMessage < Redd::Thing
|
|
7
|
-
require "redd/thing/inboxable"
|
|
8
|
-
|
|
9
|
-
include Redd::Thing::Inboxable
|
|
10
|
-
|
|
11
|
-
attr_reader :body
|
|
12
|
-
attr_reader :body_html
|
|
13
|
-
attr_reader :subreddit
|
|
14
|
-
attr_reader :parent_id
|
|
15
|
-
attr_reader :distinguished
|
|
16
|
-
attr_reader :was_comment
|
|
17
|
-
attr_reader :first_message_name
|
|
18
|
-
attr_reader :context
|
|
19
|
-
|
|
20
|
-
attr_reader :dest
|
|
21
|
-
attr_reader :author
|
|
22
|
-
|
|
23
|
-
alias_method :from, :author
|
|
24
|
-
alias_method :to, :dest
|
|
25
|
-
|
|
26
|
-
def created
|
|
27
|
-
@created ||= Time.at(@attributes[:created_utc])
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def replies
|
|
31
|
-
@replies ||= client.objects_from_listing(@attributes[:replies])
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
require "redd/thing"
|
|
2
|
-
|
|
3
|
-
module Redd
|
|
4
|
-
module Object
|
|
5
|
-
# A submission made in a subreddit.
|
|
6
|
-
class Submission < Redd::Thing
|
|
7
|
-
require "redd/thing/commentable"
|
|
8
|
-
require "redd/thing/editable"
|
|
9
|
-
require "redd/thing/hideable"
|
|
10
|
-
require "redd/thing/moderatable"
|
|
11
|
-
require "redd/thing/reportable"
|
|
12
|
-
require "redd/thing/saveable"
|
|
13
|
-
require "redd/thing/voteable"
|
|
14
|
-
|
|
15
|
-
include Redd::Thing::Commentable
|
|
16
|
-
include Redd::Thing::Editable
|
|
17
|
-
include Redd::Thing::Hideable
|
|
18
|
-
include Redd::Thing::Moderatable
|
|
19
|
-
include Redd::Thing::Saveable
|
|
20
|
-
include Redd::Thing::Voteable
|
|
21
|
-
|
|
22
|
-
attr_reader :author
|
|
23
|
-
|
|
24
|
-
attr_reader :edited
|
|
25
|
-
attr_reader :saved
|
|
26
|
-
attr_reader :gilded
|
|
27
|
-
attr_reader :clicked
|
|
28
|
-
attr_reader :visited
|
|
29
|
-
attr_reader :stickied
|
|
30
|
-
attr_reader :hidden
|
|
31
|
-
|
|
32
|
-
attr_reader :ups
|
|
33
|
-
attr_reader :downs
|
|
34
|
-
attr_reader :score
|
|
35
|
-
attr_reader :likes
|
|
36
|
-
|
|
37
|
-
attr_reader :banned_by
|
|
38
|
-
attr_reader :approved_by
|
|
39
|
-
attr_reader :distinguished
|
|
40
|
-
attr_reader :num_reports
|
|
41
|
-
|
|
42
|
-
attr_reader :link_flair_text
|
|
43
|
-
attr_reader :link_flair_css_class
|
|
44
|
-
attr_reader :author_flair_css_class
|
|
45
|
-
attr_reader :author_flair_text
|
|
46
|
-
|
|
47
|
-
attr_reader :domain
|
|
48
|
-
attr_reader :media
|
|
49
|
-
attr_reader :media_embed
|
|
50
|
-
attr_reader :selftext
|
|
51
|
-
attr_reader :selftext_html
|
|
52
|
-
attr_reader :secure_media
|
|
53
|
-
attr_reader :secure_media_embed
|
|
54
|
-
attr_reader :over_18
|
|
55
|
-
attr_reader :thumbnail
|
|
56
|
-
attr_reader :is_self
|
|
57
|
-
attr_reader :url
|
|
58
|
-
attr_reader :title
|
|
59
|
-
attr_reader :num_comments
|
|
60
|
-
|
|
61
|
-
alias_method :nsfw?, :over_18
|
|
62
|
-
alias_method :self?, :is_self
|
|
63
|
-
alias_method :comments_count, :num_comments
|
|
64
|
-
|
|
65
|
-
def subreddit_name
|
|
66
|
-
@subreddit_name ||= @attributes[:subreddit]
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def subreddit
|
|
70
|
-
@subreddit ||= client.subreddit(@attributes[:subreddit])
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def comments
|
|
74
|
-
@comments ||= client.submission_comments(id)
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def created
|
|
78
|
-
@created ||= Time.at(@attributes[:created_utc])
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def permalink
|
|
82
|
-
"http://www.reddit.com" + attributes[:permalink]
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def short_url
|
|
86
|
-
"http://redd.it/" + id
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def gilded?
|
|
90
|
-
gilded > 0
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
end
|