oauth_twitter 0.1.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OGI3NTNmYzZhNzNmYzVkMTQ4YjdkNTgyYTgyMTFhOTM4MDNkODQ1Ng==
4
+ MjJkZWU1ZGM2YjFmNjUyNWRhNGYzN2E1OTI3ODNkYjRhNDU4MDBkYg==
5
5
  data.tar.gz: !binary |-
6
- NzBmMzgyNjk1MWJmNzFmNGUxMGExYjk3NDlkMDNhYzYyNTlmNjkzNg==
6
+ OTgzMjA3Zjk2YWMzNjUxYzIzYTRmODM4NjA2NWM1YzJlYjZkM2RlOA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- NmU0NTcxNzg5OTliOWFlYzVlODFkOWZkNmRjYzg1M2M2NjhlNmY5YzIyOTE5
10
- YzIwOGQ1MGM2MDVkNzRhNjUwZDIxZmQ3Y2M0MWQ0MjU1N2ZhNGMwMTU2NDk2
11
- YzVmOWQ2MjVkZTlmMTJlZjY2M2NlYmIyYjgyNjRjZWE1YmUwZjY=
9
+ YzA5YzM5NjUxMDYxZDRkNDU2YjRmZTYzY2FjMGQ2MGQ5ZGEwZGYxMGEwODA4
10
+ MmQ3MTY0Zjg4ODQ2YzE1ZDcxMDViMDBjY2MzNjIzMWFlZmM3ZGFjNjUzMTA5
11
+ MjljNmQxZGE2OTdkYTU0OThkOGRhNWFiODI1YTI4OTIzMGE3Y2I=
12
12
  data.tar.gz: !binary |-
13
- ZmZhZDM2YjYyOTE1ODRlNDI5ZmMyMGExMjYwNDEwZjc2YzY0ZmIyNDlhMGNm
14
- MzM4NGUzZmQxMzY1NjBjZGQzYmM1ZTQzNTM0MjBmMzYyNjJhMjA3YTYxNTYz
15
- YWEwZmI3MzJiMDgwYmRjZjYwYjZlYzA3OTgyNTE5MzM0Mzg4M2I=
13
+ NjI0MDE3NDczYzAzMDJkZDczNTE0N2RlODY5Y2YzOTA5OWFlZjE4ZjM1ZDI4
14
+ YWFkNmZhYjg3N2Q1NDkwZDU0Njk2M2Y3YjNmMGIxOTI5MjlkNGNlNTlmMDkz
15
+ NDA4OTViMjBhMGEyOGFlN2Y4MDllMjI4ZTc4MDdmODc4ZjcxNzI=
data/README.md CHANGED
@@ -1,29 +1,64 @@
1
1
  # OauthTwitter
2
2
 
3
- TODO: Write a gem description
3
+ An OAuth library to interact with Twitter API v1.1, by simply calling methods on instances. The methods name is designed to be similar to Twitter's API. For example:
4
4
 
5
- ## Installation
5
+ If you want to load home timeline for certain user, just do:
6
+
7
+ response = your_instance.home_timeline
8
+ response.each {|r| process_response(r)}
9
+
10
+ The response is a nested hash that structured the same as Twitter's response JSON.
11
+
12
+ ## 1. Installation
6
13
 
7
14
  Add this line to your application's Gemfile:
8
15
 
9
16
  gem 'oauth_twitter'
10
17
 
11
- And then execute:
18
+ Then execute:
12
19
 
13
- $ bundle
20
+ $ bundle install
14
21
 
15
- Or install it yourself as:
22
+ Or install it yourself use:
16
23
 
17
24
  $ gem install oauth_twitter
25
+
26
+ ## 2. Setup and Usage
27
+
28
+ 1) Configure __OauthTwitter__ on app initialization:
29
+
30
+ OauthTwitter::Config.setup do |c|
31
+ c.consumer_key = "#{your_twitter_consumer_key}"
32
+ c.consumer_secret = "#{twitter_consumer_secret}"
33
+
34
+ # Your don't have to include following in your initializer,
35
+ # but OauthTwitter will fallback to this url
36
+ # if you don't provide them in certain functions' args
37
+
38
+ c.oauth_callback = "#{oauth_request_token_callback_address}"
39
+ end
40
+
41
+ 2) Include `OauthTwitter` in your class like:
42
+
43
+ class YouClass
44
+ include OauthTwitter
45
+
46
+ end
47
+
48
+ 3) Implement `attr_accessor` in your class, so __OauthTwitter__ could load tokens from `YourClass`:
49
+
50
+ class YourClass
51
+ include OauthTwitter
52
+
53
+ attr_accessor :oauth_token, :oauth_token_secret
54
+ ...
55
+ end
18
56
 
19
- ## Usage
57
+ 4) You can start calling methods on `YourClass`:
20
58
 
21
- TODO: Write usage instructions here
59
+ you_instance = YourClass.new
60
+ you_instance.request_token("callback_url")
22
61
 
23
- ## Contributing
62
+ ## Documentation
24
63
 
25
- 1. Fork it
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create new Pull Request
64
+ Still a work in process...
@@ -2,16 +2,102 @@ module OauthTwitter
2
2
  module API
3
3
  module Friends
4
4
  PATH = {
5
- friends_ids: '/1.1/friends/ids.json'
5
+ :friendships_no_retweets_ids => '/1.1/friendships/no_retweets/ids.json',
6
+ :friends_ids => '/1.1/friends/ids.json',
7
+ :followers_ids => '/1.1/followers/ids.json',
8
+ :friendships_lookup => '/1.1/friendships/lookup.json',
9
+ :friendships_incoming => '/1.1/friendships/incoming.json',
10
+ :friendships_outgoing => '/1.1/friendships/outgoing.json',
11
+ :friendships_create => '/1.1/friendships/create.json',
12
+ :friendships_destroy => '/1.1/friendships/destroy.json',
13
+ :friendships_update => '/1.1/friendships/update.json',
14
+ :friendships_show => '/1.1/friendships/show.json',
15
+ :friends_list => '/1.1/friends/list.json',
16
+ :followers_list => '/1.1/followers/list.json'
6
17
  }
7
18
 
8
- def friends_ids(user_id)
19
+ def friendships_no_retweets_ids(params={}, options={})
20
+ query = params.clone
9
21
  oauth = oauth_params(true)
10
- query = {
11
- user_id: user_id,
12
- count: 5000
13
- }
14
- return send_request(:GET, PATH[:friends_ids], query, oauth)
22
+ response = send_request(:GET, PATH[:friendships_no_retweets_ids], query, oauth)
23
+ return results_with_error_explained(response, options)
24
+ end
25
+
26
+ def friends_ids(params={}, options={})
27
+ query = params.clone
28
+ oauth = oauth_params(true)
29
+ response = send_request(:GET, PATH[:friends_ids], query, oauth)
30
+ return results_with_error_explained(response, options)
31
+ end
32
+
33
+ def followers_ids(params={}, options={})
34
+ query = params.clone
35
+ oauth = oauth_params(true)
36
+ response = send_request(:GET, PATH[:followers_ids], query, oauth)
37
+ return results_with_error_explained(response, options)
38
+ end
39
+
40
+ def friendships_lookup(params={}, options={})
41
+ query = params.clone
42
+ oauth = oauth_params(true)
43
+ response = send_request(:GET, PATH[:friendships_lookup], query, oauth)
44
+ return results_with_error_explained(response, options)
45
+ end
46
+
47
+ def friendships_incoming(params={}, options={})
48
+ query = params.clone
49
+ oauth = oauth_params(true)
50
+ response = send_request(:GET, PATH[:friendships_incoming], query, oauth)
51
+ return results_with_error_explained(response, options)
52
+ end
53
+
54
+ def friendships_outgoing(params={}, options={})
55
+ query = params.clone
56
+ oauth = oauth_params(true)
57
+ response = send_request(:GET, PATH[:friendships_outgoing], query, oauth)
58
+ return results_with_error_explained(response, options)
59
+ end
60
+
61
+ def friendships_create(params={}, options={})
62
+ query = params.clone
63
+ oauth = oauth_params(true)
64
+ response = send_request(:POST, PATH[:friendships_create], query, oauth)
65
+ return results_with_error_explained(response, options)
66
+ end
67
+
68
+ def friendships_destroy(params={}, options={})
69
+ query = params.clone
70
+ oauth = oauth_params(true)
71
+ response = send_request(:POST, PATH[:friendships_destroy], query, oauth)
72
+ return results_with_error_explained(response, options)
73
+ end
74
+
75
+ def friendships_update(params={}, options={})
76
+ query = params.clone
77
+ oauth = oauth_params(true)
78
+ response = send_request(:POST, PATH[:friendships_update], query, oauth)
79
+ return results_with_error_explained(response, options)
80
+ end
81
+
82
+ def friendships_show(params={}, options={})
83
+ query = params.clone
84
+ oauth = oauth_params(true)
85
+ response = send_request(:GET, PATH[:friendships_show], query, oauth)
86
+ return results_with_error_explained(response, options)
87
+ end
88
+
89
+ def friends_list(params={}, options={})
90
+ query = params.clone
91
+ oauth = oauth_params(true)
92
+ response = send_request(:GET, PATH[:friends_list], query, oauth)
93
+ return results_with_error_explained(response, options)
94
+ end
95
+
96
+ def followers_list(params={}, options={})
97
+ query = params.clone
98
+ oauth = oauth_params(true)
99
+ response = send_request(:GET, PATH[:followers_list], query, oauth)
100
+ return results_with_error_explained(response, options)
15
101
  end
16
102
 
17
103
  end
@@ -2,21 +2,38 @@ module OauthTwitter
2
2
  module API
3
3
  module Oauth
4
4
  PATH = {
5
- request_token: '/oauth/request_token',
6
- access_token: '/oauth/access_token'
5
+ :oauth_authenticate => '/oauth/authenticate',
6
+ :oauth_authorize => '/oauth/authorize',
7
+ :oauth_access_token => '/oauth/access_token',
8
+ :oauth_request_token => '/oauth/request_token'
7
9
  }
8
10
 
9
- def request_token(oauth_callback=nil)
10
- callback_url = oauth_callback || Config.oauth_callback
11
- oauth = oauth_params(
12
- false,
13
- {oauth_callback: callback_url})
14
- return send_request(:POST, PATH[:request_token], nil, oauth)
11
+ def oauth_authenticate(params={}, options={})
12
+ query = params.clone
13
+ oauth = oauth_params(true)
14
+ response = send_request(:GET, PATH[:oauth_authenticate], query, oauth)
15
+ return results_with_error_explained(response, options)
16
+ end
17
+
18
+ def oauth_authorize(params={}, options={})
19
+ query = params.clone
20
+ oauth = oauth_params(true)
21
+ response = send_request(:GET, PATH[:oauth_authorize], query, oauth)
22
+ return results_with_error_explained(response, options)
15
23
  end
16
24
 
17
- def access_token(oauth_verifier)
25
+ def oauth_access_token(params={}, options={})
26
+ query = params.clone
18
27
  oauth = oauth_params(true)
19
- return send_request(:POST, PATH[:access_token], {oauth_verifier: oauth_verifier}, oauth)
28
+ response = send_request(:POST, PATH[:oauth_access_token], query, oauth)
29
+ return results_with_error_explained(response, options)
30
+ end
31
+
32
+ def oauth_request_token(params={}, options={})
33
+ callback_url = params[:oauth_callback] || Config.oauth_callback
34
+ oauth = oauth_params(false, {oauth_callback: callback_url})
35
+ response = send_request(:POST, PATH[:oauth_request_token], nil, oauth)
36
+ return results_with_error_explained(response, options)
20
37
  end
21
38
 
22
39
  end
@@ -1,21 +1,83 @@
1
1
  module OauthTwitter
2
2
  module API
3
3
  module Statuses
4
+
5
+ ##
6
+ # Url path of status API
4
7
  PATH = {
5
- home_timeline: "/1.1/statuses/home_timeline.json"
8
+ :mentions_timeline => '/1.1/statuses/mentions_timeline.json',
9
+ :user_timeline => '/1.1/statuses/user_timeline.json',
10
+ :home_timeline => '/1.1/statuses/home_timeline.json',
11
+ :retweets_of_me => '/1.1/statuses/retweets_of_me.json'
6
12
  }
7
13
 
8
- def home_timeline(since_id=nil)
9
- oauth = oauth_params(true)
10
- query = {
11
- count: 200,
12
- trim_user: false,
13
- exclude_replies: true,
14
- contributor_details: false,
15
- include_entities: true
16
- }
17
- query[:since_id] = since_id if since_id
18
- return send_request(:GET, PATH[:home_timeline], query, oauth)
14
+ ##
15
+ # Load current user's Tweet with @user_name mentioned, include user
16
+ # mention themselves.
17
+ #
18
+ # @param params [Hash] always supply a user_id or screen_name. If both
19
+ # are supplied, user_id will be used
20
+ # @param options [Hash]
21
+ #
22
+ # @return [Array]
23
+ def mentions_timeline(params={}, options={})
24
+ query = params.clone
25
+ return send_status_request(:mentions_timeline, query, options)
26
+ end
27
+
28
+ ##
29
+ #
30
+ def user_timeline(params={}, options={})
31
+ query = params.clone
32
+ return send_status_request(:user_timeline, query, options)
33
+ end
34
+
35
+ ##
36
+ # Load current use's (determined by oauth_token and oauth_token_secret
37
+ # variables) home time.
38
+ #
39
+ # @param params [Hash] parameters that consistent with Twitter's API.
40
+ # @param options [Hash] options to perform more operations.
41
+ #
42
+ # :pages => [Int] indicate many pages will return, for example,
43
+ # if count = 5, pages = 3, then it will return 5 * 3 = 15 tweets
44
+ # from the user's timeline. Cursor stops if response no more reponse.
45
+ #
46
+ # :explain_error => [Bool] if true, will return a HTTP Code indicate
47
+ # the error
48
+ #
49
+ # @return [Array] hash structured the same as Twitter's JSON response.
50
+ #
51
+ # if :explain_error => true, will return array like:
52
+ # [json, response.body, response.code]
53
+ def home_timeline(params={}, options={})
54
+ query = params.clone
55
+ return send_status_request(:home_timeline, query, options)
56
+ end
57
+
58
+ ##
59
+ #
60
+ def retweets_of_me(params={}, options={})
61
+ query = params.clone
62
+ return send_status_request(:retweets_of_me, query, options)
63
+ end
64
+
65
+ private
66
+ ##
67
+ # Private helper for each of the status API
68
+ def send_status_request(api_symbol, query, options)
69
+ full_response = []
70
+ response = nil
71
+ options[:pages] ||= 1
72
+ options[:pages].times do |page_num|
73
+ oauth = oauth_params(true)
74
+ response = send_request(:GET, PATH[api_symbol], query, oauth)
75
+ break unless response[0]
76
+ break if response[1].empty?
77
+ full_response += response[1]
78
+ query[:max_id] = response[1].last['id'] - 1
79
+ end
80
+ return results_with_error_explained(response, options, full_response)
19
81
  end
20
82
 
21
83
  end
@@ -2,26 +2,77 @@ module OauthTwitter
2
2
  module API
3
3
  module Users
4
4
  PATH = {
5
- users_lookup: "/1.1/users/lookup.json"
5
+ :users_lookup => '/1.1/users/lookup.json',
6
+ :users_show => '/1.1/users/show.json',
7
+ :users_search => '/1.1/users/search.json',
8
+ :users_contributees => '/1.1/users/contributees.json',
9
+ :users_contributors => '/1.1/users/contributors.json',
10
+ :users_profile_banner => '/1.1/users/profile_banner.json'
6
11
  }
7
12
 
8
- def users_lookup(id_array, include_entities=true)
9
- oauth = oauth_params(true)
13
+ ##
14
+ # @param params [Hash] :screen_name => Array, :user_id => Array,
15
+ # :include_entities => Boolean
16
+ def users_lookup(params, options={})
17
+ query = params.clone
18
+ users_array = query[:screen_name] || query[:user_id]
19
+ users_array_type = (query[:screen_name]) ? :screen_name : :user_id
10
20
  # slice id_array for multiple request
11
- num_of_set = id_array.size / 100
12
- num_of_set += 1 if id_array.size % 100 > 0
13
- id_sets = num_of_set.times.map {|i| id_array.slice(i*100, (i+1)*100)}
21
+ num_of_set = users_array.size / 100
22
+ num_of_set += 1 if users_array.size % 100 > 0
23
+ id_sets = num_of_set.times.map {|i| users_array.slice(i*100, (i+1)*100)}
14
24
  # send request
15
- result = []
25
+ full_response = []
26
+ response = nil
16
27
  id_sets.each do |set|
17
- query = {
18
- user_id: set.join(','),
19
- include_entities: include_entities
20
- }
28
+ oauth = oauth_params(true)
29
+ query[users_array_type] = set.join(',')
21
30
  method = set.size <= 10 ? :GET : :POST
22
- result += send_request(method, PATH[:users_lookup], query, oauth)
31
+ response = send_request(method, PATH[:users_lookup], query, oauth)
32
+ if response[0]
33
+ full_response += response[1]
34
+ else
35
+ break
36
+ end
23
37
  end
24
- return result
38
+ return results_with_error_explained(response, options, full_response)
39
+ end
40
+
41
+ def users_show(params, options={})
42
+ query = params.clone
43
+ oauth = oauth_params(true)
44
+ response = send_request(:GET, PATH[:users_show], query, oauth)
45
+ return results_with_error_explained(response, options)
46
+ end
47
+
48
+ def users_search(params, options={})
49
+ query = params.clone
50
+ oauth = oauth_params(true)
51
+ response = send_request(:GET, PATH[:users_search], query, oauth)
52
+ return results_with_error_explained(response, options)
53
+ end
54
+
55
+ def users_contributees(params, options={})
56
+ query = params.clone
57
+ oauth = oauth_params(true)
58
+ response = send_request(:GET, PATH[:users_contributees], query, oauth)
59
+ return results_with_error_explained(response, options)
60
+ end
61
+
62
+ def users_contributors(params, options={})
63
+ query = params.clone
64
+ oauth = oauth_params(true)
65
+ response = send_request(:GET, PATH[:users_contributors], query, oauth)
66
+ return results_with_error_explained(response, options)
67
+ end
68
+
69
+ ##
70
+ #
71
+ def users_profile_banner(params={}, options={})
72
+ query = params.clone
73
+ oauth = oauth_params(true)
74
+ response = send_request(:GET, PATH[:users_profile_banner], query, oauth)
75
+ return results_with_error_explained(response, options)
25
76
  end
26
77
 
27
78
  end
@@ -7,24 +7,44 @@ require "multi_json"
7
7
 
8
8
  module OauthTwitter
9
9
  module Helper
10
+
11
+ ##
12
+ # Generate oauth params
10
13
  def oauth_params(include_oauth_token=true, addional_oauth_params={})
11
14
  oauth = {
12
- oauth_consumer_key: Config.consumer_key,
13
- oauth_nonce: SecureRandom.hex(21),
14
- oauth_signature_method: "HMAC-SHA1",
15
- oauth_timestamp: Time.now.to_i,
16
- oauth_version: "1.0"
15
+ :oauth_consumer_key => Config.consumer_key,
16
+ :oauth_nonce => SecureRandom.hex(21),
17
+ :oauth_signature_method => "HMAC-SHA1",
18
+ :oauth_timestamp => Time.now.to_i,
19
+ :oauth_version => "1.0"
17
20
  }
18
- oauth[:oauth_token] = self.oauth_token if include_oauth_token
21
+ oauth[:oauth_token] = self.oauth_token if include_oauth_token == true
19
22
  return oauth.merge(addional_oauth_params)
20
23
  end
21
24
 
25
+ ##
26
+ # percent_encode disallowed char
22
27
  RESERVED_CHARS = /[^a-zA-Z0-9\-\.\_\~]/
28
+
29
+ ##
30
+ # percent_encode strigns
23
31
  def self.percent_encode(raw)
24
32
  return URI.escape(raw.to_s, RESERVED_CHARS)
25
33
  end
26
34
 
35
+ ##
36
+ # Twitter API root url
27
37
  HOST = "https://api.twitter.com"
38
+
39
+ ##
40
+ # Helper method to send request to Twitter API
41
+ # @param method [Symbol] HTTP method, support :GET or :POST
42
+ # @param path [String] request url path
43
+ # @param query [Hash] request parameters
44
+ # @param oauth [Hash] oauth request header
45
+ #
46
+ # @return [Array] 0: indicate successful or not, 1: response content,
47
+ # 2: error messages if any
28
48
  def send_request(method, path, query, oauth)
29
49
  # Make base_str and signing_key
30
50
  base_str = method.to_s.upcase << "&"
@@ -36,7 +56,7 @@ module OauthTwitter
36
56
  signing_key = String.new(Config.consumer_secret) << "&"
37
57
  signing_key << self.oauth_token_secret if hash[:oauth_token]
38
58
  signature = Helper.sign(base_str, signing_key)
39
- signed_oauth = oauth.merge(oauth_signature: signature)
59
+ signed_oauth = oauth.merge(:oauth_signature => signature)
40
60
  # Header
41
61
  auth_header = Helper.auth_header(signed_oauth)
42
62
  # HTTP request
@@ -52,29 +72,23 @@ module OauthTwitter
52
72
  request = Net::HTTP::Get.new(uri.request_uri)
53
73
  end
54
74
  request["Authorization"] = auth_header
55
- # Response
56
- begin
57
- response = https.request(request)
58
- rescue SocketError
59
- return false
60
- end
75
+ ##
76
+ # Might raise SocketError if no internet connection
77
+ response = https.request(request)
61
78
  case response.code
62
79
  when "200"
63
80
  begin
64
- return MultiJson.load(response.body)
81
+ return true, MultiJson.load(response.body)
65
82
  rescue MultiJson::LoadError
66
- return Rack::Utils.parse_nested_query(response.body)
83
+ return true, Rack::Utils.parse_nested_query(response.body)
67
84
  end
68
- when "401"
69
- return false
70
- when "408"
71
- return false
72
85
  else
73
- p response.code, response.body
74
- raise "HTTP request failed."
86
+ return false, MultiJson.load(response.body), response.code
75
87
  end
76
88
  end
77
89
 
90
+ ##
91
+ # Sign oauth params
78
92
  def self.sign(base_str, signing_key)
79
93
  hex_str = OpenSSL::HMAC.hexdigest(
80
94
  OpenSSL::Digest::Digest.new('sha1'),
@@ -88,5 +102,18 @@ module OauthTwitter
88
102
  params = signed_oauth.map { |key, val| "#{key}=\"#{val}\"" }
89
103
  return "OAuth " << params.join(",")
90
104
  end
105
+
106
+ def results_with_error_explained(response, options, full_response=nil)
107
+ if full_response && options[:explain_error] == true
108
+ return response[0] ? [response[0], full_response] : (response + [full_response])
109
+ elsif full_response
110
+ return full_response
111
+ elsif options[:explain_error] == true
112
+ return response
113
+ else
114
+ return response[0] ? response[1] : false
115
+ end
116
+ end
117
+
91
118
  end
92
119
  end
@@ -1,3 +1,3 @@
1
1
  module OauthTwitter
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -8,9 +8,9 @@ Gem::Specification.new do |spec|
8
8
  spec.version = OauthTwitter::VERSION
9
9
  spec.authors = ["Daiwei Lu"]
10
10
  spec.email = ["daiweilu123@gmail.com"]
11
- spec.description = %q{Simple twitter oauth api to add methods to module for rails module.}
12
- spec.summary = %q{Include module to add methods for rails module.}
13
- spec.homepage = ""
11
+ spec.description = %q{An OAuth library to interact with Twitter API v1.1, by simply calling methods on instances.}
12
+ spec.summary = %q{Load data from Twitter API}
13
+ spec.homepage = "https://github.com/daiweilu/oauth_twitter"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oauth_twitter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daiwei Lu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-04 00:00:00.000000000 Z
11
+ date: 2013-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,7 +66,8 @@ dependencies:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.7'
69
- description: Simple twitter oauth api to add methods to module for rails module.
69
+ description: An OAuth library to interact with Twitter API v1.1, by simply calling
70
+ methods on instances.
70
71
  email:
71
72
  - daiweilu123@gmail.com
72
73
  executables: []
@@ -87,7 +88,7 @@ files:
87
88
  - lib/oauth_twitter/helper.rb
88
89
  - lib/oauth_twitter/version.rb
89
90
  - oauth_twitter.gemspec
90
- homepage: ''
91
+ homepage: https://github.com/daiweilu/oauth_twitter
91
92
  licenses:
92
93
  - MIT
93
94
  metadata: {}
@@ -110,5 +111,6 @@ rubyforge_project:
110
111
  rubygems_version: 2.0.3
111
112
  signing_key:
112
113
  specification_version: 4
113
- summary: Include module to add methods for rails module.
114
+ summary: Load data from Twitter API
114
115
  test_files: []
116
+ has_rdoc: