restfulie 1.0.0 → 1.0.3

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 (452) hide show
  1. data/.gitignore +20 -0
  2. data/.gitmodules +3 -0
  3. data/.rspec +2 -0
  4. data/Rakefile +9 -41
  5. data/full-examples/.gitignore +4 -0
  6. data/full-examples/README.textile +1 -0
  7. data/full-examples/mikemaze/README.textile +6 -0
  8. data/full-examples/mikemaze/maze_basic.rb +37 -0
  9. data/full-examples/mikemaze/maze_solver_spec.rb +108 -0
  10. data/full-examples/rest_from_scratch/part_1/.gitignore +4 -0
  11. data/full-examples/rest_from_scratch/part_1/.rspec +1 -0
  12. data/full-examples/rest_from_scratch/part_1/Gemfile +33 -0
  13. data/full-examples/rest_from_scratch/part_1/README +256 -0
  14. data/full-examples/rest_from_scratch/part_1/Rakefile +7 -0
  15. data/full-examples/rest_from_scratch/part_1/app/controllers/application_controller.rb +3 -0
  16. data/full-examples/rest_from_scratch/part_1/app/controllers/items_controller.rb +20 -0
  17. data/full-examples/rest_from_scratch/part_1/app/helpers/application_helper.rb +2 -0
  18. data/full-examples/rest_from_scratch/part_1/app/helpers/items_helper.rb +2 -0
  19. data/full-examples/rest_from_scratch/part_1/app/models/item.rb +2 -0
  20. data/full-examples/rest_from_scratch/part_1/app/views/items/_form.html.erb +25 -0
  21. data/full-examples/rest_from_scratch/part_1/app/views/items/edit.html.erb +6 -0
  22. data/full-examples/rest_from_scratch/part_1/app/views/items/index.html.erb +25 -0
  23. data/full-examples/rest_from_scratch/part_1/app/views/items/new.html.erb +5 -0
  24. data/full-examples/rest_from_scratch/part_1/app/views/items/show.html.erb +15 -0
  25. data/full-examples/rest_from_scratch/part_1/app/views/layouts/application.html.erb +14 -0
  26. data/full-examples/rest_from_scratch/part_1/autotest/discover.rb +1 -0
  27. data/full-examples/rest_from_scratch/part_1/config.ru +4 -0
  28. data/full-examples/rest_from_scratch/part_1/config/application.rb +42 -0
  29. data/full-examples/rest_from_scratch/part_1/config/boot.rb +13 -0
  30. data/full-examples/rest_from_scratch/part_1/config/database.yml +22 -0
  31. data/full-examples/rest_from_scratch/part_1/config/environment.rb +5 -0
  32. data/full-examples/rest_from_scratch/part_1/config/environments/development.rb +26 -0
  33. data/full-examples/rest_from_scratch/part_1/config/environments/production.rb +49 -0
  34. data/full-examples/rest_from_scratch/part_1/config/environments/test.rb +35 -0
  35. data/full-examples/rest_from_scratch/part_1/config/initializers/backtrace_silencers.rb +7 -0
  36. data/full-examples/rest_from_scratch/part_1/config/initializers/inflections.rb +10 -0
  37. data/full-examples/rest_from_scratch/part_1/config/initializers/mime_types.rb +5 -0
  38. data/full-examples/rest_from_scratch/part_1/config/initializers/secret_token.rb +7 -0
  39. data/full-examples/rest_from_scratch/part_1/config/initializers/session_store.rb +8 -0
  40. data/full-examples/rest_from_scratch/part_1/config/locales/en.yml +5 -0
  41. data/full-examples/rest_from_scratch/part_1/config/routes.rb +60 -0
  42. data/full-examples/rest_from_scratch/part_1/db/migrate/20100830171258_create_items.rb +14 -0
  43. data/full-examples/rest_from_scratch/part_1/db/schema.rb +22 -0
  44. data/full-examples/rest_from_scratch/part_1/db/seeds.rb +7 -0
  45. data/full-examples/rest_from_scratch/part_1/lib/tasks/.gitkeep +0 -0
  46. data/full-examples/rest_from_scratch/part_1/public/404.html +26 -0
  47. data/full-examples/rest_from_scratch/part_1/public/422.html +26 -0
  48. data/full-examples/rest_from_scratch/part_1/public/500.html +26 -0
  49. data/full-examples/rest_from_scratch/part_1/public/favicon.ico +0 -0
  50. data/full-examples/rest_from_scratch/part_1/public/images/rails.png +0 -0
  51. data/full-examples/rest_from_scratch/part_1/public/index.html +239 -0
  52. data/full-examples/rest_from_scratch/part_1/public/javascripts/application.js +2 -0
  53. data/full-examples/rest_from_scratch/part_1/public/javascripts/controls.js +965 -0
  54. data/full-examples/rest_from_scratch/part_1/public/javascripts/dragdrop.js +974 -0
  55. data/full-examples/rest_from_scratch/part_1/public/javascripts/effects.js +1123 -0
  56. data/full-examples/rest_from_scratch/part_1/public/javascripts/prototype.js +6001 -0
  57. data/full-examples/rest_from_scratch/part_1/public/javascripts/rails.js +175 -0
  58. data/full-examples/rest_from_scratch/part_1/public/robots.txt +5 -0
  59. data/full-examples/rest_from_scratch/part_1/public/stylesheets/.gitkeep +0 -0
  60. data/full-examples/rest_from_scratch/part_1/public/stylesheets/scaffold.css +56 -0
  61. data/full-examples/rest_from_scratch/part_1/script/rails +6 -0
  62. data/full-examples/rest_from_scratch/part_1/spec/items_spec.rb +31 -0
  63. data/full-examples/rest_from_scratch/part_1/spec/spec_helper.rb +27 -0
  64. data/full-examples/rest_from_scratch/part_1/test/fixtures/items.yml +9 -0
  65. data/full-examples/rest_from_scratch/part_1/test/functional/items_controller_test.rb +49 -0
  66. data/full-examples/rest_from_scratch/part_1/test/performance/browsing_test.rb +9 -0
  67. data/full-examples/rest_from_scratch/part_1/test/test_helper.rb +13 -0
  68. data/full-examples/rest_from_scratch/part_1/test/unit/helpers/items_helper_test.rb +4 -0
  69. data/full-examples/rest_from_scratch/part_1/test/unit/item_test.rb +8 -0
  70. data/full-examples/rest_from_scratch/part_1/vendor/plugins/.gitkeep +0 -0
  71. data/full-examples/rest_from_scratch/part_2/.gitignore +4 -0
  72. data/full-examples/rest_from_scratch/part_2/.rspec +1 -0
  73. data/full-examples/rest_from_scratch/part_2/Gemfile +34 -0
  74. data/full-examples/rest_from_scratch/part_2/README +256 -0
  75. data/full-examples/rest_from_scratch/part_2/Rakefile +7 -0
  76. data/full-examples/rest_from_scratch/part_2/app/controllers/application_controller.rb +3 -0
  77. data/full-examples/rest_from_scratch/part_2/app/controllers/baskets_controller.rb +25 -0
  78. data/full-examples/rest_from_scratch/part_2/app/controllers/items_controller.rb +20 -0
  79. data/full-examples/rest_from_scratch/part_2/app/controllers/payments_controller.rb +17 -0
  80. data/full-examples/rest_from_scratch/part_2/app/helpers/application_helper.rb +2 -0
  81. data/full-examples/rest_from_scratch/part_2/app/helpers/baskets_helper.rb +2 -0
  82. data/full-examples/rest_from_scratch/part_2/app/helpers/items_helper.rb +2 -0
  83. data/full-examples/rest_from_scratch/part_2/app/helpers/payments_helper.rb +2 -0
  84. data/full-examples/rest_from_scratch/part_2/app/models/basket.rb +11 -0
  85. data/full-examples/rest_from_scratch/part_2/app/models/item.rb +2 -0
  86. data/full-examples/rest_from_scratch/part_2/app/models/payment.rb +3 -0
  87. data/full-examples/rest_from_scratch/part_2/app/views/baskets/show.tokamak +9 -0
  88. data/full-examples/rest_from_scratch/part_2/app/views/items/_show.tokamak +6 -0
  89. data/full-examples/rest_from_scratch/part_2/app/views/items/index.tokamak +14 -0
  90. data/full-examples/rest_from_scratch/part_2/app/views/layouts/application.html.erb +14 -0
  91. data/full-examples/rest_from_scratch/part_2/autotest/discover.rb +1 -0
  92. data/full-examples/rest_from_scratch/part_2/config.ru +4 -0
  93. data/full-examples/rest_from_scratch/part_2/config/application.rb +42 -0
  94. data/full-examples/rest_from_scratch/part_2/config/boot.rb +13 -0
  95. data/full-examples/rest_from_scratch/part_2/config/database.yml +22 -0
  96. data/full-examples/rest_from_scratch/part_2/config/environment.rb +5 -0
  97. data/full-examples/rest_from_scratch/part_2/config/environments/development.rb +26 -0
  98. data/full-examples/rest_from_scratch/part_2/config/environments/production.rb +49 -0
  99. data/full-examples/rest_from_scratch/part_2/config/environments/test.rb +35 -0
  100. data/full-examples/rest_from_scratch/part_2/config/initializers/backtrace_silencers.rb +7 -0
  101. data/full-examples/rest_from_scratch/part_2/config/initializers/inflections.rb +10 -0
  102. data/full-examples/rest_from_scratch/part_2/config/initializers/mime_types.rb +5 -0
  103. data/full-examples/rest_from_scratch/part_2/config/initializers/secret_token.rb +7 -0
  104. data/full-examples/rest_from_scratch/part_2/config/initializers/session_store.rb +8 -0
  105. data/full-examples/rest_from_scratch/part_2/config/locales/en.yml +5 -0
  106. data/full-examples/rest_from_scratch/part_2/config/routes.rb +65 -0
  107. data/full-examples/rest_from_scratch/part_2/db/migrate/20100830171258_create_items.rb +16 -0
  108. data/full-examples/rest_from_scratch/part_2/db/migrate/20100830180139_create_baskets.rb +12 -0
  109. data/full-examples/rest_from_scratch/part_2/db/migrate/20100830180203_create_payments.rb +16 -0
  110. data/full-examples/rest_from_scratch/part_2/db/migrate/20100830185456_connect_baskets_to_items.rb +13 -0
  111. data/full-examples/rest_from_scratch/part_2/db/schema.rb +43 -0
  112. data/full-examples/rest_from_scratch/part_2/db/seeds.rb +7 -0
  113. data/full-examples/rest_from_scratch/part_2/lib/tasks/.gitkeep +0 -0
  114. data/full-examples/rest_from_scratch/part_2/public/404.html +26 -0
  115. data/full-examples/rest_from_scratch/part_2/public/422.html +26 -0
  116. data/full-examples/rest_from_scratch/part_2/public/500.html +26 -0
  117. data/full-examples/rest_from_scratch/part_2/public/favicon.ico +0 -0
  118. data/full-examples/rest_from_scratch/part_2/public/images/rails.png +0 -0
  119. data/full-examples/rest_from_scratch/part_2/public/index.html +239 -0
  120. data/full-examples/rest_from_scratch/part_2/public/javascripts/application.js +2 -0
  121. data/full-examples/rest_from_scratch/part_2/public/javascripts/controls.js +965 -0
  122. data/full-examples/rest_from_scratch/part_2/public/javascripts/dragdrop.js +974 -0
  123. data/full-examples/rest_from_scratch/part_2/public/javascripts/effects.js +1123 -0
  124. data/full-examples/rest_from_scratch/part_2/public/javascripts/prototype.js +6001 -0
  125. data/full-examples/rest_from_scratch/part_2/public/javascripts/rails.js +175 -0
  126. data/full-examples/rest_from_scratch/part_2/public/robots.txt +5 -0
  127. data/full-examples/rest_from_scratch/part_2/public/stylesheets/.gitkeep +0 -0
  128. data/full-examples/rest_from_scratch/part_2/public/stylesheets/scaffold.css +56 -0
  129. data/full-examples/rest_from_scratch/part_2/script/rails +6 -0
  130. data/full-examples/rest_from_scratch/part_2/spec/full_cycle_spec.rb +31 -0
  131. data/full-examples/rest_from_scratch/part_2/spec/items_spec.rb +31 -0
  132. data/full-examples/rest_from_scratch/part_2/spec/spec_helper.rb +27 -0
  133. data/full-examples/rest_from_scratch/part_2/test/fixtures/items.yml +9 -0
  134. data/full-examples/rest_from_scratch/part_2/test/functional/items_controller_test.rb +49 -0
  135. data/full-examples/rest_from_scratch/part_2/test/performance/browsing_test.rb +9 -0
  136. data/full-examples/rest_from_scratch/part_2/test/test_helper.rb +13 -0
  137. data/full-examples/rest_from_scratch/part_2/test/unit/helpers/items_helper_test.rb +4 -0
  138. data/full-examples/rest_from_scratch/part_2/test/unit/item_test.rb +8 -0
  139. data/full-examples/rest_from_scratch/part_2/vendor/plugins/.gitkeep +0 -0
  140. data/full-examples/rest_from_scratch/part_3/.gitignore +4 -0
  141. data/full-examples/rest_from_scratch/part_3/.rspec +1 -0
  142. data/full-examples/rest_from_scratch/part_3/Gemfile +33 -0
  143. data/full-examples/rest_from_scratch/part_3/README +256 -0
  144. data/full-examples/rest_from_scratch/part_3/Rakefile +7 -0
  145. data/full-examples/rest_from_scratch/part_3/app/controllers/application_controller.rb +3 -0
  146. data/full-examples/rest_from_scratch/part_3/app/controllers/baskets_controller.rb +34 -0
  147. data/full-examples/rest_from_scratch/part_3/app/controllers/items_controller.rb +20 -0
  148. data/full-examples/rest_from_scratch/part_3/app/controllers/payments_controller.rb +17 -0
  149. data/full-examples/rest_from_scratch/part_3/app/helpers/application_helper.rb +2 -0
  150. data/full-examples/rest_from_scratch/part_3/app/helpers/baskets_helper.rb +2 -0
  151. data/full-examples/rest_from_scratch/part_3/app/helpers/items_helper.rb +2 -0
  152. data/full-examples/rest_from_scratch/part_3/app/helpers/payments_helper.rb +2 -0
  153. data/full-examples/rest_from_scratch/part_3/app/models/basket.rb +11 -0
  154. data/full-examples/rest_from_scratch/part_3/app/models/item.rb +2 -0
  155. data/full-examples/rest_from_scratch/part_3/app/models/payment.rb +3 -0
  156. data/full-examples/rest_from_scratch/part_3/app/views/baskets/show.tokamak +9 -0
  157. data/full-examples/rest_from_scratch/part_3/app/views/items/_show.tokamak +6 -0
  158. data/full-examples/rest_from_scratch/part_3/app/views/items/index.tokamak +14 -0
  159. data/full-examples/rest_from_scratch/part_3/app/views/layouts/application.html.erb +14 -0
  160. data/full-examples/rest_from_scratch/part_3/autotest/discover.rb +1 -0
  161. data/full-examples/rest_from_scratch/part_3/config.ru +4 -0
  162. data/full-examples/rest_from_scratch/part_3/config/application.rb +42 -0
  163. data/full-examples/rest_from_scratch/part_3/config/boot.rb +13 -0
  164. data/full-examples/rest_from_scratch/part_3/config/database.yml +22 -0
  165. data/full-examples/rest_from_scratch/part_3/config/environment.rb +5 -0
  166. data/full-examples/rest_from_scratch/part_3/config/environments/development.rb +26 -0
  167. data/full-examples/rest_from_scratch/part_3/config/environments/production.rb +49 -0
  168. data/full-examples/rest_from_scratch/part_3/config/environments/test.rb +35 -0
  169. data/full-examples/rest_from_scratch/part_3/config/initializers/backtrace_silencers.rb +7 -0
  170. data/full-examples/rest_from_scratch/part_3/config/initializers/inflections.rb +10 -0
  171. data/full-examples/rest_from_scratch/part_3/config/initializers/mime_types.rb +5 -0
  172. data/full-examples/rest_from_scratch/part_3/config/initializers/secret_token.rb +7 -0
  173. data/full-examples/rest_from_scratch/part_3/config/initializers/session_store.rb +8 -0
  174. data/full-examples/rest_from_scratch/part_3/config/locales/en.yml +5 -0
  175. data/full-examples/rest_from_scratch/part_3/config/routes.rb +67 -0
  176. data/full-examples/rest_from_scratch/part_3/db/migrate/20100830171258_create_items.rb +16 -0
  177. data/full-examples/rest_from_scratch/part_3/db/migrate/20100830180139_create_baskets.rb +12 -0
  178. data/full-examples/rest_from_scratch/part_3/db/migrate/20100830180203_create_payments.rb +16 -0
  179. data/full-examples/rest_from_scratch/part_3/db/migrate/20100830185456_connect_baskets_to_items.rb +13 -0
  180. data/full-examples/rest_from_scratch/part_3/db/schema.rb +43 -0
  181. data/full-examples/rest_from_scratch/part_3/db/seeds.rb +7 -0
  182. data/full-examples/rest_from_scratch/part_3/lib/tasks/.gitkeep +0 -0
  183. data/full-examples/rest_from_scratch/part_3/public/404.html +26 -0
  184. data/full-examples/rest_from_scratch/part_3/public/422.html +26 -0
  185. data/full-examples/rest_from_scratch/part_3/public/500.html +26 -0
  186. data/full-examples/rest_from_scratch/part_3/public/favicon.ico +0 -0
  187. data/full-examples/rest_from_scratch/part_3/public/images/rails.png +0 -0
  188. data/full-examples/rest_from_scratch/part_3/public/index.html +239 -0
  189. data/full-examples/rest_from_scratch/part_3/public/javascripts/application.js +2 -0
  190. data/full-examples/rest_from_scratch/part_3/public/javascripts/controls.js +965 -0
  191. data/full-examples/rest_from_scratch/part_3/public/javascripts/dragdrop.js +974 -0
  192. data/full-examples/rest_from_scratch/part_3/public/javascripts/effects.js +1123 -0
  193. data/full-examples/rest_from_scratch/part_3/public/javascripts/prototype.js +6001 -0
  194. data/full-examples/rest_from_scratch/part_3/public/javascripts/rails.js +175 -0
  195. data/full-examples/rest_from_scratch/part_3/public/robots.txt +5 -0
  196. data/full-examples/rest_from_scratch/part_3/public/stylesheets/.gitkeep +0 -0
  197. data/full-examples/rest_from_scratch/part_3/public/stylesheets/scaffold.css +56 -0
  198. data/full-examples/rest_from_scratch/part_3/script/rails +6 -0
  199. data/full-examples/rest_from_scratch/part_3/spec/buying_process_spec.rb +24 -0
  200. data/full-examples/rest_from_scratch/part_3/spec/client/buying_process.rb +23 -0
  201. data/full-examples/rest_from_scratch/part_3/spec/client/scenarios/buying_process.scenario +15 -0
  202. data/full-examples/rest_from_scratch/part_3/spec/client/steps/buying_process.rb +56 -0
  203. data/full-examples/rest_from_scratch/part_3/spec/full_cycle_spec.rb +30 -0
  204. data/full-examples/rest_from_scratch/part_3/spec/items_spec.rb +31 -0
  205. data/full-examples/rest_from_scratch/part_3/spec/spec_helper.rb +27 -0
  206. data/full-examples/rest_from_scratch/part_3/test/fixtures/items.yml +9 -0
  207. data/full-examples/rest_from_scratch/part_3/test/functional/items_controller_test.rb +49 -0
  208. data/full-examples/rest_from_scratch/part_3/test/performance/browsing_test.rb +9 -0
  209. data/full-examples/rest_from_scratch/part_3/test/test_helper.rb +13 -0
  210. data/full-examples/rest_from_scratch/part_3/test/unit/helpers/items_helper_test.rb +4 -0
  211. data/full-examples/rest_from_scratch/part_3/test/unit/item_test.rb +8 -0
  212. data/full-examples/rest_from_scratch/part_3/vendor/plugins/.gitkeep +0 -0
  213. data/init.rb +1 -0
  214. data/lib/restfulie/client/README.textile +33 -0
  215. data/lib/restfulie/client/feature/fake_response.rb +13 -0
  216. data/lib/restfulie/client/feature/follow_request.rb +29 -11
  217. data/lib/restfulie/client/feature/{throw_error.rb → throw_error_request.rb} +3 -2
  218. data/lib/restfulie/client/feature/verb.rb +12 -19
  219. data/lib/restfulie/common.rb +1 -1
  220. data/lib/restfulie/server.rb +1 -1
  221. data/lib/restfulie/server/action_controller/base.rb +0 -2
  222. data/lib/restfulie/server/action_controller/restful_responder.rb +2 -2
  223. data/lib/restfulie/server/action_controller/trait/cacheable.rb +22 -9
  224. data/lib/restfulie/server/hypertemplate.rb +3 -0
  225. data/lib/restfulie/version.rb +2 -2
  226. data/restfulie.gemspec +42 -0
  227. data/script/console +8 -0
  228. data/site/README +1 -0
  229. data/site/Rakefile +10 -0
  230. data/site/app/controllers/application_controller.rb +11 -0
  231. data/site/app/controllers/java_controller.rb +53 -0
  232. data/site/app/controllers/javascript_controller.rb +12 -0
  233. data/site/app/controllers/restful_csharp_controller.rb +12 -0
  234. data/site/app/controllers/ruby_controller.rb +24 -0
  235. data/site/app/controllers/systems_controller.rb +14 -0
  236. data/site/app/helpers/application_helper.rb +10 -0
  237. data/site/app/helpers/documentation_helper.rb +2 -0
  238. data/site/app/views/java/features.html.erb +99 -0
  239. data/site/app/views/java/hypermedia.html.erb +97 -0
  240. data/site/app/views/java/server.html.erb +0 -0
  241. data/site/app/views/layouts/_blackmenu.html.erb +11 -0
  242. data/site/app/views/layouts/_uppermenu.html.erb +24 -0
  243. data/site/app/views/layouts/application.html.erb +50 -0
  244. data/site/app/views/layouts/java.html.erb +72 -0
  245. data/site/app/views/layouts/javascript.html.erb +62 -0
  246. data/site/app/views/layouts/restful_csharp.html.erb +81 -0
  247. data/site/app/views/layouts/restful_java.html.erb +87 -0
  248. data/site/app/views/shared/_examples.html.erb +29 -0
  249. data/site/app/views/shared/_negotiation.html.erb +9 -0
  250. data/site/app/views/shared/_simple_representation.html.erb +37 -0
  251. data/site/app/views/systems/features.html.erb +106 -0
  252. data/site/app/views/systems/index.html.erb +97 -0
  253. data/site/app/views/systems/support.html.erb +54 -0
  254. data/site/config/boot.rb +110 -0
  255. data/site/config/database.yml +22 -0
  256. data/site/config/environments/development.rb +17 -0
  257. data/site/config/environments/production.rb +28 -0
  258. data/site/config/environments/test.rb +28 -0
  259. data/site/config/initializers/backtrace_silencers.rb +7 -0
  260. data/site/config/initializers/inflections.rb +10 -0
  261. data/site/config/initializers/mime_types.rb +5 -0
  262. data/site/config/initializers/new_rails_defaults.rb +21 -0
  263. data/site/config/initializers/session_store.rb +15 -0
  264. data/site/config/locales/en.yml +5 -0
  265. data/site/config/routes.rb +56 -0
  266. data/site/db/seeds.rb +7 -0
  267. data/site/public/404.html +30 -0
  268. data/site/public/422.html +30 -0
  269. data/site/public/500.html +30 -0
  270. data/site/public/caelumobjects-restful-rails.pdf +0 -0
  271. data/site/public/docs.html +164 -0
  272. data/site/public/favicon.ico +0 -0
  273. data/site/public/images/bgBarHome-trans.png +0 -0
  274. data/site/public/images/bgHeader.png +0 -0
  275. data/site/public/images/bgSubMenu-trans.png +0 -0
  276. data/site/public/images/code_java_01.png +0 -0
  277. data/site/public/images/code_java_02.png +0 -0
  278. data/site/public/images/code_net_01.png +0 -0
  279. data/site/public/images/code_net_02.png +0 -0
  280. data/site/public/images/code_ruby_01.png +0 -0
  281. data/site/public/images/code_ruby_02.png +0 -0
  282. data/site/public/images/dependency.png +0 -0
  283. data/site/public/images/ldl-trans.png +0 -0
  284. data/site/public/images/leftBGBtn.png +0 -0
  285. data/site/public/images/logoCaelumGray-trans.png +0 -0
  286. data/site/public/images/negotiation.png +0 -0
  287. data/site/public/images/rails.png +0 -0
  288. data/site/public/images/restfulieSprites-trans.png +0 -0
  289. data/site/public/images/rightBGBtn.png +0 -0
  290. data/site/public/images/service.png +0 -0
  291. data/site/public/images/subMenuBottom-trans.png +0 -0
  292. data/site/public/images/subMenuTop-trans.png +0 -0
  293. data/site/public/javascripts/application.js +2 -0
  294. data/site/public/javascripts/controls.js +963 -0
  295. data/site/public/javascripts/dragdrop.js +973 -0
  296. data/site/public/javascripts/effects.js +1128 -0
  297. data/site/public/javascripts/prototype.js +4320 -0
  298. data/site/public/robots.txt +5 -0
  299. data/site/public/stylesheets/menu.css +98 -0
  300. data/site/public/stylesheets/screen.css +345 -0
  301. data/site/public/stylesheets/uppermenu.css +87 -0
  302. data/site/script/about +4 -0
  303. data/site/script/console +3 -0
  304. data/site/script/dbconsole +3 -0
  305. data/site/script/destroy +3 -0
  306. data/site/script/generate +3 -0
  307. data/site/script/performance/benchmarker +3 -0
  308. data/site/script/performance/profiler +3 -0
  309. data/site/script/plugin +3 -0
  310. data/site/script/runner +3 -0
  311. data/site/script/server +3 -0
  312. data/site/test/functional/documentation_controller_test.rb +8 -0
  313. data/site/test/performance/browsing_test.rb +9 -0
  314. data/site/test/test_helper.rb +38 -0
  315. data/site/test/unit/helpers/documentation_helper_test.rb +4 -0
  316. data/spec/integration/twitter.rb +945 -0
  317. data/spec/integration/twitter_spec.rb +24 -0
  318. data/spec/spec_helper.rb +4 -0
  319. data/spec/unit/client/base_spec.rb +9 -0
  320. data/spec/unit/client/cache/fake_spec.rb +23 -0
  321. data/spec/unit/client/cache/http_ext_spec.rb +182 -0
  322. data/spec/unit/client/cache/restrictions_spec.rb +24 -0
  323. data/spec/unit/client/configuration_spec.rb +54 -0
  324. data/spec/unit/client/ext/open_search_spec.rb +28 -0
  325. data/spec/unit/client/feature/conneg_when_unaccepted_spec.rb +45 -0
  326. data/spec/unit/client/feature/open_search/pattern_matcher_spec.rb +21 -0
  327. data/spec/unit/client/feature/rescue_exception_spec.rb +27 -0
  328. data/spec/unit/client/feature/retry_when_unavailable_spec.rb +38 -0
  329. data/spec/unit/client/feature/verb_spec.rb +37 -0
  330. data/spec/unit/client/http/link_header_spec.rb +43 -0
  331. data/spec/unit/client/mikyung/concatenator_spec.rb +14 -0
  332. data/spec/unit/client/mikyung/rest_process_model_spec.rb +140 -0
  333. data/spec/unit/client/mikyung/steady_state_walker_spec.rb +39 -0
  334. data/spec/unit/client/mikyung/then_condition_spec.rb +38 -0
  335. data/spec/unit/client/mikyung/when_condition_spec.rb +59 -0
  336. data/spec/unit/client/mikyung_spec.rb +72 -0
  337. data/spec/unit/client/stack_navigator.rb +75 -0
  338. data/spec/unit/common/errors_spec.rb +33 -0
  339. data/spec/unit/restfulie_spec.rb +30 -0
  340. data/spec/unit/server/action_controller/trait/cacheable_spec.rb +48 -0
  341. data/spec/unit/server/action_controller/trait/created_spec.rb +50 -0
  342. data/spec/unit/server/configuration_spec.rb +36 -0
  343. data/spec/unit/server/core_ext/array_spec.rb +35 -0
  344. data/spec/unit/server/restfulie_controller_spec.rb +110 -0
  345. data/spec/unit/spec_helper.rb +1 -0
  346. data/tests/.gitignore +5 -0
  347. data/tests/.rspec +1 -0
  348. data/tests/Gemfile +42 -0
  349. data/tests/README +256 -0
  350. data/tests/Rakefile +7 -0
  351. data/tests/app/controllers/albums_controller.rb +10 -0
  352. data/tests/app/controllers/application_controller.rb +3 -0
  353. data/tests/app/controllers/artists_controller.rb +12 -0
  354. data/tests/app/controllers/cacheable_songs_controller.rb +28 -0
  355. data/tests/app/controllers/projects_controller.rb +13 -0
  356. data/tests/app/controllers/render_controller.rb +15 -0
  357. data/tests/app/controllers/songs_controller.rb +2 -0
  358. data/tests/app/helpers/albums_helper.rb +2 -0
  359. data/tests/app/helpers/application_helper.rb +2 -0
  360. data/tests/app/helpers/artists_helper.rb +2 -0
  361. data/tests/app/helpers/cacheable_clients_helper.rb +2 -0
  362. data/tests/app/helpers/projects_helper.rb +2 -0
  363. data/tests/app/helpers/render_helper.rb +2 -0
  364. data/tests/app/helpers/songs_helper.rb +2 -0
  365. data/tests/app/models/album.rb +4 -0
  366. data/tests/app/models/artist.rb +2 -0
  367. data/tests/app/models/song.rb +3 -0
  368. data/tests/app/views/albums/_member.tokamak +11 -0
  369. data/tests/app/views/albums/index.tokamak +26 -0
  370. data/tests/app/views/albums/show.tokamak +3 -0
  371. data/tests/app/views/artists/_form.html.erb +25 -0
  372. data/tests/app/views/artists/edit.html.erb +6 -0
  373. data/tests/app/views/artists/index.html.erb +25 -0
  374. data/tests/app/views/artists/new.html.erb +5 -0
  375. data/tests/app/views/artists/show.html.erb +15 -0
  376. data/tests/app/views/cacheable_clients/collection.tokamak +0 -0
  377. data/tests/app/views/cacheable_clients/empty.tokamak +0 -0
  378. data/tests/app/views/cacheable_clients/single.tokamak +0 -0
  379. data/tests/app/views/layouts/application.html.erb +14 -0
  380. data/tests/app/views/projects/index.atom.tokamak +14 -0
  381. data/tests/app/views/projects/new.atom.tokamak +7 -0
  382. data/tests/app/views/projects/new.tokamak +0 -0
  383. data/tests/app/views/projects/show.tokamak +7 -0
  384. data/tests/autotest/discover.rb +2 -0
  385. data/tests/config.ru +4 -0
  386. data/tests/config/application.rb +42 -0
  387. data/tests/config/boot.rb +13 -0
  388. data/tests/config/database.yml +22 -0
  389. data/tests/config/environment.rb +5 -0
  390. data/tests/config/environments/development.rb +22 -0
  391. data/tests/config/environments/production.rb +49 -0
  392. data/tests/config/environments/test.rb +35 -0
  393. data/tests/config/initializers/backtrace_silencers.rb +7 -0
  394. data/tests/config/initializers/inflections.rb +10 -0
  395. data/tests/config/initializers/mime_types.rb +5 -0
  396. data/tests/config/initializers/secret_token.rb +7 -0
  397. data/tests/config/initializers/session_store.rb +8 -0
  398. data/tests/config/locales/en.yml +5 -0
  399. data/tests/config/routes.rb +66 -0
  400. data/tests/db/migrate/20100817165415_create_albums.rb +15 -0
  401. data/tests/db/migrate/20100817165436_create_songs.rb +16 -0
  402. data/tests/db/migrate/20100819165238_create_artists.rb +14 -0
  403. data/tests/db/schema.rb +39 -0
  404. data/tests/db/seeds.rb +7 -0
  405. data/tests/lib/tasks/.gitkeep +0 -0
  406. data/tests/public/404.html +26 -0
  407. data/tests/public/422.html +26 -0
  408. data/tests/public/500.html +26 -0
  409. data/tests/public/favicon.ico +0 -0
  410. data/tests/public/images/rails.png +0 -0
  411. data/tests/public/index.html +262 -0
  412. data/tests/public/javascripts/application.js +2 -0
  413. data/tests/public/javascripts/controls.js +965 -0
  414. data/tests/public/javascripts/dragdrop.js +974 -0
  415. data/tests/public/javascripts/effects.js +1123 -0
  416. data/tests/public/javascripts/prototype.js +6001 -0
  417. data/tests/public/javascripts/rails.js +175 -0
  418. data/tests/public/robots.txt +5 -0
  419. data/tests/public/stylesheets/.gitkeep +0 -0
  420. data/tests/public/stylesheets/scaffold.css +56 -0
  421. data/tests/script/rails +6 -0
  422. data/tests/spec/controllers/integration/albums_controller_spec.rb +60 -0
  423. data/tests/spec/controllers/integration/cacheable_songs_controller_spec.rb +43 -0
  424. data/tests/spec/controllers/integration/controller_base_spec.rb +35 -0
  425. data/tests/spec/controllers/integration/created_responder_spec.rb +35 -0
  426. data/tests/spec/controllers/integration/params_parser_spec.rb +150 -0
  427. data/tests/spec/controllers/integration/projects_controller_spec.rb +30 -0
  428. data/tests/spec/requests/_integration_client.txt +1 -0
  429. data/tests/spec/requests/base_spec.rb2 +142 -0
  430. data/tests/spec/requests/fake_server.rb +107 -0
  431. data/tests/spec/requests/http/adapter_spec.rb +105 -0
  432. data/tests/spec/requests/http/content_type_spec.rb +88 -0
  433. data/tests/spec/requests/http/errors_spec.rb +130 -0
  434. data/tests/spec/requests/http/history_spec.rb +56 -0
  435. data/tests/spec/requests/http/marshal_spec.rb2 +113 -0
  436. data/tests/spec/requests/http/parameters_spec.rb +12 -0
  437. data/tests/spec/spec.opts +5 -0
  438. data/tests/spec/spec_helper.rb +61 -0
  439. data/tests/spec/support/atoms/full.rb.txt +63 -0
  440. data/tests/spec/support/atoms/related_songs +30 -0
  441. data/tests/spec/support/atoms/song_1 +11 -0
  442. data/tests/spec/support/atoms/song_2 +11 -0
  443. data/tests/spec/support/atoms/song_3 +11 -0
  444. data/tests/spec/support/atoms/song_4 +11 -0
  445. data/tests/spec/support/atoms/songs +51 -0
  446. data/tests/spec/support/atoms/songs_top_ten +27 -0
  447. data/tests/spec/support/data_helper.rb +13 -0
  448. data/tests/test/performance/browsing_test.rb +9 -0
  449. data/tests/test/test_helper.rb +13 -0
  450. data/tests/vendor/plugins/.gitkeep +0 -0
  451. metadata +534 -97
  452. data/lib/restfulie/server/tokamak.rb +0 -6
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+ require 'fakeweb'
3
+
4
+ require File.dirname(__FILE__) + '/twitter'
5
+
6
+ describe Restfulie do
7
+
8
+ TWITTER_ENTRY_POINT = "http://twitter.com/statuses/public_timeline.xml"
9
+
10
+ before do
11
+ FakeWeb.allow_net_connect = false
12
+ FakeWeb.register_uri(:get, TWITTER_ENTRY_POINT, :response => Responses::Twitter.public_timeline)
13
+ end
14
+
15
+ it "should work with twitter" do
16
+ twitter = Restfulie.at(TWITTER_ENTRY_POINT).get
17
+ twitter.resource.statuses[0].user.screen_name.should == "fionnaps"
18
+ end
19
+
20
+ after do
21
+ FakeWeb.allow_net_connect = true
22
+ end
23
+
24
+ end
@@ -0,0 +1,4 @@
1
+ require 'rspec'
2
+
3
+ require 'restfulie'
4
+ require 'ruby-debug'
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Restfulie do
4
+
5
+ it "should re-initiate entire request context when invoking Restfulie.at" do
6
+ Restfulie.at('http://guilhermesilveira.wordpress.com/').should_not == (Restfulie.at('http://guilhermesilveira.wordpress.com/'))
7
+ end
8
+
9
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe Restfulie::Client::Cache::Fake do
4
+
5
+ it "should always retrieve nil, even if it was put" do
6
+ req = Object.new
7
+ url = Object.new
8
+ response = mock Net::HTTPResponse
9
+ cache = Restfulie::Client::Cache::Fake.new
10
+ cache.put(url, req, response)
11
+ cache.get(url, req).should be_nil
12
+ end
13
+
14
+ it "putting should return the response" do
15
+ req = Object.new
16
+ url = Object.new
17
+ response = mock Net::HTTPResponse
18
+ cache = Restfulie::Client::Cache::Fake.new
19
+ cache.put(url, req, response).should == response
20
+ end
21
+
22
+ end
23
+
@@ -0,0 +1,182 @@
1
+ require 'spec_helper'
2
+
3
+ class HashResponse
4
+ include Restfulie::Client::HTTP::ResponseStatus
5
+ attr_accessor :code
6
+ end
7
+
8
+ describe Restfulie::Client::HTTP::ResponseStatus do
9
+
10
+ def check_complies_with(from, to, method)
11
+ o = HashResponse.new
12
+ (from..to).each do |code|
13
+ o.code = code
14
+ o.send(method).should be_true
15
+ end
16
+ [from-1,to+1].each do |code|
17
+ o.code = code
18
+ o.send(method).should be_false
19
+ end
20
+ end
21
+
22
+ it "should return successful for 200~299" do
23
+ check_complies_with(200, 299, :is_successful?)
24
+ end
25
+
26
+ it "should return informational for 100~199" do
27
+ check_complies_with(100, 199, :is_informational?)
28
+ end
29
+
30
+ it "should return redirection for 300~399" do
31
+ check_complies_with(300, 399, :is_redirection?)
32
+ end
33
+
34
+ it "should return redirection for 400~499" do
35
+ check_complies_with(400, 499, :is_client_error?)
36
+ end
37
+
38
+ it "should return redirection for 500~599" do
39
+ check_complies_with(500, 599, :is_server_error?)
40
+ end
41
+
42
+ end
43
+
44
+ describe Restfulie::Client::HTTP::ResponseStatus do
45
+
46
+ before do
47
+ @response = mock Net::HTTPResponse
48
+ @response.stub(:verb).and_return(:get)
49
+ @response.extend Restfulie::Client::HTTP::ResponseCacheCheck
50
+ end
51
+
52
+ context "while retrieving cache information" do
53
+
54
+ it "should invoke may_ache_field with cache control" do
55
+ response = Object.new
56
+ controls = [:cache_headers]
57
+ @response.should_receive(:headers).and_return('cache-control' => controls)
58
+ @response.should_receive(:may_cache_field?).with(controls).and_return(response)
59
+ @response.may_cache?.should == response
60
+ end
61
+
62
+ it "should not cache if Cache-Control is not available" do
63
+ @response.may_cache_field?(nil).should be_false
64
+ end
65
+
66
+ it "should not cache if Cache-Control's max-age is not available" do
67
+ @response.may_cache_field?('s-maxage=100000').should be_false
68
+ end
69
+
70
+ it "should cache if finds max-age" do
71
+ @response.may_cache_field?('max-age=100000, please-store').should be_true
72
+ end
73
+
74
+ it "should not cache if Cache-Control's no-store is set" do
75
+ @response.may_cache_field?('max-age=100000, no-store').should be_false
76
+ end
77
+
78
+ it "should use all headers if received more than one header" do
79
+ @response.may_cache_field?(['max-age=100000', 'no-store']).should be_false
80
+ end
81
+
82
+ it "should extract max-age from start" do
83
+ @response.value_for('max-age=100', /^max-age=(\d+)/).should == "max-age=100"
84
+ end
85
+
86
+ it "should extract max-age from the middle" do
87
+ @response.value_for('a=b,max-age=100', /^max-age=(\d+)/).should == "max-age=100"
88
+ end
89
+
90
+ it "should extract max-age from the middle even with whitespace" do
91
+ @response.value_for('a=b, max-age=100', /^max-age=(\d+)/).should == " max-age=100"
92
+ end
93
+
94
+ it "should return nil if not found" do
95
+ @response.value_for('a=b,s-max-age=100', /^max-age=(\d+)/).should be_nil
96
+ end
97
+ end
98
+
99
+ context "when retrieving caching values" do
100
+
101
+ it "should return 0 if the header value is not present" do
102
+ @response.should_receive(:header_value_from).with('cache-control', /^\s*max-age=(\d+)/).and_return(nil)
103
+ @response.cache_max_age.should == 0
104
+ end
105
+
106
+ it "should return the parsed value if the header value is not present" do
107
+ @response.should_receive(:header_value_from).with('cache-control', /^\s*max-age=(\d+)/).and_return("57")
108
+ @response.cache_max_age.should == 57
109
+ end
110
+
111
+ it "should return nothing if the header is not there" do
112
+ field = Object.new
113
+ @response.should_receive(:headers).and_return('header' => field)
114
+ @response.should_receive(:value_for).with(field, 'expression').and_return(nil)
115
+ @response.header_value_from('header','expression').should be_nil
116
+ end
117
+
118
+ it "should return the matching expression when extracting the header value" do
119
+ field = Object.new
120
+ @response.should_receive(:headers).and_return('header' => field)
121
+ @response.should_receive(:value_for).with(field, /as(df)/).and_return("asdf")
122
+ @response.header_value_from('header', /as(df)/).should == "df"
123
+ end
124
+
125
+ end
126
+
127
+ context "when retrieving caching values" do
128
+ it "should expire the response if there is no date" do
129
+ @response.should_receive(:headers).and_return('date' => nil)
130
+ @response.should be_has_expired_cache
131
+ end
132
+
133
+ it "should expire the response if its in the past with" do
134
+ Time.should_receive(:now).and_return(201)
135
+ Time.should_receive(:rfc2822).and_return(100)
136
+ @response.should_receive(:cache_max_age).and_return(100)
137
+ @response.stub(:headers).and_return('date' => [Object.new])
138
+ @response.has_expired_cache?.should be_true
139
+ end
140
+
141
+ it "should expire the response if its in the future with" do
142
+ Time.should_receive(:now).and_return(199)
143
+ Time.should_receive(:rfc2822).and_return(100)
144
+ @response.should_receive(:cache_max_age).and_return(100)
145
+ @response.stub(:headers).and_return('date' => [Object.new])
146
+ @response.has_expired_cache?.should be_false
147
+ end
148
+
149
+ end
150
+
151
+ context "when checking response variants" do
152
+
153
+ before do
154
+ @request = mock Net::HTTPResponse
155
+ @request.extend Restfulie::Client::HTTP::ResponseCacheCheck
156
+ end
157
+
158
+ it "should answer with the header from the request matching vary header" do
159
+ @response.stub(:headers).and_return('vary' => 'accept')
160
+ @request.stub(:[]).with('accept').and_return('application/xml')
161
+ @response.vary_headers_for(@request).should == ['application/xml']
162
+ end
163
+
164
+ it "should answer with all headers from the request matching vary header" do
165
+ @response.stub(:headers).and_return('vary' => 'accept, accept-language')
166
+ @request.stub(:[]).with('accept').and_return('application/xml')
167
+ @request.stub(:[]).with('accept-language').and_return('de')
168
+ @response.vary_headers_for(@request).should == ['application/xml', 'de']
169
+ end
170
+
171
+ it "should answer with nil from the request matching vary header when non-existent" do
172
+ @response.stub(:headers).and_return('vary' => 'accept, accept-language')
173
+ @response.stub(:[]).with('vary').and_return('accept, accept-language')
174
+ @request.stub(:[]).with('accept').and_return(nil)
175
+ @request.stub(:[]).with('accept-language').and_return('de')
176
+ @response.vary_headers_for(@request).should == [nil, 'de']
177
+ end
178
+
179
+
180
+ end
181
+
182
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Restfulie::Client::Cache::Restrictions do
4
+
5
+ it "should cache if the response may be cached" do
6
+ request = Object.new
7
+ response = mock(Net::HTTPResponse)
8
+ response.should_receive(:may_cache?).and_return true
9
+
10
+ Restfulie::Client::Cache::Restrictions.may_cache?(response).should be_true
11
+ end
12
+
13
+ it "should not cache if the response may not be cached" do
14
+ request = Object.new
15
+ response = mock(Net::HTTPResponse)
16
+ response.should_receive(:may_cache?).and_return false
17
+
18
+ Restfulie::Client::Cache::Restrictions.may_cache?(response).should be_false
19
+ end
20
+
21
+ it "should not cache for nil" do
22
+ Restfulie::Client::Cache::Restrictions.may_cache?(nil).should be_false
23
+ end
24
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ module Restfulie::Client::Configuration::Test
4
+ class XmlRepresentation; end
5
+ end
6
+
7
+ describe Restfulie::Client::Configuration do
8
+
9
+ let(:configuration) { Restfulie::Client::Configuration.new }
10
+
11
+ it "should be development as default environment" do
12
+ configuration.environment.should equal :development
13
+ end
14
+
15
+ it "should be a empty string as default entry point" do
16
+ configuration.entry_point.should eql ''
17
+ end
18
+
19
+ it "should be a empty hash as default representations" do
20
+ configuration.representations.should == {}
21
+ end
22
+
23
+ it "should allow to set the test environment" do
24
+ configuration.environment = :test
25
+ configuration.environment.should equal :test
26
+ end
27
+
28
+ it "should allow a xml representation" do
29
+ configuration.representations['application/xml'] = Restfulie::Client::Configuration::Test::XmlRepresentation
30
+ configuration.representations['application/xml'].should == Restfulie::Client::Configuration::Test::XmlRepresentation
31
+ end
32
+
33
+ it 'should allow change values for many environments' do
34
+ configuration.entry_point = "http://foo.com/bar"
35
+ configuration.entry_point.should == 'http://foo.com/bar'
36
+
37
+ configuration.environment = :test
38
+
39
+ configuration.entry_point.should be_empty
40
+ configuration.representations.should be_empty
41
+
42
+ configuration.entry_point = "http://bar.com/foo"
43
+
44
+ configuration.representations['application/xml'] = Restfulie::Client::Configuration::Test::XmlRepresentation
45
+
46
+ configuration.environment = :development
47
+ configuration.entry_point.should == 'http://foo.com/bar'
48
+
49
+ configuration.environment = :test
50
+ configuration.entry_point.should == 'http://bar.com/foo'
51
+ end
52
+
53
+ end
54
+
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+ require 'medie'
3
+
4
+ describe Medie::OpenSearch::Descriptor do
5
+
6
+ context "unmarshalling one url documents" do
7
+
8
+ before do
9
+ xml = '<?xml version="1.0" encoding="UTF-8"?>
10
+ <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
11
+ <ShortName>Restbuy</ShortName>
12
+ <Description>Restbuy search engine.</Description>
13
+ <Tags>restbuy</Tags>
14
+ <Contact>admin@restbuy.com</Contact>
15
+ <Url type="application/atom+xml" template="http://localhost:3000/products?q={searchTerms}&amp;pw={startPage?}&amp;format=atom" />
16
+ </OpenSearchDescription>'
17
+ @descriptor = Medie::OpenSearch::Driver.new.unmarshal(xml)
18
+ end
19
+
20
+ it "should unmarshall opensearch xml descriptions" do
21
+ @descriptor.use("application/atom+xml").host.should == URI.parse("http://localhost:3000/products")
22
+ @descriptor.use("application/atom+xml").params_pattern.should == "q={searchTerms}&pw={startPage?}&format=atom"
23
+ @descriptor.use("application/atom+xml").headers["Accept"].should == "application/atom+xml"
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe Restfulie::Client::Feature::ConnegWhenUnaccepted do
4
+
5
+ before do
6
+ @feature = Restfulie::Client::Feature::ConnegWhenUnaccepted.new
7
+ @response = mock Net::HTTPResponse
8
+ @response.stub("headers").and_return("Accept"=>["application/xml"])
9
+ @request = Object.new
10
+ @chain = mock Restfulie::Client::StackNavigator
11
+ @chain.should_receive(:continue).and_return(@response)
12
+ end
13
+
14
+ context "when executing a request" do
15
+
16
+ it "should not retry execution by default if response code is not 406" do
17
+ @response.stub(:code).and_return(404)
18
+ @feature.execute(@chain, @request, {}).should == @response
19
+ end
20
+
21
+ it "should not retry execution if there is no content type agreed on" do
22
+ @response.stub(:code).and_return(406)
23
+ Medie.registry.should_receive(:for).with(["application/xml"]).and_return(nil)
24
+ @feature.execute(@chain, @request, {}).should == @response
25
+ end
26
+
27
+ it "should retry execution by default if response code is 503" do
28
+ env = {:payload => "my payload"}
29
+
30
+ @response.stub(:code).and_return(406)
31
+ Medie.registry.should_receive(:for).with(["application/xml"]).and_return("application/xml")
32
+
33
+ @request.should_receive(:with).with("Content-type", "application/xml")
34
+ following = Object.new
35
+ Restfulie::Client::Feature::SerializeBody.should_receive(:new).and_return(following)
36
+
37
+ second_response = mock Net::HTTPResponse
38
+ following.should_receive(:execute).with(@chain, @request, env.dup.merge(:body => env[:payload])).and_return(second_response)
39
+
40
+ @feature.execute(@chain, @request, env).should == second_response
41
+ end
42
+
43
+ end
44
+
45
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Restfulie::Client::Feature::OpenSearch::PatternMatcher do
4
+
5
+ context "matching patterns" do
6
+
7
+ it "should unmarshall opensearch xml descriptions" do
8
+ pattern = "q={searchTerms}&amp;pw={startPage?}&amp;format=atom"
9
+ matcher = Restfulie::Client::Feature::OpenSearch::PatternMatcher.new
10
+ matcher.match({:searchTerms => 12, :startPage => 13},pattern).should == "q=12&amp;pw=13&amp;format=atom"
11
+ end
12
+
13
+ it "should reset optional patterns" do
14
+ pattern = "q={searchTerms}&amp;pw={startPage?}&amp;format=atom"
15
+ matcher = Restfulie::Client::Feature::OpenSearch::PatternMatcher.new
16
+ matcher.match({:searchTerms => 12},pattern).should == "q=12&amp;pw=&amp;format=atom"
17
+ end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe Restfulie::Client::Feature::RescueException do
4
+
5
+ before do
6
+ @feature = Restfulie::Client::Feature::RescueException.new
7
+ @request = Object.new
8
+ @chain = mock Restfulie::Client::StackNavigator
9
+ end
10
+
11
+ context "when executing a request" do
12
+
13
+ it "should return an exception if something bad occurs" do
14
+ exception = mock Exception
15
+ @chain.should_receive(:continue).and_raise(exception)
16
+ @feature.execute(@chain, @request, {})
17
+ end
18
+
19
+ it "should return the response if everything goes fine" do
20
+ response = mock Net::HTTPResponse
21
+ @chain.should_receive(:continue).and_return(response)
22
+ @feature.execute(@chain, @request, {}).should == response
23
+ end
24
+
25
+ end
26
+
27
+ end