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,65 @@
1
+ #!/usr/bin/env rake
2
+
3
+ require 'bundler'
4
+ Bundler::GemHelper.install_tasks
5
+
6
+ namespace :rvm do
7
+ desc 'Run specs against 1.8.6, REE, 1.8.7, 1.9.2 and jRuby'
8
+ task :specs do
9
+ # JCF: I'd love to be able to use RVM's `rvm {rubies} specs` command but
10
+ # the require tests in spec/other_net_http_libs_spec.rb break when doing
11
+ # so.
12
+ spec_files = Dir[File.dirname(__FILE__) + '/spec/**/*_spec.rb'].join(' ')
13
+ sh "rvm 1.8.6@webmock,ree@webmock,1.8.7@webmock,1.9.2@webmock,jruby@webmock exec rspec #{spec_files}"
14
+ end
15
+ end
16
+
17
+ require "rspec/core/rake_task"
18
+ RSpec::Core::RakeTask.new(:spec) do |t|
19
+ t.rspec_opts = ["-c", "-f progress", "-r ./spec/spec_helper.rb"]
20
+ t.pattern = 'spec/**/*_spec.rb'
21
+ end
22
+
23
+ RSpec::Core::RakeTask.new(:spec_http_without_webmock) do |t|
24
+ t.rspec_opts = ["-c", "-f progress", "-r ./spec/acceptance/net_http/real_net_http_spec.rb"]
25
+ t.pattern = 'spec/acceptance/net_http/real_net_http_spec.rb'
26
+ end
27
+
28
+
29
+ task :em_http_request_0_x_spec do
30
+ sh "EM_HTTP_REQUEST_0_X=true bundle install && bundle exec rspec spec/acceptance/em_http_request/em_http_request_spec.rb" if RUBY_VERSION <= "1.8.7"
31
+ end
32
+
33
+ require 'rake/testtask'
34
+ Rake::TestTask.new(:test) do |test|
35
+ test.test_files = FileList["test/**/*.rb"].exclude("test/test_helper.rb")
36
+ test.verbose = false
37
+ test.warning = false
38
+ end
39
+
40
+ Rake::TestTask.new(:minitest) do |test|
41
+ test.test_files = FileList["minitest/**/*.rb"].exclude("test/test_helper.rb")
42
+ test.verbose = false
43
+ test.warning = false
44
+ end
45
+
46
+
47
+ task :default => [:spec, :spec_http_without_webmock, :test, :minitest]
48
+
49
+ require 'rdoc/task'
50
+ RDoc::Task.new do |rdoc|
51
+ $:.push File.expand_path('../lib', __FILE__)
52
+ require 'webmock/version'
53
+
54
+ rdoc.rdoc_dir = 'rdoc'
55
+ rdoc.title = "webmock #{WebMock::VERSION}"
56
+ rdoc.rdoc_files.include('README*')
57
+ rdoc.rdoc_files.include('lib/webmock/webmock.rb')
58
+ end
59
+
60
+
61
+ task :require_ruby_18 do
62
+ raise "This must be run on Ruby 1.8" unless RUBY_VERSION =~ /^1\.8/
63
+ end
64
+
65
+ task :release => [:require_ruby_18]
@@ -0,0 +1,63 @@
1
+ module WebMock
2
+ module API
3
+ extend self
4
+
5
+ def stub_request(method, uri)
6
+ WebMock::StubRegistry.instance.
7
+ register_request_stub(WebMock::RequestStub.new(method, uri))
8
+ end
9
+
10
+ alias_method :stub_http_request, :stub_request
11
+
12
+ def a_request(method, uri)
13
+ WebMock::RequestPattern.new(method, uri)
14
+ end
15
+
16
+ class << self
17
+ alias :request :a_request
18
+ end
19
+
20
+
21
+ def assert_requested(*args, &block)
22
+ if not args[0].is_a?(WebMock::RequestStub)
23
+ args = convert_uri_method_and_options_to_request_and_options(*args, &block)
24
+ end
25
+ assert_request_requested(*args, &block)
26
+ end
27
+
28
+ def assert_not_requested(*args, &block)
29
+ if not args[0].is_a?(WebMock::RequestStub)
30
+ args = convert_uri_method_and_options_to_request_and_options(*args, &block)
31
+ end
32
+ assert_request_not_requested(*args, &block)
33
+ end
34
+
35
+ def hash_including(expected)
36
+ if defined?(::RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher)
37
+ RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new(expected)
38
+ elsif defined?(::Spec::Mocks::ArgumentMatchers::HashIncludingMatcher)
39
+ Spec::Mocks::ArgumentMatchers::HashIncludingMatcher.new(expected)
40
+ else
41
+ WebMock::Matchers::HashIncludingMatcher.new(expected)
42
+ end
43
+ end
44
+
45
+ private
46
+
47
+ def convert_uri_method_and_options_to_request_and_options(*args, &block)
48
+ request = WebMock::RequestPattern.new(*args).with(&block)
49
+ [request, args[2] || {}]
50
+ end
51
+
52
+ def assert_request_requested(request, options = {})
53
+ verifier = WebMock::RequestExecutionVerifier.new(request, options.delete(:times) || 1)
54
+ WebMock::AssertionFailure.failure(verifier.failure_message) unless verifier.matches?
55
+ end
56
+
57
+ def assert_request_not_requested(request, options = {})
58
+ verifier = WebMock::RequestExecutionVerifier.new(request, options.delete(:times))
59
+ WebMock::AssertionFailure.failure(verifier.negative_failure_message) unless verifier.does_not_match?
60
+ end
61
+
62
+ end
63
+ end
@@ -0,0 +1,11 @@
1
+ module WebMock
2
+ class AssertionFailure
3
+ @error_class = RuntimeError
4
+ class << self
5
+ attr_accessor :error_class
6
+ def failure(message)
7
+ raise @error_class.new(message)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,35 @@
1
+ module WebMock
2
+ class CallbackRegistry
3
+ @@callbacks = []
4
+
5
+ def self.add_callback(options, block)
6
+ @@callbacks << {:options => options, :block => block}
7
+ end
8
+
9
+ def self.callbacks
10
+ @@callbacks
11
+ end
12
+
13
+ def self.invoke_callbacks(options, request_signature, response)
14
+ return if @@callbacks.empty?
15
+ CallbackRegistry.callbacks.each do |callback|
16
+ except = callback[:options][:except]
17
+ real_only = callback[:options][:real_requests_only]
18
+ unless except && except.include?(options[:lib])
19
+ if !real_only || options[:real_request]
20
+ callback[:block].call(request_signature, response)
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ def self.reset
27
+ @@callbacks = []
28
+ end
29
+
30
+ def self.any_callbacks?
31
+ !@@callbacks.empty?
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,10 @@
1
+ module WebMock
2
+ class Config
3
+ include Singleton
4
+
5
+ attr_accessor :allow_net_connect
6
+ attr_accessor :allow_localhost
7
+ attr_accessor :allow
8
+ attr_accessor :net_http_connect_on_start
9
+ end
10
+ end
@@ -0,0 +1,8 @@
1
+ require 'webmock'
2
+ require 'webmock/rspec/matchers'
3
+
4
+ World(WebMock::API, WebMock::Matchers)
5
+
6
+ After do
7
+ WebMock.reset!
8
+ end
@@ -0,0 +1,9 @@
1
+ module WebMock
2
+ class Deprecation
3
+ class << self
4
+ def warning(message)
5
+ warn "WebMock deprecation warning: #{message}"
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,33 @@
1
+ module WebMock
2
+
3
+ class NetConnectNotAllowedError < StandardError
4
+ def initialize(request_signature)
5
+ text = "Real HTTP connections are disabled. Unregistered request: #{request_signature}"
6
+ text << "\n\n"
7
+ text << stubbing_instructions(request_signature)
8
+ text << request_stubs
9
+ text << "\n\n" + "="*60
10
+ super(text)
11
+ end
12
+
13
+ private
14
+
15
+ def request_stubs
16
+ return "" if WebMock::StubRegistry.instance.request_stubs.empty?
17
+ text = "\n\nregistered request stubs:\n"
18
+ WebMock::StubRegistry.instance.request_stubs.each do |stub|
19
+ text << "\n#{WebMock::StubRequestSnippet.new(stub).to_s(false)}"
20
+ end
21
+ text
22
+ end
23
+
24
+ def stubbing_instructions(request_signature)
25
+ text = ""
26
+ request_stub = RequestStub.from_request_signature(request_signature)
27
+ text << "You can stub this request with the following snippet:\n\n"
28
+ text << WebMock::StubRequestSnippet.new(request_stub).to_s
29
+ text
30
+ end
31
+ end
32
+
33
+ end
@@ -0,0 +1,287 @@
1
+ begin
2
+ require 'curb'
3
+ rescue LoadError
4
+ # curb not found
5
+ end
6
+
7
+ if defined?(Curl)
8
+ WebMock::VersionChecker.new('Curb', Gem.loaded_specs['curb'].version.to_s, '0.7.16').check_version!
9
+
10
+ module WebMock
11
+ module HttpLibAdapters
12
+ class CurbAdapter < HttpLibAdapter
13
+ adapter_for :curb
14
+
15
+ OriginalCurlEasy = Curl::Easy unless const_defined?(:OriginalCurlEasy)
16
+
17
+ def self.enable!
18
+ Curl.send(:remove_const, :Easy)
19
+ Curl.send(:const_set, :Easy, Curl::WebMockCurlEasy)
20
+ end
21
+
22
+ def self.disable!
23
+ Curl.send(:remove_const, :Easy)
24
+ Curl.send(:const_set, :Easy, OriginalCurlEasy)
25
+ end
26
+
27
+ # Borrowed from Patron:
28
+ # http://github.com/toland/patron/blob/master/lib/patron/response.rb
29
+ def self.parse_header_string(header_string)
30
+ status, headers = nil, {}
31
+
32
+ header_string.split(/\r\n/).each do |header|
33
+ if header =~ %r|^HTTP/1.[01] \d\d\d (.*)|
34
+ status = $1
35
+ else
36
+ parts = header.split(':', 2)
37
+ unless parts.empty?
38
+ parts[1].strip! unless parts[1].nil?
39
+ if headers.has_key?(parts[0])
40
+ headers[parts[0]] = [headers[parts[0]]] unless headers[parts[0]].kind_of? Array
41
+ headers[parts[0]] << parts[1]
42
+ else
43
+ headers[parts[0]] = parts[1]
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ return status, headers
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ module Curl
56
+ class WebMockCurlEasy < Curl::Easy
57
+ def curb_or_webmock
58
+
59
+ request_signature = build_request_signature
60
+ WebMock::RequestRegistry.instance.requested_signatures.put(request_signature)
61
+
62
+ if webmock_response = WebMock::StubRegistry.instance.response_for_request(request_signature)
63
+ build_curb_response(webmock_response)
64
+ WebMock::CallbackRegistry.invoke_callbacks(
65
+ {:lib => :curb}, request_signature, webmock_response)
66
+ invoke_curb_callbacks
67
+ true
68
+ elsif WebMock.net_connect_allowed?(request_signature.uri)
69
+ res = yield
70
+ if WebMock::CallbackRegistry.any_callbacks?
71
+ webmock_response = build_webmock_response
72
+ WebMock::CallbackRegistry.invoke_callbacks(
73
+ {:lib => :curb, :real_request => true}, request_signature,
74
+ webmock_response)
75
+ end
76
+ res
77
+ else
78
+ raise WebMock::NetConnectNotAllowedError.new(request_signature)
79
+ end
80
+ end
81
+
82
+ def build_request_signature
83
+ method = @webmock_method.to_s.downcase.to_sym
84
+
85
+ uri = WebMock::Util::URI.heuristic_parse(self.url)
86
+ uri.path = uri.normalized_path.gsub("[^:]//","/")
87
+ uri.user = self.username
88
+ uri.password = self.password
89
+
90
+ request_body = case method
91
+ when :post
92
+ self.post_body || @post_body
93
+ when :put
94
+ @put_data
95
+ else
96
+ nil
97
+ end
98
+
99
+ request_signature = WebMock::RequestSignature.new(
100
+ method,
101
+ uri.to_s,
102
+ :body => request_body,
103
+ :headers => self.headers
104
+ )
105
+ request_signature
106
+ end
107
+
108
+ def build_curb_response(webmock_response)
109
+ raise Curl::Err::TimeoutError if webmock_response.should_timeout
110
+ webmock_response.raise_error_if_any
111
+
112
+ @body_str = webmock_response.body
113
+ @response_code = webmock_response.status[0]
114
+
115
+ @header_str = "HTTP/1.1 #{webmock_response.status[0]} #{webmock_response.status[1]}\r\n"
116
+ if webmock_response.headers
117
+ @header_str << webmock_response.headers.map do |k,v|
118
+ "#{k}: #{v.is_a?(Array) ? v.join(", ") : v}"
119
+ end.join("\r\n")
120
+
121
+ location = webmock_response.headers['Location']
122
+ if self.follow_location? && location
123
+ @last_effective_url = location
124
+ webmock_follow_location(location)
125
+ end
126
+
127
+ @content_type = webmock_response.headers["Content-Type"]
128
+ end
129
+
130
+ @last_effective_url ||= self.url
131
+ end
132
+
133
+ def webmock_follow_location(location)
134
+ first_url = self.url
135
+ self.url = location
136
+
137
+ curb_or_webmock do
138
+ send( "http_#{@webmock_method}_without_webmock" )
139
+ end
140
+
141
+ self.url = first_url
142
+ end
143
+
144
+ def invoke_curb_callbacks
145
+ @on_progress.call(0.0,1.0,0.0,1.0) if @on_progress
146
+ @on_header.call(self.header_str) if @on_header
147
+ @on_body.call(self.body_str) if @on_body
148
+ @on_complete.call(self) if @on_complete
149
+
150
+ case response_code
151
+ when 200..299
152
+ @on_success.call(self) if @on_success
153
+ when 400..599
154
+ @on_failure.call(self, self.response_code) if @on_failure
155
+ end
156
+ end
157
+
158
+ def build_webmock_response
159
+ status, headers =
160
+ WebMock::HttpLibAdapters::CurbAdapter.parse_header_string(self.header_str)
161
+
162
+ webmock_response = WebMock::Response.new
163
+ webmock_response.status = [self.response_code, status]
164
+ webmock_response.body = self.body_str
165
+ webmock_response.headers = headers
166
+ webmock_response
167
+ end
168
+
169
+ ###
170
+ ### Mocks of Curl::Easy methods below here.
171
+ ###
172
+
173
+ def http_with_webmock(method)
174
+ @webmock_method = method
175
+ http_without_webmock(method)
176
+ end
177
+ alias_method :http_without_webmock, :http
178
+ alias_method :http, :http_with_webmock
179
+
180
+ %w[ get head delete ].each do |verb|
181
+ define_method "http_#{verb}_with_webmock" do
182
+ @webmock_method = verb
183
+ send( "http_#{verb}_without_webmock" )
184
+ end
185
+
186
+ alias_method "http_#{verb}_without_webmock", "http_#{verb}"
187
+ alias_method "http_#{verb}", "http_#{verb}_with_webmock"
188
+ end
189
+
190
+ def http_put_with_webmock data = nil
191
+ @webmock_method = :put
192
+ @put_data = data if data
193
+ http_put_without_webmock(data)
194
+ end
195
+ alias_method :http_put_without_webmock, :http_put
196
+ alias_method :http_put, :http_put_with_webmock
197
+
198
+ def http_post_with_webmock *data
199
+ @webmock_method = :post
200
+ @post_body = data.join('&') if data && !data.empty?
201
+ http_post_without_webmock(*data)
202
+ end
203
+ alias_method :http_post_without_webmock, :http_post
204
+ alias_method :http_post, :http_post_with_webmock
205
+
206
+
207
+ def perform_with_webmock
208
+ @webmock_method ||= :get
209
+ curb_or_webmock do
210
+ perform_without_webmock
211
+ end
212
+ end
213
+ alias :perform_without_webmock :perform
214
+ alias :perform :perform_with_webmock
215
+
216
+ def put_data_with_webmock= data
217
+ @webmock_method = :put
218
+ @put_data = data
219
+ self.put_data_without_webmock = data
220
+ end
221
+ alias_method :put_data_without_webmock=, :put_data=
222
+ alias_method :put_data=, :put_data_with_webmock=
223
+
224
+ def post_body_with_webmock= data
225
+ @webmock_method = :post
226
+ self.post_body_without_webmock = data
227
+ end
228
+ alias_method :post_body_without_webmock=, :post_body=
229
+ alias_method :post_body=, :post_body_with_webmock=
230
+
231
+ def delete_with_webmock= value
232
+ @webmock_method = :delete if value
233
+ self.delete_without_webmock = value
234
+ end
235
+ alias_method :delete_without_webmock=, :delete=
236
+ alias_method :delete=, :delete_with_webmock=
237
+
238
+ def head_with_webmock= value
239
+ @webmock_method = :head if value
240
+ self.head_without_webmock = value
241
+ end
242
+ alias_method :head_without_webmock=, :head=
243
+ alias_method :head=, :head_with_webmock=
244
+
245
+ def body_str_with_webmock
246
+ @body_str || body_str_without_webmock
247
+ end
248
+ alias :body_str_without_webmock :body_str
249
+ alias :body_str :body_str_with_webmock
250
+
251
+ def response_code_with_webmock
252
+ @response_code || response_code_without_webmock
253
+ end
254
+ alias :response_code_without_webmock :response_code
255
+ alias :response_code :response_code_with_webmock
256
+
257
+ def header_str_with_webmock
258
+ @header_str || header_str_without_webmock
259
+ end
260
+ alias :header_str_without_webmock :header_str
261
+ alias :header_str :header_str_with_webmock
262
+
263
+ def last_effective_url_with_webmock
264
+ @last_effective_url || last_effective_url_without_webmock
265
+ end
266
+ alias :last_effective_url_without_webmock :last_effective_url
267
+ alias :last_effective_url :last_effective_url_with_webmock
268
+
269
+ def content_type_with_webmock
270
+ @content_type || content_type_without_webmock
271
+ end
272
+ alias :content_type_without_webmock :content_type
273
+ alias :content_type :content_type_with_webmock
274
+
275
+ %w[ success failure header body complete progress ].each do |callback|
276
+ class_eval <<-METHOD, __FILE__, __LINE__
277
+ def on_#{callback}_with_webmock &block
278
+ @on_#{callback} = block
279
+ on_#{callback}_without_webmock &block
280
+ end
281
+ METHOD
282
+ alias_method "on_#{callback}_without_webmock", "on_#{callback}"
283
+ alias_method "on_#{callback}", "on_#{callback}_with_webmock"
284
+ end
285
+ end
286
+ end
287
+ end
@@ -0,0 +1,151 @@
1
+ if defined?(EventMachine::HttpRequest)
2
+ module WebMock
3
+ module HttpLibAdapters
4
+ class EmHttpRequestAdapter < HttpLibAdapter
5
+ adapter_for :em_http_request
6
+
7
+ OriginalHttpRequest = EventMachine::HttpRequest unless const_defined?(:OriginalHttpRequest)
8
+
9
+ def self.enable!
10
+ EventMachine.send(:remove_const, :HttpRequest)
11
+ EventMachine.send(:const_set, :HttpRequest, EventMachine::WebMockHttpRequest)
12
+ end
13
+
14
+ def self.disable!
15
+ EventMachine.send(:remove_const, :HttpRequest)
16
+ EventMachine.send(:const_set, :HttpRequest, OriginalHttpRequest)
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+
23
+ module EventMachine
24
+ class WebMockHttpRequest < EventMachine::HttpRequest
25
+
26
+ include HttpEncoding
27
+
28
+ class WebMockHttpClient < EventMachine::HttpClient
29
+
30
+ def setup(response, uri, error = nil)
31
+ @last_effective_url = @uri = uri
32
+ if error
33
+ on_error(error)
34
+ fail(self)
35
+ else
36
+ EM.next_tick do
37
+ receive_data(response)
38
+ succeed(self)
39
+ end
40
+ end
41
+ end
42
+
43
+ def unbind
44
+ end
45
+
46
+ def close_connection
47
+ end
48
+ end
49
+
50
+ def send_request_with_webmock(&block)
51
+ request_signature = build_request_signature
52
+
53
+ WebMock::RequestRegistry.instance.requested_signatures.put(request_signature)
54
+
55
+ if webmock_response = WebMock::StubRegistry.instance.response_for_request(request_signature)
56
+ WebMock::CallbackRegistry.invoke_callbacks(
57
+ {:lib => :em_http_request}, request_signature, webmock_response)
58
+ client = WebMockHttpClient.new(nil)
59
+ client.on_error("WebMock timeout error") if webmock_response.should_timeout
60
+ client.setup(make_raw_response(webmock_response), @uri,
61
+ webmock_response.should_timeout ? "WebMock timeout error" : nil)
62
+ client
63
+ elsif WebMock.net_connect_allowed?(request_signature.uri)
64
+ http = send_request_without_webmock(&block)
65
+ http.callback {
66
+ if WebMock::CallbackRegistry.any_callbacks?
67
+ webmock_response = build_webmock_response(http)
68
+ WebMock::CallbackRegistry.invoke_callbacks(
69
+ {:lib => :em_http_request, :real_request => true}, request_signature,
70
+ webmock_response)
71
+ end
72
+ }
73
+ http
74
+ else
75
+ raise WebMock::NetConnectNotAllowedError.new(request_signature)
76
+ end
77
+ end
78
+
79
+ alias_method :send_request_without_webmock, :send_request
80
+ alias_method :send_request, :send_request_with_webmock
81
+
82
+
83
+ private
84
+
85
+ def build_webmock_response(http)
86
+ webmock_response = WebMock::Response.new
87
+ webmock_response.status = [http.response_header.status, http.response_header.http_reason]
88
+ webmock_response.headers = http.response_header
89
+ webmock_response.body = http.response
90
+ webmock_response
91
+ end
92
+
93
+ def build_request_signature
94
+ if @req
95
+ options = @req.options
96
+ method = @req.method
97
+ uri = @req.uri
98
+ else
99
+ options = @options
100
+ method = @method
101
+ uri = @uri
102
+ end
103
+
104
+ if options[:authorization] || options['authorization']
105
+ auth = (options[:authorization] || options['authorization'])
106
+ userinfo = auth.join(':')
107
+ userinfo = WebMock::Util::URI.encode_unsafe_chars_in_userinfo(userinfo)
108
+ options.reject! {|k,v| k.to_s == 'authorization' } #we added it to url userinfo
109
+ uri.userinfo = userinfo
110
+ end
111
+
112
+ uri.query = encode_query(@req.uri, options[:query]).slice(/\?(.*)/, 1)
113
+
114
+ body = options[:body] || options['body']
115
+ body = form_encode_body(body) if body.is_a?(Hash)
116
+
117
+ WebMock::RequestSignature.new(
118
+ method.downcase.to_sym,
119
+ uri.to_s,
120
+ :body => body,
121
+ :headers => (options[:head] || options['head'])
122
+ )
123
+ end
124
+
125
+
126
+ def make_raw_response(response)
127
+ response.raise_error_if_any
128
+
129
+ status, headers, body = response.status, response.headers, response.body
130
+
131
+ response_string = []
132
+ response_string << "HTTP/1.1 #{status[0]} #{status[1]}"
133
+
134
+ headers.each do |header, value|
135
+ value = value.join(", ") if value.is_a?(Array)
136
+
137
+ # WebMock's internal processing will not handle the body
138
+ # correctly if the header indicates that it is chunked, unless
139
+ # we also create all the chunks.
140
+ # It's far easier just to remove the header.
141
+ next if header =~ /transfer-encoding/i && value =~/chunked/i
142
+
143
+ response_string << "#{header}: #{value}"
144
+ end if headers
145
+
146
+ response_string << "" << body
147
+ response_string.join("\n")
148
+ end
149
+ end
150
+ end
151
+ end