redd 0.6.5 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|