motionbox-oauth 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. data/.gemtest +0 -0
  2. data/Gemfile +16 -0
  3. data/Gemfile.lock +46 -0
  4. data/HISTORY +160 -0
  5. data/LICENSE +20 -0
  6. data/README.rdoc +75 -0
  7. data/Rakefile +37 -0
  8. data/TODO +32 -0
  9. data/bin/oauth +5 -0
  10. data/examples/yql.rb +44 -0
  11. data/lib/digest/hmac.rb +104 -0
  12. data/lib/oauth.rb +13 -0
  13. data/lib/oauth/cli.rb +378 -0
  14. data/lib/oauth/client.rb +4 -0
  15. data/lib/oauth/client/action_controller_request.rb +65 -0
  16. data/lib/oauth/client/em_http.rb +124 -0
  17. data/lib/oauth/client/helper.rb +91 -0
  18. data/lib/oauth/client/net_http.rb +120 -0
  19. data/lib/oauth/consumer.rb +382 -0
  20. data/lib/oauth/core_ext.rb +31 -0
  21. data/lib/oauth/errors.rb +3 -0
  22. data/lib/oauth/errors/error.rb +4 -0
  23. data/lib/oauth/errors/problem.rb +14 -0
  24. data/lib/oauth/errors/unauthorized.rb +12 -0
  25. data/lib/oauth/helper.rb +88 -0
  26. data/lib/oauth/oauth.rb +13 -0
  27. data/lib/oauth/oauth_test_helper.rb +25 -0
  28. data/lib/oauth/request_proxy.rb +24 -0
  29. data/lib/oauth/request_proxy/action_controller_request.rb +62 -0
  30. data/lib/oauth/request_proxy/base.rb +174 -0
  31. data/lib/oauth/request_proxy/curb_request.rb +55 -0
  32. data/lib/oauth/request_proxy/em_http_request.rb +74 -0
  33. data/lib/oauth/request_proxy/jabber_request.rb +41 -0
  34. data/lib/oauth/request_proxy/mock_request.rb +44 -0
  35. data/lib/oauth/request_proxy/net_http.rb +72 -0
  36. data/lib/oauth/request_proxy/rack_request.rb +44 -0
  37. data/lib/oauth/request_proxy/typhoeus_request.rb +53 -0
  38. data/lib/oauth/server.rb +66 -0
  39. data/lib/oauth/signature.rb +45 -0
  40. data/lib/oauth/signature/base.rb +110 -0
  41. data/lib/oauth/signature/hmac/base.rb +15 -0
  42. data/lib/oauth/signature/hmac/md5.rb +8 -0
  43. data/lib/oauth/signature/hmac/rmd160.rb +8 -0
  44. data/lib/oauth/signature/hmac/sha1.rb +9 -0
  45. data/lib/oauth/signature/hmac/sha2.rb +8 -0
  46. data/lib/oauth/signature/md5.rb +13 -0
  47. data/lib/oauth/signature/plaintext.rb +23 -0
  48. data/lib/oauth/signature/rsa/sha1.rb +46 -0
  49. data/lib/oauth/signature/sha1.rb +13 -0
  50. data/lib/oauth/token.rb +7 -0
  51. data/lib/oauth/tokens/access_token.rb +71 -0
  52. data/lib/oauth/tokens/consumer_token.rb +33 -0
  53. data/lib/oauth/tokens/request_token.rb +32 -0
  54. data/lib/oauth/tokens/server_token.rb +9 -0
  55. data/lib/oauth/tokens/token.rb +17 -0
  56. data/oauth.gemspec +150 -0
  57. data/tasks/deployment.rake +34 -0
  58. data/tasks/environment.rake +7 -0
  59. data/tasks/website.rake +17 -0
  60. data/test/cases/oauth_case.rb +19 -0
  61. data/test/cases/spec/1_0-final/test_construct_request_url.rb +62 -0
  62. data/test/cases/spec/1_0-final/test_normalize_request_parameters.rb +88 -0
  63. data/test/cases/spec/1_0-final/test_parameter_encodings.rb +86 -0
  64. data/test/cases/spec/1_0-final/test_signature_base_strings.rb +77 -0
  65. data/test/integration/consumer_test.rb +307 -0
  66. data/test/keys/rsa.cert +11 -0
  67. data/test/keys/rsa.pem +16 -0
  68. data/test/test_access_token.rb +26 -0
  69. data/test/test_action_controller_request_proxy.rb +133 -0
  70. data/test/test_consumer.rb +171 -0
  71. data/test/test_curb_request_proxy.rb +77 -0
  72. data/test/test_em_http_client.rb +80 -0
  73. data/test/test_em_http_request_proxy.rb +115 -0
  74. data/test/test_helper.rb +26 -0
  75. data/test/test_hmac_sha1.rb +20 -0
  76. data/test/test_net_http_client.rb +280 -0
  77. data/test/test_net_http_request_proxy.rb +72 -0
  78. data/test/test_oauth_helper.rb +71 -0
  79. data/test/test_rack_request_proxy.rb +40 -0
  80. data/test/test_request_token.rb +51 -0
  81. data/test/test_rsa_sha1.rb +59 -0
  82. data/test/test_server.rb +40 -0
  83. data/test/test_signature.rb +22 -0
  84. data/test/test_signature_base.rb +32 -0
  85. data/test/test_signature_plain_text.rb +31 -0
  86. data/test/test_token.rb +14 -0
  87. data/test/test_typhoeus_request_proxy.rb +80 -0
  88. metadata +284 -0
File without changes
data/Gemfile ADDED
@@ -0,0 +1,16 @@
1
+ source :rubygems
2
+
3
+
4
+ group :development do
5
+ gem 'rake'
6
+ gem 'jeweler'
7
+ end
8
+
9
+ group :test do
10
+ gem 'actionpack', '~>2.3.8'
11
+ gem 'mocha', '>=0.9.8'
12
+ gem 'typhoeus', '>=0.1.13'
13
+ gem 'em-http-request', "0.2.11"
14
+ gem 'curb', ">= 0.6.6.0"
15
+ gem 'webmock'
16
+ end
@@ -0,0 +1,46 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ actionpack (2.3.8)
5
+ activesupport (= 2.3.8)
6
+ rack (~> 1.1.0)
7
+ activesupport (2.3.8)
8
+ addressable (2.2.0)
9
+ crack (0.1.8)
10
+ curb (0.7.7.1)
11
+ em-http-request (0.2.11)
12
+ addressable (>= 2.0.0)
13
+ eventmachine (>= 0.12.9)
14
+ eventmachine (0.12.10)
15
+ gemcutter (0.4.1)
16
+ json_pure
17
+ git (1.2.5)
18
+ jeweler (1.4.0)
19
+ gemcutter (>= 0.1.0)
20
+ git (>= 1.2.5)
21
+ rubyforge (>= 2.0.0)
22
+ json_pure (1.4.3)
23
+ mocha (0.9.8)
24
+ rake
25
+ rack (1.1.0)
26
+ rake (0.8.7)
27
+ rubyforge (2.0.4)
28
+ json_pure (>= 1.1.7)
29
+ typhoeus (0.1.31)
30
+ rack
31
+ webmock (1.3.5)
32
+ addressable (>= 2.1.1)
33
+ crack (>= 0.1.7)
34
+
35
+ PLATFORMS
36
+ ruby
37
+
38
+ DEPENDENCIES
39
+ actionpack (~> 2.3.8)
40
+ curb (>= 0.6.6.0)
41
+ em-http-request (= 0.2.11)
42
+ jeweler
43
+ mocha (>= 0.9.8)
44
+ rake
45
+ typhoeus (>= 0.1.13)
46
+ webmock
data/HISTORY ADDED
@@ -0,0 +1,160 @@
1
+ === 0.4.5 2011-06-25
2
+
3
+ * Add explicit require for rsa/sha1 (Juris Galang)
4
+ * Use webmock to mock all http-requests in tests (Adrian Feldman)
5
+ * Add gemtest support (Adrian Feldman)
6
+ * Fix POST Requests with Typhoeus proxy (niedhui)
7
+ * Mention Typhoeus require in the README (Kim Ahlström)
8
+ * Fix incorrect hardcoded port (Ian Taylor)
9
+ * Use Net::HTTPGenericRequest (Jakub Kuźma)
10
+
11
+ === 0.4.4 2010-10-31
12
+
13
+ * Fix LoadError rescue in tests: return can't be used in this context (Hans de Graaff)
14
+ * HTTP headers should be strings. (seancribbs)
15
+ * ensure consumer uri gets set back to original config even if an error occurs (Brian Finney)
16
+ * Yahoo uses & to split records in OAuth headers (Brian Finney)
17
+ * Added support for Rails 3 in client/action_controller_request (Pelle)
18
+
19
+ == 0.4.3 2010-09-01
20
+
21
+ * Fix for em-http proxy (ichverstehe)
22
+
23
+ == 0.4.2 2010-08-13
24
+
25
+ * Fixed compatibility with Ruby 1.9.2 (ecavazos)
26
+ * Fixed the em-http request proxy (Joshua Hull)
27
+ * Fix for oauth proxy string manipulation (Jakub Suder)
28
+ * Added Bundler (rc) Gemfile for easier dev/testing
29
+
30
+ == 0.4.1 2010-06-16
31
+
32
+ * Added support for using OAuth with proxies (Marsh Gardiner)
33
+ * Rails 3 Compatibility fixes (Pelle Braendgaard)
34
+ * Fixed load errors on tests for missing (non-required) libraries
35
+
36
+ == 0.4.0 2010-04-22
37
+
38
+ * Added computation of oauth_body_hash as per OAuth Request Body Hash 1.0
39
+ Draft 4 (Michael Reinsch)
40
+ * Added the optional `oauth_session_handle` parameter for the Yahoo implementation (Will Bailey)
41
+ * Better marshalling implementation (Yoan Blanc)
42
+ * Added optional block to OAuth::Consumer.get_*_token (Neill Pearman)
43
+ * Exclude `oauth_callback` with :exclude_callback (Neill Pearman)
44
+ * Strip extraneous spaces and line breaks from access_token responses
45
+ (observed in the wild with Yahoo!'s OAuth+OpenID hybrid) (Eric Hartmann)
46
+ * Stop double-escaping PLAINTEXT signatures (Jimmy Zimmerman)
47
+ * OAuth::Client::Helper won't override the specified `oauth_version`
48
+ (Philip Kromer)
49
+ * Support for Ruby 1.9 (Aaron Quint, Corey Donahoe, et al)
50
+ * Fixed an encoding / multibyte issue (成田 一生)
51
+ * Replaced hoe with Jeweler (Aaron Quint)
52
+ * Support for Typhoeus (Bill Kocik)
53
+ * Support for em-http (EventMachine) (Darcy Laycock)
54
+ * Support for curb (André Luis Leal Cardoso Junior)
55
+ * New website (Aaron Quint)
56
+
57
+ == 0.3.6 2009-09-14
58
+
59
+ * Added -B CLI option to use the :body authentication scheme (Seth)
60
+ * Respect `--method` in `authorize` CLI command (Seth)
61
+ * Support POST and PUT with raw bodies (Yu-Shan Fung et al)
62
+ * Test clean-up (Xavier Shay, Hannes Tydén)
63
+ * Added :ca_file consumer option to allow consumer specific certificate
64
+ override. (Pelle)
65
+
66
+ == 0.3.5 2009-06-03
67
+
68
+ * `query` CLI command to access protected resources (Seth)
69
+ * Added -H, -Q CLI options for specifying the authentication scheme (Seth)
70
+ * Added -O CLI option for specifying a file containing options (Seth)
71
+ * Support streamable body contents for large request bodies (Seth Cousins)
72
+ * Support for OAuth 1.0a (Seth)
73
+ * Added proxy support to OAuth::Consumer (Marshall Huss)
74
+ * Added --scope CLI option for Google's 'scope' parameter (Seth)
75
+
76
+ == 0.3.4 2009-05-06
77
+
78
+ * OAuth::Client::Helper uses OAuth::VERSION (chadisfaction)
79
+ * Fix OAuth::RequestProxy::ActionControllerRequest's handling of params
80
+ (Tristan Groléat)
81
+
82
+ == 0.3.3 2009-05-04
83
+
84
+ * Corrected OAuth XMPP namespace (Seth)
85
+ * Improved error handling for invalid Authorization headers (Matt Sanford)
86
+ * Fixed signatures for non-ASCII under $KCODE other than 'u' (Matt Sanford)
87
+ * Fixed edge cases in ActionControllerRequestProxy where params were being
88
+ incorrectly signed (Marcos Wright Kuhns)
89
+ * Support for arguments in OAuth::Consumer#get_access_token (Matt Sanford)
90
+ * Add gem version to user-agent header (Matt Sanford)
91
+ * Handle input from aggressive form encoding libraries (Matt Wood)
92
+
93
+ == 0.3.2 2009-03-23
94
+
95
+ * 2xx statuses should be treated as success (Anders Conbere)
96
+ * Support applications using the MethodOverride Rack middleware (László Bácsi)
97
+ * `authorize` command for `oauth` CLI (Seth)
98
+ * Initial support for Problem Reporting extension (Seth)
99
+ * Verify SSL certificates if CA certificates are available (Seth)
100
+ * Fixed ActionController parameter escaping behavior (Thiago Arrais, László
101
+ Bácsi, Brett Gibson, et al)
102
+ * Fixed signature calculation when both options and a block were provided to
103
+ OAuth::Signature::Base#initialize (Seth)
104
+ * Added help to the 'oauth' CLI (Seth)
105
+ * Fixed a problem when attempting to normalize MockRequest URIs (Seth)
106
+
107
+ == 0.3.1 2009-1-26
108
+
109
+ * Fixed a problem with relative and absolute token request paths. (Michael
110
+ Wood)
111
+
112
+ == 0.3.0 2009-1-25
113
+
114
+ * Support ActionController::Request from Edge Rails (László Bácsi)
115
+ * Correctly handle multi-valued parameters (Seth)
116
+ * Added #normalized_parameters to OAuth::RequestProxy::Base (Pelle)
117
+ * OAuth::Signature.sign and friends now yield the RequestProxy instead of the
118
+ token when the passed block's arity is 1. (Seth)
119
+ * Token requests are made to the configured URL rather than generating a
120
+ potentially incorrect one. (Kellan Elliott-McCrea)
121
+ * Command-line app for generating signatures. (Seth)
122
+ * Improved test-cases and compatibility for encoding issues. (Pelle)
123
+
124
+ == 0.2.7 2008-9-10 The lets fix the last release release
125
+
126
+ * Fixed plain text signatures (Andrew Arrow)
127
+ * Fixed RSA requests using OAuthTokens. (Philip Lipu Tsai)
128
+
129
+ == 0.2.6 2008-9-9 The lets RSA release
130
+
131
+ * Improved support for Ruby 1.8.7 (Bill Kocik)
132
+ * Fixed RSA verification to support RSA providers
133
+ now using Ruby and RSA
134
+ * Improved RSA testing
135
+ * Omit token when signing with RSA
136
+ * Added support for 'private_key_file' option for RSA signatures (Chris Mear)
137
+ * Fixed several edge cases where params were being incorrectly signed (Scott
138
+ Hill)
139
+ * Fixed RSA signing (choonkeat)
140
+
141
+ == 0.2.2 2008-2-22 Lets actually support SSL release
142
+
143
+ * Use HTTPS when required.
144
+
145
+ == 0.2 2008-1-19 All together now release
146
+
147
+ This is a big release, where we have merged the efforts of various parties into one common library.
148
+ This means there are definitely some API changes you should be aware of. They should be minimal
149
+ but please have a look at the unit tests.
150
+
151
+ == 0.1.2 2007-12-1
152
+
153
+ * Fixed checks for missing OAuth params to improve performance
154
+ * Includes Pat's fix for getting the realm out.
155
+
156
+ == 0.1.1 2007-11-26
157
+
158
+ * First release as a GEM
159
+ * Moved all non-Rails functionality from the Rails plugin:
160
+ http://code.google.com/p/oauth-plugin/
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2007 Blaine Cook, Larry Halff, Pelle Braendgaard
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,75 @@
1
+ = Ruby OAuth
2
+
3
+ == What
4
+
5
+ This is a RubyGem for implementing both OAuth clients and servers in Ruby applications.
6
+
7
+ See the OAuth specs http://oauth.net/core/1.0/
8
+
9
+ == Installing
10
+
11
+ sudo gem install oauth
12
+
13
+ The source code is now hosted on the OAuth GitHub Project http://github.com/oauth/oauth-ruby
14
+
15
+ == The basics
16
+
17
+ This is a ruby library which is intended to be used in creating Ruby Consumer and Service Provider applications. It is NOT a Rails plugin, but could easily be used for the foundation for such a Rails plugin.
18
+
19
+ As a matter of fact it has been pulled out from an OAuth Rails Plugin http://code.google.com/p/oauth-plugin/ which now requires this GEM.
20
+
21
+ == Demonstration of usage
22
+
23
+ We need to specify the oauth_callback url explicitly, otherwise it defaults to "oob" (Out of Band)
24
+
25
+ @callback_url = "http://127.0.0.1:3000/oauth/callback"
26
+
27
+ Create a new consumer instance by passing it a configuration hash:
28
+
29
+ @consumer = OAuth::Consumer.new("key","secret", :site => "https://agree2")
30
+
31
+ Start the process by requesting a token
32
+
33
+ @request_token = @consumer.get_request_token(:oauth_callback => @callback_url)
34
+ session[:request_token] = @request_token
35
+ redirect_to @request_token.authorize_url(:oauth_callback => @callback_url)
36
+
37
+ When user returns create an access_token
38
+
39
+ @access_token = @request_token.get_access_token
40
+ @photos = @access_token.get('/photos.xml')
41
+
42
+ Now that you have an access token, you can use Typhoeus to interact with the OAuth provider if you choose.
43
+
44
+ require 'oauth/request_proxy/typhoeus_request'
45
+ oauth_params = {:consumer => oauth_consumer, :token => access_token}
46
+ hydra = Typhoeus::Hydra.new
47
+ req = Typhoeus::Request.new(uri, options)
48
+ oauth_helper = OAuth::Client::Helper.new(req, oauth_params.merge(:request_uri => uri))
49
+ req.headers.merge!({"Authorization" => oauth_helper.header}) # Signs the request
50
+ hydra.queue(req)
51
+ hydra.run
52
+ @response = req.response
53
+
54
+
55
+ == More Information
56
+
57
+ * RDoc: http://rdoc.info/projects/oauth/oauth-ruby/
58
+ * Mailing List/Google Group: http://groups.google.com/group/oauth-ruby
59
+
60
+ == How to submit patches
61
+
62
+ The source code is now hosted on the OAuth GitHub Project http://github.com/oauth/oauth-ruby
63
+
64
+ To submit a patch, please fork the oauth project and create a patch with tests. Once you're happy with it send a pull request and post a message to the google group.
65
+
66
+ == License
67
+
68
+ This code is free to use under the terms of the MIT license.
69
+
70
+ == Contact
71
+
72
+ OAuth Ruby has been created and maintained by a large number of talented individuals.
73
+ The current maintainer is Aaron Quint (quirkey).
74
+
75
+ Comments are welcome. Send an email to via the OAuth Ruby mailing list http://groups.google.com/group/oauth-ruby
@@ -0,0 +1,37 @@
1
+ %w[rubygems rake rake/clean rake/testtask fileutils].each { |f| require f }
2
+ $LOAD_PATH << File.dirname(__FILE__) + '/lib'
3
+ require 'oauth'
4
+
5
+ begin
6
+ require 'jeweler'
7
+ Jeweler::Tasks.new do |s|
8
+ s.name = %q{oauth}
9
+ s.version = OAuth::VERSION
10
+ s.authors = ["Pelle Braendgaard", "Blaine Cook", "Larry Halff", "Jesse Clark", "Jon Crosby", "Seth Fitzsimmons", "Matt Sanford", "Aaron Quint"]
11
+ s.email = "oauth-ruby@googlegroups.com"
12
+ s.description = "OAuth Core Ruby implementation"
13
+ s.summary = s.description
14
+ s.rubyforge_project = %q{oauth}
15
+ s.add_development_dependency(%q<actionpack>, [">=2.3.5"])
16
+ s.add_development_dependency(%q<rack>, [">= 1.0.0"])
17
+ s.add_development_dependency(%q<mocha>, [">= 0.9.8"])
18
+ s.add_development_dependency(%q<typhoeus>, [">= 0.1.13"])
19
+ s.add_development_dependency(%q<em-http-request>, [">= 0.2.10"])
20
+ s.add_development_dependency(%q<curb>, [">= 0.6.6.0"])
21
+
22
+ s.files.include '.gemtest'
23
+ end
24
+ Jeweler::GemcutterTasks.new
25
+ rescue LoadError
26
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
27
+ end
28
+
29
+ Rake::TestTask.new do |t|
30
+ t.libs << "test"
31
+ t.test_files = FileList['test/**/*test*.rb']
32
+ t.verbose = true
33
+ end
34
+
35
+ Dir['tasks/**/*.rake'].each { |t| load t }
36
+
37
+ task :default => :test
data/TODO ADDED
@@ -0,0 +1,32 @@
1
+ Common use-cases should be streamlined:
2
+
3
+ * I have a URL that I want to sign (given consumer key/secret, optional
4
+ token/secret, optional nonce/timestamp).
5
+ * I have a URL that I want to sign AND I want to see what the components
6
+ (e.g. signature base string, etc.) are while it's being signed (i.e. verbose
7
+ signing).
8
+ * I have a URL that I want to sign and I only want the signature.
9
+ * I have a URL that I want to sign and I want something suitable to put in
10
+ {the header, the querystring, XMPP}.
11
+ * I want to make a query to an OAuth-enabled web service (with sensible
12
+ errors, if available).
13
+ * I want to host an OAuth-enabled web service.
14
+ * I want to test my OAuth-enabled web service (i.e. test helpers)
15
+
16
+ Example applications for:
17
+ * Ning
18
+ * Fire Eagle
19
+ * Google (blogger, contacts)
20
+ * Twitter
21
+ * YOS / YQL
22
+ * Netflix
23
+
24
+ In addition to providing best practices of use, these can also be part of
25
+ the pre-release checks to make sure that there have been no regressions.
26
+
27
+ Random TODOs:
28
+ * finish CLI
29
+ * sensible Exception hierarchy
30
+ * Tokens as Modules
31
+ * don't tie to Net::HTTP
32
+ * Take a look at Curb HTTP Verbs
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "oauth/cli"
4
+
5
+ OAuth::CLI.execute(STDOUT, STDIN, STDERR, ARGV)
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env ruby -rubygems
2
+
3
+ # Sample queries:
4
+ # ./yql.rb --consumer-key <key> --consumer-secret <secret> "show tables"
5
+ # ./yql.rb --consumer-key <key> --consumer-secret <secret> "select * from flickr.photos.search where text='Cat' limit 10"
6
+
7
+ require 'oauth'
8
+ require 'optparse'
9
+ require 'json'
10
+ require 'pp'
11
+
12
+ options = {}
13
+
14
+ option_parser = OptionParser.new do |opts|
15
+ opts.banner = "Usage: #{$0} [options] <query>"
16
+
17
+ opts.on("--consumer-key KEY", "Specifies the consumer key to use.") do |v|
18
+ options[:consumer_key] = v
19
+ end
20
+
21
+ opts.on("--consumer-secret SECRET", "Specifies the consumer secret to use.") do |v|
22
+ options[:consumer_secret] = v
23
+ end
24
+ end
25
+
26
+ option_parser.parse!
27
+ query = ARGV.pop
28
+ query = STDIN.read if query == "-"
29
+
30
+ if options[:consumer_key].nil? || options[:consumer_secret].nil? || query.nil?
31
+ puts option_parser.help
32
+ exit 1
33
+ end
34
+
35
+ consumer = OAuth::Consumer.new \
36
+ options[:consumer_key],
37
+ options[:consumer_secret],
38
+ :site => "http://query.yahooapis.com"
39
+
40
+ access_token = OAuth::AccessToken.new(consumer)
41
+
42
+ response = access_token.request(:get, "/v1/yql?q=#{OAuth::Helper.escape(query)}&format=json")
43
+ rsp = JSON.parse(response.body)
44
+ pp rsp