oauth2 0.0.13 → 0.1.0
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/.gitignore +9 -0
- data/{spec/spec.opts → .rspec} +1 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +44 -0
- data/Rakefile +18 -38
- data/lib/oauth2.rb +1 -2
- data/lib/oauth2/access_token.rb +6 -6
- data/lib/oauth2/client.rb +7 -10
- data/lib/oauth2/response_object.rb +58 -0
- data/lib/oauth2/strategy/base.rb +6 -6
- data/lib/oauth2/strategy/web_server.rb +3 -3
- data/lib/oauth2/version.rb +3 -0
- data/oauth2.gemspec +17 -67
- data/spec/oauth2/access_token_spec.rb +8 -8
- data/spec/oauth2/client_spec.rb +17 -16
- data/spec/oauth2/strategy/base_spec.rb +2 -2
- data/spec/oauth2/strategy/web_server_spec.rb +7 -7
- data/spec/spec_helper.rb +2 -6
- metadata +70 -22
- data/VERSION +0 -1
- data/lib/oauth2/response_hash.rb +0 -13
- data/lib/oauth2/response_string.rb +0 -15
data/.gitignore
CHANGED
data/{spec/spec.opts → .rspec}
RENAMED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
oauth2 (0.0.14)
|
5
|
+
faraday (~> 0.5.0)
|
6
|
+
multi_json (~> 0.0.4)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
addressable (2.1.2)
|
12
|
+
diff-lcs (1.1.2)
|
13
|
+
faraday (0.5.0)
|
14
|
+
addressable (~> 2.1.1)
|
15
|
+
multipart-post (~> 1.0.1)
|
16
|
+
rack (~> 1.2.1)
|
17
|
+
json_pure (1.4.6)
|
18
|
+
multi_json (0.0.4)
|
19
|
+
multipart-post (1.0.1)
|
20
|
+
rack (1.2.1)
|
21
|
+
rake (0.8.7)
|
22
|
+
rcov (0.9.9)
|
23
|
+
rspec (2.0.0)
|
24
|
+
rspec-core (= 2.0.0)
|
25
|
+
rspec-expectations (= 2.0.0)
|
26
|
+
rspec-mocks (= 2.0.0)
|
27
|
+
rspec-core (2.0.0)
|
28
|
+
rspec-expectations (2.0.0)
|
29
|
+
diff-lcs (>= 1.1.2)
|
30
|
+
rspec-mocks (2.0.0)
|
31
|
+
rspec-core (= 2.0.0)
|
32
|
+
rspec-expectations (= 2.0.0)
|
33
|
+
|
34
|
+
PLATFORMS
|
35
|
+
ruby
|
36
|
+
|
37
|
+
DEPENDENCIES
|
38
|
+
faraday (~> 0.5.0)
|
39
|
+
json_pure (~> 1.4.6)
|
40
|
+
multi_json (~> 0.0.4)
|
41
|
+
oauth2!
|
42
|
+
rake (~> 0.8)
|
43
|
+
rcov (~> 0.9)
|
44
|
+
rspec (~> 2.0)
|
data/Rakefile
CHANGED
@@ -1,51 +1,31 @@
|
|
1
|
-
require '
|
2
|
-
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
gem.summary = %Q{A Ruby wrapper for the OAuth 2.0 protocol.}
|
9
|
-
gem.description = %Q{A Ruby wrapper for the OAuth 2.0 protocol built with a similar style to the original OAuth gem.}
|
10
|
-
gem.email = "michael@intridea.com"
|
11
|
-
gem.homepage = "http://github.com/intridea/oauth2"
|
12
|
-
gem.authors = ["Michael Bleigh"]
|
13
|
-
gem.add_dependency 'faraday', '~> 0.4.1'
|
14
|
-
gem.add_dependency 'multi_json', '>= 0.0.4'
|
15
|
-
gem.add_development_dependency "rspec", ">= 1.2.9"
|
16
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
17
|
-
end
|
18
|
-
Jeweler::GemcutterTasks.new
|
19
|
-
|
20
|
-
task :spec => :check_dependencies
|
21
|
-
rescue LoadError
|
22
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
desc "Run all examples"
|
6
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
7
|
+
t.rspec_opts = %w[--color]
|
23
8
|
end
|
24
9
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
spec.libs << 'lib' << 'spec'
|
29
|
-
spec.spec_files = FileList['spec/**/*_spec.rb']
|
30
|
-
end
|
10
|
+
task :cleanup_rcov_files do
|
11
|
+
rm_rf 'coverage.data'
|
12
|
+
end
|
31
13
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
14
|
+
namespace :spec do
|
15
|
+
desc "Run all examples using rcov"
|
16
|
+
RSpec::Core::RakeTask.new :rcov => :cleanup_rcov_files do |t|
|
17
|
+
t.rcov = true
|
18
|
+
t.rcov_opts = %[-Ilib -Ispec --exclude "gems/*,features"]
|
19
|
+
t.rcov_opts << %[--text-report --sort coverage --no-html --aggregate coverage.data]
|
36
20
|
end
|
37
|
-
|
38
|
-
task :default => :spec
|
39
|
-
rescue LoadError
|
40
|
-
puts "RSpec (or a dependency) not available. Install it with: gem install rspec"
|
41
21
|
end
|
42
22
|
|
23
|
+
task :default => :spec
|
24
|
+
|
43
25
|
require 'rake/rdoctask'
|
44
26
|
Rake::RDocTask.new do |rdoc|
|
45
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
46
|
-
|
47
27
|
rdoc.rdoc_dir = 'rdoc'
|
48
|
-
rdoc.title = "oauth2 #{
|
28
|
+
rdoc.title = "oauth2 #{Oauth2::VERSION}"
|
49
29
|
rdoc.rdoc_files.include('README*')
|
50
30
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
51
31
|
end
|
data/lib/oauth2.rb
CHANGED
data/lib/oauth2/access_token.rb
CHANGED
@@ -9,28 +9,28 @@ module OAuth2
|
|
9
9
|
@expires_in = (expires_in.nil? || expires_in == '') ? nil : expires_in.to_i
|
10
10
|
@expires_at = Time.now + @expires_in if @expires_in
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
# True if the token in question has an expiration time.
|
14
14
|
def expires?
|
15
15
|
!!@expires_in
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
def request(verb, path, params = {}, headers = {})
|
19
19
|
@client.request(verb, path, params.merge('access_token' => @token), headers.merge('Authorization' => "Token token=\"#{@token}\""))
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def get(path, params = {}, headers = {})
|
23
23
|
request(:get, path, params, headers)
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
def post(path, params = {}, headers = {})
|
27
27
|
request(:post, path, params, headers)
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
def put(path, params = {}, headers = {})
|
31
31
|
request(:put, path, params, headers)
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
def delete(path, params = {}, headers = {})
|
35
35
|
request(:delete, path, params, headers)
|
36
36
|
end
|
data/lib/oauth2/client.rb
CHANGED
@@ -37,7 +37,7 @@ module OAuth2
|
|
37
37
|
self.options = opts
|
38
38
|
self.connection = Faraday::Connection.new(site)
|
39
39
|
self.json = opts.delete(:parse_json)
|
40
|
-
|
40
|
+
|
41
41
|
if adapter && adapter != :test
|
42
42
|
connection.build { |b| b.adapter(adapter) }
|
43
43
|
end
|
@@ -62,16 +62,13 @@ module OAuth2
|
|
62
62
|
else
|
63
63
|
resp = connection.run_request(verb, url, params, headers)
|
64
64
|
end
|
65
|
+
|
65
66
|
case resp.status
|
66
|
-
when 200...201
|
67
|
+
when 200...201
|
67
68
|
if json?
|
68
|
-
|
69
|
-
ResponseHash.new(resp)
|
70
|
-
rescue StandardError => e
|
71
|
-
ResponseString.new(resp)
|
72
|
-
end
|
69
|
+
return ResponseObject.from(resp)
|
73
70
|
else
|
74
|
-
ResponseString.new(resp)
|
71
|
+
return ResponseString.new(resp)
|
75
72
|
end
|
76
73
|
when 401
|
77
74
|
e = OAuth2::AccessDenied.new("Received HTTP 401 during request.")
|
@@ -83,9 +80,9 @@ module OAuth2
|
|
83
80
|
raise e
|
84
81
|
end
|
85
82
|
end
|
86
|
-
|
83
|
+
|
87
84
|
def json?; !!@json end
|
88
85
|
|
89
86
|
def web_server; OAuth2::Strategy::WebServer.new(self) end
|
90
87
|
end
|
91
|
-
end
|
88
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module OAuth2
|
2
|
+
module ResponseObject
|
3
|
+
def self.from(response)
|
4
|
+
object = MultiJson.decode(response.body)
|
5
|
+
|
6
|
+
case object
|
7
|
+
when Array
|
8
|
+
ResponseArray.new(response, object)
|
9
|
+
when Hash
|
10
|
+
ResponseHash.new(response, object)
|
11
|
+
else
|
12
|
+
ResponseString.new(response)
|
13
|
+
end
|
14
|
+
rescue
|
15
|
+
ResponseString.new(response)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.included(base)
|
19
|
+
base.class_eval do
|
20
|
+
attr_accessor :response
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def headers; response.headers end
|
25
|
+
def status; response.status end
|
26
|
+
end
|
27
|
+
|
28
|
+
class ResponseHash < Hash
|
29
|
+
include ResponseObject
|
30
|
+
|
31
|
+
def initialize(response, hash)
|
32
|
+
self.response = response
|
33
|
+
hash.keys.each{|k| self[k] = hash[k]}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class ResponseArray < Array
|
38
|
+
include ResponseObject
|
39
|
+
|
40
|
+
def initialize(response, array)
|
41
|
+
self.response = response
|
42
|
+
super(array)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# This special String class is returned from HTTP requests
|
47
|
+
# and contains the original full response along with convenience
|
48
|
+
# methods for accessing the HTTP status code and headers. It
|
49
|
+
# is returned from all access token requests.
|
50
|
+
class ResponseString < String
|
51
|
+
include ResponseObject
|
52
|
+
|
53
|
+
def initialize(response)
|
54
|
+
super(response.body)
|
55
|
+
self.response = response
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/oauth2/strategy/base.rb
CHANGED
@@ -4,20 +4,20 @@ module OAuth2
|
|
4
4
|
def initialize(client)#:nodoc:
|
5
5
|
@client = client
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
def authorize_url(options = {}) #:nodoc:
|
9
9
|
@client.authorize_url(authorize_params(options))
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
def authorize_params(options = {}) #:nodoc:
|
13
|
-
options = options.inject({}){|h,(k,v)| h[k.to_s] = v; h}
|
13
|
+
options = options.inject({}){|h, (k, v)| h[k.to_s] = v; h}
|
14
14
|
{'client_id' => @client.id}.merge(options)
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
def access_token_url(options = {})
|
18
18
|
@client.access_token_url(access_token_params(options))
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
def access_token_params(options = {})
|
22
22
|
{
|
23
23
|
'client_id' => @client.id,
|
@@ -26,4 +26,4 @@ module OAuth2
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
29
|
-
end
|
29
|
+
end
|
@@ -6,7 +6,7 @@ module OAuth2
|
|
6
6
|
def authorize_params(options = {}) #:nodoc:
|
7
7
|
super(options).merge('type' => 'web_server')
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
# Retrieve an access token given the specified validation code.
|
11
11
|
# Note that you must also provide a <tt>:redirect_uri</tt> option
|
12
12
|
# in order to successfully verify your request for most OAuth 2.0
|
@@ -26,13 +26,13 @@ module OAuth2
|
|
26
26
|
expires_in = params['expires_in']
|
27
27
|
OAuth2::AccessToken.new(@client, access, refresh, expires_in)
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
# <b>DEPRECATED:</b> Use #get_access_token instead.
|
31
31
|
def access_token(*args)
|
32
32
|
warn '[DEPRECATED] OAuth2::Strategy::WebServer#access_token is deprecated, use #get_access_token instead. Will be removed in 0.1.0'
|
33
33
|
get_access_token(*args)
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
def access_token_params(code, options = {}) #:nodoc:
|
37
37
|
super(options).merge({
|
38
38
|
'type' => 'web_server',
|
data/oauth2.gemspec
CHANGED
@@ -1,75 +1,25 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path("../lib/oauth2/version", __FILE__)
|
5
3
|
|
6
4
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version =
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
5
|
+
s.name = "oauth2"
|
6
|
+
s.version = Oauth2::VERSION
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.3.6") if s.respond_to? :required_rubygems_version=
|
11
8
|
s.authors = ["Michael Bleigh"]
|
12
|
-
s.date = %q{2010-08-17}
|
13
9
|
s.description = %q{A Ruby wrapper for the OAuth 2.0 protocol built with a similar style to the original OAuth gem.}
|
14
|
-
s.
|
15
|
-
s.
|
16
|
-
|
17
|
-
"README.rdoc"
|
18
|
-
]
|
19
|
-
s.files = [
|
20
|
-
".document",
|
21
|
-
".gitignore",
|
22
|
-
"CHANGELOG.rdoc",
|
23
|
-
"LICENSE",
|
24
|
-
"README.rdoc",
|
25
|
-
"Rakefile",
|
26
|
-
"VERSION",
|
27
|
-
"lib/oauth2.rb",
|
28
|
-
"lib/oauth2/access_token.rb",
|
29
|
-
"lib/oauth2/client.rb",
|
30
|
-
"lib/oauth2/response_hash.rb",
|
31
|
-
"lib/oauth2/response_string.rb",
|
32
|
-
"lib/oauth2/strategy/base.rb",
|
33
|
-
"lib/oauth2/strategy/web_server.rb",
|
34
|
-
"oauth2.gemspec",
|
35
|
-
"spec/oauth2/access_token_spec.rb",
|
36
|
-
"spec/oauth2/client_spec.rb",
|
37
|
-
"spec/oauth2/strategy/base_spec.rb",
|
38
|
-
"spec/oauth2/strategy/web_server_spec.rb",
|
39
|
-
"spec/spec.opts",
|
40
|
-
"spec/spec_helper.rb",
|
41
|
-
"specs.watchr"
|
42
|
-
]
|
43
|
-
s.homepage = %q{http://github.com/intridea/oauth2}
|
10
|
+
s.summary = %q{A Ruby wrapper for the OAuth 2.0 protocol.}
|
11
|
+
s.email = "michael@intridea.com"
|
12
|
+
s.extra_rdoc_files = ["LICENSE", "README.rdoc"]
|
44
13
|
s.rdoc_options = ["--charset=UTF-8"]
|
14
|
+
s.homepage = "http://github.com/intridea/oauth2"
|
45
15
|
s.require_paths = ["lib"]
|
46
|
-
s.
|
47
|
-
s.
|
48
|
-
s.test_files =
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
if s.respond_to? :specification_version then
|
57
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
58
|
-
s.specification_version = 3
|
59
|
-
|
60
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
61
|
-
s.add_runtime_dependency(%q<faraday>, ["~> 0.4.1"])
|
62
|
-
s.add_runtime_dependency(%q<multi_json>, [">= 0.0.4"])
|
63
|
-
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
64
|
-
else
|
65
|
-
s.add_dependency(%q<faraday>, ["~> 0.4.1"])
|
66
|
-
s.add_dependency(%q<multi_json>, [">= 0.0.4"])
|
67
|
-
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
68
|
-
end
|
69
|
-
else
|
70
|
-
s.add_dependency(%q<faraday>, ["~> 0.4.1"])
|
71
|
-
s.add_dependency(%q<multi_json>, [">= 0.0.4"])
|
72
|
-
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
73
|
-
end
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.add_runtime_dependency("faraday", "~> 0.5.0")
|
20
|
+
s.add_runtime_dependency("multi_json", "~> 0.0.4")
|
21
|
+
s.add_development_dependency("json_pure", "~> 1.4.6")
|
22
|
+
s.add_development_dependency("rake", "~> 0.8")
|
23
|
+
s.add_development_dependency("rcov", "~> 0.9")
|
24
|
+
s.add_development_dependency("rspec", "~> 2.0")
|
74
25
|
end
|
75
|
-
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe OAuth2::AccessToken do
|
4
|
-
let(:client) do
|
5
|
-
cli = OAuth2::Client.new('abc','def', :site => 'https://api.example.com')
|
4
|
+
let(:client) do
|
5
|
+
cli = OAuth2::Client.new('abc', 'def', :site => 'https://api.example.com')
|
6
6
|
cli.connection.build do |b|
|
7
7
|
b.adapter :test do |stub|
|
8
8
|
stub.get('/client?access_token=monkey') { |env| [200, {}, 'get'] }
|
@@ -34,27 +34,27 @@ describe OAuth2::AccessToken do
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
describe '#expires?' do
|
39
39
|
it 'should be false if there is no expires_at' do
|
40
40
|
OAuth2::AccessToken.new(client, token).should_not be_expires
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
it 'should be true if there is an expires_at' do
|
44
44
|
OAuth2::AccessToken.new(client, token, 'abaca', 600).should be_expires
|
45
45
|
end
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
describe '#expires_at' do
|
49
49
|
before do
|
50
50
|
@now = Time.now
|
51
51
|
Time.stub!(:now).and_return(@now)
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
subject{ OAuth2::AccessToken.new(client, token, 'abaca', 600)}
|
55
|
-
|
55
|
+
|
56
56
|
it 'should be a time representation of #expires_in' do
|
57
57
|
subject.expires_at.should == (@now + 600)
|
58
58
|
end
|
59
59
|
end
|
60
|
-
end
|
60
|
+
end
|
data/spec/oauth2/client_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe OAuth2::Client do
|
4
4
|
subject do
|
5
|
-
cli = OAuth2::Client.new('abc','def', :site => 'https://api.example.com')
|
5
|
+
cli = OAuth2::Client.new('abc', 'def', :site => 'https://api.example.com')
|
6
6
|
cli.connection.build do |b|
|
7
7
|
b.adapter :test do |stub|
|
8
8
|
stub.get('/success') { |env| [200, {'Content-Type' => 'text/awesome'}, 'yay'] }
|
@@ -13,13 +13,13 @@ describe OAuth2::Client do
|
|
13
13
|
end
|
14
14
|
cli
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
describe '#initialize' do
|
18
18
|
it 'should assign id and secret' do
|
19
19
|
subject.id.should == 'abc'
|
20
20
|
subject.secret.should == 'def'
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
it 'should assign site from the options hash' do
|
24
24
|
subject.site.should == 'https://api.example.com'
|
25
25
|
end
|
@@ -28,18 +28,18 @@ describe OAuth2::Client do
|
|
28
28
|
subject.connection.host.should == 'api.example.com'
|
29
29
|
end
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
%w(authorize access_token).each do |path_type|
|
33
33
|
describe "##{path_type}_url" do
|
34
34
|
it "should default to a path of /oauth/#{path_type}" do
|
35
35
|
subject.send("#{path_type}_url").should == "https://api.example.com/oauth/#{path_type}"
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
it "should be settable via the :#{path_type}_path option" do
|
39
39
|
subject.options[:"#{path_type}_path"] = '/oauth/custom'
|
40
40
|
subject.send("#{path_type}_url").should == 'https://api.example.com/oauth/custom'
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
it "should be settable via the :#{path_type}_url option" do
|
44
44
|
subject.options[:"#{path_type}_url"] = 'https://abc.com/authorize'
|
45
45
|
subject.send("#{path_type}_url").should == 'https://abc.com/authorize'
|
@@ -67,31 +67,32 @@ describe OAuth2::Client do
|
|
67
67
|
it '#web_server should instantiate a WebServer strategy with this client' do
|
68
68
|
subject.web_server.should be_kind_of(OAuth2::Strategy::WebServer)
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
context 'with JSON parsing' do
|
72
72
|
before do
|
73
73
|
subject.json = true
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
describe '#request' do
|
77
77
|
it 'should return a response hash' do
|
78
|
-
response = subject.request(:get, '/json'
|
79
|
-
response.
|
78
|
+
response = subject.request(:get, '/json')
|
79
|
+
puts response.inspect
|
80
|
+
response.should be_kind_of(OAuth2::ResponseHash)
|
80
81
|
response['abc'].should == 'def'
|
81
82
|
end
|
82
|
-
|
83
|
+
|
83
84
|
it 'should only try to decode application/json' do
|
84
85
|
subject.request(:get, '/success').should == 'yay'
|
85
86
|
end
|
86
87
|
end
|
87
|
-
|
88
|
+
|
88
89
|
it 'should set json? based on the :parse_json option' do
|
89
|
-
OAuth2::Client.new('abc','def', :site => 'http://example.com', :parse_json => true).should be_json
|
90
|
-
OAuth2::Client.new('abc','def', :site => 'http://example.com', :parse_json => false).should_not be_json
|
90
|
+
OAuth2::Client.new('abc', 'def', :site => 'http://example.com', :parse_json => true).should be_json
|
91
|
+
OAuth2::Client.new('abc', 'def', :site => 'http://example.com', :parse_json => false).should_not be_json
|
91
92
|
end
|
92
|
-
|
93
|
+
|
93
94
|
after do
|
94
95
|
subject.json = false
|
95
96
|
end
|
96
97
|
end
|
97
|
-
end
|
98
|
+
end
|
@@ -2,6 +2,6 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe OAuth2::Strategy::Base do
|
4
4
|
it 'should initialize with a Client' do
|
5
|
-
lambda{ OAuth2::Strategy::Base.new(OAuth2::Client.new('abc','def')) }.should_not raise_error
|
5
|
+
lambda{ OAuth2::Strategy::Base.new(OAuth2::Client.new('abc', 'def')) }.should_not raise_error
|
6
6
|
end
|
7
|
-
end
|
7
|
+
end
|
@@ -2,10 +2,10 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe OAuth2::Strategy::WebServer do
|
4
4
|
let(:client) do
|
5
|
-
cli = OAuth2::Client.new('abc','def', :site => 'http://api.example.com')
|
5
|
+
cli = OAuth2::Client.new('abc', 'def', :site => 'http://api.example.com')
|
6
6
|
cli.connection.build do |b|
|
7
7
|
b.adapter :test do |stub|
|
8
|
-
stub.post('/oauth/access_token') do |env|
|
8
|
+
stub.post('/oauth/access_token') do |env|
|
9
9
|
case @mode
|
10
10
|
when "formencoded"
|
11
11
|
[200, {}, 'expires_in=600&access_token=salmon&refresh_token=trout']
|
@@ -23,11 +23,11 @@ describe OAuth2::Strategy::WebServer do
|
|
23
23
|
it 'should include the client_id' do
|
24
24
|
subject.authorize_url.should be_include('client_id=abc')
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
it 'should include the type' do
|
28
28
|
subject.authorize_url.should be_include('type=web_server')
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
it 'should include passed in options' do
|
32
32
|
cb = 'http://myserver.local/oauth/callback'
|
33
33
|
subject.authorize_url(:redirect_uri => cb).should be_include("redirect_uri=#{Rack::Utils.escape(cb)}")
|
@@ -52,14 +52,14 @@ describe OAuth2::Strategy::WebServer do
|
|
52
52
|
it 'returns AccessToken with #refresh_token' do
|
53
53
|
@access.refresh_token.should == 'trout'
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
it 'returns AccessToken with #expires_in' do
|
57
57
|
@access.expires_in.should == 600
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
it 'returns AccessToken with #expires_at' do
|
61
61
|
@access.expires_at.should be_kind_of(Time)
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
65
|
-
end
|
65
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -2,11 +2,7 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
2
2
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
3
|
require 'rubygems'
|
4
4
|
require 'oauth2'
|
5
|
-
require '
|
6
|
-
require '
|
5
|
+
require 'rspec'
|
6
|
+
require 'rspec/autorun'
|
7
7
|
|
8
8
|
Faraday.default_adapter = :test
|
9
|
-
|
10
|
-
Spec::Runner.configure do |config|
|
11
|
-
|
12
|
-
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oauth2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.13
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael Bleigh
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-10-13 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -26,12 +26,12 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
29
|
+
hash: 11
|
30
30
|
segments:
|
31
31
|
- 0
|
32
|
-
-
|
33
|
-
-
|
34
|
-
version: 0.
|
32
|
+
- 5
|
33
|
+
- 0
|
34
|
+
version: 0.5.0
|
35
35
|
type: :runtime
|
36
36
|
version_requirements: *id001
|
37
37
|
- !ruby/object:Gem::Dependency
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
hash: 23
|
46
46
|
segments:
|
@@ -51,21 +51,66 @@ dependencies:
|
|
51
51
|
type: :runtime
|
52
52
|
version_requirements: *id002
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
|
-
name:
|
54
|
+
name: json_pure
|
55
55
|
prerelease: false
|
56
56
|
requirement: &id003 !ruby/object:Gem::Requirement
|
57
57
|
none: false
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
hash:
|
61
|
+
hash: 11
|
62
62
|
segments:
|
63
63
|
- 1
|
64
|
-
-
|
65
|
-
-
|
66
|
-
version: 1.
|
64
|
+
- 4
|
65
|
+
- 6
|
66
|
+
version: 1.4.6
|
67
67
|
type: :development
|
68
68
|
version_requirements: *id003
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
prerelease: false
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
hash: 27
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
- 8
|
81
|
+
version: "0.8"
|
82
|
+
type: :development
|
83
|
+
version_requirements: *id004
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: rcov
|
86
|
+
prerelease: false
|
87
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ~>
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
hash: 25
|
93
|
+
segments:
|
94
|
+
- 0
|
95
|
+
- 9
|
96
|
+
version: "0.9"
|
97
|
+
type: :development
|
98
|
+
version_requirements: *id005
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: rspec
|
101
|
+
prerelease: false
|
102
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
103
|
+
none: false
|
104
|
+
requirements:
|
105
|
+
- - ~>
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
hash: 3
|
108
|
+
segments:
|
109
|
+
- 2
|
110
|
+
- 0
|
111
|
+
version: "2.0"
|
112
|
+
type: :development
|
113
|
+
version_requirements: *id006
|
69
114
|
description: A Ruby wrapper for the OAuth 2.0 protocol built with a similar style to the original OAuth gem.
|
70
115
|
email: michael@intridea.com
|
71
116
|
executables: []
|
@@ -78,24 +123,25 @@ extra_rdoc_files:
|
|
78
123
|
files:
|
79
124
|
- .document
|
80
125
|
- .gitignore
|
126
|
+
- .rspec
|
81
127
|
- CHANGELOG.rdoc
|
128
|
+
- Gemfile
|
129
|
+
- Gemfile.lock
|
82
130
|
- LICENSE
|
83
131
|
- README.rdoc
|
84
132
|
- Rakefile
|
85
|
-
- VERSION
|
86
133
|
- lib/oauth2.rb
|
87
134
|
- lib/oauth2/access_token.rb
|
88
135
|
- lib/oauth2/client.rb
|
89
|
-
- lib/oauth2/
|
90
|
-
- lib/oauth2/response_string.rb
|
136
|
+
- lib/oauth2/response_object.rb
|
91
137
|
- lib/oauth2/strategy/base.rb
|
92
138
|
- lib/oauth2/strategy/web_server.rb
|
139
|
+
- lib/oauth2/version.rb
|
93
140
|
- oauth2.gemspec
|
94
141
|
- spec/oauth2/access_token_spec.rb
|
95
142
|
- spec/oauth2/client_spec.rb
|
96
143
|
- spec/oauth2/strategy/base_spec.rb
|
97
144
|
- spec/oauth2/strategy/web_server_spec.rb
|
98
|
-
- spec/spec.opts
|
99
145
|
- spec/spec_helper.rb
|
100
146
|
- specs.watchr
|
101
147
|
has_rdoc: true
|
@@ -121,10 +167,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
121
167
|
requirements:
|
122
168
|
- - ">="
|
123
169
|
- !ruby/object:Gem::Version
|
124
|
-
hash:
|
170
|
+
hash: 23
|
125
171
|
segments:
|
126
|
-
-
|
127
|
-
|
172
|
+
- 1
|
173
|
+
- 3
|
174
|
+
- 6
|
175
|
+
version: 1.3.6
|
128
176
|
requirements: []
|
129
177
|
|
130
178
|
rubyforge_project:
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.0.13
|
data/lib/oauth2/response_hash.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
class ResponseHash < Hash
|
2
|
-
def initialize(response)
|
3
|
-
self.response = response
|
4
|
-
|
5
|
-
body = MultiJson.decode(response.body)
|
6
|
-
body.keys.each{|k| self[k] = body[k]}
|
7
|
-
end
|
8
|
-
|
9
|
-
attr_accessor :response
|
10
|
-
|
11
|
-
def status; response.status end
|
12
|
-
def headers; response.headers end
|
13
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# This special String class is returned from HTTP requests
|
2
|
-
# and contains the original full response along with convenience
|
3
|
-
# methods for accessing the HTTP status code and headers. It
|
4
|
-
# is returned from all access token requests.
|
5
|
-
class ResponseString < String
|
6
|
-
def initialize(response)
|
7
|
-
super(response.body)
|
8
|
-
self.response = response
|
9
|
-
end
|
10
|
-
|
11
|
-
attr_accessor :response
|
12
|
-
|
13
|
-
def status; response.status end
|
14
|
-
def headers; response.headers end
|
15
|
-
end
|