tumblr-rb 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +8 -3
- data/bin/tumblr +20 -4
- data/lib/tumblr/post.rb +15 -3
- data/lib/tumblr/reader.rb +25 -8
- data/lib/tumblr.rb +4 -4
- data/man/tumblr.1 +51 -4
- data/man/tumblr.1.html +22 -4
- data/man/tumblr.1.ronn +30 -4
- data/test/fixtures/vcr_cassettes/read/like.yml +31 -0
- data/test/fixtures/vcr_cassettes/read/tumblrgemtest.yml +42 -0
- data/test/fixtures/vcr_cassettes/read/unlike.yml +31 -0
- data/test/test_tumblr.rb +45 -1
- data/tumblr-rb.gemspec +5 -2
- metadata +6 -3
data/README.md
CHANGED
@@ -20,6 +20,13 @@ You can pass `tumblr` something from standard input, but you have to set your em
|
|
20
20
|
$: echo 'Hello world.' | tumblr -a user@tumblr.com:supers3cretp4ssw0rd
|
21
21
|
Published to Tumblr. The ID for this post is: 123456790
|
22
22
|
|
23
|
+
Or the credentials can come from a YAML file:
|
24
|
+
|
25
|
+
$ cat ~/.tumblrlogin
|
26
|
+
email: tumblruser@generic-email.com
|
27
|
+
password: myvoiceismypassport
|
28
|
+
$ echo 'Hello world. | tumblr --credentials ~/.tumblrlogin
|
29
|
+
|
23
30
|
Try `tumblr --help` if you are in need of guidance. Read [tumblr(1)](http://mwunsch.github.com/tumblr/tumblr.1.html) for more information.
|
24
31
|
|
25
32
|
## Getting Started
|
@@ -101,12 +108,10 @@ To publish to Tumblr, do this:
|
|
101
108
|
|
102
109
|
## TODO:
|
103
110
|
|
104
|
-
+ Tumblr::Post needs methods for liking and unliking.
|
105
|
-
+ Add options to CLI for adding to queue, drafts, etc.
|
106
111
|
+ File-uploading for Photos, Videos, Audio (needs to get into Weary)
|
107
112
|
|
108
113
|
## Copyright
|
109
114
|
|
110
115
|
The Tumblr gem is Copyright (c) 2010 Mark Wunsch and is licensed under the [MIT License](http://creativecommons.org/licenses/MIT/).
|
111
116
|
|
112
|
-
Tumblr is Copyright (c) Tumblr, Inc. The Tumblr gem is NOT affiliated with Tumblr.
|
117
|
+
Tumblr is Copyright (c) Tumblr, Inc. The Tumblr gem is NOT affiliated with Tumblr, Inc.
|
data/bin/tumblr
CHANGED
@@ -35,6 +35,8 @@ rescue LoadError
|
|
35
35
|
end
|
36
36
|
|
37
37
|
publisher = {}
|
38
|
+
publish_state = nil
|
39
|
+
group = nil
|
38
40
|
|
39
41
|
ARGV.options do |option|
|
40
42
|
option.banner = usage
|
@@ -42,15 +44,25 @@ ARGV.options do |option|
|
|
42
44
|
|
43
45
|
auth_text = 'Email Address and Password, separated by a colon'
|
44
46
|
option.on('-a EMAIL:PASSWORD', '--auth EMAIL:PASSWORD', auth_text) do |auth|
|
45
|
-
|
46
|
-
publisher[:email] = credentials[0]
|
47
|
-
publisher[:password] = credentials[1]
|
47
|
+
publisher[:email],publisher[:password] = auth.split(':')
|
48
48
|
end
|
49
49
|
|
50
50
|
address_text = 'Email Address (will prompt for password)'
|
51
51
|
option.on('-e EMAIL', '--email EMAIL', address_text) do |email|
|
52
52
|
publisher[:email] = email
|
53
53
|
end
|
54
|
+
|
55
|
+
option.on('--credentials FILE', 'A YAML file with "email" and "password" keys for authentication') do |file|
|
56
|
+
credentials = YAML.load(File.read(file))
|
57
|
+
publisher[:email] = credentials['email']
|
58
|
+
publisher[:password] = credentials['password']
|
59
|
+
end
|
60
|
+
|
61
|
+
option.on('-p','--publish', 'Publish the post immediately (ignores "state" parameter)') { publish_state = :published }
|
62
|
+
option.on('-q','--queue', 'Add the post to the queue') { publish_state = :queue }
|
63
|
+
option.on('-d','--draft', 'Save the post as a draft') { publish_state = :draft }
|
64
|
+
|
65
|
+
option.on('--group=GROUP','Publish to a group blog') {|value| group = value }
|
54
66
|
|
55
67
|
option.separator ""
|
56
68
|
|
@@ -110,7 +122,11 @@ if !publisher[:email] || !publisher[:password]
|
|
110
122
|
end
|
111
123
|
end
|
112
124
|
|
113
|
-
|
125
|
+
post = Tumblr.parse(input)
|
126
|
+
post.state = publish_state if publish_state
|
127
|
+
post.group = group if group
|
128
|
+
|
129
|
+
response = Tumblr.execute(publisher, post)
|
114
130
|
if response.success?
|
115
131
|
puts "Published to Tumblr. The ID for this post is: #{response.body}"
|
116
132
|
exit
|
data/lib/tumblr/post.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
class Tumblr
|
4
4
|
class Post
|
5
5
|
BASIC_PARAMS = [:date,:tags,:format,:group,:generator,:private,
|
6
|
-
:slug,:state,:'send-to-twitter',:'publish-on']
|
6
|
+
:slug,:state,:'send-to-twitter',:'publish-on',:'reblog-key']
|
7
7
|
POST_PARAMS = [:title,:body,:source,:caption,:'click-through-url',
|
8
8
|
:quote,:name,:url,:description,:conversation,
|
9
9
|
:embed,:'externally-hosted-url']
|
@@ -17,7 +17,7 @@ class Tumblr
|
|
17
17
|
end
|
18
18
|
|
19
19
|
attr_reader :type, :state, :post_id, :format
|
20
|
-
attr_accessor :slug, :date, :group, :generator
|
20
|
+
attr_accessor :slug, :date, :group, :generator, :reblog_key
|
21
21
|
|
22
22
|
def initialize(post_id = nil)
|
23
23
|
@post_id = post_id if post_id
|
@@ -71,7 +71,7 @@ class Tumblr
|
|
71
71
|
def to_h
|
72
72
|
post_hash = {}
|
73
73
|
basics = [:post_id, :type, :date, :tags, :format, :group, :generator,
|
74
|
-
:slug, :state, :send_to_twitter, :publish_on]
|
74
|
+
:slug, :state, :send_to_twitter, :publish_on, :reblog_key]
|
75
75
|
params = basics.select {|opt| respond_to?(opt) && send(opt) }
|
76
76
|
params |= self.class.parameters.select {|opt| send(opt) } unless self.class.parameters.blank?
|
77
77
|
params.each { |key| post_hash[key.to_s.gsub('_','-').to_sym] = send(key) } unless params.empty?
|
@@ -92,6 +92,18 @@ class Tumblr
|
|
92
92
|
Writer.new(email,password).delete(to_h)
|
93
93
|
end
|
94
94
|
|
95
|
+
def like(email,password)
|
96
|
+
if (post_id && reblog_key)
|
97
|
+
Reader.new(email,password).like(:'post-id' => post_id, :'reblog-key' => reblog_key)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def unlike(email,password)
|
102
|
+
if (post_id && reblog_key)
|
103
|
+
Reader.new(email,password).unlike(:'post-id' => post_id, :'reblog-key' => reblog_key)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
95
107
|
# Write to Tumblr and set state to Publish
|
96
108
|
def publish_now(email, password)
|
97
109
|
self.state = :published
|
data/lib/tumblr/reader.rb
CHANGED
@@ -15,7 +15,7 @@ class Tumblr
|
|
15
15
|
|
16
16
|
# http://www.tumblr.com/docs/en/api#authenticated_read
|
17
17
|
def authenticated_read(username, params={})
|
18
|
-
raise '
|
18
|
+
raise 'You must provide an email address and password' unless (params.include?(:email) && params.include?(:password)) || defaults
|
19
19
|
self.class.read username, :post, parameters(params)
|
20
20
|
end
|
21
21
|
|
@@ -26,6 +26,20 @@ class Tumblr
|
|
26
26
|
params.reject {|key,value| !allowed.include? key }
|
27
27
|
end
|
28
28
|
|
29
|
+
# Transform ALL of the posts for user/group to Post objects.
|
30
|
+
# This could take a while...
|
31
|
+
def get_all_posts(username, start = 0, total = nil)
|
32
|
+
first_read = authenticated_read(username, {:num => 50,:start => start}).perform
|
33
|
+
raise %Q(Tumblr response was not successful, "#{first_read.code}: #{first_read.message}") if !first_read.success?
|
34
|
+
posts = self.class.get_posts(first_read)
|
35
|
+
offset = start + posts.count
|
36
|
+
post_total = total || first_read['tumblr']['posts']['total'].to_i
|
37
|
+
if post_total > offset
|
38
|
+
posts |= get_all_posts(username, offset, post_total)
|
39
|
+
end
|
40
|
+
posts
|
41
|
+
end
|
42
|
+
|
29
43
|
# Get the Posts as Post objects from a Read response.
|
30
44
|
# Pass an additional type parameter to only get Posts of a certain type.
|
31
45
|
def self.get_posts(response, type = nil)
|
@@ -38,12 +52,13 @@ class Tumblr
|
|
38
52
|
|
39
53
|
# Build a Post object from Reader's Post XML
|
40
54
|
def self.build_post(post)
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
55
|
+
setup_post(post) do |tumblr_post|
|
56
|
+
tumblr_post.date = post['date_gmt']
|
57
|
+
tumblr_post.format = post['format'].to_sym if post['format']
|
58
|
+
tumblr_post.slug = post['slug']
|
59
|
+
tumblr_post.tags post['tag'] if post['tag']
|
60
|
+
tumblr_post.reblog_key = post['reblog_key'] if post['reblog_key']
|
61
|
+
end
|
47
62
|
end
|
48
63
|
|
49
64
|
# Helper method to facilitate standard GET Read and Authenticated Read
|
@@ -83,7 +98,7 @@ class Tumblr
|
|
83
98
|
|
84
99
|
def self.setup_post(post)
|
85
100
|
post_type = post['type'].to_sym
|
86
|
-
case post_type
|
101
|
+
tumblr_post = case post_type
|
87
102
|
when :regular
|
88
103
|
build_regular(post)
|
89
104
|
when :photo
|
@@ -101,6 +116,8 @@ class Tumblr
|
|
101
116
|
else
|
102
117
|
raise "#{post_type} is not a recognized Tumblr post type."
|
103
118
|
end
|
119
|
+
yield tumblr_post if block_given?
|
120
|
+
tumblr_post
|
104
121
|
end
|
105
122
|
|
106
123
|
def self.build_regular(post)
|
data/lib/tumblr.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'weary'
|
2
2
|
|
3
3
|
class Tumblr
|
4
|
-
VERSION = "1.
|
4
|
+
VERSION = "1.1.0"
|
5
5
|
GENERATOR = "The Tumblr Gem v#{VERSION}"
|
6
6
|
USER_AGENT = "TumblrGem/#{VERSION} (+http://github.com/mwunsch/tumblr)"
|
7
7
|
|
@@ -54,7 +54,7 @@ class Tumblr
|
|
54
54
|
Writer.new(@credentials[:email],@credentials[:password])
|
55
55
|
end
|
56
56
|
|
57
|
-
def self.execute(credentials, input
|
57
|
+
def self.execute(credentials, input)
|
58
58
|
request = new(credentials[:email],credentials[:password]).post(input)
|
59
59
|
request.perform
|
60
60
|
end
|
@@ -129,8 +129,8 @@ class Tumblr
|
|
129
129
|
end
|
130
130
|
|
131
131
|
def self.basic_setup(post, post_data)
|
132
|
-
%w(format state private slug date group generator).each do |basic|
|
133
|
-
post.send "#{basic}=".intern, post_data[basic] if post_data[basic]
|
132
|
+
%w(format state private slug date group generator reblog-key).each do |basic|
|
133
|
+
post.send "#{basic}=".gsub('-','_').intern, post_data[basic] if post_data[basic]
|
134
134
|
end
|
135
135
|
%w(tags send-to-twitter publish-on).each do |attribute|
|
136
136
|
post.send attribute.gsub('-','_').intern, post_data[attribute] if post_data[attribute]
|
data/man/tumblr.1
CHANGED
@@ -21,16 +21,36 @@ If you preface your \fIFILE\fR with a bit of YAML (<yaml.org>) frontmatter, you
|
|
21
21
|
.SH "OPTIONS"
|
22
22
|
.
|
23
23
|
.TP
|
24
|
-
\fB\-a\fR,\fB\-\-auth\fR
|
24
|
+
\fB\-a\fR,\fB\-\-auth\fR \fIEMAIL:PASSWORD\fR
|
25
25
|
Provide Email Address and Password, to authenticate to Tumblr, separated by a colon.
|
26
26
|
If these are not provided, you will be prompted for them.
|
27
|
-
You \fBmust\fR provide this argument if the post comes from standard input.
|
27
|
+
You \fBmust\fR provide this or the \fB\-\-credentials\fR argument if the post comes from standard input.
|
28
28
|
.
|
29
29
|
.TP
|
30
|
-
\fB\-e\fR, \fB\-\-email\fR
|
30
|
+
\fB\-e\fR, \fB\-\-email\fR \fIEMAIL\fR
|
31
31
|
Email Address associated with your Tumblr account.
|
32
32
|
You will be prompted for a password.
|
33
33
|
.
|
34
|
+
.TP
|
35
|
+
\fB\-\-credentials\fR \fIFILE\fR
|
36
|
+
A YAML file with the user credentials. Should have keys \fBemail\fR and \fBpassword\fR.
|
37
|
+
.
|
38
|
+
.TP
|
39
|
+
\fB\-p\fR,\fB\-\-publish\fR
|
40
|
+
Publish the post immediately. This will ignore the \fBstate\fR parameter set in the post.
|
41
|
+
.
|
42
|
+
.TP
|
43
|
+
\fB\-q\fR,\fB\-\-queue\fR
|
44
|
+
Add the post to the queue.
|
45
|
+
.
|
46
|
+
.TP
|
47
|
+
\fB\-d\fR,\fB\-\-draft\fR
|
48
|
+
Save the post as a draft.
|
49
|
+
.
|
50
|
+
.TP
|
51
|
+
\fB\-\-group\fR=\fIGROUP\fR
|
52
|
+
Publish the post to a \fIGROUP\fR tumblelog.
|
53
|
+
.
|
34
54
|
.P
|
35
55
|
Other:
|
36
56
|
.
|
@@ -90,6 +110,33 @@ $ tumblr http://www.youtube.com/watch?v=CW0DUg63lqU
|
|
90
110
|
.
|
91
111
|
.IP "" 0
|
92
112
|
.
|
113
|
+
.P
|
114
|
+
Save it as a draft:
|
115
|
+
.
|
116
|
+
.IP "" 4
|
117
|
+
.
|
118
|
+
.nf
|
119
|
+
$ tumblr \-d http://www.youtube.com/watch?v=CW0DUg63lqU
|
120
|
+
.
|
121
|
+
.fi
|
122
|
+
.
|
123
|
+
.IP "" 0
|
124
|
+
.
|
125
|
+
.P
|
126
|
+
Authenticate with credentials given from a file:
|
127
|
+
.
|
128
|
+
.IP "" 4
|
129
|
+
.
|
130
|
+
.nf
|
131
|
+
$ cat ~/.tumblrlogin
|
132
|
+
email: tumblruser@generic\-email.com
|
133
|
+
password: myvoiceismypassport
|
134
|
+
$ cat data.yml my_post.txt | tumblr \-\-credentials ~/.tumblrlogin
|
135
|
+
.
|
136
|
+
.fi
|
137
|
+
.
|
138
|
+
.IP "" 0
|
139
|
+
.
|
93
140
|
.SH "INSTALLATION"
|
94
141
|
If you have RubyGems installed:
|
95
142
|
.
|
@@ -106,7 +153,7 @@ gem install tumblr\-rb
|
|
106
153
|
Tumblr (the gem) is Copyright (C) 2010 Mark Wunsch
|
107
154
|
.
|
108
155
|
.P
|
109
|
-
Tumblr is Copyright (c) Tumblr, Inc. The Tumblr gem is NOT affiliated with Tumblr.
|
156
|
+
Tumblr is Copyright (c) Tumblr, Inc. The Tumblr gem is NOT affiliated with Tumblr, Inc.
|
110
157
|
.
|
111
158
|
.SH "SEE ALSO"
|
112
159
|
tumblr(5), gem(1)
|
data/man/tumblr.1.html
CHANGED
@@ -80,11 +80,16 @@
|
|
80
80
|
<h2>OPTIONS</h2>
|
81
81
|
|
82
82
|
<dl>
|
83
|
-
<dt><code>-a</code>,<code>--auth</code>
|
83
|
+
<dt><code>-a</code>,<code>--auth</code> <em>EMAIL:PASSWORD</em></dt><dd><p> Provide Email Address and Password, to authenticate to Tumblr, separated by a colon.
|
84
84
|
If these are not provided, you will be prompted for them.
|
85
|
-
You <b>must</b> provide this argument if the post comes from standard input.</p></dd>
|
86
|
-
<dt><code>-e</code>, <code>--email</code>
|
85
|
+
You <b>must</b> provide this or the <code>--credentials</code> argument if the post comes from standard input.</p></dd>
|
86
|
+
<dt><code>-e</code>, <code>--email</code> <em>EMAIL</em></dt><dd><p> Email Address associated with your Tumblr account.
|
87
87
|
You will be prompted for a password.</p></dd>
|
88
|
+
<dt><code>--credentials</code> <em>FILE</em></dt><dd><p> A YAML file with the user credentials. Should have keys <code>email</code> and <code>password</code>.</p></dd>
|
89
|
+
<dt><code>-p</code>,<code>--publish</code></dt><dd><p> Publish the post immediately. This will ignore the <code>state</code> parameter set in the post.</p></dd>
|
90
|
+
<dt><code>-q</code>,<code>--queue</code></dt><dd><p> Add the post to the queue.</p></dd>
|
91
|
+
<dt><code>-d</code>,<code>--draft</code></dt><dd><p> Save the post as a draft.</p></dd>
|
92
|
+
<dt><code>--group</code>=<em>GROUP</em></dt><dd><p> Publish the post to a <em>GROUP</em> tumblelog.</p></dd>
|
88
93
|
</dl>
|
89
94
|
|
90
95
|
|
@@ -118,6 +123,19 @@
|
|
118
123
|
<pre><code>$ tumblr http://www.youtube.com/watch?v=CW0DUg63lqU
|
119
124
|
</code></pre>
|
120
125
|
|
126
|
+
<p>Save it as a draft:</p>
|
127
|
+
|
128
|
+
<pre><code>$ tumblr -d http://www.youtube.com/watch?v=CW0DUg63lqU
|
129
|
+
</code></pre>
|
130
|
+
|
131
|
+
<p>Authenticate with credentials given from a file:</p>
|
132
|
+
|
133
|
+
<pre><code>$ cat ~/.tumblrlogin
|
134
|
+
email: tumblruser@generic-email.com
|
135
|
+
password: myvoiceismypassport
|
136
|
+
$ cat data.yml my_post.txt | tumblr --credentials ~/.tumblrlogin
|
137
|
+
</code></pre>
|
138
|
+
|
121
139
|
<h2>INSTALLATION</h2>
|
122
140
|
|
123
141
|
<p>If you have RubyGems installed:</p>
|
@@ -129,7 +147,7 @@
|
|
129
147
|
|
130
148
|
<p>Tumblr (the gem) is Copyright (C) 2010 Mark Wunsch</p>
|
131
149
|
|
132
|
-
<p>Tumblr is Copyright (c) Tumblr, Inc. The Tumblr gem is NOT affiliated with Tumblr.</p>
|
150
|
+
<p>Tumblr is Copyright (c) Tumblr, Inc. The Tumblr gem is NOT affiliated with Tumblr, Inc.</p>
|
133
151
|
|
134
152
|
<h2>SEE ALSO</h2>
|
135
153
|
|
data/man/tumblr.1.ronn
CHANGED
@@ -15,14 +15,29 @@ If you preface your <FILE> with a bit of YAML (<yaml.org>) frontmatter, you can
|
|
15
15
|
|
16
16
|
## OPTIONS
|
17
17
|
|
18
|
-
* `-a`,`--auth`
|
18
|
+
* `-a`,`--auth` _EMAIL:PASSWORD_:
|
19
19
|
Provide Email Address and Password, to authenticate to Tumblr, separated by a colon.
|
20
20
|
If these are not provided, you will be prompted for them.
|
21
|
-
You <b>must</b> provide this argument if the post comes from standard input.
|
21
|
+
You <b>must</b> provide this or the `--credentials` argument if the post comes from standard input.
|
22
22
|
|
23
|
-
* `-e`, `--email`
|
23
|
+
* `-e`, `--email` _EMAIL_:
|
24
24
|
Email Address associated with your Tumblr account.
|
25
25
|
You will be prompted for a password.
|
26
|
+
|
27
|
+
* `--credentials` _FILE_:
|
28
|
+
A YAML file with the user credentials. Should have keys `email` and `password`.
|
29
|
+
|
30
|
+
* `-p`,`--publish`:
|
31
|
+
Publish the post immediately. This will ignore the `state` parameter set in the post.
|
32
|
+
|
33
|
+
* `-q`,`--queue`:
|
34
|
+
Add the post to the queue.
|
35
|
+
|
36
|
+
* `-d`,`--draft`:
|
37
|
+
Save the post as a draft.
|
38
|
+
|
39
|
+
* `--group`=_GROUP_:
|
40
|
+
Publish the post to a _GROUP_ tumblelog.
|
26
41
|
|
27
42
|
Other:
|
28
43
|
|
@@ -50,6 +65,17 @@ Or a Video post:
|
|
50
65
|
|
51
66
|
$ tumblr http://www.youtube.com/watch?v=CW0DUg63lqU
|
52
67
|
|
68
|
+
Save it as a draft:
|
69
|
+
|
70
|
+
$ tumblr -d http://www.youtube.com/watch?v=CW0DUg63lqU
|
71
|
+
|
72
|
+
Authenticate with credentials given from a file:
|
73
|
+
|
74
|
+
$ cat ~/.tumblrlogin
|
75
|
+
email: tumblruser@generic-email.com
|
76
|
+
password: myvoiceismypassport
|
77
|
+
$ cat data.yml my_post.txt | tumblr --credentials ~/.tumblrlogin
|
78
|
+
|
53
79
|
## INSTALLATION
|
54
80
|
|
55
81
|
If you have RubyGems installed:
|
@@ -60,7 +86,7 @@ If you have RubyGems installed:
|
|
60
86
|
|
61
87
|
Tumblr (the gem) is Copyright (C) 2010 Mark Wunsch
|
62
88
|
|
63
|
-
Tumblr is Copyright (c) Tumblr, Inc. The Tumblr gem is NOT affiliated with Tumblr.
|
89
|
+
Tumblr is Copyright (c) Tumblr, Inc. The Tumblr gem is NOT affiliated with Tumblr, Inc.
|
64
90
|
|
65
91
|
## SEE ALSO
|
66
92
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::RecordedResponse
|
3
|
+
method: :post
|
4
|
+
uri: http://www.tumblr.com:80/api/like
|
5
|
+
response: !ruby/object:Net::HTTPOK
|
6
|
+
body: Liked post 445597771.
|
7
|
+
body_exist: true
|
8
|
+
code: "200"
|
9
|
+
header:
|
10
|
+
p3p:
|
11
|
+
- CP="ALL ADM DEV PSAi COM OUR OTRo STP IND ONL"
|
12
|
+
content-type:
|
13
|
+
- text/plain; charset=utf-8
|
14
|
+
connection:
|
15
|
+
- close
|
16
|
+
x-tumblr-usec:
|
17
|
+
- D=91330
|
18
|
+
server:
|
19
|
+
- Apache/2.2.3 (Red Hat)
|
20
|
+
date:
|
21
|
+
- Sat, 13 Mar 2010 16:30:58 GMT
|
22
|
+
content-length:
|
23
|
+
- "21"
|
24
|
+
x-tumblr-perf:
|
25
|
+
- "\"ch:0/ cm:0/ ce:0/ c:0/0 d:0/0 e:0/0\""
|
26
|
+
vary:
|
27
|
+
- Accept-Encoding
|
28
|
+
http_version: "1.1"
|
29
|
+
message: OK
|
30
|
+
read: true
|
31
|
+
socket:
|
@@ -0,0 +1,42 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::RecordedResponse
|
3
|
+
method: :get
|
4
|
+
uri: http://tumblrgemtest.tumblr.com:80/api/read/
|
5
|
+
response: !ruby/object:Net::HTTPOK
|
6
|
+
body: |
|
7
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
8
|
+
<tumblr version="1.0"><tumblelog name="tumblrgemtest" timezone="US/Eastern" title="Testing Tumblr Gem"></tumblelog><posts start="0" total="1"><post id="445597771" url="http://tumblrgemtest.tumblr.com/post/445597771" url-with-slug="http://tumblrgemtest.tumblr.com/post/445597771/simple-post-to-check-liking-unliking" type="regular" date-gmt="2010-03-13 16:16:00 GMT" date="Sat, 13 Mar 2010 11:16:00" unix-timestamp="1268496960" format="markdown" reblog-key="DLVWOpfh" slug="simple-post-to-check-liking-unliking"><regular-body><p>Simple post to check liking/unliking.</p></regular-body></post></posts></tumblr>
|
9
|
+
|
10
|
+
body_exist: true
|
11
|
+
code: "200"
|
12
|
+
header:
|
13
|
+
last-modified:
|
14
|
+
- Sat, 13 Mar 2010 16:16:00 GMT
|
15
|
+
p3p:
|
16
|
+
- CP="ALL ADM DEV PSAi COM OUR OTRo STP IND ONL"
|
17
|
+
content-type:
|
18
|
+
- text/xml; charset=UTF-8
|
19
|
+
connection:
|
20
|
+
- close
|
21
|
+
x-tumblr-usec:
|
22
|
+
- D=270024
|
23
|
+
x-robots-tag:
|
24
|
+
- noindex
|
25
|
+
server:
|
26
|
+
- Apache/2.2.3 (CentOS)
|
27
|
+
date:
|
28
|
+
- Sat, 13 Mar 2010 16:29:06 GMT
|
29
|
+
content-length:
|
30
|
+
- "660"
|
31
|
+
x-cache-auto:
|
32
|
+
- miss
|
33
|
+
x-tumblr-perf:
|
34
|
+
- "\"ch:4/tumblelog_id_for_host,tumblelogs,country_code_for_ip,tumblelog_post_count cm:4/rate-limiter,rate-limiter,rate-limiter,auto ce:0/ c:0/0 d:0/0 e:0/0\""
|
35
|
+
vary:
|
36
|
+
- Accept-Encoding
|
37
|
+
cache-control:
|
38
|
+
- max-age=900
|
39
|
+
http_version: "1.1"
|
40
|
+
message: OK
|
41
|
+
read: true
|
42
|
+
socket:
|
@@ -0,0 +1,31 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::RecordedResponse
|
3
|
+
method: :post
|
4
|
+
uri: http://www.tumblr.com:80/api/unlike
|
5
|
+
response: !ruby/object:Net::HTTPOK
|
6
|
+
body: Unliked post 445597771.
|
7
|
+
body_exist: true
|
8
|
+
code: "200"
|
9
|
+
header:
|
10
|
+
p3p:
|
11
|
+
- CP="ALL ADM DEV PSAi COM OUR OTRo STP IND ONL"
|
12
|
+
content-type:
|
13
|
+
- text/plain; charset=utf-8
|
14
|
+
connection:
|
15
|
+
- close
|
16
|
+
x-tumblr-usec:
|
17
|
+
- D=119300
|
18
|
+
server:
|
19
|
+
- Apache/2.2.3 (Red Hat)
|
20
|
+
date:
|
21
|
+
- Sat, 13 Mar 2010 16:33:13 GMT
|
22
|
+
content-length:
|
23
|
+
- "23"
|
24
|
+
x-tumblr-perf:
|
25
|
+
- "\"ch:0/ cm:0/ ce:0/ c:0/0 d:0/0 e:0/0\""
|
26
|
+
vary:
|
27
|
+
- Accept-Encoding
|
28
|
+
http_version: "1.1"
|
29
|
+
message: OK
|
30
|
+
read: true
|
31
|
+
socket:
|
data/test/test_tumblr.rb
CHANGED
@@ -200,6 +200,18 @@ link
|
|
200
200
|
assert_respond_to reader, :like
|
201
201
|
assert_respond_to reader, :unlike
|
202
202
|
end
|
203
|
+
|
204
|
+
test 'likes a post' do
|
205
|
+
reader = Tumblr::Reader.new('test@testermcgee.com','dontrevealmysecrets')
|
206
|
+
like = hijack! reader.like(:'post-id' => '445597771', :'reblog-key' => 'DLVWOpfh'), 'read/like'
|
207
|
+
assert like.success?
|
208
|
+
end
|
209
|
+
|
210
|
+
test 'unlikes a post' do
|
211
|
+
reader = Tumblr::Reader.new('test@testermcgee.com','dontrevealmysecrets')
|
212
|
+
unlike = hijack! reader.unlike(:'post-id' => '445597771', :'reblog-key' => 'DLVWOpfh'), 'read/unlike'
|
213
|
+
assert unlike.success?
|
214
|
+
end
|
203
215
|
|
204
216
|
test 'parses posts out of a read' do
|
205
217
|
reader = Tumblr::Reader
|
@@ -230,6 +242,15 @@ link
|
|
230
242
|
assert_equal :link, link_post.type
|
231
243
|
assert_equal :markdown, link_post.format
|
232
244
|
assert_equal link.first['link_url'], link_post.url
|
245
|
+
assert_equal link.first['reblog_key'], link_post.reblog_key
|
246
|
+
end
|
247
|
+
|
248
|
+
test 'gets all the posts for a username' do
|
249
|
+
reader = Tumblr::Reader.new('test@testermcgee.com','dontrevealmysecrets')
|
250
|
+
posts = VCR.with_cassette('read/authenticated') do
|
251
|
+
reader.get_all_posts('mwunsch')
|
252
|
+
end
|
253
|
+
assert_equal 66, posts.count
|
233
254
|
end
|
234
255
|
end
|
235
256
|
|
@@ -287,7 +308,7 @@ link
|
|
287
308
|
end
|
288
309
|
end
|
289
310
|
|
290
|
-
describe 'Post' do
|
311
|
+
describe 'Post' do
|
291
312
|
describe 'Basic' do
|
292
313
|
test 'has a set of post-specific parameters' do
|
293
314
|
klass = Class.new(Tumblr::Post)
|
@@ -323,6 +344,13 @@ link
|
|
323
344
|
assert post.private?
|
324
345
|
end
|
325
346
|
|
347
|
+
test 'can have a reblog key' do
|
348
|
+
post = Tumblr::Post.new
|
349
|
+
assert_respond_to post, :reblog_key
|
350
|
+
post.reblog_key = 'reblog_me'
|
351
|
+
assert_equal 'reblog_me', post.reblog_key
|
352
|
+
end
|
353
|
+
|
326
354
|
test 'has a comma separated list of tags' do
|
327
355
|
post = Tumblr::Post.new
|
328
356
|
assert_respond_to post, :tags
|
@@ -414,6 +442,22 @@ link
|
|
414
442
|
post = Tumblr::Post.new(123)
|
415
443
|
assert post.delete('test@testermcgee.com','dontrevealmysecrets').is_a? Weary::Request
|
416
444
|
end
|
445
|
+
|
446
|
+
test 'likes itself' do
|
447
|
+
post = Tumblr::Post.new(445597771)
|
448
|
+
post.reblog_key = "DLVWOpfh"
|
449
|
+
like = post.like('test@testermcgee.com','dontrevealmysecrets')
|
450
|
+
assert like.is_a? Weary::Request
|
451
|
+
assert_equal 'http://www.tumblr.com/api/like', like.uri.to_s
|
452
|
+
end
|
453
|
+
|
454
|
+
test 'unlikes itself' do
|
455
|
+
post = Tumblr::Post.new(445597771)
|
456
|
+
post.reblog_key = "DLVWOpfh"
|
457
|
+
unlike = post.unlike('test@testermcgee.com','dontrevealmysecrets')
|
458
|
+
assert unlike.is_a? Weary::Request
|
459
|
+
assert_equal 'http://www.tumblr.com/api/unlike', unlike.uri.to_s
|
460
|
+
end
|
417
461
|
|
418
462
|
test 'publishes to tumblr' do
|
419
463
|
klass = Class.new Tumblr::Post
|
data/tumblr-rb.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{tumblr-rb}
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Mark Wunsch"]
|
12
|
-
s.date = %q{2010-03-
|
12
|
+
s.date = %q{2010-03-14}
|
13
13
|
s.default_executable = %q{tumblr}
|
14
14
|
s.description = %q{Ruby library and command line utility to work with the Tumblr Blogging Platform, powered by Weary.}
|
15
15
|
s.email = %q{mark@markwunsch.com}
|
@@ -47,8 +47,11 @@ Gem::Specification.new do |s|
|
|
47
47
|
"test/fixtures/vcr_cassettes/authenticate/authenticate.yml",
|
48
48
|
"test/fixtures/vcr_cassettes/read/authenticated.yml",
|
49
49
|
"test/fixtures/vcr_cassettes/read/authentication_failure.yml",
|
50
|
+
"test/fixtures/vcr_cassettes/read/like.yml",
|
50
51
|
"test/fixtures/vcr_cassettes/read/mwunsch.yml",
|
51
52
|
"test/fixtures/vcr_cassettes/read/optional.yml",
|
53
|
+
"test/fixtures/vcr_cassettes/read/tumblrgemtest.yml",
|
54
|
+
"test/fixtures/vcr_cassettes/read/unlike.yml",
|
52
55
|
"test/fixtures/vcr_cassettes/write/delete.yml",
|
53
56
|
"test/fixtures/vcr_cassettes/write/edit.yml",
|
54
57
|
"test/fixtures/vcr_cassettes/write/write.yml",
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 1
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
|
9
|
-
version: 1.0.0
|
9
|
+
version: 1.1.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Mark Wunsch
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-03-
|
17
|
+
date: 2010-03-14 00:00:00 -05:00
|
18
18
|
default_executable: tumblr
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -97,8 +97,11 @@ files:
|
|
97
97
|
- test/fixtures/vcr_cassettes/authenticate/authenticate.yml
|
98
98
|
- test/fixtures/vcr_cassettes/read/authenticated.yml
|
99
99
|
- test/fixtures/vcr_cassettes/read/authentication_failure.yml
|
100
|
+
- test/fixtures/vcr_cassettes/read/like.yml
|
100
101
|
- test/fixtures/vcr_cassettes/read/mwunsch.yml
|
101
102
|
- test/fixtures/vcr_cassettes/read/optional.yml
|
103
|
+
- test/fixtures/vcr_cassettes/read/tumblrgemtest.yml
|
104
|
+
- test/fixtures/vcr_cassettes/read/unlike.yml
|
102
105
|
- test/fixtures/vcr_cassettes/write/delete.yml
|
103
106
|
- test/fixtures/vcr_cassettes/write/edit.yml
|
104
107
|
- test/fixtures/vcr_cassettes/write/write.yml
|