jugend-httparty 0.5.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.
Files changed (54) hide show
  1. data/.gitignore +7 -0
  2. data/History +209 -0
  3. data/MIT-LICENSE +20 -0
  4. data/Manifest +47 -0
  5. data/README.rdoc +54 -0
  6. data/Rakefile +80 -0
  7. data/VERSION +1 -0
  8. data/bin/httparty +108 -0
  9. data/cucumber.yml +1 -0
  10. data/examples/aaws.rb +32 -0
  11. data/examples/basic.rb +11 -0
  12. data/examples/custom_parsers.rb +67 -0
  13. data/examples/delicious.rb +37 -0
  14. data/examples/google.rb +16 -0
  15. data/examples/rubyurl.rb +14 -0
  16. data/examples/twitter.rb +31 -0
  17. data/examples/whoismyrep.rb +10 -0
  18. data/features/basic_authentication.feature +20 -0
  19. data/features/command_line.feature +7 -0
  20. data/features/deals_with_http_error_codes.feature +26 -0
  21. data/features/handles_multiple_formats.feature +34 -0
  22. data/features/steps/env.rb +23 -0
  23. data/features/steps/httparty_response_steps.rb +26 -0
  24. data/features/steps/httparty_steps.rb +27 -0
  25. data/features/steps/mongrel_helper.rb +78 -0
  26. data/features/steps/remote_service_steps.rb +61 -0
  27. data/features/supports_redirection.feature +22 -0
  28. data/features/supports_timeout_option.feature +13 -0
  29. data/jugend-httparty.gemspec +127 -0
  30. data/lib/httparty/cookie_hash.rb +22 -0
  31. data/lib/httparty/core_extensions.rb +31 -0
  32. data/lib/httparty/exceptions.rb +26 -0
  33. data/lib/httparty/module_inheritable_attributes.rb +25 -0
  34. data/lib/httparty/parser.rb +141 -0
  35. data/lib/httparty/request.rb +206 -0
  36. data/lib/httparty/response.rb +62 -0
  37. data/lib/httparty.rb +343 -0
  38. data/spec/fixtures/delicious.xml +23 -0
  39. data/spec/fixtures/empty.xml +0 -0
  40. data/spec/fixtures/google.html +3 -0
  41. data/spec/fixtures/twitter.json +1 -0
  42. data/spec/fixtures/twitter.xml +403 -0
  43. data/spec/fixtures/undefined_method_add_node_for_nil.xml +2 -0
  44. data/spec/httparty/cookie_hash_spec.rb +71 -0
  45. data/spec/httparty/parser_spec.rb +154 -0
  46. data/spec/httparty/request_spec.rb +415 -0
  47. data/spec/httparty/response_spec.rb +83 -0
  48. data/spec/httparty_spec.rb +514 -0
  49. data/spec/spec.opts +3 -0
  50. data/spec/spec_helper.rb +19 -0
  51. data/spec/support/stub_response.rb +30 -0
  52. data/website/css/common.css +47 -0
  53. data/website/index.html +73 -0
  54. metadata +209 -0
data/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ .DS_Store
2
+ .yardoc/
3
+ doc/
4
+ tmp/
5
+ log/
6
+ pkg/
7
+ *.swp
data/History ADDED
@@ -0,0 +1,209 @@
1
+ == 0.5.3.4
2
+ * Update gem name to jugend-httparty
3
+
4
+ == 0.5.3.3
5
+ * Remove RubyforgeTasks
6
+
7
+ == 0.5.3.2
8
+ * Remove deprecated rubyforge gem push
9
+
10
+ == 0.5.3.1
11
+ * Update Pathname initialization to support earlier version of ruby (<=1.8.4)
12
+
13
+ == 0.5.3 (master)
14
+ * major enhancements
15
+ * Digest Auth (bartiaco, sbecker, gilles, and aaronrussell)
16
+ * Maintain HTTP method across redirects (bartiaco and sbecker)
17
+ * HTTParty::Response#response returns the Net::HTTPResponse object
18
+ * HTTParty::Response#headers returns a HTTParty::Response::Headers object
19
+ which quacks like a Hash + Net::HTTPHeader. The #headers method continues
20
+ to be backwards-compatible with the old Hash return value but may become
21
+ deprecated in the future.
22
+
23
+ * minor enhancements
24
+ * Update crack requirement to version 0.1.7
25
+ You may still get a warning because Crack's version constant is out of date
26
+ * Timeout option can be set for all requests using HTTParty.default_timeout (taazza)
27
+ * Closed #38 "headers hash should downcase keys so canonical header name can be used"
28
+
29
+ == 0.5.2 2010-01-31
30
+ * minor enhancements
31
+ * Update crack requirement to version 0.1.6
32
+
33
+ == 0.5.1 2010-01-30
34
+ * bug fixes
35
+ * Handle 304 response correctly by returning the HTTParty::Response object instead of redirecting (seth and hellvinz)
36
+ * Only redirect 300 responses if the header contains a Location
37
+ * Don't append empty query strings to the uri. Closes #31
38
+ * When no_follow is enabled, only raise the RedirectionTooDeep exception when a response tries redirecting. Closes #28
39
+
40
+ * major enhancements
41
+ * Removed rubygems dependency. I suggest adding rubygems to RUBYOPT if this causes problems for you.
42
+ $ export RUBYOPT='rubygems'
43
+ * HTTParty#debug_output prints debugging information for the current request (iwarshak)
44
+ * HTTParty#no_follow now available as a class-level option. Sets whether or not to follow redirects.
45
+
46
+ * minor enhancements
47
+ * HTTParty::VERSION now available
48
+ * Update crack requirement to version 0.1.5
49
+
50
+ == 0.5.0 2009-12-07
51
+ * bug fixes
52
+ * inheritable attributes no longer mutable by subclasses (yyyc514)
53
+ * namespace BasicObject within HTTParty to avoid class name collisions (eric)
54
+
55
+ * major enhancements
56
+ * Custom Parsers via class or proc
57
+ * Deprecation warning on HTTParty::AllowedFormats
58
+ moved to HTTParty::Parser::SupportedFormats
59
+
60
+ * minor enhancements
61
+ * Curl inspired output when using the binary in verbose mode (alexvollmer)
62
+ * raise UnsupportedURIScheme when scheme is not HTTP or HTTPS (djspinmonkey)
63
+ * Allow SSL for ports other than 443 when scheme is HTTPS (stefankroes)
64
+ * Accept PEM certificates via HTTParty#pem (chrislo)
65
+ * Support HEAD and OPTION verbs (grempe)
66
+ * Verify SSL certificates when providing a PEM file (collectiveidea/danielmorrison)
67
+
68
+ == 0.4.5 2009-09-12
69
+ * bug fixes
70
+ * Fixed class-level headers overwritten by cookie management code. Closes #19
71
+ * Fixed "superclass mismatch for class BlankSlate" error. Closes #20
72
+ * Fixed reading files as post data from the command line (vesan)
73
+
74
+ * minor enhancements
75
+ * Timeout option added; will raise a Timeout::Error after the timeout has elapsed (attack). Closes #17
76
+ HTTParty.get "http://github.com", :timeout => 1
77
+ * Building gem with Jeweler
78
+
79
+ == 0.4.4 2009-07-19
80
+ * 2 minor update
81
+ * :query no longer sets form data. Use body and set content type to application/x-www-form-urlencoded if you need it. :query was wrong for that.
82
+ * Fixed a bug in the cookies class method that caused cookies to be forgotten after the first request.
83
+ * Also, some general cleanup of tests and such.
84
+
85
+ == 0.4.3 2009-04-23
86
+ * 1 minor update
87
+ * added message to the response object
88
+
89
+ == 0.4.2 2009-03-30
90
+ * 2 minor changes
91
+ * response code now returns an integer instead of a string (jqr)
92
+ * rubyforge project setup for crack so i'm now depending on that instead of jnunemaker-crack
93
+
94
+ == 0.4.1 2009-03-29
95
+ * 1 minor fix
96
+ * gem 'jnunemaker-crack' instead of gem 'crack'
97
+
98
+ == 0.4.0 2009-03-29
99
+ * 1 minor change
100
+ * Switched xml and json parsing to crack (same code as before just moved to gem for easier reuse in other projects)
101
+
102
+ == 0.3.1 2009-02-10
103
+ * 1 minor fix, 1 minor enhancement
104
+ * Fixed unescaping umlauts (siebertm)
105
+ * Added yaml response parsing (Miha Filej)
106
+
107
+ == 0.3.0 2009-01-31
108
+ * 1 major enhancement, 1 bug fix
109
+ * JSON gem no longer a requirement. It was conflicting with rails json stuff so I just stole ActiveSupport's json decoding and bundled it with HTTParty.
110
+ * Fixed bug where query strings were being duplicated on redirects
111
+ * Added a bunch of specs and moved some code around.
112
+
113
+ == 0.2.10 2009-01-29
114
+ * 1 minor enhancement
115
+ * Made encoding on query parameters treat everything except URI::PATTERN::UNRESERVED as UNSAFE to force encoding of '+' character (Julian Russell)
116
+
117
+ == 0.2.9 2009-01-29
118
+ * 3 minor enhancements
119
+ * Added a 'headers' accessor to the response with a hash of any HTTP headers. (Don Peterson)
120
+ * Add support for a ":cookies" option to be used at the class level, or as an option on any individual call. It should be passed a hash, which will be converted to the proper format and added to the request headers when the call is made. (Don Peterson)
121
+ * Refactored several specs and added a full suite of cucumber features (Don Peterson)
122
+
123
+ == 0.2.8 2009-01-28
124
+ * 1 major fix
125
+ * fixed major bug with response where it wouldn't iterate or really work at all with parsed responses
126
+
127
+ == 0.2.7 2009-01-28
128
+ * 2 minor fixes, 2 minor enhancements, 2 major enhancements
129
+ * fixed undefined method add_node for nil class error that occasionally happened (juliocesar)
130
+ * Handle nil or unexpected values better when typecasting. (Brian Landau)
131
+ * More robust handling of mime types (Alex Vollmer)
132
+ * Fixed support for specifying headers and added support for basic auth to CLI. (Alex Vollmer)
133
+ * Added first class response object that includes original body and status code (Alex Vollmer)
134
+ * Now parsing all response types as some non-200 responses provide important information, this means no more exception raising (Alex Vollmer)
135
+
136
+ == 0.2.6 2009-01-05
137
+ * 1 minor bug fix
138
+ * added explicit require of time as Time#parse failed outside of rails (willcodeforfoo)
139
+
140
+ == 0.2.5 2009-01-05
141
+ * 1 major enhancement
142
+ * Add command line interface to HTTParty (Alex Vollmer)
143
+
144
+ == 0.2.4 2008-12-23
145
+ * 1 bug fix
146
+ * Fixed that mimetype detection was failing if no mimetype was returned from service (skippy)
147
+ == 0.2.3 2008-12-23
148
+ * 1 bug fix
149
+ * Fixed typecasting class variable naming issue
150
+
151
+ == 0.2.2 2008-12-08
152
+ * 1 bug fix
153
+ * Added the missing core extension hash method to_xml_attributes
154
+
155
+ == 0.2.1 2008-12-08
156
+ * 1 bug fix
157
+ * Fixed that HTTParty was borking ActiveSupport and as such Rails (thanks to Rob Sanheim)
158
+
159
+ == 0.2.0 2008-12-07
160
+ * 1 major enhancement
161
+ * Removed ActiveSupport as a dependency. Now requires json gem for json deserialization and uses an included class to do the xml parsing.
162
+
163
+ == 0.1.8 2008-11-30
164
+ * 3 major enhancements
165
+ * Moved base_uri normalization into request class and out of httparty module, fixing
166
+ the problem where base_uri was not always being normalized.
167
+ * Stupid simple support for HTTParty.get/post/put/delete. (jqr)
168
+ * Switched gem management to Echoe from newgem.
169
+
170
+ == 0.1.7 2008-11-30
171
+ * 1 major enhancement
172
+ * fixed multiple class definitions overriding each others options
173
+
174
+ == 0.1.6 2008-11-26
175
+ * 1 major enhancement
176
+ * now passing :query to set_form_data if post request to avoid content length errors
177
+
178
+ == 0.1.5 2008-11-14
179
+ * 2 major enhancements
180
+ * Refactored send request method out into its own object.
181
+ * Added :html format if you just want to do that.
182
+
183
+ == 0.1.4 2008-11-08
184
+ * 3 major enhancements:
185
+ * Removed some cruft
186
+ * Added ability to follow redirects automatically and turn that off (Alex Vollmer)
187
+
188
+ == 0.1.3 2008-08-22
189
+
190
+ * 3 major enhancements:
191
+ * Added http_proxy key for setting proxy server and port (francxk@gmail.com)
192
+ * Now raises exception when http error occurs (francxk@gmail.com)
193
+ * Changed auto format detection from file extension to response content type (Jay Pignata)
194
+
195
+ == 0.1.2 2008-08-09
196
+
197
+ * 1 major enhancement:
198
+ * default_params were not being appended to query string if option[:query] was blank
199
+
200
+ == 0.1.1 2008-07-30
201
+
202
+ * 2 major enhancement:
203
+ * Added :basic_auth key for options when making a request
204
+ * :query and :body both now work with query string or hash
205
+
206
+ == 0.1.0 2008-07-27
207
+
208
+ * 1 major enhancement:
209
+ * Initial release
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 John Nunemaker
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.
data/Manifest ADDED
@@ -0,0 +1,47 @@
1
+ bin/httparty
2
+ cucumber.yml
3
+ examples/aaws.rb
4
+ examples/basic.rb
5
+ examples/delicious.rb
6
+ examples/google.rb
7
+ examples/rubyurl.rb
8
+ examples/twitter.rb
9
+ examples/whoismyrep.rb
10
+ features/basic_authentication.feature
11
+ features/command_line.feature
12
+ features/deals_with_http_error_codes.feature
13
+ features/handles_multiple_formats.feature
14
+ features/steps/env.rb
15
+ features/steps/httparty_response_steps.rb
16
+ features/steps/httparty_steps.rb
17
+ features/steps/mongrel_helper.rb
18
+ features/steps/remote_service_steps.rb
19
+ features/supports_redirection.feature
20
+ History
21
+ httparty.gemspec
22
+ lib/httparty/cookie_hash.rb
23
+ lib/httparty/core_extensions.rb
24
+ lib/httparty/exceptions.rb
25
+ lib/httparty/module_inheritable_attributes.rb
26
+ lib/httparty/request.rb
27
+ lib/httparty/response.rb
28
+ lib/httparty/version.rb
29
+ lib/httparty.rb
30
+ Manifest
31
+ MIT-LICENSE
32
+ Rakefile
33
+ README.rdoc
34
+ spec/fixtures/delicious.xml
35
+ spec/fixtures/empty.xml
36
+ spec/fixtures/google.html
37
+ spec/fixtures/twitter.json
38
+ spec/fixtures/twitter.xml
39
+ spec/fixtures/undefined_method_add_node_for_nil.xml
40
+ spec/httparty/cookie_hash_spec.rb
41
+ spec/httparty/request_spec.rb
42
+ spec/httparty/response_spec.rb
43
+ spec/httparty_spec.rb
44
+ spec/spec.opts
45
+ spec/spec_helper.rb
46
+ website/css/common.css
47
+ website/index.html
data/README.rdoc ADDED
@@ -0,0 +1,54 @@
1
+ = httparty
2
+
3
+ Makes http fun again!
4
+
5
+ == Note on Releases
6
+
7
+ Releases are tagged on github and also released as gems on github and rubyforge. Master is pushed to whenever I add a patch or a new feature. To build from master, you can clone the code, generate the updated gemspec, build the gem and install.
8
+
9
+ * rake gemspec
10
+ * gem build httparty.gemspec
11
+ * gem install the gem that was built
12
+
13
+ == Note on Patches/Pull Requests
14
+
15
+ * Fork the project.
16
+ * Make your feature addition or bug fix.
17
+ * Add tests for it. This is important so I don't break it in a future version unintentionally.
18
+ * Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself in another branch so I can ignore when I pull)
19
+ * Send me a pull request. Bonus points for topic branches.
20
+
21
+ == Features:
22
+
23
+ * Easy get, post requests
24
+ * Basic http authentication
25
+ * Default request query string parameters (ie: for api keys that are needed on each request)
26
+ * Automatic parsing of JSON and XML into ruby hashes based on response content-type
27
+
28
+ == Examples
29
+
30
+ See http://github.com/jnunemaker/httparty/tree/master/examples
31
+
32
+ == Command Line Interface
33
+
34
+ httparty also includes the executable <tt>httparty</tt> which can be
35
+ used to query web services and examine the resulting output. By default
36
+ it will output the response as a pretty-printed Ruby object (useful for
37
+ grokking the structure of output). This can also be overridden to output
38
+ formatted XML or JSON. Execute <tt>httparty --help</tt> for all the
39
+ options. Below is an example of how easy it is.
40
+
41
+ httparty "http://twitter.com/statuses/public_timeline.json"
42
+
43
+ == Requirements
44
+
45
+ * Crack http://github.com/jnunemaker/crack/ - For XML and JSON parsing.
46
+ * You like to party!
47
+
48
+ == Install
49
+
50
+ * sudo gem install httparty
51
+
52
+ == Docs
53
+
54
+ http://rdoc.info/projects/jnunemaker/httparty
data/Rakefile ADDED
@@ -0,0 +1,80 @@
1
+ require 'rake'
2
+
3
+ begin
4
+ require 'jeweler'
5
+ Jeweler::Tasks.new do |gem|
6
+ gem.name = "jugend-httparty"
7
+ gem.summary = %Q{Makes http fun! Also, makes consuming restful web services dead easy.}
8
+ gem.description = %Q{Makes http fun! Also, makes consuming restful web services dead easy.}
9
+ gem.email = "nunemaker@gmail.com"
10
+ gem.homepage = "http://github.com/jugend/httparty"
11
+ gem.authors = ["John Nunemaker", "Sandro Turriate"]
12
+ gem.add_dependency 'crack', '0.1.7'
13
+ gem.add_development_dependency "activesupport", "~>2.3"
14
+ gem.add_development_dependency "cucumber", "~>0.7"
15
+ gem.add_development_dependency "fakeweb", "~>1.2"
16
+ gem.add_development_dependency "mongrel", "~>1.1"
17
+ gem.add_development_dependency "rspec", "~>1.3"
18
+ gem.post_install_message = "When you HTTParty, you must party hard!"
19
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
20
+ end
21
+ Jeweler::GemcutterTasks.new
22
+ rescue LoadError
23
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
24
+ end
25
+
26
+ require 'spec/rake/spectask'
27
+ Spec::Rake::SpecTask.new(:spec) do |spec|
28
+ spec.libs << 'lib' << 'spec'
29
+ spec.spec_files = FileList['spec/**/*_spec.rb']
30
+ spec.spec_opts = ['--options', 'spec/spec.opts']
31
+ end
32
+
33
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
34
+ spec.libs << 'lib' << 'spec'
35
+ spec.pattern = 'spec/**/*_spec.rb'
36
+ spec.rcov = true
37
+ end
38
+
39
+ task :spec => :check_dependencies
40
+
41
+ begin
42
+ require 'cucumber/rake/task'
43
+ Cucumber::Rake::Task.new(:features)
44
+
45
+ task :features => :check_dependencies
46
+ rescue LoadError
47
+ task :features do
48
+ abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
49
+ end
50
+ end
51
+
52
+ task :default => [:spec, :features]
53
+
54
+ require 'rake/rdoctask'
55
+ Rake::RDocTask.new do |rdoc|
56
+ if File.exist?('VERSION')
57
+ version = File.read('VERSION')
58
+ else
59
+ version = ""
60
+ end
61
+
62
+ rdoc.rdoc_dir = 'rdoc'
63
+ rdoc.title = "httparty #{version}"
64
+ rdoc.rdoc_files.include('README*')
65
+ rdoc.rdoc_files.include('lib/**/*.rb')
66
+ rdoc.rdoc_files.include('lib/httparty.rb')
67
+ end
68
+
69
+ desc 'Upload website files to rubyforge'
70
+ task :website do
71
+ sh %{rsync -av website/ jnunemaker@rubyforge.org:/var/www/gforge-projects/httparty}
72
+ end
73
+
74
+ begin
75
+ require 'yard'
76
+ YARD::Rake::YardocTask.new do |t|
77
+ t.options = ['--verbose']
78
+ end
79
+ rescue LoadError
80
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.5.3.4
data/bin/httparty ADDED
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "optparse"
4
+ require "pp"
5
+
6
+ $:.unshift(File.join(File.dirname(__FILE__), "/../lib"))
7
+ require "httparty"
8
+
9
+ opts = {
10
+ :action => :get,
11
+ :headers => {},
12
+ :verbose => false
13
+ }
14
+
15
+ OptionParser.new do |o|
16
+ o.banner = "USAGE: #{$0} [options] [url]"
17
+
18
+ o.on("-f",
19
+ "--format [FORMAT]",
20
+ "Output format to use instead of pretty-print ruby: " +
21
+ "plain, json or xml") do |f|
22
+ opts[:output_format] = f.downcase.to_sym
23
+ end
24
+
25
+ o.on("-a",
26
+ "--action [ACTION]",
27
+ "HTTP action: get (default), post, put, delete, head, or options") do |a|
28
+ opts[:action] = a.downcase.to_sym
29
+ end
30
+
31
+ o.on("-d",
32
+ "--data [BODY]",
33
+ "Data to put in request body (prefix with '@' for file)") do |d|
34
+ if d =~ /^@/
35
+ opts[:data] = open(d[1..-1]).read
36
+ else
37
+ opts[:data] = d
38
+ end
39
+ end
40
+
41
+ o.on("-H", "--header [NAME=VALUE]", "Additional HTTP headers in NAME=VALUE form") do |h|
42
+ abort "Invalid header specification, should be Name:Value" unless h =~ /.+:.+/
43
+ name, value = h.split(':')
44
+ opts[:headers][name.strip] = value.strip
45
+ end
46
+
47
+ o.on("-v", "--verbose", "If set, print verbose output") do |v|
48
+ opts[:verbose] = true
49
+ end
50
+
51
+ o.on("-u", "--user [CREDS]", "Use basic authentication. Value should be user:password") do |u|
52
+ abort "Invalid credentials format. Must be user:password" unless u =~ /.+:.+/
53
+ user, password = u.split(':')
54
+ opts[:basic_auth] = { :username => user, :password => password }
55
+ end
56
+
57
+ o.on("-h", "--help", "Show help documentation") do |h|
58
+ puts o
59
+ exit
60
+ end
61
+ end.parse!
62
+
63
+
64
+ if ARGV.empty?
65
+ STDERR.puts "You need to provide a URL"
66
+ STDERR.puts "USAGE: #{$0} [options] [url]"
67
+ end
68
+
69
+ def dump_headers(response)
70
+ resp_type = Net::HTTPResponse::CODE_TO_OBJ[response.code.to_s]
71
+ puts "#{response.code} #{resp_type.to_s.sub(/^Net::HTTP/, '')}"
72
+ response.headers.each do |n,v|
73
+ puts "#{n}: #{v}"
74
+ end
75
+ puts
76
+ end
77
+
78
+ if opts[:verbose]
79
+ puts "#{opts[:action].to_s.upcase} #{ARGV.first}"
80
+ opts[:headers].each do |n,v|
81
+ puts "#{n}: #{v}"
82
+ end
83
+ puts
84
+ end
85
+
86
+ response = HTTParty.send(opts[:action], ARGV.first, opts)
87
+ if opts[:output_format].nil?
88
+ dump_headers(response) if opts[:verbose]
89
+ pp response
90
+ else
91
+ print_format = opts[:output_format]
92
+ dump_headers(response) if opts[:verbose]
93
+
94
+ case opts[:output_format]
95
+ when :json
96
+ begin
97
+ require 'json'
98
+ puts JSON.pretty_generate(response.delegate)
99
+ rescue LoadError
100
+ puts YAML.dump(response.delegate)
101
+ end
102
+ when :xml
103
+ REXML::Document.new(response.body).write(STDOUT, 2)
104
+ puts
105
+ else
106
+ puts response
107
+ end
108
+ end
data/cucumber.yml ADDED
@@ -0,0 +1 @@
1
+ default: features
data/examples/aaws.rb ADDED
@@ -0,0 +1,32 @@
1
+ require 'rubygems'
2
+ require 'activesupport'
3
+
4
+ dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ require File.join(dir, 'httparty')
6
+ require 'pp'
7
+ config = YAML::load(File.read(File.join(ENV['HOME'], '.aaws')))
8
+
9
+ module AAWS
10
+ class Book
11
+ include HTTParty
12
+ base_uri 'http://ecs.amazonaws.com'
13
+ default_params :Service => 'AWSECommerceService', :Operation => 'ItemSearch', :SearchIndex => 'Books'
14
+
15
+ def initialize(key)
16
+ self.class.default_params :AWSAccessKeyId => key
17
+ end
18
+
19
+ def search(options={})
20
+ raise ArgumentError, 'You must search for something' if options[:query].blank?
21
+
22
+ # amazon uses nasty camelized query params
23
+ options[:query] = options[:query].inject({}) { |h, q| h[q[0].to_s.camelize] = q[1]; h }
24
+
25
+ # make a request and return the items (NOTE: this doesn't handle errors at this point)
26
+ self.class.get('/onca/xml', options)['ItemSearchResponse']['Items']
27
+ end
28
+ end
29
+ end
30
+
31
+ aaws = AAWS::Book.new(config[:access_key])
32
+ pp aaws.search(:query => {:title => 'Ruby On Rails'})
data/examples/basic.rb ADDED
@@ -0,0 +1,11 @@
1
+ dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require File.join(dir, 'httparty')
3
+ require 'pp'
4
+
5
+ # You can also use post, put, delete, head, options in the same fashion
6
+ response = HTTParty.get('http://twitter.com/statuses/public_timeline.json')
7
+ puts response.body, response.code, response.message, response.headers.inspect
8
+
9
+ response.each do |item|
10
+ puts item['user']['screen_name']
11
+ end
@@ -0,0 +1,67 @@
1
+ class ParseAtom
2
+ include HTTParty
3
+
4
+ # Support Atom along with the default parsers: xml, json, yaml, etc.
5
+ class Parser::Atom < HTTParty::Parser
6
+ SupportedFormats.merge!({"application/atom+xml" => :atom})
7
+
8
+ protected
9
+
10
+ # perform atom parsing on body
11
+ def atom
12
+ body.to_atom
13
+ end
14
+ end
15
+
16
+ parser Parser::Atom
17
+ end
18
+
19
+
20
+ class OnlyParseAtom
21
+ include HTTParty
22
+
23
+ # Only support Atom
24
+ class Parser::OnlyAtom < HTTParty::Parser
25
+ SupportedFormats = {"application/atom+xml" => :atom}
26
+
27
+ protected
28
+
29
+ # perform atom parsing on body
30
+ def atom
31
+ body.to_atom
32
+ end
33
+ end
34
+
35
+ parser Parser::OnlyAtom
36
+ end
37
+
38
+
39
+ class SkipParsing
40
+ include HTTParty
41
+
42
+ # Parse the response body however you like
43
+ class Parser::Simple < HTTParty::Parser
44
+ def parse
45
+ body
46
+ end
47
+ end
48
+
49
+ parser Parser::Simple
50
+ end
51
+
52
+
53
+ class AdHocParsing
54
+ include HTTParty
55
+ parser(
56
+ Proc.new do |body, format|
57
+ case format
58
+ when :json
59
+ body.to_json
60
+ when :xml
61
+ body.to_xml
62
+ else
63
+ body
64
+ end
65
+ end
66
+ )
67
+ end
@@ -0,0 +1,37 @@
1
+ dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require File.join(dir, 'httparty')
3
+ require 'pp'
4
+ config = YAML::load(File.read(File.join(ENV['HOME'], '.delicious')))
5
+
6
+ class Delicious
7
+ include HTTParty
8
+ base_uri 'https://api.del.icio.us/v1'
9
+
10
+ def initialize(u, p)
11
+ @auth = {:username => u, :password => p}
12
+ end
13
+
14
+ # query params that filter the posts are:
15
+ # tag (optional). Filter by this tag.
16
+ # dt (optional). Filter by this date (CCYY-MM-DDThh:mm:ssZ).
17
+ # url (optional). Filter by this url.
18
+ # ie: posts(:query => {:tag => 'ruby'})
19
+ def posts(options={})
20
+ options.merge!({:basic_auth => @auth})
21
+ self.class.get('/posts/get', options)
22
+ end
23
+
24
+ # query params that filter the posts are:
25
+ # tag (optional). Filter by this tag.
26
+ # count (optional). Number of items to retrieve (Default:15, Maximum:100).
27
+ def recent(options={})
28
+ options.merge!({:basic_auth => @auth})
29
+ self.class.get('/posts/recent', options)
30
+ end
31
+ end
32
+
33
+ delicious = Delicious.new(config['username'], config['password'])
34
+ pp delicious.posts(:query => {:tag => 'ruby'})
35
+ pp delicious.recent
36
+
37
+ delicious.recent['posts']['post'].each { |post| puts post['href'] }