redd 0.6.2 → 0.6.3
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 +5 -10
- data/.rspec +1 -1
- data/README.md +2 -0
- data/Rakefile +0 -4
- data/lib/redd/client/unauthenticated.rb +2 -0
- data/lib/redd/client/unauthenticated/captcha.rb +1 -1
- data/lib/redd/client/unauthenticated/listing.rb +1 -2
- data/lib/redd/client/unauthenticated/subreddits.rb +2 -3
- data/lib/redd/client/unauthenticated/users.rb +66 -0
- data/lib/redd/version.rb +1 -1
- data/redd.gemspec +1 -3
- data/spec/README.md +18 -0
- data/spec/redd/base_spec.rb +36 -0
- data/spec/redd/client/authenticated/account_spec.rb +5 -0
- data/spec/redd/client/authenticated/apps_spec.rb +2 -0
- data/spec/redd/client/authenticated/flair_spec.rb +26 -0
- data/spec/redd/client/authenticated/gold_spec.rb +2 -0
- data/spec/redd/client/authenticated/links_comments_spec.rb +231 -0
- data/spec/redd/client/authenticated/live_spec.rb +2 -0
- data/spec/redd/client/unauthenticated/account_spec.rb +15 -0
- data/spec/redd/client/unauthenticated/captcha_spec.rb +23 -0
- data/spec/redd/client/unauthenticated/links_comments_spec.rb +28 -0
- data/spec/redd/client/unauthenticated/listing_spec.rb +23 -0
- data/spec/redd/client/unauthenticated/live_spec.rb +2 -0
- data/spec/redd/client/unauthenticated/moderation_spec.rb +14 -0
- data/spec/redd/client/unauthenticated/subreddits_spec.rb +35 -0
- data/spec/redd/client/unauthenticated/users_spec.rb +34 -0
- data/spec/redd/client/unauthenticated/wiki_spec.rb +18 -0
- data/spec/redd/oauth2_access_spec.rb +83 -0
- data/spec/redd/thing_spec.rb +22 -0
- data/spec/spec_helper.rb +16 -0
- metadata +41 -32
- data/spec/redd/client/unauthenticated_spec.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0369bfc4c491d26f3330c1644d9f5724d9ad583a
|
4
|
+
data.tar.gz: 3b3507c642e26bc6b7817965c1fcdfb1f4fde177
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5bcc787430010a207c9375df1d7a3be3f9689e3bd116cadb7aa4123141776271b3db74ede823c484e502128cfc75fdd53a428dc7286c8815f73e579b40673844
|
7
|
+
data.tar.gz: 117dbdf5f5e4fc0fa5d93055a3bde0136d7bbc6e29dcc2aa1d972bb9c496911671e03eb8eab1833137f18346b48c1d73cd07741dc4375ac20a8b3d00c86a8b03
|
data/.gitignore
CHANGED
@@ -9,15 +9,6 @@
|
|
9
9
|
/test/version_tmp/
|
10
10
|
/tmp/
|
11
11
|
|
12
|
-
## Working on Codio!
|
13
|
-
# Seriously, it's free and it's awesome.
|
14
|
-
.codio
|
15
|
-
|
16
|
-
## Specific to RubyMotion:
|
17
|
-
.dat*
|
18
|
-
.repl_history
|
19
|
-
build/
|
20
|
-
|
21
12
|
## Documentation cache and generated files:
|
22
13
|
/.yardoc/
|
23
14
|
/_yardoc/
|
@@ -35,4 +26,8 @@ Gemfile.lock
|
|
35
26
|
.ruby-gemset
|
36
27
|
|
37
28
|
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
38
|
-
.rvmrc
|
29
|
+
.rvmrc
|
30
|
+
|
31
|
+
# Ignore VCR cassettes. It helps for testing quickly, but we want to test
|
32
|
+
# against the latest API.
|
33
|
+
/spec/cassettes
|
data/.rspec
CHANGED
data/README.md
CHANGED
@@ -221,6 +221,8 @@ Extending any ruby library, including redd is incredibly easy. Let's try this ou
|
|
221
221
|
## Contributing
|
222
222
|
[Fork the repository](https://github.com/avidw/redd/fork), [create a pull request](https://github.com/avidw/redd/compare) and [go nuts](https://i.imgur.com/lz7hOlC.jpg).
|
223
223
|
|
224
|
+
*You don't have to run the tests, Travis CI will automatically do that with my testing subreddit and account when you submit a pull request.*
|
225
|
+
|
224
226
|
## Supported Rubies
|
225
227
|
This gem aims to work on the following rubies:
|
226
228
|
|
data/Rakefile
CHANGED
@@ -16,6 +16,7 @@ module Redd
|
|
16
16
|
require "redd/client/unauthenticated/moderation"
|
17
17
|
require "redd/client/unauthenticated/subreddits"
|
18
18
|
require "redd/client/unauthenticated/utilities"
|
19
|
+
require "redd/client/unauthenticated/users"
|
19
20
|
require "redd/client/unauthenticated/wiki"
|
20
21
|
|
21
22
|
include Redd::Client::Unauthenticated::Account
|
@@ -26,6 +27,7 @@ module Redd
|
|
26
27
|
include Redd::Client::Unauthenticated::Moderation
|
27
28
|
include Redd::Client::Unauthenticated::Subreddits
|
28
29
|
include Redd::Client::Unauthenticated::Utilities
|
30
|
+
include Redd::Client::Unauthenticated::Users
|
29
31
|
include Redd::Client::Unauthenticated::Wiki
|
30
32
|
|
31
33
|
# @!attribute [r] api_endpoint
|
@@ -12,7 +12,7 @@ module Redd
|
|
12
12
|
# Create a new captcha identifier.
|
13
13
|
# @return [String] The identifier.
|
14
14
|
def new_captcha
|
15
|
-
response =
|
15
|
+
response = post "/api/new_captcha", api_type: "json"
|
16
16
|
response[:json][:data][:iden]
|
17
17
|
end
|
18
18
|
|
@@ -13,7 +13,6 @@ module Redd
|
|
13
13
|
|
14
14
|
# @!method get_hot
|
15
15
|
# @!method get_new
|
16
|
-
# @!method get_random
|
17
16
|
# @!method get_top
|
18
17
|
# @!method get_controversial
|
19
18
|
# @!method get_comments
|
@@ -23,7 +22,7 @@ module Redd
|
|
23
22
|
# @param params [Hash] A list of params to send with the request.
|
24
23
|
#
|
25
24
|
# @see #get_listing
|
26
|
-
%w(hot new
|
25
|
+
%w(hot new top controversial comments).each do |sort|
|
27
26
|
define_method :"get_#{sort}" do |subreddit = nil, params = {}|
|
28
27
|
get_listing(sort, subreddit, params)
|
29
28
|
end
|
@@ -11,8 +11,7 @@ module Redd
|
|
11
11
|
end
|
12
12
|
|
13
13
|
# Get a list of subreddits sorted by the given parameter.
|
14
|
-
# @param where [:
|
15
|
-
# The type of subreddits to look for.
|
14
|
+
# @param where [:popular, :new] The type of subreddits to look for.
|
16
15
|
# @param params [Hash] A hash of parameters to send with the request.
|
17
16
|
# @option params [String] :after Return results after the given
|
18
17
|
# fullname.
|
@@ -41,7 +40,7 @@ module Redd
|
|
41
40
|
# return.
|
42
41
|
# @return [Redd::Object::Listing] A listing of subreddits.
|
43
42
|
def search_subreddits(query, params = {})
|
44
|
-
params
|
43
|
+
params[:q] = query
|
45
44
|
object_from_response :get, "/subreddits/search.json", params
|
46
45
|
end
|
47
46
|
end
|
@@ -0,0 +1,66 @@
|
|
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
|
+
#
|
26
|
+
# @see #get_user_listing
|
27
|
+
%w(
|
28
|
+
overview submitted comments liked disliked hidden saved gilded
|
29
|
+
).each do |sort|
|
30
|
+
define_method :"get_user_#{sort}" do |user, params = {}|
|
31
|
+
get_user_listing(user, sort, params)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
# Get comments and submissions related to a user.
|
38
|
+
#
|
39
|
+
# @param user [Redd::Object::User, String] The user to query.
|
40
|
+
# @param type [:overview, :submitted, :comments, :liked, :disliked,
|
41
|
+
# :hidden, :saved, :gilded] The type of listing to return.
|
42
|
+
# @param params [Hash] A list of params to send with the request.
|
43
|
+
# @option params [String] :after Return results after the given
|
44
|
+
# fullname.
|
45
|
+
# @option params [String] :before Return results before the given
|
46
|
+
# fullname.
|
47
|
+
# @option params [Integer] :count (0) The number of items already seen
|
48
|
+
# in the listing.
|
49
|
+
# @option params [1..100] :limit (25) The maximum number of things to
|
50
|
+
# return.
|
51
|
+
# @option params [:hot, :new, :top, :controversial] :sort The order to
|
52
|
+
# sort the results by.
|
53
|
+
# @option params [:hour, :day, :week, :month, :year, :all] :t The
|
54
|
+
# time period to consider when sorting.
|
55
|
+
# @return [Redd::Object::Listing] A listing of submissions or comments.
|
56
|
+
def get_user_listing(user, type, params = {})
|
57
|
+
name = extract_attribute(user, :name)
|
58
|
+
path = "/user/#{name}/#{type}.json"
|
59
|
+
params[:show] ||= :given
|
60
|
+
|
61
|
+
object_from_response :get, path, params
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/redd/version.rb
CHANGED
data/redd.gemspec
CHANGED
@@ -18,10 +18,8 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.test_files = s.files.grep(/^(test|spec|features)\//)
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
|
-
s.add_development_dependency "bundler"
|
22
|
-
s.add_development_dependency "rubocop"
|
21
|
+
s.add_development_dependency "bundler"
|
23
22
|
s.add_development_dependency "rake"
|
24
|
-
s.add_development_dependency "yard"
|
25
23
|
s.add_development_dependency "rspec"
|
26
24
|
s.add_development_dependency "vcr"
|
27
25
|
s.add_development_dependency "webmock"
|
data/spec/README.md
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
## Setting up the testing environment on reddit
|
2
|
+
|
3
|
+
# Create a subreddit for testing.
|
4
|
+
$ export REDDIT_SUBREDDIT=redd_testing
|
5
|
+
|
6
|
+
# Create an account for testing. You can use your reddit account.
|
7
|
+
$ export REDDIT_USERNAME=redd-testing
|
8
|
+
$ export REDDIT_PASSWORD=????????
|
9
|
+
|
10
|
+
# Create an example post on the subreddit
|
11
|
+
$ export REDDIT_LINKID=t3_2gngbm
|
12
|
+
|
13
|
+
# Create a page on the wiki with the following name
|
14
|
+
# Remember to make the wiki set to "mod editing"
|
15
|
+
$ export REDDIT_WIKIPAGE=redd_wiki_test
|
16
|
+
|
17
|
+
# Grab a sandwich or something. The tests are rate-limited.
|
18
|
+
$ rspec
|
@@ -0,0 +1,36 @@
|
|
1
|
+
describe Redd::Base do
|
2
|
+
before do
|
3
|
+
stub_const "ReddObject", Class.new(Redd::Base)
|
4
|
+
ReddObject.attr_reader :string
|
5
|
+
ReddObject.attr_reader :condition
|
6
|
+
ReddObject.attr_reader :nonexistent
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:base) do
|
10
|
+
client = Redd::Client::Unauthenticated.new
|
11
|
+
object = {
|
12
|
+
kind: "test_object",
|
13
|
+
data: {
|
14
|
+
string: "test", condition: true,
|
15
|
+
nonexistent: nil, undocumented: :accessible
|
16
|
+
}
|
17
|
+
}
|
18
|
+
ReddObject.new(client, object)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "defines an attribute method" do
|
22
|
+
expect(base.string).to eq("test")
|
23
|
+
expect(base.condition).to eq(true)
|
24
|
+
expect(base.nonexistent).to eq(nil)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "defines a predicate method" do
|
28
|
+
expect(base.string?).to eq(true)
|
29
|
+
expect(base.condition?).to eq(true)
|
30
|
+
expect(base.nonexistent?).to eq(false)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "returns undocumented attributes via #attributes" do
|
34
|
+
expect(base.attributes[:undocumented]).to eq(:accessible)
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
describe Redd::Client::Authenticated::Flair do
|
2
|
+
describe "#get_flair_list" do
|
3
|
+
it "returns an array"
|
4
|
+
|
5
|
+
context "when the limit is set to 5" do
|
6
|
+
it "only returns 5 results"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#get_flair" do
|
11
|
+
before do
|
12
|
+
# set a random flair
|
13
|
+
end
|
14
|
+
|
15
|
+
it "returns the correct flair of the user"
|
16
|
+
|
17
|
+
after do
|
18
|
+
# unset the flair? "if it's random each time, there's no point
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#set_flair" do
|
23
|
+
it "sets the flair of a user correctly"
|
24
|
+
it "sets the flair of a link correctly"
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,231 @@
|
|
1
|
+
describe Redd::Client::Authenticated::LinksComments do
|
2
|
+
describe "#submit" do
|
3
|
+
before do
|
4
|
+
# create the posts
|
5
|
+
end
|
6
|
+
|
7
|
+
it "submits a text post correctly"
|
8
|
+
it "submits a link post correctly"
|
9
|
+
|
10
|
+
after do
|
11
|
+
# delete the posts?
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#add_comment" do
|
16
|
+
context "when commenting on a link" do
|
17
|
+
it "posts the comment correctly"
|
18
|
+
end
|
19
|
+
|
20
|
+
context "when replying to a comment" do
|
21
|
+
it "posts the reply correctly"
|
22
|
+
end
|
23
|
+
|
24
|
+
context "when replying to a message" do
|
25
|
+
it "replies to the message correctly"
|
26
|
+
end
|
27
|
+
|
28
|
+
after do
|
29
|
+
# delete the reply and the comment?
|
30
|
+
# we can't do anything for messages
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "#delete" do
|
35
|
+
context "when deleting a comment" do
|
36
|
+
before do
|
37
|
+
# create a comment
|
38
|
+
end
|
39
|
+
|
40
|
+
it "deletes a comment successfully"
|
41
|
+
end
|
42
|
+
|
43
|
+
context "when deleting a link" do
|
44
|
+
before do
|
45
|
+
# create a link
|
46
|
+
end
|
47
|
+
|
48
|
+
it "deletes a link successfully"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "#edit" do
|
53
|
+
context "when editing a comment" do
|
54
|
+
before do
|
55
|
+
# create a comment
|
56
|
+
end
|
57
|
+
|
58
|
+
it "edits a comment successfully"
|
59
|
+
|
60
|
+
after do
|
61
|
+
# delete the comment
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context "when editing a link" do
|
66
|
+
before do
|
67
|
+
# create a link
|
68
|
+
end
|
69
|
+
|
70
|
+
it "edits a link successfully"
|
71
|
+
|
72
|
+
after do
|
73
|
+
# delete the link
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "#hide" do
|
79
|
+
before do
|
80
|
+
# create a link
|
81
|
+
end
|
82
|
+
|
83
|
+
it "hides a link successfully"
|
84
|
+
|
85
|
+
after do
|
86
|
+
# delete the link
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "#unhide" do
|
91
|
+
before do
|
92
|
+
# create a link
|
93
|
+
end
|
94
|
+
|
95
|
+
it "unhides a link successfully"
|
96
|
+
|
97
|
+
after do
|
98
|
+
# delete the link
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe "#mark_as_nsfw" do
|
103
|
+
before do
|
104
|
+
# create a link
|
105
|
+
end
|
106
|
+
|
107
|
+
it "marks a link as NSFW successfully"
|
108
|
+
|
109
|
+
after do
|
110
|
+
# delete the link
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe "#unmark_as_nsfw" do
|
115
|
+
before do
|
116
|
+
# create a link
|
117
|
+
end
|
118
|
+
|
119
|
+
it "removes the NSFW mark from a link successfully"
|
120
|
+
|
121
|
+
after do
|
122
|
+
# delete the link
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
# Nobody's going to give my testing suite gold, are they?
|
127
|
+
describe "#save" do
|
128
|
+
before do
|
129
|
+
# create a link
|
130
|
+
end
|
131
|
+
|
132
|
+
it "saves the link successfully"
|
133
|
+
|
134
|
+
after do
|
135
|
+
# delete the link
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
describe "#unsave" do
|
140
|
+
before do
|
141
|
+
# create a link
|
142
|
+
end
|
143
|
+
|
144
|
+
it "unsaves the link successfully"
|
145
|
+
|
146
|
+
after do
|
147
|
+
# delete the link
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
describe "#upvote" do
|
152
|
+
context "when upvoting a comment" do
|
153
|
+
before do
|
154
|
+
# create a comment
|
155
|
+
end
|
156
|
+
|
157
|
+
# We can't always count on the score increasing
|
158
|
+
it "adds the comment to the user's liked list"
|
159
|
+
|
160
|
+
after do
|
161
|
+
# delete the comment
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
context "when upvoting a link" do
|
166
|
+
before do
|
167
|
+
# create a link
|
168
|
+
end
|
169
|
+
|
170
|
+
it "adds the link to the user's liked list"
|
171
|
+
|
172
|
+
after do
|
173
|
+
# delete the link
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
describe "#downvote" do
|
179
|
+
context "when downvoting a comment" do
|
180
|
+
before do
|
181
|
+
# create a comment
|
182
|
+
end
|
183
|
+
|
184
|
+
# We can't always count on the score increasing
|
185
|
+
it "adds the comment to the user's disliked list"
|
186
|
+
|
187
|
+
after do
|
188
|
+
# delete the comment
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
context "when downvoting a link" do
|
193
|
+
before do
|
194
|
+
# create a link
|
195
|
+
end
|
196
|
+
|
197
|
+
it "adds the link to the user's disliked list"
|
198
|
+
|
199
|
+
after do
|
200
|
+
# delete the link
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
describe "#unvote" do
|
206
|
+
context "when unvoting a comment" do
|
207
|
+
before do
|
208
|
+
# create a comment and like it
|
209
|
+
end
|
210
|
+
|
211
|
+
# We can't always count on the score increasing
|
212
|
+
it "removes the comment from the user's liked list"
|
213
|
+
|
214
|
+
after do
|
215
|
+
# delete the comment
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
context "when unvoting a link" do
|
220
|
+
before do
|
221
|
+
# create a link
|
222
|
+
end
|
223
|
+
|
224
|
+
it "removes the link from the user's liked list"
|
225
|
+
|
226
|
+
after do
|
227
|
+
# delete the link
|
228
|
+
end
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
describe Redd::Client::Unauthenticated::Account do
|
2
|
+
describe "#login" do
|
3
|
+
let(:logged_in_client) do
|
4
|
+
unauthenticated_client.login(test_username, test_password)
|
5
|
+
end
|
6
|
+
|
7
|
+
it "returns an Authenticated client" do
|
8
|
+
expect(logged_in_client).to be_a(Redd::Client::Authenticated)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can be used to make requests" do
|
12
|
+
expect(logged_in_client.me[:name]).to match(/#{test_username}/i)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "uri"
|
2
|
+
|
3
|
+
describe Redd::Client::Unauthenticated::Captcha do
|
4
|
+
describe "#needs_captcha?" do
|
5
|
+
it "returns a boolean" do
|
6
|
+
expect(unauthenticated_client.needs_captcha?).to be(true).or be(false)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#new_captcha" do
|
11
|
+
it "returns a string" do
|
12
|
+
expect(unauthenticated_client.new_captcha).to be_a(String)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#captcha_url" do
|
17
|
+
it "returns a valid url" do
|
18
|
+
new_captcha = unauthenticated_client.new_captcha
|
19
|
+
captcha_url = unauthenticated_client.captcha_url(new_captcha)
|
20
|
+
expect(captcha_url).to match(URI::ABS_URI)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
describe Redd::Client::Unauthenticated::LinksComments do
|
2
|
+
describe "#get_info" do
|
3
|
+
let(:response) { unauthenticated_client.get_info(id: test_link_id) }
|
4
|
+
|
5
|
+
it "returns a listing" do
|
6
|
+
expect(response).to be_a(Redd::Object::Listing)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "returns the correct objects" do
|
10
|
+
link = response.things.first
|
11
|
+
expect(link).to be_a(Redd::Object::Submission)
|
12
|
+
expect(link.fullname).to eq(test_link_id)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#submission_comments" do
|
17
|
+
it "returns a listing of comments and morecomments only"
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#get_replies" do
|
21
|
+
it "returns a listing of comments and morecomments only"
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "expand_morecomments" do
|
25
|
+
it "returns a listing of comments only"
|
26
|
+
it "returns the same number of comments as it indicated"
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
describe Redd::Client::Unauthenticated::Listing do
|
2
|
+
describe "#by_id" do
|
3
|
+
let(:response) { unauthenticated_client.by_id(test_link_id) }
|
4
|
+
|
5
|
+
it "returns a listing" do
|
6
|
+
expect(response).to be_a(Redd::Object::Listing)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "returns the correct object" do
|
10
|
+
link = response.things.first
|
11
|
+
expect(link).to be_a(Redd::Object::Submission)
|
12
|
+
expect(link.fullname).to eq(test_link_id)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#get_hot, #get_new, #get_op, #get_controversial" do
|
17
|
+
it "returns a listing of submissions only"
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#get_comments" do
|
21
|
+
it "returns a listing of comments only"
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "uri"
|
2
|
+
|
3
|
+
describe Redd::Client::Unauthenticated::Moderation do
|
4
|
+
describe "#stylesheet_url" do
|
5
|
+
it "returns a valid url" do
|
6
|
+
url = unauthenticated_client.stylesheet_url(test_subreddit)
|
7
|
+
expect(url).to match(URI::ABS_URI)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#stylesheet" do
|
12
|
+
it "returns valid CSS" # Yeah, nope.
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
describe Redd::Client::Unauthenticated::Subreddits do
|
2
|
+
describe "#subreddit" do
|
3
|
+
let(:subreddit) { unauthenticated_client.subreddit(test_subreddit) }
|
4
|
+
|
5
|
+
it "returns a subreddit object" do
|
6
|
+
expect(subreddit).to be_a(Redd::Object::Subreddit)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "returns the correct subreddit" do
|
10
|
+
expect(subreddit.display_name).to eq(test_subreddit)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#get_subreddits" do
|
15
|
+
let(:subreddits) { unauthenticated_client.get_subreddits }
|
16
|
+
|
17
|
+
it "returns a listing" do
|
18
|
+
expect(subreddits).to be_a(Redd::Object::Listing)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns a listing of subreddits"
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#search_subreddits" do
|
25
|
+
let(:search) { unauthenticated_client.search_subreddits(test_subreddit) }
|
26
|
+
|
27
|
+
it "returns a listing" do
|
28
|
+
expect(search).to be_a(Redd::Object::Listing)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "returns a listing of subreddits"
|
32
|
+
|
33
|
+
it "includes the subreddit searched for"
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
describe Redd::Client::Unauthenticated::Users do
|
2
|
+
describe "#user" do
|
3
|
+
let(:user) { unauthenticated_client.user(test_username) }
|
4
|
+
|
5
|
+
it "returns a user" do
|
6
|
+
expect(user).to be_a(Redd::Object::User)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "returns the user requested" do
|
10
|
+
expect(user.name).to match(/#{test_username}/i)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#get_user_overview" do
|
15
|
+
it "returns a listing"
|
16
|
+
it "contains content only created by the user"
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#get_user_submitted" do
|
20
|
+
it "returns a listing"
|
21
|
+
it "contains only submissions"
|
22
|
+
it "contains submissions only created by the user"
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#get_user_comments" do
|
26
|
+
it "returns a listing"
|
27
|
+
it "contains only comments"
|
28
|
+
it "contains comments only created by the user"
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "#get_user_liked, #get_user_disliked, #get_user_hidden, #get_user_saved, #get_user_gilded" do
|
32
|
+
it "returns a listing"
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
describe Redd::Client::Unauthenticated::Wiki do
|
2
|
+
describe "#get_wikipages" do
|
3
|
+
let(:pages) { unauthenticated_client.get_wikipages(test_subreddit) }
|
4
|
+
|
5
|
+
it "returns an array of pages in the wiki" do
|
6
|
+
expect(pages).to be_an(Array)
|
7
|
+
expect(pages).to include(test_wikipage)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#wikipage" do
|
12
|
+
let(:page) { unauthenticated_client.wikipage(test_wikipage, test_subreddit) }
|
13
|
+
|
14
|
+
it "returns a wikipage" do
|
15
|
+
expect(page).to be_a(Redd::Object::WikiPage)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require "json"
|
2
|
+
|
3
|
+
describe Redd::OAuth2Access do
|
4
|
+
|
5
|
+
# TODO: Use the password grant with a future OAuth2Stript Client for more
|
6
|
+
# for more accurate responses.
|
7
|
+
let(:access) do
|
8
|
+
Redd::OAuth2Access.new(
|
9
|
+
access_token: "TEST_ACCESS_TOKEN",
|
10
|
+
refresh_token: "TEST_REFRESH_TOKEN",
|
11
|
+
scope: "identity,TEST_SCOPE",
|
12
|
+
expires_in: 3600
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "has an accessible access token" do
|
17
|
+
expect(access.access_token).to be_a(String)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "has an accessible duration" do
|
21
|
+
expect(access.duration).to eq(:temporary).or eq(:permanent)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "has an array of scopes" do
|
25
|
+
expect(access.scope).to be_an(Array)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "shows the correct time of expiry" do
|
29
|
+
expect(access.expires_at).to be_within(60).of(Time.now + 3600)
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#refresh" do
|
33
|
+
let(:refreshed_access) { access.dup }
|
34
|
+
let(:new_access_token) { "NEW_ACCESS_TOKEN" }
|
35
|
+
let(:new_expires_in) { 1600 }
|
36
|
+
|
37
|
+
before do
|
38
|
+
response = {access_token: new_access_token, expires_in: new_expires_in}
|
39
|
+
refreshed_access.refresh(response)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "sets the new access token" do
|
43
|
+
expect(refreshed_access.access_token).to eq(new_access_token)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "sets the new expiry time" do
|
47
|
+
expect(refreshed_access.expires_at).to be_within(60).of(Time.now + new_expires_in)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "#expired?" do
|
52
|
+
context "when the access token isn't expired" do
|
53
|
+
it "returns false"
|
54
|
+
end
|
55
|
+
|
56
|
+
context "when the access token is expired" do
|
57
|
+
it "returns true"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "#to_json" do
|
62
|
+
let(:json_str) { access.to_json }
|
63
|
+
|
64
|
+
it "transcribes to valid json" do
|
65
|
+
expect(JSON.parse(json_str)).to be_a(Hash)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "#from_json" do
|
70
|
+
let(:object) do
|
71
|
+
json = access.to_json
|
72
|
+
Redd::OAuth2Access.from_json(json)
|
73
|
+
end
|
74
|
+
|
75
|
+
it "creates a proper object from a JSON string" do
|
76
|
+
expect(object.access_token).to eq(access.access_token)
|
77
|
+
expect(object.refresh_token).to eq(access.refresh_token)
|
78
|
+
expect(object.scope).to eq(access.scope)
|
79
|
+
expect(object.duration).to eq(access.duration)
|
80
|
+
expect(object.expires_at).to be_within(60).of(access.expires_at)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
describe Redd::Thing do
|
2
|
+
before do
|
3
|
+
stub_const "ReddThing", Class.new(Redd::Thing)
|
4
|
+
ReddThing.attr_reader :string
|
5
|
+
ReddThing.attr_reader :condition
|
6
|
+
ReddThing.attr_reader :nonexistent
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:thing) do
|
10
|
+
client = Redd::Client::Unauthenticated.new
|
11
|
+
object = {kind: "tx", data: {id: "abc123"}}
|
12
|
+
ReddThing.new(client, object)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "has a kind" do
|
16
|
+
expect(thing.kind).to be_a(String)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "has an id" do
|
20
|
+
expect(thing.id).to be_a(String)
|
21
|
+
end
|
22
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -4,10 +4,26 @@ require "vcr"
|
|
4
4
|
|
5
5
|
require "redd"
|
6
6
|
|
7
|
+
def test_username; ENV["REDDIT_USERNAME"]; end
|
8
|
+
def test_password; ENV["REDDIT_PASSWORD"]; end
|
9
|
+
def test_subreddit; ENV["REDDIT_SUBREDDIT"]; end
|
10
|
+
|
11
|
+
def test_link_id; ENV["REDDIT_LINKID"] || "t3_2gngbm"; end
|
12
|
+
def test_wikipage; ENV["REDDIT_WIKIPAGE"] || "redd_wiki_test"; end
|
13
|
+
|
14
|
+
def unauthenticated_client
|
15
|
+
$unauthenticated_client ||= Redd::Client::Unauthenticated.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def authenticated_client
|
19
|
+
$authenticated_client ||= Redd::Client::Authenticated.new_from_credentials(test_username, test_password)
|
20
|
+
end
|
21
|
+
|
7
22
|
VCR.configure do |config|
|
8
23
|
config.cassette_library_dir = "spec/cassettes"
|
9
24
|
config.default_cassette_options = {record: :new_episodes}
|
10
25
|
config.hook_into :webmock
|
26
|
+
config.filter_sensitive_data("<PASSWORD>") { test_password }
|
11
27
|
end
|
12
28
|
|
13
29
|
RSpec.configure do |config|
|
metadata
CHANGED
@@ -1,31 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Avinash Dwarapu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.6'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.6'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rubocop
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
17
|
- - '>='
|
@@ -52,20 +38,6 @@ dependencies:
|
|
52
38
|
- - '>='
|
53
39
|
- !ruby/object:Gem::Version
|
54
40
|
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: yard
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - '>='
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
41
|
- !ruby/object:Gem::Dependency
|
70
42
|
name: rspec
|
71
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -207,6 +179,7 @@ files:
|
|
207
179
|
- lib/redd/client/unauthenticated/live.rb
|
208
180
|
- lib/redd/client/unauthenticated/moderation.rb
|
209
181
|
- lib/redd/client/unauthenticated/subreddits.rb
|
182
|
+
- lib/redd/client/unauthenticated/users.rb
|
210
183
|
- lib/redd/client/unauthenticated/utilities.rb
|
211
184
|
- lib/redd/client/unauthenticated/wiki.rb
|
212
185
|
- lib/redd/error.rb
|
@@ -234,8 +207,26 @@ files:
|
|
234
207
|
- lib/redd/thing/voteable.rb
|
235
208
|
- lib/redd/version.rb
|
236
209
|
- redd.gemspec
|
237
|
-
- spec/
|
210
|
+
- spec/README.md
|
211
|
+
- spec/redd/base_spec.rb
|
212
|
+
- spec/redd/client/authenticated/account_spec.rb
|
213
|
+
- spec/redd/client/authenticated/apps_spec.rb
|
214
|
+
- spec/redd/client/authenticated/flair_spec.rb
|
215
|
+
- spec/redd/client/authenticated/gold_spec.rb
|
216
|
+
- spec/redd/client/authenticated/links_comments_spec.rb
|
217
|
+
- spec/redd/client/authenticated/live_spec.rb
|
218
|
+
- spec/redd/client/unauthenticated/account_spec.rb
|
219
|
+
- spec/redd/client/unauthenticated/captcha_spec.rb
|
220
|
+
- spec/redd/client/unauthenticated/links_comments_spec.rb
|
221
|
+
- spec/redd/client/unauthenticated/listing_spec.rb
|
222
|
+
- spec/redd/client/unauthenticated/live_spec.rb
|
223
|
+
- spec/redd/client/unauthenticated/moderation_spec.rb
|
224
|
+
- spec/redd/client/unauthenticated/subreddits_spec.rb
|
225
|
+
- spec/redd/client/unauthenticated/users_spec.rb
|
226
|
+
- spec/redd/client/unauthenticated/wiki_spec.rb
|
227
|
+
- spec/redd/oauth2_access_spec.rb
|
238
228
|
- spec/redd/rate_limit_spec.rb
|
229
|
+
- spec/redd/thing_spec.rb
|
239
230
|
- spec/redd_spec.rb
|
240
231
|
- spec/spec_helper.rb
|
241
232
|
homepage: ''
|
@@ -263,8 +254,26 @@ signing_key:
|
|
263
254
|
specification_version: 4
|
264
255
|
summary: A Reddit API Wrapper for Ruby.
|
265
256
|
test_files:
|
266
|
-
- spec/
|
257
|
+
- spec/README.md
|
258
|
+
- spec/redd/base_spec.rb
|
259
|
+
- spec/redd/client/authenticated/account_spec.rb
|
260
|
+
- spec/redd/client/authenticated/apps_spec.rb
|
261
|
+
- spec/redd/client/authenticated/flair_spec.rb
|
262
|
+
- spec/redd/client/authenticated/gold_spec.rb
|
263
|
+
- spec/redd/client/authenticated/links_comments_spec.rb
|
264
|
+
- spec/redd/client/authenticated/live_spec.rb
|
265
|
+
- spec/redd/client/unauthenticated/account_spec.rb
|
266
|
+
- spec/redd/client/unauthenticated/captcha_spec.rb
|
267
|
+
- spec/redd/client/unauthenticated/links_comments_spec.rb
|
268
|
+
- spec/redd/client/unauthenticated/listing_spec.rb
|
269
|
+
- spec/redd/client/unauthenticated/live_spec.rb
|
270
|
+
- spec/redd/client/unauthenticated/moderation_spec.rb
|
271
|
+
- spec/redd/client/unauthenticated/subreddits_spec.rb
|
272
|
+
- spec/redd/client/unauthenticated/users_spec.rb
|
273
|
+
- spec/redd/client/unauthenticated/wiki_spec.rb
|
274
|
+
- spec/redd/oauth2_access_spec.rb
|
267
275
|
- spec/redd/rate_limit_spec.rb
|
276
|
+
- spec/redd/thing_spec.rb
|
268
277
|
- spec/redd_spec.rb
|
269
278
|
- spec/spec_helper.rb
|
270
279
|
has_rdoc:
|
@@ -1,15 +0,0 @@
|
|
1
|
-
describe Redd::Client::Unauthenticated, :vcr do
|
2
|
-
let(:client) { Redd::Client::Unauthenticated.new }
|
3
|
-
|
4
|
-
it "has configurable options" do
|
5
|
-
newclient = Redd::Client::Unauthenticated.new(
|
6
|
-
rate_limit: "SPEC_RATELIMIT",
|
7
|
-
user_agent: "SPEC_USERAGENT",
|
8
|
-
api_endpoint: "SPEC_ENDPOINT.COM"
|
9
|
-
)
|
10
|
-
|
11
|
-
expect(newclient.rate_limit).to eq("SPEC_RATELIMIT")
|
12
|
-
expect(newclient.user_agent).to eq("SPEC_USERAGENT")
|
13
|
-
expect(newclient.api_endpoint).to eq("SPEC_ENDPOINT.COM")
|
14
|
-
end
|
15
|
-
end
|