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,212 @@
1
+ if defined?(EventMachine::HttpClient)
2
+ module WebMock
3
+ module HttpLibAdapters
4
+ class EmHttpRequestAdapter < HttpLibAdapter
5
+ adapter_for :em_http_request
6
+
7
+ OriginalHttpClient = EventMachine::HttpClient unless const_defined?(:OriginalHttpClient)
8
+ OriginalHttpConnection = EventMachine::HttpConnection unless const_defined?(:OriginalHttpConnection)
9
+
10
+
11
+ def self.enable!
12
+ EventMachine.send(:remove_const, :HttpConnection)
13
+ EventMachine.send(:const_set, :HttpConnection, EventMachine::WebMockHttpConnection)
14
+ EventMachine.send(:remove_const, :HttpClient)
15
+ EventMachine.send(:const_set, :HttpClient, EventMachine::WebMockHttpClient)
16
+ end
17
+
18
+ def self.disable!
19
+ EventMachine.send(:remove_const, :HttpConnection)
20
+ EventMachine.send(:const_set, :HttpConnection, OriginalHttpConnection)
21
+ EventMachine.send(:remove_const, :HttpClient)
22
+ EventMachine.send(:const_set, :HttpClient, OriginalHttpClient)
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ module EventMachine
29
+
30
+ if defined?(Synchrony) && HTTPMethods.instance_methods.include?(:aget)
31
+ # have to make the callbacks fire on the next tick in order
32
+ # to avoid the dreaded "double resume" exception
33
+ module HTTPMethods
34
+ %w[get head post delete put].each do |type|
35
+ class_eval %[
36
+ def #{type}(options = {}, &blk)
37
+ f = Fiber.current
38
+
39
+ conn = setup_request(:#{type}, options, &blk)
40
+ conn.callback { EM.next_tick { f.resume(conn) } }
41
+ conn.errback { EM.next_tick { f.resume(conn) } }
42
+
43
+ Fiber.yield
44
+ end
45
+ ]
46
+ end
47
+ end
48
+ end
49
+
50
+ class WebMockHttpConnection < HttpConnection
51
+ def webmock_activate_connection(client)
52
+ request_signature = client.request_signature
53
+
54
+ if client.stubbed_webmock_response
55
+ conn = HttpStubConnection.new rand(10000)
56
+ post_init
57
+
58
+ @deferred = false
59
+ @conn = conn
60
+
61
+ conn.parent = self
62
+ conn.pending_connect_timeout = @connopts.connect_timeout
63
+ conn.comm_inactivity_timeout = @connopts.inactivity_timeout
64
+
65
+ finalize_request(client)
66
+ @conn.set_deferred_status :succeeded
67
+ elsif WebMock.net_connect_allowed?(request_signature.uri)
68
+ real_activate_connection(client)
69
+ else
70
+ raise WebMock::NetConnectNotAllowedError.new(request_signature)
71
+ end
72
+ end
73
+ alias_method :real_activate_connection, :activate_connection
74
+ alias_method :activate_connection, :webmock_activate_connection
75
+ end
76
+
77
+ class WebMockHttpClient < EventMachine::HttpClient
78
+ include HttpEncoding
79
+
80
+ def uri
81
+ @req.uri
82
+ end
83
+
84
+ def setup(response, uri, error = nil)
85
+ @last_effective_url = @uri = uri
86
+ if error
87
+ on_error(error)
88
+ fail(self)
89
+ else
90
+ @conn.receive_data(response)
91
+ succeed(self)
92
+ end
93
+ end
94
+
95
+ def send_request_with_webmock(head, body)
96
+ WebMock::RequestRegistry.instance.requested_signatures.put(request_signature)
97
+
98
+ if stubbed_webmock_response
99
+ on_error("WebMock timeout error") if stubbed_webmock_response.should_timeout
100
+ WebMock::CallbackRegistry.invoke_callbacks({:lib => :em_http_request}, request_signature, stubbed_webmock_response)
101
+ EM.next_tick {
102
+ setup(make_raw_response(stubbed_webmock_response), @uri,
103
+ stubbed_webmock_response.should_timeout ? "WebMock timeout error" : nil)
104
+ }
105
+ self
106
+ elsif WebMock.net_connect_allowed?(request_signature.uri)
107
+ send_request_without_webmock(head, body)
108
+ else
109
+ raise WebMock::NetConnectNotAllowedError.new(request_signature)
110
+ end
111
+ end
112
+
113
+ alias_method :send_request_without_webmock, :send_request
114
+ alias_method :send_request, :send_request_with_webmock
115
+
116
+ def set_deferred_status(status, *args)
117
+ if status == :succeeded && !stubbed_webmock_response && WebMock::CallbackRegistry.any_callbacks?
118
+ webmock_response = build_webmock_response
119
+ WebMock::CallbackRegistry.invoke_callbacks(
120
+ {:lib => :em_http_request, :real_request => true},
121
+ request_signature,
122
+ webmock_response)
123
+ end
124
+
125
+ super
126
+ end
127
+
128
+ def request_signature
129
+ @request_signature ||= build_request_signature
130
+ end
131
+
132
+ def stubbed_webmock_response
133
+ unless defined?(@stubbed_webmock_response)
134
+ @stubbed_webmock_response = WebMock::StubRegistry.instance.response_for_request(request_signature)
135
+ end
136
+
137
+ @stubbed_webmock_response
138
+ end
139
+
140
+ private
141
+
142
+ def build_webmock_response
143
+ webmock_response = WebMock::Response.new
144
+ webmock_response.status = [response_header.status, response_header.http_reason]
145
+ webmock_response.headers = response_header
146
+ webmock_response.body = response
147
+ webmock_response
148
+ end
149
+
150
+ def build_request_signature
151
+ headers, body = @req.headers, @req.body
152
+
153
+ @conn.middleware.select {|m| m.respond_to?(:request) }.each do |m|
154
+ headers, body = m.request(self, headers, body)
155
+ end
156
+
157
+ method = @req.method
158
+ uri = @req.uri.clone
159
+ auth = @req.headers[:'proxy-authorization']
160
+ query = @req.query
161
+
162
+ if auth
163
+ userinfo = auth.join(':')
164
+ userinfo = WebMock::Util::URI.encode_unsafe_chars_in_userinfo(userinfo)
165
+ if @req
166
+ @req.proxy.reject! {|k,v| t.to_s == 'authorization' }
167
+ else
168
+ options.reject! {|k,v| k.to_s == 'authorization' } #we added it to url userinfo
169
+ end
170
+ uri.userinfo = userinfo
171
+ end
172
+
173
+ uri.query = encode_query(@req.uri, query).slice(/\?(.*)/, 1)
174
+
175
+ body = form_encode_body(body) if body.is_a?(Hash)
176
+
177
+ WebMock::RequestSignature.new(
178
+ method.downcase.to_sym,
179
+ uri.to_s,
180
+ :body => body,
181
+ :headers => headers
182
+ )
183
+ end
184
+
185
+ def make_raw_response(response)
186
+ response.raise_error_if_any
187
+
188
+ status, headers, body = response.status, response.headers, response.body
189
+ headers ||= {}
190
+
191
+ response_string = []
192
+ response_string << "HTTP/1.1 #{status[0]} #{status[1]}"
193
+
194
+ headers["Content-Length"] = body.bytesize unless headers["Content-Length"]
195
+ headers.each do |header, value|
196
+ value = value.join(", ") if value.is_a?(Array)
197
+
198
+ # WebMock's internal processing will not handle the body
199
+ # correctly if the header indicates that it is chunked, unless
200
+ # we also create all the chunks.
201
+ # It's far easier just to remove the header.
202
+ next if header =~ /transfer-encoding/i && value =~/chunked/i
203
+
204
+ response_string << "#{header}: #{value}"
205
+ end if headers
206
+
207
+ response_string << "" << body
208
+ response_string.join("\n")
209
+ end
210
+ end
211
+ end
212
+ end
@@ -0,0 +1,11 @@
1
+ begin
2
+ require 'em-http-request'
3
+ rescue LoadError
4
+ # em-http-request not found
5
+ end
6
+
7
+ if defined?(EventMachine::HttpConnection)
8
+ require File.expand_path(File.dirname(__FILE__) + '/em_http_request/em_http_request_1_x')
9
+ else
10
+ require File.expand_path(File.dirname(__FILE__) + '/em_http_request/em_http_request_0_x')
11
+ end
@@ -0,0 +1,95 @@
1
+ begin
2
+ require 'excon'
3
+ rescue LoadError
4
+ # excon not found
5
+ end
6
+
7
+ if defined?(Excon)
8
+ WebMock::VersionChecker.new('Excon', Excon::VERSION, '0.9.6').check_version!
9
+
10
+ module WebMock
11
+ module HttpLibAdapters
12
+
13
+ class ExconAdapter < HttpLibAdapter
14
+ adapter_for :excon
15
+
16
+ def self.enable!
17
+ Excon.send(:remove_const, :Connection)
18
+ Excon.send(:const_set, :Connection, ExconConnection)
19
+ end
20
+
21
+ def self.disable!
22
+ Excon.send(:remove_const, :Connection)
23
+ Excon.send(:const_set, :Connection, ExconConnection.superclass)
24
+ end
25
+
26
+
27
+ def self.to_query(hash)
28
+ string = ""
29
+ for key, values in hash
30
+ if values.nil?
31
+ string << key.to_s << '&'
32
+ else
33
+ for value in [*values]
34
+ string << key.to_s << '=' << CGI.escape(value.to_s) << '&'
35
+ end
36
+ end
37
+ end
38
+ string.chop! # remove trailing '&'
39
+ end
40
+
41
+ def self.build_request(params)
42
+ params = params.dup
43
+ method = (params.delete(:method) || :get).to_s.downcase.to_sym
44
+ params[:query] = to_query(params[:query]) if params[:query].is_a?(Hash)
45
+ uri = Addressable::URI.new(params).to_s
46
+ WebMock::RequestSignature.new method, uri, :body => params[:body], :headers => params[:headers]
47
+ end
48
+
49
+ def self.real_response(mock)
50
+ raise Excon::Errors::Timeout if mock.should_timeout
51
+ mock.raise_error_if_any
52
+ Excon::Response.new \
53
+ :body => mock.body,
54
+ :status => mock.status[0].to_i,
55
+ :headers => mock.headers
56
+ end
57
+
58
+ def self.mock_response(real)
59
+ mock = WebMock::Response.new
60
+ mock.status = real.status
61
+ mock.headers = real.headers
62
+ mock.body = real.body
63
+ mock
64
+ end
65
+
66
+ def self.perform_callbacks(request, response, options = {})
67
+ return unless WebMock::CallbackRegistry.any_callbacks?
68
+ WebMock::CallbackRegistry.invoke_callbacks(options.merge(:lib => :excon), request, response)
69
+ end
70
+
71
+ end
72
+
73
+ class ExconConnection < ::Excon::Connection
74
+
75
+ def request_kernel(params, &block)
76
+ mock_request = ExconAdapter.build_request params.dup
77
+ WebMock::RequestRegistry.instance.requested_signatures.put(mock_request)
78
+
79
+ if mock_response = WebMock::StubRegistry.instance.response_for_request(mock_request)
80
+ ExconAdapter.perform_callbacks(mock_request, mock_response, :real_request => false)
81
+ ExconAdapter.real_response(mock_response)
82
+ elsif WebMock.net_connect_allowed?(mock_request.uri)
83
+ real_response = super
84
+ ExconAdapter.perform_callbacks(mock_request, ExconAdapter.mock_response(real_response), :real_request => true)
85
+ real_response
86
+ else
87
+ raise WebMock::NetConnectNotAllowedError.new(mock_request)
88
+ end
89
+ end
90
+
91
+ end
92
+ end
93
+ end
94
+
95
+ end
@@ -0,0 +1,7 @@
1
+ module WebMock
2
+ class HttpLibAdapter
3
+ def self.adapter_for(lib)
4
+ WebMock::HttpLibAdapterRegistry.instance.register(lib, self)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,19 @@
1
+ module WebMock
2
+ class HttpLibAdapterRegistry
3
+ include Singleton
4
+
5
+ attr_accessor :http_lib_adapters
6
+
7
+ def initialize
8
+ @http_lib_adapters = {}
9
+ end
10
+
11
+ def register(lib, adapter)
12
+ @http_lib_adapters[lib] = adapter
13
+ end
14
+
15
+ def each_adapter(&block)
16
+ @http_lib_adapters.each(&block)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,193 @@
1
+ begin
2
+ require 'httpclient'
3
+ rescue LoadError
4
+ # httpclient not found
5
+ end
6
+
7
+ if defined?(::HTTPClient)
8
+
9
+ module WebMock
10
+ module HttpLibAdapters
11
+ class HTTPClientAdapter < HttpLibAdapter
12
+ adapter_for :httpclient
13
+
14
+ OriginalHttpClient = ::HTTPClient unless const_defined?(:OriginalHttpClient)
15
+
16
+ def self.enable!
17
+ Object.send(:remove_const, :HTTPClient)
18
+ Object.send(:const_set, :HTTPClient, WebMockHTTPClient)
19
+ end
20
+
21
+ def self.disable!
22
+ Object.send(:remove_const, :HTTPClient)
23
+ Object.send(:const_set, :HTTPClient, OriginalHttpClient)
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+
30
+ class WebMockHTTPClient < HTTPClient
31
+
32
+ def do_get_block_with_webmock(req, proxy, conn, &block)
33
+ do_get_with_webmock(req, proxy, conn, false, &block)
34
+ end
35
+
36
+ def do_get_stream_with_webmock(req, proxy, conn, &block)
37
+ do_get_with_webmock(req, proxy, conn, true, &block)
38
+ end
39
+
40
+ def do_get_with_webmock(req, proxy, conn, stream = false, &block)
41
+ request_signature = build_request_signature(req, :reuse_existing)
42
+
43
+ WebMock::RequestRegistry.instance.requested_signatures.put(request_signature)
44
+
45
+ if webmock_responses[request_signature]
46
+ webmock_response = webmock_responses.delete(request_signature)
47
+ response = build_httpclient_response(webmock_response, stream, &block)
48
+ @request_filter.each do |filter|
49
+ filter.filter_response(req, response)
50
+ end
51
+ res = conn.push(response)
52
+ WebMock::CallbackRegistry.invoke_callbacks(
53
+ {:lib => :httpclient}, request_signature, webmock_response)
54
+ res
55
+ elsif WebMock.net_connect_allowed?(request_signature.uri)
56
+ res = if stream
57
+ do_get_stream_without_webmock(req, proxy, conn, &block)
58
+ else
59
+ do_get_block_without_webmock(req, proxy, conn, &block)
60
+ end
61
+ res = conn.pop
62
+ conn.push(res)
63
+ if WebMock::CallbackRegistry.any_callbacks?
64
+ webmock_response = build_webmock_response(res)
65
+ WebMock::CallbackRegistry.invoke_callbacks(
66
+ {:lib => :httpclient, :real_request => true}, request_signature,
67
+ webmock_response)
68
+ end
69
+ res
70
+ else
71
+ raise WebMock::NetConnectNotAllowedError.new(request_signature)
72
+ end
73
+ end
74
+
75
+ def do_request_async_with_webmock(method, uri, query, body, extheader)
76
+ req = create_request(method, uri, query, body, extheader)
77
+ request_signature = build_request_signature(req)
78
+ webmock_request_signatures << request_signature
79
+
80
+ if webmock_responses[request_signature] || WebMock.net_connect_allowed?(request_signature.uri)
81
+ do_request_async_without_webmock(method, uri, query, body, extheader)
82
+ else
83
+ raise WebMock::NetConnectNotAllowedError.new(request_signature)
84
+ end
85
+ end
86
+
87
+ alias_method :do_get_block_without_webmock, :do_get_block
88
+ alias_method :do_get_block, :do_get_block_with_webmock
89
+
90
+ alias_method :do_get_stream_without_webmock, :do_get_stream
91
+ alias_method :do_get_stream, :do_get_stream_with_webmock
92
+
93
+ alias_method :do_request_async_without_webmock, :do_request_async
94
+ alias_method :do_request_async, :do_request_async_with_webmock
95
+
96
+ def build_httpclient_response(webmock_response, stream = false, &block)
97
+ body = stream ? StringIO.new(webmock_response.body) : webmock_response.body
98
+ response = HTTP::Message.new_response(body)
99
+ response.header.init_response(webmock_response.status[0])
100
+ response.reason=webmock_response.status[1]
101
+ webmock_response.headers.to_a.each { |name, value| response.header.set(name, value) }
102
+
103
+ raise HTTPClient::TimeoutError if webmock_response.should_timeout
104
+ webmock_response.raise_error_if_any
105
+
106
+ block.call(response, body) if block
107
+
108
+ response
109
+ end
110
+ end
111
+
112
+ def build_webmock_response(httpclient_response)
113
+ webmock_response = WebMock::Response.new
114
+ webmock_response.status = [httpclient_response.status, httpclient_response.reason]
115
+
116
+ webmock_response.headers = {}.tap do |hash|
117
+ httpclient_response.header.all.each do |(key, value)|
118
+ if hash.has_key?(key)
119
+ hash[key] = Array(hash[key]) + [value]
120
+ else
121
+ hash[key] = value
122
+ end
123
+ end
124
+ end
125
+
126
+ if httpclient_response.content.respond_to?(:read)
127
+ webmock_response.body = httpclient_response.content.read
128
+ body = HTTP::Message::Body.new
129
+ body.init_response(StringIO.new(webmock_response.body))
130
+ httpclient_response.body = body
131
+ else
132
+ webmock_response.body = httpclient_response.content
133
+ end
134
+ webmock_response
135
+ end
136
+
137
+ def build_request_signature(req, reuse_existing = false)
138
+ uri = WebMock::Util::URI.heuristic_parse(req.header.request_uri.to_s)
139
+ uri.query_values = req.header.request_query if req.header.request_query
140
+ uri.port = req.header.request_uri.port
141
+ uri = uri.omit(:userinfo)
142
+
143
+ auth = www_auth.basic_auth
144
+ auth.challenge(req.header.request_uri, nil)
145
+
146
+ @request_filter.each do |filter|
147
+ filter.filter_request(req)
148
+ end
149
+
150
+ headers = req.header.all.inject({}) do |hdrs, header|
151
+ hdrs[header[0]] ||= []
152
+ hdrs[header[0]] << header[1]
153
+ hdrs
154
+ end
155
+
156
+ if (auth_cred = auth.get(req)) && auth.scheme == 'Basic'
157
+ userinfo = WebMock::Util::Headers.decode_userinfo_from_header(auth_cred)
158
+ userinfo = WebMock::Util::URI.encode_unsafe_chars_in_userinfo(userinfo)
159
+ headers.reject! {|k,v| k =~ /[Aa]uthorization/ && v =~ /^Basic / } #we added it to url userinfo
160
+ uri.userinfo = userinfo
161
+ end
162
+
163
+ signature = WebMock::RequestSignature.new(
164
+ req.header.request_method.downcase.to_sym,
165
+ uri.to_s,
166
+ :body => req.content,
167
+ :headers => headers
168
+ )
169
+
170
+ # reuse a previous identical signature object if we stored one for later use
171
+ if reuse_existing && previous_signature = previous_signature_for(signature)
172
+ return previous_signature
173
+ end
174
+
175
+ signature
176
+ end
177
+
178
+ def webmock_responses
179
+ @webmock_responses ||= Hash.new do |hash, request_signature|
180
+ hash[request_signature] = WebMock::StubRegistry.instance.response_for_request(request_signature)
181
+ end
182
+ end
183
+
184
+ def webmock_request_signatures
185
+ @webmock_request_signatures ||= []
186
+ end
187
+
188
+ def previous_signature_for(signature)
189
+ return nil unless index = webmock_request_signatures.index(signature)
190
+ webmock_request_signatures.delete_at(index)
191
+ end
192
+
193
+ end