redd 0.1.3 → 0.1.4
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/README.md +24 -23
- data/lib/redd/client/authenticated.rb +1 -1
- data/lib/redd/client/unauthenticated.rb +1 -1
- data/lib/redd/client/unauthenticated/utilities.rb +3 -3
- data/lib/redd/error.rb +8 -3
- data/lib/redd/response/raise_error.rb +6 -1
- data/lib/redd/version.rb +1 -1
- metadata +2 -4
- data/TODO.md +0 -45
- data/test.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5a75930163e7a981bfd393651e20addf1f12c81
|
4
|
+
data.tar.gz: e96ea4f4250086a5ef52a37cc1e822a2ddf49819
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dac14d6136bb95431162a8f4e73639fc52e4f958c6b25df9a451bd880480c8e7d3437ba079d5a1135a3896cd76dd6eca89b205e57e64d5709facc8ab4ac61413
|
7
|
+
data.tar.gz: 556829db6d338e259e1123d1b52cc3193df565e82026131fd1caf827e99b035405b4f16c272a02517c852e984f67b1bad232c6637a1028f618cdc1bb73278a2b
|
data/README.md
CHANGED
@@ -11,7 +11,6 @@
|
|
11
11
|
<p align="center">
|
12
12
|
<a href="#getting-started">Getting Started</a> |
|
13
13
|
<a href="#extending-redd">Extending Redd</a> |
|
14
|
-
<a href="#conventions">Conventions</a> |
|
15
14
|
<a href="#supported-rubies">Supported Rubies</a> |
|
16
15
|
<a href="#copyright">Copyright</a>
|
17
16
|
</p>
|
@@ -19,7 +18,7 @@
|
|
19
18
|
---
|
20
19
|
|
21
20
|
## Getting Started
|
22
|
-
Ruby and redd make creating reddit bots accessible and fun. To demonstrate, let's create a simple bot in
|
21
|
+
Ruby and redd make creating reddit bots accessible and fun. To demonstrate, let's create a simple bot in four steps that responds to "Hello?" with "World!". *Note: this is just a tutorial; although you're welcome to take it on a test drive on a testing subreddit, don't actually host this bot.*
|
23
22
|
|
24
23
|
1. **Installing**
|
25
24
|
You can either install the gem directly by running `gem install redd` or by placing the gem into your `Gemfile` and running `bundle install`.
|
@@ -54,6 +53,25 @@ Ruby and redd make creating reddit bots accessible and fun. To demonstrate, let'
|
|
54
53
|
end
|
55
54
|
```
|
56
55
|
|
56
|
+
4. **Just in Case**
|
57
|
+
It's also a good idea to escape some common errors from reddit in case they happen:
|
58
|
+
```ruby
|
59
|
+
begin
|
60
|
+
r.comment_stream "test" do |comment|
|
61
|
+
if comment.body =~ /^Hello\?$/i
|
62
|
+
comment.reply "World!"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
rescue Redd::Error::RateLimited => e
|
66
|
+
time_left = e.time
|
67
|
+
sleep(time_left)
|
68
|
+
rescue Redd::Error => e
|
69
|
+
status = e.message.status
|
70
|
+
# 5-something errors are usually errors on reddit's end.
|
71
|
+
raise e unless status.to_s.start_with? "5"
|
72
|
+
end
|
73
|
+
```
|
74
|
+
|
57
75
|
## Extending Redd
|
58
76
|
Extending any ruby library, including redd is incredibly easy. Let's try this out by adding a gilding extension. Reddit provides an api to be able to gild posts and comments, given that you have "creddits".
|
59
77
|
|
@@ -101,30 +119,13 @@ Extending any ruby library, including redd is incredibly easy. Let's try this ou
|
|
101
119
|
Redd::Object::Comment.include(Gildable)
|
102
120
|
```
|
103
121
|
|
104
|
-
## Conventions
|
105
|
-
### Method Names
|
106
|
-
- A method that returns a Redd::Object directly is called that in lowercase. For example, a method that returns a single `Redd::Object::Subreddit` is called `subreddit`
|
107
|
-
- Any method that return a listing is in the format `get_[thing]s`. For example, a method that returns a listing of subreddits is named `get_subreddits`.
|
108
|
-
- An **internal** method that edits an existing object is **usually** named `edit_[thing]`. Some exeptions to this rule are `vote` that edit a user's vote.
|
109
|
-
- Any method that returns something specific to the user must have "my" in the middle. For example, a method that returns a users subscribed subreddits is named `get_my_subscriptions`.
|
110
|
-
|
111
|
-
### Methods
|
112
|
-
- Most methods that use an http request should usually follow this convention. I haven't had time to check the methods to see if they follow this, but this should be the case
|
113
|
-
```ruby
|
114
|
-
def subreddit(thing, options = {})
|
115
|
-
fullname = extract_fullname(thing)
|
116
|
-
|
117
|
-
meth = :get
|
118
|
-
path = "/r/ruby/about.json"
|
119
|
-
params = options << {additional: "options"}
|
120
|
-
|
121
|
-
object_from_response(meth, path, params)
|
122
|
-
end
|
123
|
-
```
|
124
|
-
|
125
122
|
## Supported Rubies
|
126
123
|
TODO: Travis CI
|
127
124
|
|
128
125
|
## Copyright
|
129
126
|
Copyright (c) [Avinash Dwarapu](http://github.com/avidw) under the MIT License. See LICENSE.md for more details.
|
130
127
|
Some code has been used from [RedditKit.rb](http://github.com/samsymons/RedditKit.rb). See RedditKit.LICENSE.md for more details.
|
128
|
+
|
129
|
+
---
|
130
|
+
|
131
|
+
Redd not your cup of tea? Check out [RedditKit.rb](http://github.com/samsymons/RedditKit.rb)!
|
@@ -74,8 +74,8 @@ module Redd
|
|
74
74
|
def connection
|
75
75
|
@connection ||= Faraday.new(url: api_endpoint) do |faraday|
|
76
76
|
faraday.use Faraday::Request::UrlEncoded
|
77
|
-
faraday.use Redd::Response::ParseJson
|
78
77
|
faraday.use Redd::Response::RaiseError
|
78
|
+
faraday.use Redd::Response::ParseJson
|
79
79
|
faraday.adapter Faraday.default_adapter
|
80
80
|
|
81
81
|
faraday.headers["User-Agent"] = user_agent
|
@@ -63,8 +63,8 @@ module Redd
|
|
63
63
|
def connection
|
64
64
|
@connection ||= Faraday.new(url: api_endpoint) do |faraday|
|
65
65
|
faraday.use Faraday::Request::UrlEncoded
|
66
|
-
faraday.use Redd::Response::ParseJson
|
67
66
|
faraday.use Redd::Response::RaiseError
|
67
|
+
faraday.use Redd::Response::ParseJson
|
68
68
|
faraday.adapter Faraday.default_adapter
|
69
69
|
|
70
70
|
faraday.headers["User-Agent"] = user_agent
|
@@ -15,17 +15,17 @@ module Redd
|
|
15
15
|
submission_stream(:comments, *args, &block)
|
16
16
|
end
|
17
17
|
|
18
|
-
def submission_stream(listing, subreddit =
|
18
|
+
def submission_stream(listing, subreddit = nil, params = {}, &block)
|
19
19
|
loop do
|
20
20
|
# Get the latest comments from the subreddit. By the way, this line
|
21
21
|
# is the one where the sleeping/rate-limiting happens.
|
22
22
|
objects = get_listing(listing, subreddit, params)
|
23
23
|
unless objects.empty?
|
24
|
-
# Set the latest comment.
|
25
|
-
params[:before] = objects.first.fullname
|
26
24
|
# Run the loop for each of the new comments accessed.
|
27
25
|
# I should probably add it to some sort of Set to avoid duplicates.
|
28
26
|
objects.reverse_each { |object| block.call(object) }
|
27
|
+
# Set the latest comment.
|
28
|
+
params[:before] = objects.first.fullname
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
data/lib/redd/error.rb
CHANGED
@@ -4,7 +4,7 @@ module Redd
|
|
4
4
|
# @note I ripped off RedditKit.rb :|
|
5
5
|
def from_response(response) # rubocop:disable Style/CyclomaticComplexity Style/MethodLength
|
6
6
|
status = response[:status]
|
7
|
-
body = parse_error(response[:body])
|
7
|
+
body = parse_error(response[:body]).to_s
|
8
8
|
case status
|
9
9
|
when 200
|
10
10
|
case body
|
@@ -53,7 +53,7 @@ module Redd
|
|
53
53
|
if body.key?(:json) && body[:json].key?(:errors)
|
54
54
|
body[:json][:errors].first
|
55
55
|
elsif body.key?(:jquery)
|
56
|
-
body[:jquery]
|
56
|
+
body[:jquery]
|
57
57
|
end
|
58
58
|
end
|
59
59
|
end
|
@@ -78,7 +78,12 @@ module Redd
|
|
78
78
|
|
79
79
|
class PermissionDenied < Error; end
|
80
80
|
|
81
|
-
class RateLimited < Error
|
81
|
+
class RateLimited < Error
|
82
|
+
attr_reader :time
|
83
|
+
def initialize(time = 0)
|
84
|
+
@time = time
|
85
|
+
end
|
86
|
+
end
|
82
87
|
|
83
88
|
class RequestError < Error; end
|
84
89
|
|
@@ -10,7 +10,12 @@ module Redd
|
|
10
10
|
@app.call(faraday).on_complete do |env|
|
11
11
|
error = Redd::Error.from_response(env)
|
12
12
|
if error
|
13
|
-
|
13
|
+
if error == Redd::Error::RateLimited
|
14
|
+
seconds = env[:body][:json][:ratelimit]
|
15
|
+
fail error.new(seconds), env
|
16
|
+
else
|
17
|
+
fail error, env
|
18
|
+
end
|
14
19
|
end
|
15
20
|
end
|
16
21
|
end
|
data/lib/redd/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
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-08-
|
11
|
+
date: 2014-08-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -167,7 +167,6 @@ files:
|
|
167
167
|
- README.md
|
168
168
|
- Rakefile
|
169
169
|
- RedditKit.LICENSE.md
|
170
|
-
- TODO.md
|
171
170
|
- github/redd.png
|
172
171
|
- lib/redd.rb
|
173
172
|
- lib/redd/base.rb
|
@@ -211,7 +210,6 @@ files:
|
|
211
210
|
- redd.gemspec
|
212
211
|
- spec/redd_spec.rb
|
213
212
|
- spec/spec_helper.rb
|
214
|
-
- test.rb
|
215
213
|
homepage: ''
|
216
214
|
licenses:
|
217
215
|
- MIT
|
data/TODO.md
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
## TODO.md
|
2
|
-
|
3
|
-
#### Redd::Client
|
4
|
-
- [ ] Unauthenticated
|
5
|
-
- [ ] Account
|
6
|
-
- [ ] Links & Comments
|
7
|
-
- [ ] Listing
|
8
|
-
- [ ] Live
|
9
|
-
- [ ] Subreddit
|
10
|
-
- [ ] Utilities
|
11
|
-
- [ ] Wiki
|
12
|
-
- [ ] Authenticated
|
13
|
-
- [ ] Account
|
14
|
-
- [ ] Apps
|
15
|
-
- [ ] Flair
|
16
|
-
- [ ] Gold
|
17
|
-
- [ ] Links & Comments
|
18
|
-
- [ ] Live
|
19
|
-
- [ ] Moderation
|
20
|
-
- [ ] Multis
|
21
|
-
- [ ] Private Messages
|
22
|
-
- [ ] Subreddits
|
23
|
-
- [ ] Users
|
24
|
-
- [ ] Wiki
|
25
|
-
- [ ] OAuth2
|
26
|
-
|
27
|
-
#### Redd::Thing
|
28
|
-
- [ ] Creatable
|
29
|
-
- [ ] Editable
|
30
|
-
- [ ] Hideable
|
31
|
-
- [ ] Inboxable
|
32
|
-
- [ ] Messageable
|
33
|
-
- [ ] Moderatable
|
34
|
-
- [ ] Reportable
|
35
|
-
- [ ] Saveable
|
36
|
-
- [ ] Voteable
|
37
|
-
|
38
|
-
#### Redd::Object
|
39
|
-
- [ ] `listing` **Listing**
|
40
|
-
- [ ] `more` **MoreComments**
|
41
|
-
- [ ] `t1_` **Comment**
|
42
|
-
- [ ] `t2_` **User**
|
43
|
-
- [ ] `t3_` **Submission**
|
44
|
-
- [ ] `t4_` **PrivateMessage**
|
45
|
-
- [ ] `t5_` **Subreddit**
|