marcinbunsch-oauth_client 0.1.1 → 0.2.1

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.
@@ -2,25 +2,27 @@ h1. Generic OAuth Client for Ruby, based on moomerman/twitter_oauth
2
2
 
3
3
  *NOTE*: This is a very early version and has not been tested, give it some time :)
4
4
 
5
- This is a core OAuth Client, extracting core elements from the an awesome moomerman/twitter_oauth gem. This gem can be used to jump-start your new OAuth client.
5
+ This is a core OAuth Client, extracting core elements from the an awesome moomerman/twitter_oauth gem and reorganizing them to give you tools to build your own client for an API of choice. This gem can be used to jump-start your new OAuth client.
6
6
 
7
7
  Example:
8
8
  <pre><code>require 'oauth_client'
9
- class TwitterOAuth < OAuthClient
9
+ class TwitterOAuth < OAuthClient::Client
10
10
  site 'http://twitter.com'
11
11
  end</code></pre>
12
12
 
13
- That's all you need to have a working OAuth client. Of course, it won't do anything just yet :) You need to implement specific methods for the API you're working with.
13
+ That's all you need to have a working OAuth client which you can use to authorize with an OAuth server. Of course, it won't do anything just yet :) You need to implement specific methods for the API you're working with.
14
14
 
15
- You have a few helper methods to ease the trouble. OAuthClient#get and OAuthClient#post return the unparsed response from the server, whereas OAuthClient#get_json and OAuthClient#post_json parse JSON and return the result
15
+ You have a few helper methods to ease the trouble. OAuthClient#get and OAuthClient#post return the unparsed response from the server. It includes an adapter for JSON, which will parse the response prior to returning it. To use it, call OAuthClient#json.get or OAuthClient#json.post.
16
16
 
17
17
  See this example from moomerman/twitter_oauth:
18
18
  <pre><code>module TwitterOauth
19
19
  class Client
20
+ [...]
20
21
  def user(page=1)
21
22
  oauth_response = access_token.get("/statuses/user_timeline.json?page=#{page}")
22
23
  JSON.parse(oauth_response.body)
23
24
  end
25
+ [...]
24
26
  end
25
27
  end
26
28
  </code></pre>
@@ -28,10 +30,17 @@ end
28
30
  with OAuthClient, it would look like this:
29
31
 
30
32
  <pre><code>require 'oauth_client'
31
- class TwitterOAuth < OAuthClient
33
+ class TwitterOAuth < OAuthClient::Client
32
34
  site 'http://twitter.com'
33
35
 
34
36
  def user(page=1)
35
- get_json("/statuses/user_timeline.json?page=#{page}")
37
+ json.get("/statuses/user_timeline.json?page=#{page}")
36
38
  end
37
- end</code></pre>
39
+ end</code></pre>
40
+
41
+ h2. Authors
42
+
43
+ This gem has been built by hacking and modifing the twitter_oauth gem by Richard Taylor (http://github.com/moomerman). The core client authorization structure is taken from there.
44
+
45
+ Banged together by Marcin Bunsch (http://github.com/marcinbunsch).
46
+
@@ -1,80 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'oauth'
3
- require 'json'
3
+ require 'oauth_client/client'
4
+ require 'oauth_client/exceptions'
4
5
 
5
- class OAuthClient
6
-
7
- # base site
8
- class << self
9
- attr_accessor :site
10
- end
11
-
12
- def self.site(site = nil)
13
- @site = site if site
14
- @site
15
- end
16
-
17
- def initialize(options = {})
18
- @consumer_key = options[:consumer_key]
19
- @consumer_secret = options[:consumer_secret]
20
- @token = options[:token]
21
- @secret = options[:secret]
22
- end
23
-
24
- # authorization
25
- def authorize(token, secret)
26
- request_token = OAuth::RequestToken.new(
27
- consumer, token, secret
28
- )
29
- @access_token = request_token.get_access_token
30
- @token = @access_token.token
31
- @secret = @access_token.secret
32
- @access_token
33
- end
34
-
35
- def authentication_request_token
36
- consumer.options[:authorize_path] = '/oauth/authenticate'
37
- request_token
38
- end
39
-
40
- def request_token
41
- consumer.get_request_token
42
- end
43
-
44
- # request helpers
45
- def get(url)
46
- raise OAuthUnauthorized if !access_token
47
- access_token.get(url)
48
- end
49
-
50
- def post(url, params = {})
51
- raise OAuthUnauthorized if !access_token
52
- access_token.post(url, params)
53
- end
54
-
55
- def get_json(url)
56
- oauth_response = get(url)
57
- JSON.parse(oauth_response.body)
58
- end
59
-
60
- def post_json(url, params = {})
61
- oauth_response = get(url, params)
62
- JSON.parse(oauth_response.body)
63
- end
64
-
65
- private
66
- def consumer
67
- @consumer ||= OAuth::Consumer.new(
68
- @consumer_key,
69
- @consumer_secret,
70
- { :site=> self.class.site }
71
- )
72
- end
73
-
74
- def access_token
75
- @access_token ||= OAuth::AccessToken.new(consumer, @token, @secret)
76
- end
77
- end
78
-
79
- class OAuthUnauthorized < Exception
6
+ module OAuthClient
80
7
  end
@@ -0,0 +1,26 @@
1
+ require 'json'
2
+ module OAuthClient
3
+ module Adapters
4
+ # Json Adapter for OAuthClient
5
+ class Json
6
+ attr_accessor :client
7
+
8
+ # on creation, the adapter must be supplied with the client
9
+ def initialize(client)
10
+ self.client = client
11
+ end
12
+
13
+ # make a GET request and parse JSON response
14
+ def get(url)
15
+ oauth_response = self.client.get(url)
16
+ JSON.parse(oauth_response.body)
17
+ end
18
+
19
+ # make a GET request and parse JSON response
20
+ def post(url, params = {})
21
+ oauth_response = self.client.post(url, params)
22
+ JSON.parse(oauth_response.body)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,77 @@
1
+ module OAuthClient
2
+ class Client
3
+
4
+ # base uri for the API
5
+ class << self
6
+ attr_accessor :site
7
+ end
8
+
9
+ # class method for setting/getting the base uri for API
10
+ def self.site(site = nil)
11
+ @site = site if site
12
+ @site
13
+ end
14
+
15
+ # constructor
16
+ def initialize(options = {})
17
+ @consumer_key = options[:consumer_key]
18
+ @consumer_secret = options[:consumer_secret]
19
+ @token = options[:token]
20
+ @secret = options[:secret]
21
+ @adapters = {}
22
+ end
23
+
24
+ # authorization
25
+ def authorize(token, secret)
26
+ request_token = OAuth::RequestToken.new(
27
+ consumer, token, secret
28
+ )
29
+ @access_token = request_token.get_access_token
30
+ @token = @access_token.token
31
+ @secret = @access_token.secret
32
+ @access_token
33
+ end
34
+
35
+ # get the request token
36
+ def request_token
37
+ consumer.get_request_token
38
+ end
39
+
40
+ # make a GET request and return raw response
41
+ def get(url)
42
+ raise OAuthUnauthorized if !access_token
43
+ access_token.get(url)
44
+ end
45
+
46
+ # make a POST request and return raw response
47
+ def post(url, params = {})
48
+ raise OAuthUnauthorized if !access_token
49
+ access_token.post(url, params)
50
+ end
51
+
52
+ # json adapter, allowing json.get and json.post methods
53
+ def json
54
+ return @adapters[:json] if @adapters[:json]
55
+ require 'oauth_client/adapters/json'
56
+ @adapters[:json] = OAuthClient::Adapters::Json.new(self)
57
+ end
58
+
59
+ private
60
+
61
+ # get the consumer object, with site specified by class variable
62
+ def consumer
63
+ @consumer ||= OAuth::Consumer.new(
64
+ @consumer_key,
65
+ @consumer_secret,
66
+ { :site=> self.class.site }
67
+ )
68
+ end
69
+
70
+ # get access token used for API access
71
+ def access_token
72
+ @access_token ||= OAuth::AccessToken.new(consumer, @token, @secret)
73
+ end
74
+
75
+ end
76
+
77
+ end
@@ -0,0 +1,5 @@
1
+ module OAuthClient
2
+ module Exceptions
3
+ class OAuthUnauthorized < Exception; end
4
+ end
5
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: marcinbunsch-oauth_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcin Bunsch, Richard Taylor
@@ -43,7 +43,10 @@ extra_rdoc_files: []
43
43
  files:
44
44
  - README.textile
45
45
  - lib/oauth_client.rb
46
- has_rdoc: false
46
+ - lib/oauth_client/client.rb
47
+ - lib/oauth_client/exceptions.rb
48
+ - lib/oauth_client/adapters/json.rb
49
+ has_rdoc: true
47
50
  homepage: http://github.com/marcinbunsch/oauth_client
48
51
  post_install_message:
49
52
  rdoc_options: