tumblr_client 0.5
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.
- data/Gemfile +3 -0
- data/LICENSE.md +26 -0
- data/README.md +78 -0
- data/Rakefile +10 -0
- data/bin/tumblr +33 -0
- data/lib/tumblr.rb +11 -0
- data/lib/tumblr/blog.rb +56 -0
- data/lib/tumblr/client.rb +24 -0
- data/lib/tumblr/config.rb +36 -0
- data/lib/tumblr/connection.rb +23 -0
- data/lib/tumblr/helpers.rb +13 -0
- data/lib/tumblr/post.rb +73 -0
- data/lib/tumblr/request.rb +26 -0
- data/lib/tumblr/request/oauth.rb +72 -0
- data/lib/tumblr/user.rb +40 -0
- data/tumblr.gemspec +22 -0
- metadata +151 -0
data/Gemfile
ADDED
data/LICENSE.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
Copyright (c) 2012, John Bunting, Tumblr, Inc.
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
5
|
+
modification, are permitted provided that the following conditions are met:
|
6
|
+
|
7
|
+
* Redistributions of source code must retain the above copyright notice,
|
8
|
+
this list of conditions and the following disclaimer.
|
9
|
+
* Redistributions in binary form must reproduce the above copyright
|
10
|
+
notice, this list of conditions and the following disclaimer in the
|
11
|
+
documentation and/or other materials provided with the distribution.
|
12
|
+
* Neither the name of Tumblr, Inc. nor the names of its contributors may
|
13
|
+
be used to endorse or promote products derived from this software without
|
14
|
+
specific prior written permission.
|
15
|
+
* This license can change at any time.
|
16
|
+
|
17
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
18
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
19
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
20
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
21
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
22
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
23
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
24
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
25
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
26
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
# Tumblr Ruby Gem
|
2
|
+
|
3
|
+
This is a ruby wrapper for the Tumblr v2 API. There should be support for all endpoints
|
4
|
+
currently available on the [Tumblr API](http://www.tumblr.com/docs/en/api/v2).
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
It hasn't been submitted to ruby gems yet so you'll have to build your gem first.
|
9
|
+
|
10
|
+
gem build tumblr.gemspec
|
11
|
+
|
12
|
+
Then you can just install with:
|
13
|
+
|
14
|
+
gem install tumblr-0.5.gem
|
15
|
+
|
16
|
+
## Usage
|
17
|
+
|
18
|
+
First and foremost, this gem will *not* do a three legged oauth request for you. It is just a wrapper to help make
|
19
|
+
your life easier when using the v2 api. If you need to do the full oauth workflow, then please check out the
|
20
|
+
[Ruby OAuth Gem](http://oauth.rubyforge.org/).
|
21
|
+
|
22
|
+
### Configuration
|
23
|
+
|
24
|
+
Configuration for the gem is actually pretty easy:
|
25
|
+
|
26
|
+
Tumblr.configure do |config|
|
27
|
+
config.consumer_key = "consumer_key"
|
28
|
+
config.consumer_secret = "consumer_secret"
|
29
|
+
config.oauth_token = "access_token"
|
30
|
+
config.oauth_token_secret = "access_token_secret"
|
31
|
+
end
|
32
|
+
|
33
|
+
Once you have your configuration squared away it's time to make some requests!
|
34
|
+
|
35
|
+
>> client = Tumblr.new
|
36
|
+
|
37
|
+
That's it! You now have a client that can make any request to the Tumblr API.
|
38
|
+
|
39
|
+
### Some quick examples
|
40
|
+
|
41
|
+
Getting use information:
|
42
|
+
|
43
|
+
>> client.info
|
44
|
+
|
45
|
+
Getting a specific blog's posts and type:
|
46
|
+
|
47
|
+
#Grabbing a specific blogs posts
|
48
|
+
>> client.posts("codingjester.tumblr.com")
|
49
|
+
|
50
|
+
#Grabbing only the last 10 photos off the blog
|
51
|
+
>> client.posts("codingjester.tumblr.com", "photo", :limit => 10)
|
52
|
+
|
53
|
+
|
54
|
+
Posting some photos to Tumblr:
|
55
|
+
|
56
|
+
#Uploads a great photoset
|
57
|
+
>> client.photo("codingjester.tumblr.com", {:data => ['/path/to/pic.jpg', '/path/to/pic.jpg']})
|
58
|
+
|
59
|
+
### The irb Console
|
60
|
+
|
61
|
+
Finally, there is an irb console packaged with the gem that should help you test any calls you want to make.
|
62
|
+
The magic here is that you have a ```.tumblr``` file in your home directory. Inside this file it's just a basic
|
63
|
+
YAML layout with four lines:
|
64
|
+
|
65
|
+
consumer_key: "your_consumer_key"
|
66
|
+
consumer_secret: "your_consumer_secret"
|
67
|
+
oauth_token: "your_access_token"
|
68
|
+
oauth_token_secret: "your_access_token_secret"
|
69
|
+
|
70
|
+
From there, you should be able to run any of the above commands, with no problem! Just fire off the command ```tumblr``
|
71
|
+
from the terminal and you should be dropped into a console.
|
72
|
+
|
73
|
+
|
74
|
+
### Contributions and Pull Requests
|
75
|
+
|
76
|
+
No request is too small and I encourage everyone to get involved. As you can see, we're sorely lacking in tests! So
|
77
|
+
please if you would like to contribute, let me know and throw me a pull request!
|
78
|
+
|
data/Rakefile
ADDED
data/bin/tumblr
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$:.unshift File.join File.dirname(__FILE__), '..', 'lib'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'tumblr'
|
5
|
+
require 'yaml'
|
6
|
+
require 'irb'
|
7
|
+
require 'irb/completion'
|
8
|
+
|
9
|
+
configuration = YAML.load_file File.join ENV['HOME'], '.tumblr' rescue {}
|
10
|
+
|
11
|
+
ENV['IRBRC'] = '.irbrc' if File.exists? '.irbrc'
|
12
|
+
|
13
|
+
Tumblr.configure do |config|
|
14
|
+
config.consumer_key = configuration["consumer_key"]
|
15
|
+
config.consumer_secret = configuration["consumer_secret"]
|
16
|
+
config.oauth_token = configuration["oauth_token"]
|
17
|
+
config.oauth_token_secret = configuration["oauth_token_secret"]
|
18
|
+
end
|
19
|
+
|
20
|
+
puts %q[
|
21
|
+
. .o8 oooo
|
22
|
+
.o8 "888 `888
|
23
|
+
.o888oo oooo oooo ooo. .oo. .oo. 888oooo. 888 oooo d8b
|
24
|
+
888 `888 `888 `888P"Y88bP"Y88b d88' `88b 888 `888""8P
|
25
|
+
888 888 888 888 888 888 888 888 888 888
|
26
|
+
888 . 888 888 888 888 888 888 888 888 888 .o.
|
27
|
+
"888" `V88V"V8P' o888o o888o o888o `Y8bod8P' o888o d888b Y8P
|
28
|
+
|
29
|
+
]
|
30
|
+
|
31
|
+
ARGV.clear
|
32
|
+
IRB.start
|
33
|
+
exit!
|
data/lib/tumblr.rb
ADDED
data/lib/tumblr/blog.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
module Tumblr
|
2
|
+
class Client
|
3
|
+
module Blog
|
4
|
+
|
5
|
+
#
|
6
|
+
#Gets the info about the blog
|
7
|
+
#
|
8
|
+
def blog_info(blog_name)
|
9
|
+
info = get("v2/blog/#{blog_name}/info", {:api_key => Tumblr::consumer_key})
|
10
|
+
end
|
11
|
+
|
12
|
+
#
|
13
|
+
#Gets the avatar of specified size
|
14
|
+
#Defaults to 64
|
15
|
+
#
|
16
|
+
def avatar(blog_name, size=64)
|
17
|
+
avatar = get("v2/blog/#{blog_name}/avatar", {:size => size})
|
18
|
+
end
|
19
|
+
|
20
|
+
#
|
21
|
+
# Gets the list of followers for the blog
|
22
|
+
#
|
23
|
+
def followers(blog_name, options={})
|
24
|
+
if valid_options([:limit, :offset], options)
|
25
|
+
get("v2/blog/#{blog_name}/followers", options)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def posts(blog_name, type=false, options={})
|
30
|
+
url = "v2/blog/#{blog_name}/posts"
|
31
|
+
|
32
|
+
if type
|
33
|
+
url = "#{url}/#{type}"
|
34
|
+
end
|
35
|
+
|
36
|
+
params = {:api_key => Tumblr::consumer_key}
|
37
|
+
unless options.empty?
|
38
|
+
params.merge!(options)
|
39
|
+
end
|
40
|
+
get(url, params)
|
41
|
+
end
|
42
|
+
|
43
|
+
def queue(blog_name)
|
44
|
+
get("v2/blog/#{blog_name}/posts/queue", {})
|
45
|
+
end
|
46
|
+
|
47
|
+
def draft(blog_name)
|
48
|
+
get("v2/blog/#{blog_name}/posts/draft", {})
|
49
|
+
end
|
50
|
+
|
51
|
+
def submissions(blog_name)
|
52
|
+
get("v2/blog/#{blog_name}/posts/submission", {})
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'tumblr/blog'
|
2
|
+
require 'tumblr/user'
|
3
|
+
require 'tumblr/request'
|
4
|
+
require 'tumblr/connection'
|
5
|
+
require 'tumblr/post'
|
6
|
+
require 'tumblr/helpers'
|
7
|
+
|
8
|
+
module Tumblr
|
9
|
+
class Client
|
10
|
+
include Tumblr::Request
|
11
|
+
include Tumblr::Client::Blog
|
12
|
+
include Tumblr::Client::User
|
13
|
+
include Tumblr::Client::Post
|
14
|
+
include Tumblr::Client::Helper
|
15
|
+
include Tumblr::Connection
|
16
|
+
|
17
|
+
def initialize(attrs= {})
|
18
|
+
attrs = Tumblr.options.merge(attrs)
|
19
|
+
Config::VALID_OPTIONS_KEYS.each do |key|
|
20
|
+
instance_variable_set("@#{key}".to_sym, attrs[key])
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Tumblr
|
2
|
+
|
3
|
+
module Config
|
4
|
+
|
5
|
+
VALID_OPTIONS_KEYS = [
|
6
|
+
:consumer_key,
|
7
|
+
:consumer_secret,
|
8
|
+
:oauth_token,
|
9
|
+
:oauth_token_secret
|
10
|
+
]
|
11
|
+
|
12
|
+
attr_accessor *VALID_OPTIONS_KEYS
|
13
|
+
|
14
|
+
def configure
|
15
|
+
yield self
|
16
|
+
self
|
17
|
+
end
|
18
|
+
|
19
|
+
def options
|
20
|
+
options = {}
|
21
|
+
VALID_OPTIONS_KEYS.each{ |k| options[k] = send(k) }
|
22
|
+
options
|
23
|
+
end
|
24
|
+
|
25
|
+
def credentials
|
26
|
+
{
|
27
|
+
:consumer_key => consumer_key,
|
28
|
+
:consumer_secret => consumer_secret,
|
29
|
+
:token => oauth_token,
|
30
|
+
:token_secret => oauth_token_secret
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'faraday_stack'
|
3
|
+
require 'tumblr/request/oauth'
|
4
|
+
|
5
|
+
module Tumblr
|
6
|
+
module Connection
|
7
|
+
def connection(options={})
|
8
|
+
default_options = {
|
9
|
+
:headers => {
|
10
|
+
:accept => "application/json",
|
11
|
+
:user_agent => "Tumblr v1.0"
|
12
|
+
},
|
13
|
+
:url => "http://api.tumblr.com/"
|
14
|
+
}
|
15
|
+
Faraday.new("http://api.tumblr.com/", default_options.merge(options)) do |builder|
|
16
|
+
builder.use FaradayStack::ResponseJSON, content_type: "application/json"
|
17
|
+
builder.use Tumblr::Request::TumblrOAuth, Tumblr::credentials if not Tumblr::credentials.empty?
|
18
|
+
builder.use Faraday::Request::UrlEncoded
|
19
|
+
builder.use Faraday::Adapter::NetHttp
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Tumblr
|
2
|
+
class Client
|
3
|
+
module Helper
|
4
|
+
def valid_options(valid_opts, opts)
|
5
|
+
bad_opts = opts.select { |val| !valid_opts.include?(val) }
|
6
|
+
if !bad_opts.empty?
|
7
|
+
raise Exception, "Invalid options passed, Only #{valid_opts} allowed."
|
8
|
+
end
|
9
|
+
return true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/tumblr/post.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
module Tumblr
|
2
|
+
class Client
|
3
|
+
module Post
|
4
|
+
|
5
|
+
def edit(blog_name, options={})
|
6
|
+
post("v2/blog/#{blog_name}/post/edit", options)
|
7
|
+
end
|
8
|
+
|
9
|
+
#Don't be lazy and create a nice interface
|
10
|
+
def reblog(blog_name, options={})
|
11
|
+
post("v2/blog/#{blog_name}/post/reblog", options)
|
12
|
+
end
|
13
|
+
|
14
|
+
def delete(blog_name, id)
|
15
|
+
post("v2/blog/#{blog_name}/post/delete", {:id => id})
|
16
|
+
end
|
17
|
+
|
18
|
+
def photo(blog_name, options={})
|
19
|
+
options[:type] = "photo"
|
20
|
+
if options.has_key?(:data)
|
21
|
+
#Probably can be refactored
|
22
|
+
if options[:data].kind_of?(Array)
|
23
|
+
count = 0
|
24
|
+
options[:data].each do |filepath|
|
25
|
+
options["data[#{count}]"] = File.open(filepath, 'rb').read()
|
26
|
+
count += 1
|
27
|
+
end
|
28
|
+
options.delete(:data)
|
29
|
+
else
|
30
|
+
options[:data] = File.open(options[:data],'rb').read()
|
31
|
+
end
|
32
|
+
end
|
33
|
+
post("v2/blog/#{blog_name}/post", options)
|
34
|
+
end
|
35
|
+
|
36
|
+
def quote(blog_name, options={})
|
37
|
+
options[:type] = "quote"
|
38
|
+
post("v2/blog/#{blog_name}/post", options)
|
39
|
+
end
|
40
|
+
|
41
|
+
def text(blog_name, options={})
|
42
|
+
options[:type] = "text"
|
43
|
+
post("v2/blog/#{blog_name}/post", options)
|
44
|
+
end
|
45
|
+
|
46
|
+
def link(blog_name, options={})
|
47
|
+
options[:type] = "link"
|
48
|
+
post("v2/blog/#{blog_name}/post", options)
|
49
|
+
end
|
50
|
+
|
51
|
+
def chat(blog_name, options={})
|
52
|
+
options[:type] = "chat"
|
53
|
+
post("v2/blog/#{blog_name}/post", options)
|
54
|
+
end
|
55
|
+
|
56
|
+
def audio(blog_name, options={})
|
57
|
+
options[:type] = "audio"
|
58
|
+
post("v2/blog/#{blog_name}/post", options)
|
59
|
+
end
|
60
|
+
|
61
|
+
def video(blog_name, options={})
|
62
|
+
options[:type] = "video"
|
63
|
+
post("v2/blog/#{blog_name}/post", options)
|
64
|
+
end
|
65
|
+
|
66
|
+
def answer(blog_name, options={})
|
67
|
+
options[:type] = "answer"
|
68
|
+
post("v2/blog/#{blog_name}/post", options)
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Tumblr
|
4
|
+
module Request
|
5
|
+
|
6
|
+
#Performs a get request
|
7
|
+
def get(path, params={})
|
8
|
+
response = connection.get do |req|
|
9
|
+
req.url path
|
10
|
+
req.params = params
|
11
|
+
end
|
12
|
+
#check for errors and encapsulate
|
13
|
+
JSON.parse(response.body)['response']
|
14
|
+
end
|
15
|
+
|
16
|
+
#Performs post request
|
17
|
+
def post(path, params={})
|
18
|
+
response = connection.post do |req|
|
19
|
+
req.url path
|
20
|
+
req.body = params unless params.empty?
|
21
|
+
end
|
22
|
+
#Check for errors and encapsulate
|
23
|
+
JSON.parse(response.body)['response']
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'time'
|
3
|
+
require 'uri'
|
4
|
+
require 'openssl'
|
5
|
+
require 'base64'
|
6
|
+
|
7
|
+
module Tumblr
|
8
|
+
module Request
|
9
|
+
class TumblrOAuth < Faraday::Middleware
|
10
|
+
def call(env)
|
11
|
+
if env[:method].to_s == "get"
|
12
|
+
params = env[:url].query_values || {}
|
13
|
+
url = "#{env[:url].scheme}://#{env[:url].host}#{env[:url].path}"
|
14
|
+
else
|
15
|
+
params = env[:body] || {}
|
16
|
+
url = env[:url]
|
17
|
+
end
|
18
|
+
signature_params = params
|
19
|
+
params.each do |key, value|
|
20
|
+
signature_params = {} if value.respond_to?(:content_type)
|
21
|
+
end
|
22
|
+
env[:request_headers]["Authorization"] = self.oauth_gen(env[:method], url, signature_params)
|
23
|
+
env[:request_headers]["Content-type"] = "application/x-www-form-urlencoded"
|
24
|
+
env[:request_headers]["Host"] = "api.tumblr.com"
|
25
|
+
|
26
|
+
|
27
|
+
@app.call(env)
|
28
|
+
end
|
29
|
+
|
30
|
+
def initialize(app, options={})
|
31
|
+
@app, @options = app, options
|
32
|
+
end
|
33
|
+
|
34
|
+
def oauth_gen(method, url, params)
|
35
|
+
params[:oauth_consumer_key] = @options[:consumer_key]
|
36
|
+
params[:oauth_nonce] = Time.now.to_i
|
37
|
+
params[:oauth_signature_method] = 'HMAC-SHA1'
|
38
|
+
params[:oauth_timestamp] = Time.now.to_i
|
39
|
+
params[:oauth_token] = @options[:token]
|
40
|
+
params[:oauth_version] = "1.0"
|
41
|
+
params[:oauth_signature] = self.oauth_sig(method, url, params)
|
42
|
+
|
43
|
+
header = []
|
44
|
+
params.each do |key, value|
|
45
|
+
if key.to_s.include?("oauth")
|
46
|
+
header << "#{key.to_s}=#{value}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
"OAuth #{header.join(", ")}"
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
def oauth_sig(method, url, params)
|
55
|
+
parts = [method.upcase, URI.encode(url.to_s, /[^a-z0-9\-\.\_\~]/i)]
|
56
|
+
|
57
|
+
#sort the parameters
|
58
|
+
params = Hash[params.sort_by{ |key, value| key.to_s}]
|
59
|
+
|
60
|
+
encoded = []
|
61
|
+
params.each do |key, value|
|
62
|
+
encoded << "#{key.to_s}=#{URI.encode(value.to_s, /[^a-z0-9\-\.\_\~]/i)}"
|
63
|
+
end
|
64
|
+
|
65
|
+
parts << URI.encode(encoded.join("&"), /[^a-z0-9\-\.\_\~]/i)
|
66
|
+
signature_base = parts.join("&")
|
67
|
+
secret = "#{@options[:consumer_secret]}&#{@options[:token_secret]}"
|
68
|
+
Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1.new, secret, signature_base)).chomp.gsub(/\n/, '')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/tumblr/user.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
module Tumblr
|
2
|
+
class Client
|
3
|
+
module User
|
4
|
+
def info
|
5
|
+
info = post("v2/user/info")
|
6
|
+
end
|
7
|
+
|
8
|
+
def dashboard(options={})
|
9
|
+
valid_opts = [:limit, :offset, :type, :since_id, :reblog_info, :notes_info]
|
10
|
+
if valid_options(valid_opts, options)
|
11
|
+
get("v2/user/dashboard", options)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def likes(offset=0, limit=20)
|
16
|
+
likes = get("v2/user/likes", {:limit => limit, :offset => offset})
|
17
|
+
end
|
18
|
+
|
19
|
+
def following(offset=0, limit=20)
|
20
|
+
following = get("v2/user/following", {:limit => limit, :offset => offset})
|
21
|
+
end
|
22
|
+
|
23
|
+
def follow(url)
|
24
|
+
follow = post("v2/user/follow", {:url => url})
|
25
|
+
end
|
26
|
+
|
27
|
+
def unfollow(url)
|
28
|
+
follow = post("v2/user/unfollow", {:url => url})
|
29
|
+
end
|
30
|
+
|
31
|
+
def like(id, reblog_key)
|
32
|
+
like = post("v2/user/like", {:id => id, :reblog_key => reblog_key})
|
33
|
+
end
|
34
|
+
|
35
|
+
def unlike(id, reblog_key)
|
36
|
+
unlike = post("v2/user/unlike", {:id => id, :reblog_key => reblog_key})
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/tumblr.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Gem::Specification.new do |gem|
|
4
|
+
gem.add_dependency 'faraday', '~> 0.7'
|
5
|
+
gem.add_dependency 'faraday-stack'
|
6
|
+
gem.add_dependency 'json'
|
7
|
+
gem.add_development_dependency 'rake'
|
8
|
+
gem.add_development_dependency 'rspec'
|
9
|
+
gem.add_development_dependency 'webmock'
|
10
|
+
gem.authors = ["John Bunting"]
|
11
|
+
gem.description = %q{A Ruby wrapper for the Tumblr v2 API}
|
12
|
+
gem.email = ['codingjester@gmail.com']
|
13
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f)}
|
14
|
+
gem.files = `git ls-files`.split("\n")
|
15
|
+
gem.homepage = "http://github.com/codingjester/tumblr"
|
16
|
+
gem.name = "tumblr_client"
|
17
|
+
gem.require_paths = ["lib"]
|
18
|
+
gem.required_rubygems_version = Gem::Requirement.new('>= 1.3.6')
|
19
|
+
gem.summary = %q{Tumblr API wrapper}
|
20
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
21
|
+
gem.version = "0.5"
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tumblr_client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 5
|
8
|
+
version: "0.5"
|
9
|
+
platform: ruby
|
10
|
+
authors:
|
11
|
+
- John Bunting
|
12
|
+
autorequire:
|
13
|
+
bindir: bin
|
14
|
+
cert_chain: []
|
15
|
+
|
16
|
+
date: 2012-03-31 00:00:00 -04:00
|
17
|
+
default_executable:
|
18
|
+
dependencies:
|
19
|
+
- !ruby/object:Gem::Dependency
|
20
|
+
name: faraday
|
21
|
+
prerelease: false
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
segments:
|
27
|
+
- 0
|
28
|
+
- 7
|
29
|
+
version: "0.7"
|
30
|
+
type: :runtime
|
31
|
+
version_requirements: *id001
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: faraday-stack
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
41
|
+
version: "0"
|
42
|
+
type: :runtime
|
43
|
+
version_requirements: *id002
|
44
|
+
- !ruby/object:Gem::Dependency
|
45
|
+
name: json
|
46
|
+
prerelease: false
|
47
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
segments:
|
52
|
+
- 0
|
53
|
+
version: "0"
|
54
|
+
type: :runtime
|
55
|
+
version_requirements: *id003
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: rake
|
58
|
+
prerelease: false
|
59
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
version: "0"
|
66
|
+
type: :development
|
67
|
+
version_requirements: *id004
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: rspec
|
70
|
+
prerelease: false
|
71
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
segments:
|
76
|
+
- 0
|
77
|
+
version: "0"
|
78
|
+
type: :development
|
79
|
+
version_requirements: *id005
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: webmock
|
82
|
+
prerelease: false
|
83
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
segments:
|
88
|
+
- 0
|
89
|
+
version: "0"
|
90
|
+
type: :development
|
91
|
+
version_requirements: *id006
|
92
|
+
description: A Ruby wrapper for the Tumblr v2 API
|
93
|
+
email:
|
94
|
+
- codingjester@gmail.com
|
95
|
+
executables:
|
96
|
+
- tumblr
|
97
|
+
extensions: []
|
98
|
+
|
99
|
+
extra_rdoc_files: []
|
100
|
+
|
101
|
+
files:
|
102
|
+
- Gemfile
|
103
|
+
- LICENSE.md
|
104
|
+
- README.md
|
105
|
+
- Rakefile
|
106
|
+
- bin/tumblr
|
107
|
+
- lib/tumblr.rb
|
108
|
+
- lib/tumblr/blog.rb
|
109
|
+
- lib/tumblr/client.rb
|
110
|
+
- lib/tumblr/config.rb
|
111
|
+
- lib/tumblr/connection.rb
|
112
|
+
- lib/tumblr/helpers.rb
|
113
|
+
- lib/tumblr/post.rb
|
114
|
+
- lib/tumblr/request.rb
|
115
|
+
- lib/tumblr/request/oauth.rb
|
116
|
+
- lib/tumblr/user.rb
|
117
|
+
- tumblr.gemspec
|
118
|
+
has_rdoc: true
|
119
|
+
homepage: http://github.com/codingjester/tumblr
|
120
|
+
licenses: []
|
121
|
+
|
122
|
+
post_install_message:
|
123
|
+
rdoc_options: []
|
124
|
+
|
125
|
+
require_paths:
|
126
|
+
- lib
|
127
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
segments:
|
132
|
+
- 0
|
133
|
+
version: "0"
|
134
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
segments:
|
139
|
+
- 1
|
140
|
+
- 3
|
141
|
+
- 6
|
142
|
+
version: 1.3.6
|
143
|
+
requirements: []
|
144
|
+
|
145
|
+
rubyforge_project:
|
146
|
+
rubygems_version: 1.3.6
|
147
|
+
signing_key:
|
148
|
+
specification_version: 3
|
149
|
+
summary: Tumblr API wrapper
|
150
|
+
test_files: []
|
151
|
+
|