rack-oauth 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. data/README.rdoc +49 -0
  2. data/Rakefile +68 -0
  3. data/VERSION +1 -0
  4. data/examples/rails-example/README +243 -0
  5. data/examples/rails-example/Rakefile +10 -0
  6. data/examples/rails-example/app/controllers/application_controller.rb +12 -0
  7. data/examples/rails-example/app/controllers/welcome_controller.rb +26 -0
  8. data/examples/rails-example/app/helpers/application_helper.rb +3 -0
  9. data/examples/rails-example/app/helpers/welcome_helper.rb +2 -0
  10. data/examples/rails-example/app/views/welcome/index.html.erb +2 -0
  11. data/examples/rails-example/config/boot.rb +110 -0
  12. data/examples/rails-example/config/database.yml +22 -0
  13. data/examples/rails-example/config/environment.rb +14 -0
  14. data/examples/rails-example/config/environments/development.rb +17 -0
  15. data/examples/rails-example/config/environments/production.rb +28 -0
  16. data/examples/rails-example/config/environments/test.rb +32 -0
  17. data/examples/rails-example/config/initializers/backtrace_silencers.rb +7 -0
  18. data/examples/rails-example/config/initializers/inflections.rb +10 -0
  19. data/examples/rails-example/config/initializers/mime_types.rb +5 -0
  20. data/examples/rails-example/config/initializers/new_rails_defaults.rb +21 -0
  21. data/examples/rails-example/config/initializers/session_store.rb +15 -0
  22. data/examples/rails-example/config/locales/en.yml +5 -0
  23. data/examples/rails-example/config/routes.rb +6 -0
  24. data/examples/rails-example/db/development.sqlite3 +1 -0
  25. data/examples/rails-example/db/seeds.rb +7 -0
  26. data/examples/rails-example/db/test.sqlite3 +1 -0
  27. data/examples/rails-example/doc/README_FOR_APP +2 -0
  28. data/examples/rails-example/lib/tasks/rspec.rake +182 -0
  29. data/examples/rails-example/log/development.log +165 -0
  30. data/examples/rails-example/log/production.log +0 -0
  31. data/examples/rails-example/log/server.log +0 -0
  32. data/examples/rails-example/log/test.log +1591 -0
  33. data/examples/rails-example/public/404.html +30 -0
  34. data/examples/rails-example/public/422.html +30 -0
  35. data/examples/rails-example/public/500.html +30 -0
  36. data/examples/rails-example/public/favicon.ico +0 -0
  37. data/examples/rails-example/public/images/rails.png +0 -0
  38. data/examples/rails-example/public/javascripts/application.js +2 -0
  39. data/examples/rails-example/public/javascripts/controls.js +963 -0
  40. data/examples/rails-example/public/javascripts/dragdrop.js +973 -0
  41. data/examples/rails-example/public/javascripts/effects.js +1128 -0
  42. data/examples/rails-example/public/javascripts/prototype.js +4320 -0
  43. data/examples/rails-example/public/robots.txt +5 -0
  44. data/examples/rails-example/script/about +4 -0
  45. data/examples/rails-example/script/autospec +6 -0
  46. data/examples/rails-example/script/console +3 -0
  47. data/examples/rails-example/script/dbconsole +3 -0
  48. data/examples/rails-example/script/destroy +3 -0
  49. data/examples/rails-example/script/generate +3 -0
  50. data/examples/rails-example/script/performance/benchmarker +3 -0
  51. data/examples/rails-example/script/performance/profiler +3 -0
  52. data/examples/rails-example/script/plugin +3 -0
  53. data/examples/rails-example/script/runner +3 -0
  54. data/examples/rails-example/script/server +3 -0
  55. data/examples/rails-example/script/spec +10 -0
  56. data/examples/rails-example/script/spec_server +9 -0
  57. data/examples/rails-example/spec/integration/login_spec.rb +27 -0
  58. data/examples/rails-example/spec/rcov.opts +2 -0
  59. data/examples/rails-example/spec/spec.opts +4 -0
  60. data/examples/rails-example/spec/spec_helper.rb +12 -0
  61. data/examples/rails-example/tmp/webrat-1257205170.html +202 -0
  62. data/examples/rails-example/tmp/webrat-1257205276.html +31 -0
  63. data/examples/rails-example/tmp/webrat-1257205315.html +211 -0
  64. data/examples/rails-example/tmp/webrat-1257205333.html +31 -0
  65. data/examples/rails-example/tmp/webrat-1257205380.html +211 -0
  66. data/examples/rails-example/tmp/webrat-1257205757.html +211 -0
  67. data/examples/rails-example/tmp/webrat-1257210107.html +32 -0
  68. data/examples/rails-example/tmp/webrat-1257210160.html +32 -0
  69. data/examples/rails-example/tmp/webrat-1257210488.html +32 -0
  70. data/examples/rails-example/tmp/webrat-1257210501.html +32 -0
  71. data/examples/rails-example/tmp/webrat-1257210545.html +32 -0
  72. data/examples/rails-example/tmp/webrat-1257210564.html +32 -0
  73. data/examples/rails-example/tmp/webrat-1257210581.html +32 -0
  74. data/examples/rails-example/tmp/webrat-1257210600.html +32 -0
  75. data/examples/rails-example/tmp/webrat-1257210608.html +32 -0
  76. data/examples/sinatra-twitter.rb +47 -0
  77. data/examples/sinatra-twitter.ru +2 -0
  78. data/lib/rack/oauth.rb +1 -0
  79. data/lib/rack-oauth.rb +378 -0
  80. data/spec/data/authorized_access_token.yml +58 -0
  81. data/spec/data/authorized_oauth_verifier.yml +1 -0
  82. data/spec/data/authorized_request_secret.yml +1 -0
  83. data/spec/data/authorized_request_token.yml +1 -0
  84. data/spec/data/unauthorized_request_token.yml +56 -0
  85. data/spec/rack_oauth_middleware_spec.rb +156 -0
  86. data/spec/sample_sinatra_app_spec.rb +105 -0
  87. data/spec/spec_helper.rb +24 -0
  88. metadata +162 -0
@@ -0,0 +1,156 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ # This is just testing to make sure that the basics of the middleware
4
+ # all work. This does NOT actually test any of the OAuth functionality.
5
+ describe Rack::OAuth, 'basic middlware usage' do
6
+
7
+ before do
8
+ @app = lambda {|env| [200, {}, ["Hello World"]] }
9
+ end
10
+
11
+ it 'should have a name' do
12
+ oauth = Rack::OAuth.new @app, :foo, :site => 'a', :key => 'b', :secret => 'c'
13
+ oauth.name.should == 'foo'
14
+ end
15
+
16
+ it 'name should default to "default"' do
17
+ oauth = Rack::OAuth.new @app, :site => 'a', :key => 'b', :secret => 'c'
18
+ oauth.name.should == 'default'
19
+ end
20
+
21
+ it 'should be able to access an instance of Rack::OAuth by name from within Rack application' do
22
+ app = lambda {|env| [200, {}, [ env['rack.oauth'].keys.inspect ]] }
23
+
24
+ oauth = Rack::OAuth.new app, :foo, :site => 'a', :key => 'b', :secret => 'c'
25
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include('foo')
26
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should_not include('bar')
27
+
28
+ oauth = Rack::OAuth.new oauth, :bar, :site => 'a', :key => 'b', :secret => 'c'
29
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include('foo')
30
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include('bar')
31
+ end
32
+
33
+ it 'should be *really* easy to access the default instance of Rack::OAuth by name from within Rack application' do
34
+ app = lambda {|env| [200, {}, [ Rack::OAuth.get(env).inspect ]] }
35
+
36
+ oauth = Rack::OAuth.new app, :foo, :site => 'a', :key => 'b', :secret => 'c'
37
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should == 'nil'
38
+
39
+ oauth = Rack::OAuth.new app, :site => 'a', :key => 'b', :secret => 'c'
40
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should_not == 'nil'
41
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include('#<Rack::OAuth')
42
+ end
43
+
44
+ it 'should be easy to access an instance of Rack::OAuth by name from within Rack application' do
45
+ app = lambda {|env| [200, {}, [ Rack::OAuth.get(env, :bar).inspect ]] }
46
+
47
+ oauth = Rack::OAuth.new app, :foo, :site => 'a', :key => 'b', :secret => 'c'
48
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should == 'nil'
49
+
50
+ oauth = Rack::OAuth.new oauth, :bar, :site => 'a', :key => 'b', :secret => 'c'
51
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should_not == 'nil'
52
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include('#<Rack::OAuth')
53
+ end
54
+
55
+ it 'should be easy to access to all instances of Rack::OAuth for a Rack application' do
56
+ app = lambda {|env| [200, {}, [ Rack::OAuth.all(env).length ]] }
57
+
58
+ oauth = Rack::OAuth.new app, :foo, :site => 'a', :key => 'b', :secret => 'c'
59
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should == '1'
60
+
61
+ oauth = Rack::OAuth.new oauth, :bar, :site => 'a', :key => 'b', :secret => 'c'
62
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should == '2'
63
+
64
+ ## double check it's working as expected ...
65
+
66
+ app = lambda {|env| [200, {}, [ Rack::OAuth.all(env).keys ]] }
67
+
68
+ oauth = Rack::OAuth.new app, :foo, :site => 'a', :key => 'b', :secret => 'c'
69
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include('foo')
70
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should_not include('bar')
71
+
72
+ oauth = Rack::OAuth.new oauth, :bar, :site => 'a', :key => 'b', :secret => 'c'
73
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include('foo')
74
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include('bar')
75
+ end
76
+
77
+ it 'should be able to get the login path for an instance (so we can easily redirect from the app)' do
78
+ pending
79
+ oauth = Rack::OAuth.new app, :foo, :site => 'a', :key => 'b', :secret => 'c'
80
+ oauth.login_path
81
+
82
+ end
83
+
84
+ # path getters should join the name of the Rack::OAuth. setters shouldn't include the name.
85
+ it 'login path should be namespaced to the name of the Rack::OAuth instance' do
86
+ app = lambda {|env| [200, {}, ["Hello World"]] }
87
+
88
+ # the default name doesn't have its name appended. we assume 'default' for this.
89
+ Rack::OAuth.new(app, :site => 'a', :key => 'b', :secret => 'c').login_path.should == '/oauth_login'
90
+
91
+ Rack::OAuth.new(app, :foo, :site => 'a', :key => 'b', :secret => 'c').login_path.should == '/oauth_login/foo'
92
+
93
+ oauth = Rack::OAuth.new(app, :bar, :site => 'a', :key => 'b', :secret => 'c', :login_path => '/twitter_login')
94
+ oauth.login_path.should == '/twitter_login/bar'
95
+ end
96
+
97
+ it 'callback path should be namespaced to the name of the Rack::OAuth instance' do
98
+ app = lambda {|env| [200, {}, ["Hello World"]] }
99
+
100
+ # the default name doesn't have its name appended. we assume 'default' for this.
101
+ Rack::OAuth.new(app, :site => 'a', :key => 'b', :secret => 'c').callback_path.should == '/oauth_callback'
102
+
103
+ Rack::OAuth.new(app, :foo, :site => 'a', :key => 'b', :secret => 'c').callback_path.should == '/oauth_callback/foo'
104
+
105
+ oauth = Rack::OAuth.new(app, :bar, :site => 'a', :key => 'b', :secret => 'c', :callback_path => '/twitter_callback')
106
+ oauth.callback_path.should == '/twitter_callback/bar'
107
+ end
108
+
109
+ it 'redirect_to should NOT be namespaced to the name of the Rack::OAuth instance' do
110
+ app = lambda {|env| [200, {}, ["Hello World"]] }
111
+
112
+ # the default name doesn't have its name appended. we assume 'default' for this.
113
+ Rack::OAuth.new(app, :site => 'a', :key => 'b', :secret => 'c').redirect_to.should == '/oauth_complete'
114
+
115
+ Rack::OAuth.new(app, :foo, :site => 'a', :key => 'b', :secret => 'c').redirect_to.should == '/oauth_complete'
116
+
117
+ oauth = Rack::OAuth.new(app, :bar, :site => 'a', :key => 'b', :secret => 'c', :redirect_to => '/twitter_login_complete')
118
+ oauth.redirect_to.should == '/twitter_login_complete'
119
+ end
120
+
121
+ it 'session variables should all be namespaced to the name of the Rack::OAuth instance'
122
+
123
+ it 'should explodify with a helpful message if 2 Rack::OAuths are instantiated with the same name (?)'
124
+
125
+ describe 'Mocked requests / responses and whatnot' do
126
+
127
+ it 'the Rack::OAuth#consumer should persist through requests (confirm this is true because we need it to be true for mocking purposes)' do
128
+ app = lambda {|env| [200, {}, [ Rack::OAuth.get(env).consumer.object_id.to_s ]] }
129
+ oauth = Rack::OAuth.new app, :site => 'a', :key => 'b', :secret => 'c'
130
+
131
+ consumer_id = oauth.consumer.object_id
132
+
133
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include(consumer_id.to_s)
134
+ oauth.consumer.object_id.should == consumer_id
135
+
136
+ # do another request to make sure it stays the same
137
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include(consumer_id.to_s)
138
+ oauth.consumer.object_id.should == consumer_id
139
+ end
140
+
141
+ it 'should redirect to the authorize_url of the OAuth::RequestToken returned by consumer.get_request_token' do
142
+ app = lambda {|env| [200, {}, ["Hello World"]] }
143
+ oauth = Rack::OAuth.new app, :site => 'a', :key => 'b', :secret => 'c'
144
+
145
+ oauth.consumer.should_receive(:get_request_token).with(:oauth_callback => 'http://foo.com/oauth_callback').
146
+ and_return(mock_request_token(:authorize_path => '/silly_path'))
147
+
148
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/oauth_login', 'HTTP_HOST' => 'foo.com').
149
+ headers['Location'].should =~ /^http:\/\/twitter\.com\/silly_path\?oauth_token=/
150
+ end
151
+
152
+ it 'should get an access token that can be used to make arbitrary requests if the callback_path is hit with the right variables given'
153
+
154
+ end
155
+
156
+ end
@@ -0,0 +1,105 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ require 'json'
4
+ require 'sinatra/base'
5
+ class SampleSinatraApp < Sinatra::Base
6
+
7
+ # this is hardcore optional ... if you want to override where ALL tokens are persisted, you can do this ...
8
+
9
+ def self.get_token key, oauth
10
+ @tokens[key] if @tokens
11
+ end
12
+ def self.set_token key, token, oauth
13
+ @tokens ||= {}
14
+ @tokens[key] = token
15
+ end
16
+
17
+ use Rack::Session::Cookie
18
+ use Rack::OAuth, :site => 'http://twitter.com',
19
+ :key => '4JjFmhjfZyQ6rdbiql5A',
20
+ :secret => 'rv4ZaCgvxVPVjxHIDbMxTGFbIMxUa4KkIdPqL7HmaQo',
21
+ :get => method(:get_token),
22
+ :set => method(:set_token)
23
+
24
+ enable :raise_errors
25
+
26
+ helpers do
27
+ include Rack::OAuth::Methods
28
+ end
29
+
30
+ get '/' do
31
+ if logged_in?
32
+ "Hello World"
33
+ else
34
+ redirect oauth_login_path
35
+ end
36
+ end
37
+
38
+ get '/oauth_complete' do
39
+ info = JSON.parse oauth_request('/account/verify_credentials.json')
40
+ name = info['screen_name']
41
+ $access_tokens[name] = oauth_access_token
42
+ end
43
+
44
+ get '/get_user_info' do
45
+ info = JSON.parse oauth_request('/account/verify_credentials.json')
46
+ end
47
+ end
48
+
49
+ describe SampleSinatraApp do
50
+
51
+ def example_json
52
+ %[{"time_zone":"Pacific Time (US & Canada)","profile_image_url":"http://a3.twimg.com/profile_images/54765389/remi-rock-on_bak_normal.png","description":"Beer goes in, Code comes out","following":false,"profile_text_color":"3E4415","status":{"source":"web","in_reply_to_user_id":64218381,"in_reply_to_status_id":5352275994,"truncated":false,"created_at":"Mon Nov 02 02:00:26 +0000 2009","favorited":false,"in_reply_to_screen_name":"benatkin","id":5352407184,"text":"@benatkin For GoldBar, they would want to tell you when you buy something because lots of people are coming in and not buying anything :/"},"profile_background_image_url":"http://s.twimg.com/a/1256928834/images/themes/theme5/bg.gif","followers_count":257,"screen_name":"remitaylor","profile_link_color":"D02B55","profile_background_tile":false,"friends_count":190,"url":"http://remi.org","created_at":"Tue Dec 11 09:13:43 +0000 2007","profile_background_color":"352726","notifications":false,"favourites_count":0,"statuses_count":1700,"profile_sidebar_fill_color":"99CC33","protected":false,"geo_enabled":false,"location":"Phoenix, AZ","name":"remitaylor","profile_sidebar_border_color":"829D5E","id":11043342,"verified":false,"utc_offset":-28800}]
53
+ end
54
+
55
+ before :all do
56
+ @rackbox_app = RackBox.app
57
+ RackBox.app = SampleSinatraApp
58
+ Rack::OAuth.enable_test_mode
59
+ end
60
+
61
+ after :all do
62
+ RackBox.app = @rackbox_app
63
+ Rack::OAuth.disable_test_mode
64
+ end
65
+
66
+ it 'should be able to "authorize" a user' do
67
+ # we're not authorized, so logged_in? is false and we should redirect to /oauth_login
68
+ request('/').status.should == 302
69
+ request('/').headers['Location'].should include('/oauth_login')
70
+
71
+ # because we're in test mode, redirecting to /oauth_login should pretend to log
72
+ # us in and it should redirect to /oauth_complete
73
+ request('/oauth_login').status.should == 302
74
+ request('/oauth_login').headers['Location'].should include('/oauth_complete')
75
+
76
+ # now the user should be authorized
77
+ request('/').status.should == 200
78
+ request('/').body.should include('Hello World')
79
+ end
80
+
81
+ it 'should be able to specify a mock response for an arbitrary authorized response' do
82
+ request('/oauth_login') # login
83
+
84
+ # if we don't mock the request, it should blow up
85
+ lambda { request('/get_user_info') }.should raise_error
86
+
87
+ Rack::OAuth.mock_request '/account/verify_credentials.json', example_json
88
+
89
+ request('/get_user_info').body.should include('remitaylor')
90
+ end
91
+
92
+ it 'should be able to persist access token by some arbitrary value like twitter screen_name' do
93
+ $access_tokens ||= {}
94
+ request('/oauth_login').status.should == 302
95
+
96
+ # token should be nil
97
+ $access_tokens['remitaylor'].should be_nil
98
+
99
+ request('/oauth_complete')
100
+
101
+ # token should not be nil because the oauth_complete goes and gets and persists it
102
+ $access_tokens['remitaylor'].should_not be_nil
103
+ end
104
+
105
+ end
@@ -0,0 +1,24 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+ require 'rackbox'
4
+ require File.dirname(__FILE__) + '/../lib/rack-oauth'
5
+
6
+ # returns the path to a data file, eg. data_path(:foo) => 'spec/data/foo.yml'
7
+ def data_path name
8
+ File.join File.dirname(__FILE__), 'data', "#{ name }.yml"
9
+ end
10
+
11
+ # returns the string body of a file using data_path to get the path to the file
12
+ def data name
13
+ File.read data_path(name)
14
+ end
15
+
16
+ def mock_request_token options = {}
17
+ YAML.load data(:unauthorized_request_token).sub('AUTH_PATH', options[:authorize_path] || '/oauth/authorize')
18
+ end
19
+
20
+ RackBox.app = lambda {}
21
+
22
+ Spec::Runner.configure do |config|
23
+ config.use_blackbox = true
24
+ end
metadata ADDED
@@ -0,0 +1,162 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack-oauth
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - remi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-02 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Rack Middleware for OAuth Authorization
17
+ email: remi@remitaylor.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ files:
25
+ - README.rdoc
26
+ - Rakefile
27
+ - VERSION
28
+ - examples/rails-example/README
29
+ - examples/rails-example/Rakefile
30
+ - examples/rails-example/app/controllers/application_controller.rb
31
+ - examples/rails-example/app/controllers/welcome_controller.rb
32
+ - examples/rails-example/app/helpers/application_helper.rb
33
+ - examples/rails-example/app/helpers/welcome_helper.rb
34
+ - examples/rails-example/app/views/welcome/index.html.erb
35
+ - examples/rails-example/config/boot.rb
36
+ - examples/rails-example/config/database.yml
37
+ - examples/rails-example/config/environment.rb
38
+ - examples/rails-example/config/environments/development.rb
39
+ - examples/rails-example/config/environments/production.rb
40
+ - examples/rails-example/config/environments/test.rb
41
+ - examples/rails-example/config/initializers/backtrace_silencers.rb
42
+ - examples/rails-example/config/initializers/inflections.rb
43
+ - examples/rails-example/config/initializers/mime_types.rb
44
+ - examples/rails-example/config/initializers/new_rails_defaults.rb
45
+ - examples/rails-example/config/initializers/session_store.rb
46
+ - examples/rails-example/config/locales/en.yml
47
+ - examples/rails-example/config/routes.rb
48
+ - examples/rails-example/db/development.sqlite3
49
+ - examples/rails-example/db/seeds.rb
50
+ - examples/rails-example/db/test.sqlite3
51
+ - examples/rails-example/doc/README_FOR_APP
52
+ - examples/rails-example/lib/tasks/rspec.rake
53
+ - examples/rails-example/log/development.log
54
+ - examples/rails-example/log/production.log
55
+ - examples/rails-example/log/server.log
56
+ - examples/rails-example/log/test.log
57
+ - examples/rails-example/public/404.html
58
+ - examples/rails-example/public/422.html
59
+ - examples/rails-example/public/500.html
60
+ - examples/rails-example/public/favicon.ico
61
+ - examples/rails-example/public/images/rails.png
62
+ - examples/rails-example/public/javascripts/application.js
63
+ - examples/rails-example/public/javascripts/controls.js
64
+ - examples/rails-example/public/javascripts/dragdrop.js
65
+ - examples/rails-example/public/javascripts/effects.js
66
+ - examples/rails-example/public/javascripts/prototype.js
67
+ - examples/rails-example/public/robots.txt
68
+ - examples/rails-example/script/about
69
+ - examples/rails-example/script/autospec
70
+ - examples/rails-example/script/console
71
+ - examples/rails-example/script/dbconsole
72
+ - examples/rails-example/script/destroy
73
+ - examples/rails-example/script/generate
74
+ - examples/rails-example/script/performance/benchmarker
75
+ - examples/rails-example/script/performance/profiler
76
+ - examples/rails-example/script/plugin
77
+ - examples/rails-example/script/runner
78
+ - examples/rails-example/script/server
79
+ - examples/rails-example/script/spec
80
+ - examples/rails-example/script/spec_server
81
+ - examples/rails-example/spec/integration/login_spec.rb
82
+ - examples/rails-example/spec/rcov.opts
83
+ - examples/rails-example/spec/spec.opts
84
+ - examples/rails-example/spec/spec_helper.rb
85
+ - examples/rails-example/tmp/webrat-1257205170.html
86
+ - examples/rails-example/tmp/webrat-1257205276.html
87
+ - examples/rails-example/tmp/webrat-1257205315.html
88
+ - examples/rails-example/tmp/webrat-1257205333.html
89
+ - examples/rails-example/tmp/webrat-1257205380.html
90
+ - examples/rails-example/tmp/webrat-1257205757.html
91
+ - examples/rails-example/tmp/webrat-1257210107.html
92
+ - examples/rails-example/tmp/webrat-1257210160.html
93
+ - examples/rails-example/tmp/webrat-1257210488.html
94
+ - examples/rails-example/tmp/webrat-1257210501.html
95
+ - examples/rails-example/tmp/webrat-1257210545.html
96
+ - examples/rails-example/tmp/webrat-1257210564.html
97
+ - examples/rails-example/tmp/webrat-1257210581.html
98
+ - examples/rails-example/tmp/webrat-1257210600.html
99
+ - examples/rails-example/tmp/webrat-1257210608.html
100
+ - examples/sinatra-twitter.rb
101
+ - examples/sinatra-twitter.ru
102
+ - lib/rack-oauth.rb
103
+ - lib/rack/oauth.rb
104
+ - spec/data/authorized_access_token.yml
105
+ - spec/data/authorized_oauth_verifier.yml
106
+ - spec/data/authorized_request_secret.yml
107
+ - spec/data/authorized_request_token.yml
108
+ - spec/data/unauthorized_request_token.yml
109
+ - spec/rack_oauth_middleware_spec.rb
110
+ - spec/sample_sinatra_app_spec.rb
111
+ - spec/spec_helper.rb
112
+ has_rdoc: true
113
+ homepage: http://github.com/remi/rack-oauth
114
+ licenses: []
115
+
116
+ post_install_message:
117
+ rdoc_options:
118
+ - --charset=UTF-8
119
+ require_paths:
120
+ - lib
121
+ required_ruby_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: "0"
126
+ version:
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: "0"
132
+ version:
133
+ requirements: []
134
+
135
+ rubyforge_project:
136
+ rubygems_version: 1.3.5
137
+ signing_key:
138
+ specification_version: 3
139
+ summary: Rack Middleware for OAuth Authorization
140
+ test_files:
141
+ - spec/rack_oauth_middleware_spec.rb
142
+ - spec/spec_helper.rb
143
+ - spec/sample_sinatra_app_spec.rb
144
+ - examples/sinatra-twitter.rb
145
+ - examples/rails-example/spec/integration/login_spec.rb
146
+ - examples/rails-example/spec/spec_helper.rb
147
+ - examples/rails-example/config/boot.rb
148
+ - examples/rails-example/config/routes.rb
149
+ - examples/rails-example/config/environments/development.rb
150
+ - examples/rails-example/config/environments/test.rb
151
+ - examples/rails-example/config/environments/production.rb
152
+ - examples/rails-example/config/environment.rb
153
+ - examples/rails-example/config/initializers/backtrace_silencers.rb
154
+ - examples/rails-example/config/initializers/inflections.rb
155
+ - examples/rails-example/config/initializers/new_rails_defaults.rb
156
+ - examples/rails-example/config/initializers/session_store.rb
157
+ - examples/rails-example/config/initializers/mime_types.rb
158
+ - examples/rails-example/db/seeds.rb
159
+ - examples/rails-example/app/helpers/application_helper.rb
160
+ - examples/rails-example/app/helpers/welcome_helper.rb
161
+ - examples/rails-example/app/controllers/application_controller.rb
162
+ - examples/rails-example/app/controllers/welcome_controller.rb