simple-client 0.0.2

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 (297) hide show
  1. data/.bundle/config +4 -0
  2. data/Gemfile +7 -0
  3. data/Gemfile.lock +23 -0
  4. data/bin/rake +16 -0
  5. data/lib/simple-client/simple-client.rb +229 -0
  6. data/lib/simple-client/version.rb +4 -0
  7. data/lib/simple-client.rb +1 -0
  8. data/test/test_simple-client.rb +236 -0
  9. data/vendor/bundle/ruby/1.8/bin/rake +19 -0
  10. data/vendor/bundle/ruby/1.8/cache/addressable-2.2.8.gem +0 -0
  11. data/vendor/bundle/ruby/1.8/cache/crack-0.3.1.gem +0 -0
  12. data/vendor/bundle/ruby/1.8/cache/rake-0.9.2.2.gem +0 -0
  13. data/vendor/bundle/ruby/1.8/cache/webmock-1.8.8.gem +0 -0
  14. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/CHANGELOG.md +126 -0
  15. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/Gemfile +17 -0
  16. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/Gemfile.lock +35 -0
  17. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/LICENSE.txt +202 -0
  18. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/README.md +83 -0
  19. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/Rakefile +37 -0
  20. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/lib/addressable/idna/native.rb +43 -0
  21. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/lib/addressable/idna/pure.rb +4886 -0
  22. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/lib/addressable/idna.rb +25 -0
  23. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/lib/addressable/template.rb +1047 -0
  24. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/lib/addressable/uri.rb +2288 -0
  25. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/lib/addressable/version.rb +30 -0
  26. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/spec/addressable/idna_spec.rb +216 -0
  27. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/spec/addressable/net_http_compat_spec.rb +26 -0
  28. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/spec/addressable/template_spec.rb +2144 -0
  29. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/spec/addressable/uri_spec.rb +4928 -0
  30. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/tasks/clobber.rake +2 -0
  31. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/tasks/gem.rake +85 -0
  32. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/tasks/git.rake +45 -0
  33. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/tasks/metrics.rake +22 -0
  34. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/tasks/rspec.rake +58 -0
  35. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/tasks/rubyforge.rake +89 -0
  36. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/tasks/yard.rake +27 -0
  37. data/vendor/bundle/ruby/1.8/gems/addressable-2.2.8/website/index.html +110 -0
  38. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/History +25 -0
  39. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/LICENSE +20 -0
  40. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/README.rdoc +42 -0
  41. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/Rakefile +32 -0
  42. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/crack.gemspec +53 -0
  43. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/lib/crack/json.rb +79 -0
  44. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/lib/crack/util.rb +17 -0
  45. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/lib/crack/xml.rb +232 -0
  46. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/lib/crack.rb +8 -0
  47. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/test/crack_test.rb +4 -0
  48. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/test/data/twittersearch-firefox.json +1 -0
  49. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/test/data/twittersearch-ie.json +1 -0
  50. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/test/hash_test.rb +28 -0
  51. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/test/json_test.rb +82 -0
  52. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/test/parser_test.rb +27 -0
  53. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/test/string_test.rb +31 -0
  54. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/test/test_helper.rb +12 -0
  55. data/vendor/bundle/ruby/1.8/gems/crack-0.3.1/test/xml_test.rb +499 -0
  56. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/CHANGES +522 -0
  57. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/MIT-LICENSE +21 -0
  58. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/README.rdoc +197 -0
  59. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/Rakefile +369 -0
  60. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/TODO +20 -0
  61. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/bin/rake +33 -0
  62. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/command_line_usage.rdoc +114 -0
  63. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/example/Rakefile1 +38 -0
  64. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/example/Rakefile2 +35 -0
  65. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/example/a.c +6 -0
  66. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/example/b.c +6 -0
  67. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/example/main.c +11 -0
  68. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/glossary.rdoc +51 -0
  69. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/jamis.rb +591 -0
  70. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/proto_rake.rdoc +127 -0
  71. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/rake.1.gz +0 -0
  72. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/rakefile.rdoc +557 -0
  73. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/rational.rdoc +151 -0
  74. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.4.14.rdoc +23 -0
  75. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.4.15.rdoc +35 -0
  76. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.5.0.rdoc +53 -0
  77. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.5.3.rdoc +78 -0
  78. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.5.4.rdoc +46 -0
  79. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.6.0.rdoc +141 -0
  80. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.7.0.rdoc +119 -0
  81. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.7.1.rdoc +59 -0
  82. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.7.2.rdoc +121 -0
  83. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.7.3.rdoc +47 -0
  84. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.8.0.rdoc +114 -0
  85. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.8.2.rdoc +165 -0
  86. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.8.3.rdoc +112 -0
  87. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.8.4.rdoc +147 -0
  88. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.8.5.rdoc +53 -0
  89. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.8.6.rdoc +55 -0
  90. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.8.7.rdoc +55 -0
  91. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.9.0.rdoc +112 -0
  92. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.9.1.rdoc +52 -0
  93. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/doc/release_notes/rake-0.9.2.rdoc +49 -0
  94. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/install.rb +90 -0
  95. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/alt_system.rb +109 -0
  96. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/application.rb +595 -0
  97. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/classic_namespace.rb +11 -0
  98. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/clean.rb +32 -0
  99. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/cloneable.rb +25 -0
  100. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/contrib/compositepublisher.rb +21 -0
  101. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/contrib/ftptools.rb +150 -0
  102. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/contrib/publisher.rb +73 -0
  103. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/contrib/rubyforgepublisher.rb +16 -0
  104. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/contrib/sshpublisher.rb +50 -0
  105. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/contrib/sys.rb +191 -0
  106. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/default_loader.rb +10 -0
  107. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/dsl_definition.rb +176 -0
  108. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/early_time.rb +18 -0
  109. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/ext/core.rb +27 -0
  110. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/ext/module.rb +39 -0
  111. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/ext/string.rb +167 -0
  112. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/ext/time.rb +14 -0
  113. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/file_creation_task.rb +24 -0
  114. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/file_list.rb +403 -0
  115. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/file_task.rb +47 -0
  116. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/file_utils.rb +114 -0
  117. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/file_utils_ext.rb +145 -0
  118. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/gempackagetask.rb +15 -0
  119. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/invocation_chain.rb +51 -0
  120. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/invocation_exception_mixin.rb +16 -0
  121. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/loaders/makefile.rb +40 -0
  122. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/multi_task.rb +16 -0
  123. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/name_space.rb +25 -0
  124. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/packagetask.rb +185 -0
  125. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/pathmap.rb +1 -0
  126. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/pseudo_status.rb +24 -0
  127. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/rake_module.rb +29 -0
  128. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/rake_test_loader.rb +22 -0
  129. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/rdoctask.rb +234 -0
  130. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/ruby182_test_unit_fix.rb +25 -0
  131. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
  132. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/runtest.rb +21 -0
  133. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/task.rb +327 -0
  134. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/task_argument_error.rb +7 -0
  135. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/task_arguments.rb +78 -0
  136. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/task_manager.rb +307 -0
  137. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/tasklib.rb +22 -0
  138. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/testtask.rb +191 -0
  139. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/version.rb +8 -0
  140. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake/win32.rb +55 -0
  141. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/lib/rake.rb +69 -0
  142. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/file_creation.rb +34 -0
  143. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/helper.rb +492 -0
  144. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake.rb +40 -0
  145. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_application.rb +489 -0
  146. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_application_options.rb +335 -0
  147. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_clean.rb +14 -0
  148. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_definitions.rb +80 -0
  149. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_directory_task.rb +46 -0
  150. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_dsl.rb +77 -0
  151. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_early_time.rb +31 -0
  152. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_extension.rb +59 -0
  153. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_file_creation_task.rb +56 -0
  154. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_file_list.rb +628 -0
  155. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_file_list_path_map.rb +8 -0
  156. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_file_task.rb +102 -0
  157. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_file_utils.rb +305 -0
  158. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_ftp_file.rb +59 -0
  159. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_functional.rb +450 -0
  160. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_invocation_chain.rb +52 -0
  161. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_makefile_loader.rb +44 -0
  162. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_multi_task.rb +51 -0
  163. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_name_space.rb +43 -0
  164. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_package_task.rb +79 -0
  165. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_path_map.rb +157 -0
  166. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_path_map_explode.rb +34 -0
  167. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_path_map_partial.rb +18 -0
  168. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_pseudo_status.rb +21 -0
  169. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_rake_test_loader.rb +21 -0
  170. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_rdoc_task.rb +83 -0
  171. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_require.rb +40 -0
  172. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_rules.rb +327 -0
  173. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_task.rb +267 -0
  174. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_task_argument_parsing.rb +103 -0
  175. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_task_arguments.rb +88 -0
  176. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_task_lib.rb +9 -0
  177. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_task_manager.rb +157 -0
  178. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_task_manager_argument_resolution.rb +36 -0
  179. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_task_with_arguments.rb +173 -0
  180. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_test_task.rb +120 -0
  181. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_top_level_functions.rb +111 -0
  182. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_rake_win32.rb +72 -0
  183. data/vendor/bundle/ruby/1.8/gems/rake-0.9.2.2/test/test_sys.rb +20 -0
  184. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/CHANGELOG.md +749 -0
  185. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/Gemfile +21 -0
  186. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/Guardfile +24 -0
  187. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/LICENSE +20 -0
  188. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/README.md +728 -0
  189. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/Rakefile +65 -0
  190. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/api.rb +63 -0
  191. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/assertion_failure.rb +11 -0
  192. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/callback_registry.rb +35 -0
  193. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/config.rb +10 -0
  194. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/cucumber.rb +8 -0
  195. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/deprecation.rb +9 -0
  196. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/errors.rb +33 -0
  197. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/http_lib_adapters/curb_adapter.rb +287 -0
  198. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/http_lib_adapters/em_http_request/em_http_request_0_x.rb +151 -0
  199. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/http_lib_adapters/em_http_request/em_http_request_1_x.rb +212 -0
  200. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +11 -0
  201. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/http_lib_adapters/excon_adapter.rb +95 -0
  202. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/http_lib_adapters/http_lib_adapter.rb +7 -0
  203. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/http_lib_adapters/http_lib_adapter_registry.rb +19 -0
  204. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/http_lib_adapters/httpclient_adapter.rb +193 -0
  205. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/http_lib_adapters/net_http.rb +279 -0
  206. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/http_lib_adapters/net_http_response.rb +34 -0
  207. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/http_lib_adapters/patron_adapter.rb +129 -0
  208. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +180 -0
  209. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/matchers/hash_including_matcher.rb +25 -0
  210. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/minitest.rb +15 -0
  211. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/rack_response.rb +63 -0
  212. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/request_execution_verifier.rb +56 -0
  213. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/request_pattern.rb +282 -0
  214. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/request_registry.rb +35 -0
  215. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/request_signature.rb +50 -0
  216. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/request_stub.rb +97 -0
  217. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/response.rb +144 -0
  218. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/responses_sequence.rb +40 -0
  219. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/rspec/matchers/request_pattern_matcher.rb +42 -0
  220. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/rspec/matchers/webmock_matcher.rb +46 -0
  221. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/rspec/matchers.rb +28 -0
  222. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/rspec.rb +33 -0
  223. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/stub_registry.rb +61 -0
  224. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/stub_request_snippet.rb +30 -0
  225. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/test_unit.rb +20 -0
  226. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/util/hash_counter.rb +25 -0
  227. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/util/hash_keys_stringifier.rb +23 -0
  228. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/util/headers.rb +43 -0
  229. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/util/json.rb +54 -0
  230. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/util/uri.rb +101 -0
  231. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/util/version_checker.rb +73 -0
  232. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/version.rb +3 -0
  233. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock/webmock.rb +124 -0
  234. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/lib/webmock.rb +49 -0
  235. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/minitest/test_helper.rb +29 -0
  236. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/minitest/test_webmock.rb +6 -0
  237. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/minitest/webmock_spec.rb +50 -0
  238. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/curb/curb_spec.rb +340 -0
  239. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/curb/curb_spec_helper.rb +144 -0
  240. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/em_http_request/em_http_request_spec.rb +183 -0
  241. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +72 -0
  242. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/excon/excon_spec.rb +15 -0
  243. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/excon/excon_spec_helper.rb +38 -0
  244. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/httpclient/httpclient_spec.rb +76 -0
  245. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/httpclient/httpclient_spec_helper.rb +48 -0
  246. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/net_http/net_http_shared.rb +125 -0
  247. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/net_http/net_http_spec.rb +255 -0
  248. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/net_http/net_http_spec_helper.rb +55 -0
  249. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/net_http/real_net_http_spec.rb +20 -0
  250. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/patron/patron_spec.rb +136 -0
  251. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/patron/patron_spec_helper.rb +50 -0
  252. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +142 -0
  253. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/shared/callbacks.rb +146 -0
  254. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/shared/complex_cross_concern_behaviors.rb +36 -0
  255. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/shared/enabling_and_disabling_webmock.rb +95 -0
  256. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/shared/precedence_of_stubs.rb +15 -0
  257. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/shared/request_expectations.rb +666 -0
  258. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/shared/returning_declared_responses.rb +367 -0
  259. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/shared/stubbing_requests.rb +447 -0
  260. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +74 -0
  261. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +56 -0
  262. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/acceptance/webmock_shared.rb +41 -0
  263. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/quality_spec.rb +60 -0
  264. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/spec_helper.rb +57 -0
  265. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/support/example_curl_output.txt +22 -0
  266. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/support/my_rack_app.rb +48 -0
  267. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/support/network_connection.rb +25 -0
  268. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/support/webmock_server.rb +65 -0
  269. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/errors_spec.rb +32 -0
  270. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +17 -0
  271. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +12 -0
  272. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/rack_response_spec.rb +74 -0
  273. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/request_execution_verifier_spec.rb +100 -0
  274. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/request_pattern_spec.rb +479 -0
  275. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/request_registry_spec.rb +75 -0
  276. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/request_signature_spec.rb +113 -0
  277. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/request_stub_spec.rb +198 -0
  278. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/response_spec.rb +267 -0
  279. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/stub_registry_spec.rb +86 -0
  280. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/stub_request_snippet_spec.rb +95 -0
  281. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/util/hash_counter_spec.rb +39 -0
  282. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/util/hash_keys_stringifier_spec.rb +27 -0
  283. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/util/headers_spec.rb +28 -0
  284. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/util/json_spec.rb +7 -0
  285. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/util/uri_spec.rb +257 -0
  286. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/util/version_checker_spec.rb +59 -0
  287. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/spec/unit/webmock_spec.rb +7 -0
  288. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/test/http_request.rb +24 -0
  289. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/test/shared_test.rb +76 -0
  290. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/test/test_helper.rb +23 -0
  291. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/test/test_webmock.rb +6 -0
  292. data/vendor/bundle/ruby/1.8/gems/webmock-1.8.8/webmock.gemspec +35 -0
  293. data/vendor/bundle/ruby/1.8/specifications/addressable-2.2.8.gemspec +38 -0
  294. data/vendor/bundle/ruby/1.8/specifications/crack-0.3.1.gemspec +25 -0
  295. data/vendor/bundle/ruby/1.8/specifications/rake-0.9.2.2.gemspec +33 -0
  296. data/vendor/bundle/ruby/1.8/specifications/webmock-1.8.8.gemspec +61 -0
  297. metadata +390 -0
@@ -0,0 +1,144 @@
1
+ require 'ostruct'
2
+
3
+ module CurbSpecHelper
4
+ def http_request(method, uri, options = {}, &block)
5
+ uri = Addressable::URI.heuristic_parse(uri)
6
+ body = options[:body]
7
+
8
+ curl = curb_http_request(uri, method, body, options)
9
+
10
+ status, response_headers =
11
+ WebMock::HttpLibAdapters::CurbAdapter.parse_header_string(curl.header_str)
12
+
13
+ # Deal with the fact that the HTTP spec allows multi-values headers
14
+ # to either be a single entry with a comma-separated listed of
15
+ # values, or multiple separate entries
16
+ response_headers.keys.each do |k|
17
+ v = response_headers[k]
18
+ if v.is_a?(Array)
19
+ response_headers[k] = v.join(', ')
20
+ end
21
+ end
22
+
23
+ OpenStruct.new(
24
+ :body => curl.body_str,
25
+ :headers => WebMock::Util::Headers.normalize_headers(response_headers),
26
+ :status => curl.response_code.to_s,
27
+ :message => status
28
+ )
29
+ end
30
+
31
+ def setup_request(uri, curl, options={})
32
+ curl ||= Curl::Easy.new
33
+ curl.url = uri.omit(:userinfo).to_s
34
+ curl.username = uri.user
35
+ curl.password = uri.password
36
+ curl.timeout = 30
37
+ curl.connect_timeout = 30
38
+
39
+ if headers = options[:headers]
40
+ headers.each {|k,v| curl.headers[k] = v }
41
+ end
42
+
43
+ curl
44
+ end
45
+
46
+ def client_timeout_exception_class
47
+ Curl::Err::TimeoutError
48
+ end
49
+
50
+ def connection_refused_exception_class
51
+ Curl::Err::ConnectionFailedError
52
+ end
53
+
54
+ def http_library
55
+ :curb
56
+ end
57
+
58
+ module DynamicHttp
59
+ def curb_http_request(uri, method, body, options)
60
+ curl = setup_request(uri, nil, options)
61
+
62
+ case method
63
+ when :post
64
+ curl.post_body = body
65
+ when :put
66
+ curl.put_data = body
67
+ end
68
+
69
+ curl.http(method)
70
+ curl
71
+ end
72
+ end
73
+
74
+ module NamedHttp
75
+ def curb_http_request(uri, method, body, options)
76
+ curl = setup_request(uri, nil, options)
77
+
78
+ case method
79
+ when :put, :post
80
+ curl.send( "http_#{method}", body )
81
+ else
82
+ curl.send( "http_#{method}" )
83
+ end
84
+ curl
85
+ end
86
+ end
87
+
88
+ module Perform
89
+ def curb_http_request(uri, method, body, options)
90
+ curl = setup_request(uri, nil, options)
91
+
92
+ case method
93
+ when :post
94
+ curl.post_body = body
95
+ when :put
96
+ curl.put_data = body
97
+ when :head
98
+ curl.head = true
99
+ when :delete
100
+ curl.delete = true
101
+ end
102
+
103
+ curl.perform
104
+ curl
105
+ end
106
+ end
107
+
108
+ module ClassNamedHttp
109
+ def curb_http_request(uri, method, body, options)
110
+ args = ["http_#{method}", uri]
111
+ args << body if method == :post || method == :put
112
+
113
+ c = Curl::Easy.send(*args) do |curl|
114
+ setup_request(uri, curl, options)
115
+ end
116
+
117
+ c
118
+ end
119
+ end
120
+
121
+ module ClassPerform
122
+ def curb_http_request(uri, method, body, options)
123
+ args = ["http_#{method}", uri]
124
+ args << body if method == :post || method == :put
125
+
126
+ c = Curl::Easy.send(*args) do |curl|
127
+ setup_request(uri, curl, options)
128
+
129
+ case method
130
+ when :post
131
+ curl.post_body = body
132
+ when :put
133
+ curl.put_data = body
134
+ when :head
135
+ curl.head = true
136
+ when :delete
137
+ curl.delete = true
138
+ end
139
+ end
140
+
141
+ c
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,183 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'acceptance/webmock_shared'
4
+ require 'ostruct'
5
+
6
+ unless RUBY_PLATFORM =~ /java/
7
+ require 'acceptance/em_http_request/em_http_request_spec_helper'
8
+
9
+ describe "EM::HttpRequest" do
10
+ include EMHttpRequestSpecHelper
11
+
12
+ include_context "with WebMock", :no_status_message
13
+
14
+ #functionality only supported for em-http-request 1.x
15
+ if defined?(EventMachine::HttpConnection)
16
+ describe "with middleware" do
17
+
18
+ it "should work with request middleware" do
19
+ stub_request(:get, "www.example.com").with(:body => 'bar')
20
+
21
+ middleware = Class.new do
22
+ def request(client, head, body)
23
+ [{}, 'bar']
24
+ end
25
+ end
26
+
27
+ EM.run do
28
+ conn = EventMachine::HttpRequest.new('http://www.example.com/')
29
+
30
+ conn.use middleware
31
+
32
+ http = conn.get(:body => 'foo')
33
+
34
+ http.callback do
35
+ WebMock.should have_requested(:get, "www.example.com").with(:body => 'bar')
36
+ EM.stop
37
+ end
38
+ end
39
+ end
40
+
41
+ it "should work with response middleware" do
42
+ stub_request(:get, "www.example.com").to_return(:body => 'foo')
43
+
44
+ middleware = Class.new do
45
+ def response(resp)
46
+ resp.response = 'bar'
47
+ end
48
+ end
49
+
50
+ EM.run do
51
+ conn = EventMachine::HttpRequest.new('http://www.example.com/')
52
+
53
+ conn.use middleware
54
+
55
+ http = conn.get
56
+
57
+ http.callback do
58
+ http.response.should be == 'bar'
59
+ EM.stop
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ # not pretty, but it works
66
+ if defined?(EventMachine::Synchrony)
67
+ describe "with synchrony" do
68
+ let(:webmock_em_http) { File.expand_path(File.join(File.dirname(__FILE__), "../lib/webmock/http_lib_adapters/em_http_request/em_http_request_1_x.rb")) }
69
+
70
+ before(:each) do
71
+ # need to reload the webmock em-http adapter after we require synchrony
72
+ WebMock::HttpLibAdapters::EmHttpRequestAdapter.disable!
73
+ $".delete webmock_em_http
74
+ $".delete File.expand_path(File.join(File.dirname(__FILE__), "../../../lib/webmock/http_lib_adapters/em_http_request_adapter.rb"))
75
+ require 'em-synchrony'
76
+ require 'em-synchrony/em-http'
77
+ require File.expand_path(File.join(File.dirname(__FILE__), "../../../lib/webmock/http_lib_adapters/em_http_request_adapter.rb"))
78
+ end
79
+
80
+ it "should work" do
81
+ stub_request(:post, /.*.testserver.com*/).to_return(:status => 200, :body => 'ok')
82
+ lambda {
83
+ EM.run do
84
+ fiber = Fiber.new do
85
+ http = EM::HttpRequest.new("http://www.testserver.com").post :body => "foo=bar&baz=bang", :timeout => 60
86
+ EM.stop
87
+ end
88
+ fiber.resume
89
+ end
90
+ }.should_not raise_error
91
+ end
92
+
93
+ after(:each) do
94
+ EM.send(:remove_const, :Synchrony)
95
+ EM.send(:remove_const, :HTTPMethods)
96
+ WebMock::HttpLibAdapters::EmHttpRequestAdapter.disable!
97
+ $".reject! {|path| path.include? "em-http-request"}
98
+ $".delete webmock_em_http
99
+ $".delete File.expand_path(File.join(File.dirname(__FILE__), "../../../lib/webmock/http_lib_adapters/em_http_request_adapter.rb"))
100
+ require 'em-http-request'
101
+ require File.expand_path(File.join(File.dirname(__FILE__), "../../../lib/webmock/http_lib_adapters/em_http_request_adapter.rb"))
102
+ end
103
+ end
104
+ end
105
+ end
106
+
107
+ it "should work with streaming" do
108
+ stub_request(:get, "www.example.com").to_return(:body => "abc")
109
+ response = ""
110
+ EM.run {
111
+ http = EventMachine::HttpRequest.new('http://www.example.com/').get
112
+ http.stream { |chunk| response = chunk; EM.stop }
113
+ }
114
+ response.should == "abc"
115
+ end
116
+
117
+ it "should work with responses that use chunked transfer encoding" do
118
+ stub_request(:get, "www.example.com").to_return(:body => "abc", :headers => { 'Transfer-Encoding' => 'chunked' })
119
+ http_request(:get, "http://www.example.com").body.should == "abc"
120
+ end
121
+
122
+ it "should work with optional query params" do
123
+ stub_request(:get, "www.example.com/?x=3&a[]=b&a[]=c").to_return(:body => "abc")
124
+ http_request(:get, "http://www.example.com/?x=3", :query => {"a" => ["b", "c"]}).body.should == "abc"
125
+ end
126
+
127
+ it "should work with optional query params declared as string" do
128
+ stub_request(:get, "www.example.com/?x=3&a[]=b&a[]=c").to_return(:body => "abc")
129
+ http_request(:get, "http://www.example.com/?x=3", :query => "a[]=b&a[]=c").body.should == "abc"
130
+ end
131
+
132
+ it "should work when the body is passed as a Hash" do
133
+ stub_request(:post, "www.example.com").with(:body => {:a => "1", :b => "2"}).to_return(:body => "ok")
134
+ http_request(:post, "http://www.example.com", :body => {:a => "1", :b => "2"}).body.should == "ok"
135
+ end
136
+
137
+ it "should work with UTF-8 strings" do
138
+ body = "Привет, Мир!"
139
+ stub_request(:post, "www.example.com").to_return(:body => body)
140
+ http_request(:post, "http://www.example.com").body.bytesize.should == body.bytesize
141
+ end
142
+
143
+ describe "mocking EM::HttpClient API" do
144
+ let(:uri) { "http://www.example.com/" }
145
+
146
+ before do
147
+ stub_request(:get, uri)
148
+ WebMock::HttpLibAdapters::EmHttpRequestAdapter.enable!
149
+ end
150
+
151
+ def client(uri, options = {})
152
+ client = nil
153
+ EM.run do
154
+ client = EventMachine::HttpRequest.new(uri).get(options)
155
+ client.callback { EM.stop }
156
+ client.errback { failed }
157
+ end
158
+ client
159
+ end
160
+
161
+ subject { client(uri) }
162
+
163
+ it 'should support #uri' do
164
+ subject.uri.should == Addressable::URI.parse(uri)
165
+ end
166
+
167
+ it 'should support #last_effective_url' do
168
+ subject.last_effective_url.should == Addressable::URI.parse(uri)
169
+ end
170
+
171
+ context "with a query" do
172
+ let(:uri) { "http://www.example.com/?a=1&b=2" }
173
+ subject { client("http://www.example.com/?a=1", :query => { 'b' => 2 }) }
174
+
175
+ it "#request_signature doesn't mutate the original uri" do
176
+ subject.uri.should == Addressable::URI.parse("http://www.example.com/?a=1")
177
+ subject.request_signature.uri.should == Addressable::URI.parse(uri)
178
+ end
179
+ end
180
+ end
181
+
182
+ end
183
+ end
@@ -0,0 +1,72 @@
1
+ module EMHttpRequestSpecHelper
2
+
3
+ def failed
4
+ EventMachine.stop
5
+ fail
6
+ end
7
+
8
+ def http_request(method, uri, options = {}, &block)
9
+ @http = nil
10
+ head = options[:headers] || {}
11
+ response = nil
12
+ error = nil
13
+ error_set = false
14
+ uri = Addressable::URI.heuristic_parse(uri)
15
+ EventMachine.run {
16
+ request = EventMachine::HttpRequest.new("#{uri.normalize.to_s}")
17
+ http = request.send(method, {
18
+ :timeout => 30,
19
+ :body => options[:body],
20
+ :query => options[:query],
21
+ :head => head.merge('authorization' => [uri.user, uri.password])
22
+ }, &block)
23
+ http.errback {
24
+ error_set = true
25
+ error = if http.respond_to?(:errors)
26
+ http.errors
27
+ else
28
+ http.error
29
+ end
30
+ failed
31
+ }
32
+ http.callback {
33
+ response = OpenStruct.new({
34
+ :body => http.response,
35
+ :headers => WebMock::Util::Headers.normalize_headers(extract_response_headers(http)),
36
+ :message => http.response_header.http_reason,
37
+ :status => http.response_header.status.to_s
38
+ })
39
+ EventMachine.stop
40
+ }
41
+ @http = http
42
+ }
43
+ raise error.to_s if error_set
44
+ response
45
+ end
46
+
47
+ def client_timeout_exception_class
48
+ "WebMock timeout error"
49
+ end
50
+
51
+ def connection_refused_exception_class
52
+ RuntimeError
53
+ end
54
+
55
+ def http_library
56
+ :em_http_request
57
+ end
58
+
59
+ private
60
+
61
+ def extract_response_headers(http)
62
+ headers = {}
63
+ if http.response_header
64
+ http.response_header.each do |k,v|
65
+ v = v.join(", ") if v.is_a?(Array)
66
+ headers[k] = v
67
+ end
68
+ end
69
+ headers
70
+ end
71
+
72
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+ require 'acceptance/webmock_shared'
3
+ require 'acceptance/excon/excon_spec_helper'
4
+
5
+ describe "Excon" do
6
+ include ExconSpecHelper
7
+ include_context "with WebMock", :no_status_message, :no_url_auth
8
+
9
+ it 'should allow Excon requests to use query hash paramters' do
10
+ stub_request(:get, "http://example.com/resource/?a=1&b=2").to_return(:body => "abc")
11
+ Excon.get('http://example.com', :path => "resource/", :query => {:a => 1, :b => 2}).body.should == "abc"
12
+ end
13
+
14
+ end
15
+
@@ -0,0 +1,38 @@
1
+ require 'ostruct'
2
+
3
+ module ExconSpecHelper
4
+
5
+ def http_request(method, uri, options = {}, &block)
6
+ Excon.defaults[:ssl_verify_peer] = false
7
+ uri = Addressable::URI.heuristic_parse(uri)
8
+ uri = uri.omit(:userinfo).to_s.gsub(' ', '+')
9
+
10
+ options = options.merge(:method => method) # Dup and merge
11
+ response = Excon.new(uri).request(options, &block)
12
+
13
+ headers = WebMock::Util::Headers.normalize_headers(response.headers)
14
+ headers = headers.inject({}) do |res, (name, value)|
15
+ res[name] = value.is_a?(Array) ? value.flatten.join(', ') : value
16
+ res
17
+ end
18
+
19
+ OpenStruct.new \
20
+ :body => response.body,
21
+ :headers => headers,
22
+ :status => response.status.to_s,
23
+ :message => ""
24
+ end
25
+
26
+ def client_timeout_exception_class
27
+ Excon::Errors::Timeout
28
+ end
29
+
30
+ def connection_refused_exception_class
31
+ Excon::Errors::SocketError
32
+ end
33
+
34
+ def http_library
35
+ :excon
36
+ end
37
+
38
+ end
@@ -0,0 +1,76 @@
1
+ require 'spec_helper'
2
+ require 'acceptance/webmock_shared'
3
+ require 'ostruct'
4
+
5
+ require 'acceptance/httpclient/httpclient_spec_helper'
6
+
7
+ describe "HTTPClient" do
8
+ include HTTPClientSpecHelper
9
+
10
+ before(:each) do
11
+ HTTPClientSpecHelper.async_mode = false
12
+ end
13
+
14
+ include_examples "with WebMock"
15
+
16
+ it "should yield block on response if block provided" do
17
+ stub_request(:get, "www.example.com").to_return(:body => "abc")
18
+ response_body = ""
19
+ http_request(:get, "http://www.example.com/") do |body|
20
+ response_body = body
21
+ end
22
+ response_body.should == "abc"
23
+ end
24
+
25
+ it "should match requests if headers are the same but in different order" do
26
+ stub_request(:get, "www.example.com").with(:headers => {"a" => ["b", "c"]} )
27
+ http_request(
28
+ :get, "http://www.example.com/",
29
+ :headers => {"a" => ["c", "b"]}).status.should == "200"
30
+ end
31
+
32
+ describe "when using async requests" do
33
+ before(:each) do
34
+ HTTPClientSpecHelper.async_mode = true
35
+ end
36
+
37
+ include_examples "with WebMock"
38
+ end
39
+
40
+ it "should work with get_content" do
41
+ stub_request(:get, 'www.example.com').to_return(:status => 200, :body => 'test', :headers => {})
42
+ str = ''
43
+ HTTPClient.get_content('www.example.com') do |content|
44
+ str << content
45
+ end
46
+ str.should == 'test'
47
+ end
48
+
49
+ context "Filters" do
50
+ class Filter
51
+ def filter_request(request)
52
+ request.header["Authorization"] = "Bearer 0123456789"
53
+ end
54
+
55
+ def filter_response(request, response)
56
+ response.header.set('X-Powered-By', 'webmock')
57
+ end
58
+ end
59
+
60
+ before do
61
+ @client = HTTPClient.new
62
+ @client.request_filter << Filter.new
63
+ stub_request(:get, 'www.example.com').with(:headers => {'Authorization' => 'Bearer 0123456789'})
64
+ end
65
+
66
+ it "supports request filters" do
67
+ @client.request(:get, 'http://www.example.com/').status.should == 200
68
+ end
69
+
70
+ it "supports response filters" do
71
+ res = @client.request(:get, 'http://www.example.com/')
72
+ res.header['X-Powered-By'].first.should == 'webmock'
73
+ end
74
+ end
75
+
76
+ end
@@ -0,0 +1,48 @@
1
+ module HTTPClientSpecHelper
2
+ class << self
3
+ attr_accessor :async_mode
4
+ end
5
+
6
+ def http_request(method, uri, options = {}, &block)
7
+ uri = Addressable::URI.heuristic_parse(uri)
8
+ c = HTTPClient.new
9
+ c.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE
10
+ c.set_basic_auth(nil, uri.user, uri.password) if uri.user
11
+ params = [method, "#{uri.omit(:userinfo, :query).normalize.to_s}",
12
+ uri.query_values, options[:body], options[:headers] || {}]
13
+ if HTTPClientSpecHelper.async_mode
14
+ connection = c.request_async(*params)
15
+ connection.join
16
+ response = connection.pop
17
+ else
18
+ response = c.request(*params, &block)
19
+ end
20
+ headers = response.header.all.inject({}) do |headers, header|
21
+ if !headers.has_key?(header[0])
22
+ headers[header[0]] = header[1]
23
+ else
24
+ headers[header[0]] = [headers[header[0]], header[1]].join(', ')
25
+ end
26
+ headers
27
+ end
28
+ OpenStruct.new({
29
+ :body => HTTPClientSpecHelper.async_mode ? response.content.read : response.content,
30
+ :headers => headers,
31
+ :status => response.code.to_s,
32
+ :message => response.reason
33
+ })
34
+ end
35
+
36
+ def client_timeout_exception_class
37
+ HTTPClient::TimeoutError
38
+ end
39
+
40
+ def connection_refused_exception_class
41
+ Errno::ECONNREFUSED
42
+ end
43
+
44
+ def http_library
45
+ :httpclient
46
+ end
47
+
48
+ end
@@ -0,0 +1,125 @@
1
+ shared_examples_for "Net::HTTP" do
2
+ describe "when making real requests", :net_connect => true do
3
+ let(:port){ WebMockServer.instance.port }
4
+
5
+ before(:each) do
6
+ @http = Net::HTTP.new("localhost", port)
7
+ end
8
+
9
+ it "should return a Net::ReadAdapter from response.body when a real request is made with a block and #read_body", :net_connect => true do
10
+ response = Net::HTTP.new("localhost", port).request_get('/') { |r| r.read_body { } }
11
+ response.body.should be_a(Net::ReadAdapter)
12
+ end
13
+
14
+ it "should handle requests with block passed to read_body", :net_connect => true do
15
+ body = ""
16
+ req = Net::HTTP::Get.new("/")
17
+ Net::HTTP.start("localhost", port) do |http|
18
+ http.request(req) do |res|
19
+ res.read_body do |str|
20
+ body << str
21
+ end
22
+ end
23
+ end
24
+ body.should =~ /hello world/
25
+ end
26
+
27
+ it "should connect only once when connected on start", :net_connect => true do
28
+ @http = Net::HTTP.new('localhost', port)
29
+ socket_id_before_request = socket_id_after_request = nil
30
+ @http.start {|conn|
31
+ socket_id_before_request = conn.instance_variable_get(:@socket).object_id
32
+ conn.request(Net::HTTP::Get.new("/"))
33
+ socket_id_after_request = conn.instance_variable_get(:@socket).object_id
34
+ }
35
+ socket_id_after_request.should_not be_nil
36
+ socket_id_after_request.should == socket_id_before_request
37
+ end
38
+
39
+ describe "without start" do
40
+ it "should close connection after a real request" do
41
+ @http.get('/') { }
42
+ @http.should_not be_started
43
+ end
44
+
45
+ it "should execute block exactly once" do
46
+ times = 0
47
+ @http.get('/') { times += 1 }
48
+ times.should == 1
49
+ end
50
+
51
+ it "should have socket open during a real request" do
52
+ socket_id = nil
53
+ @http.get('/') {
54
+ socket_id = @http.instance_variable_get(:@socket).object_id
55
+ }
56
+ socket_id.should_not be_nil
57
+ end
58
+
59
+ it "should be started during a real request" do
60
+ started = nil
61
+ @http.get('/') {
62
+ started = @http.started?
63
+ }
64
+ started.should == true
65
+ @http.started?.should == false
66
+ end
67
+ end
68
+
69
+ describe "with start" do
70
+ it "should close connection after a real request" do
71
+ @http.start {|conn| conn.get('/') { } }
72
+ @http.should_not be_started
73
+ end
74
+
75
+ it "should execute block exactly once" do
76
+ times = 0
77
+ @http.start {|conn| conn.get('/') { times += 1 }}
78
+ times.should == 1
79
+ end
80
+
81
+ it "should have socket open during a real request" do
82
+ socket_id = nil
83
+ @http.start {|conn| conn.get('/') {
84
+ socket_id = conn.instance_variable_get(:@socket).object_id
85
+ }
86
+ }
87
+ socket_id.should_not be_nil
88
+ end
89
+
90
+ it "should be started during a real request" do
91
+ started = nil
92
+ @http.start {|conn| conn.get('/') {
93
+ started = conn.started?
94
+ }
95
+ }
96
+ started.should == true
97
+ @http.started?.should == false
98
+ end
99
+ end
100
+
101
+ describe "with start without request block" do
102
+ it "should close connection after a real request" do
103
+ @http.start {|conn| conn.get('/') }
104
+ @http.should_not be_started
105
+ end
106
+
107
+ it "should have socket open during a real request" do
108
+ socket_id = nil
109
+ @http.start {|conn|
110
+ socket_id = conn.instance_variable_get(:@socket).object_id
111
+ }
112
+ socket_id.should_not be_nil
113
+ end
114
+
115
+ it "should be started during a real request" do
116
+ started = nil
117
+ @http.start {|conn|
118
+ started = conn.started?
119
+ }
120
+ started.should == true
121
+ @http.started?.should == false
122
+ end
123
+ end
124
+ end
125
+ end