torquebox-console 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1088) hide show
  1. data/bin/tbconsole +1 -2
  2. data/lib/torquebox/console/client.rb +11 -10
  3. data/lib/torquebox/console/version.rb +1 -1
  4. data/stomplets/torque_box_console.rb +7 -0
  5. data/vendor/bundle/ruby/1.8/bin/catstomp +23 -0
  6. data/vendor/bundle/ruby/1.8/bin/haml +23 -0
  7. data/vendor/bundle/ruby/1.8/bin/html2haml +23 -0
  8. data/vendor/bundle/ruby/1.8/bin/rackup +23 -0
  9. data/vendor/bundle/ruby/1.8/bin/rake +23 -0
  10. data/vendor/bundle/ruby/1.8/bin/rake2thor +23 -0
  11. data/vendor/bundle/ruby/1.8/bin/stompcat +23 -0
  12. data/vendor/bundle/ruby/1.8/bin/thor +23 -0
  13. data/vendor/bundle/ruby/1.8/bin/tilt +23 -0
  14. data/vendor/bundle/ruby/1.8/cache/haml-3.1.8.gem +0 -0
  15. data/vendor/bundle/ruby/1.8/cache/rack-1.5.2.gem +0 -0
  16. data/vendor/bundle/ruby/1.8/cache/rack-protection-1.4.0.gem +0 -0
  17. data/vendor/bundle/ruby/1.8/cache/rake-10.0.3.gem +0 -0
  18. data/vendor/bundle/ruby/1.8/cache/sinatra-1.3.5.gem +0 -0
  19. data/vendor/bundle/ruby/1.8/cache/stomp-1.2.8.gem +0 -0
  20. data/vendor/bundle/ruby/1.8/cache/thor-0.17.0.gem +0 -0
  21. data/vendor/bundle/ruby/1.8/cache/tilt-1.3.4.gem +0 -0
  22. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/CONTRIBUTING +3 -0
  23. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/MIT-LICENSE +20 -0
  24. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/README.md +133 -0
  25. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/REVISION +1 -0
  26. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/Rakefile +419 -0
  27. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/VERSION +1 -0
  28. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/VERSION_NAME +1 -0
  29. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/bin/haml +9 -0
  30. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/bin/html2haml +7 -0
  31. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/extra/update_watch.rb +13 -0
  32. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/init.rb +18 -0
  33. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml.rb +47 -0
  34. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/buffer.rb +301 -0
  35. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/compiler.rb +453 -0
  36. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/engine.rb +312 -0
  37. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/error.rb +22 -0
  38. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/exec.rb +362 -0
  39. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/filters.rb +385 -0
  40. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/helpers.rb +608 -0
  41. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/helpers/action_view_extensions.rb +57 -0
  42. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/helpers/action_view_mods.rb +260 -0
  43. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/helpers/rails_323_textarea_fix.rb +41 -0
  44. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/helpers/xss_mods.rb +165 -0
  45. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/html.rb +412 -0
  46. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/html/erb.rb +141 -0
  47. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/parser.rb +711 -0
  48. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/railtie.rb +19 -0
  49. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/root.rb +7 -0
  50. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/shared.rb +78 -0
  51. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/template.rb +99 -0
  52. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/template/options.rb +16 -0
  53. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/template/patch.rb +58 -0
  54. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/template/plugin.rb +123 -0
  55. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/util.rb +842 -0
  56. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/haml/version.rb +109 -0
  57. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/sass.rb +8 -0
  58. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/sass/plugin.rb +10 -0
  59. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/sass/rails2_shim.rb +9 -0
  60. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/lib/sass/rails3_shim.rb +16 -0
  61. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/rails/init.rb +1 -0
  62. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/benchmark.rb +91 -0
  63. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/gemfiles/Gemfile.rails-2.0.x +8 -0
  64. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/gemfiles/Gemfile.rails-2.0.x.lock +38 -0
  65. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/gemfiles/Gemfile.rails-2.1.x +8 -0
  66. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/gemfiles/Gemfile.rails-2.1.x.lock +38 -0
  67. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/gemfiles/Gemfile.rails-2.2.x +8 -0
  68. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/gemfiles/Gemfile.rails-2.2.x.lock +38 -0
  69. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/gemfiles/Gemfile.rails-2.3.x +8 -0
  70. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/gemfiles/Gemfile.rails-2.3.x.lock +40 -0
  71. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/gemfiles/Gemfile.rails-3.0.x +8 -0
  72. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/gemfiles/Gemfile.rails-3.0.x.lock +85 -0
  73. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/gemfiles/Gemfile.rails-3.1.x +8 -0
  74. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/gemfiles/Gemfile.rails-3.1.x.lock +97 -0
  75. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/gemfiles/Gemfile.rails-3.2.x +8 -0
  76. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/gemfiles/Gemfile.rails-3.2.x.lock +95 -0
  77. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/gemfiles/Gemfile.rails-xss-2.3.x +9 -0
  78. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/gemfiles/Gemfile.rails-xss-2.3.x.lock +42 -0
  79. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/engine_test.rb +1950 -0
  80. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/erb/_av_partial_1.erb +12 -0
  81. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/erb/_av_partial_2.erb +8 -0
  82. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/erb/action_view.erb +62 -0
  83. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/erb/standard.erb +55 -0
  84. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/helper_test.rb +467 -0
  85. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/html2haml/erb_tests.rb +440 -0
  86. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/html2haml_test.rb +336 -0
  87. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/markaby/standard.mab +52 -0
  88. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/mocks/article.rb +6 -0
  89. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/content_for_layout.xhtml +12 -0
  90. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/eval_suppressed.xhtml +9 -0
  91. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/filters.xhtml +62 -0
  92. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/helpers.xhtml +70 -0
  93. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/helpful.xhtml +10 -0
  94. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/just_stuff.xhtml +70 -0
  95. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/list.xhtml +12 -0
  96. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/nuke_inner_whitespace.xhtml +40 -0
  97. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/nuke_outer_whitespace.xhtml +148 -0
  98. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/original_engine.xhtml +20 -0
  99. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/partial_layout.xhtml +5 -0
  100. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/partials.xhtml +21 -0
  101. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/render_layout.xhtml +3 -0
  102. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/silent_script.xhtml +74 -0
  103. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/standard.xhtml +162 -0
  104. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/tag_parsing.xhtml +23 -0
  105. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/very_basic.xhtml +5 -0
  106. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/results/whitespace_handling.xhtml +85 -0
  107. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/spec/README.md +97 -0
  108. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/spec/lua_haml_spec.lua +30 -0
  109. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/spec/ruby_haml_test.rb +19 -0
  110. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/spec/tests.json +534 -0
  111. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/spec_test.rb +44 -0
  112. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/template_test.rb +443 -0
  113. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/_av_partial_1.haml +9 -0
  114. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/_av_partial_1_ugly.haml +9 -0
  115. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/_av_partial_2.haml +5 -0
  116. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/_av_partial_2_ugly.haml +5 -0
  117. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/_layout.erb +3 -0
  118. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/_layout_for_partial.haml +3 -0
  119. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/_partial.haml +8 -0
  120. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/_text_area.haml +3 -0
  121. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/action_view.haml +47 -0
  122. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/action_view_ugly.haml +47 -0
  123. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/breakage.haml +8 -0
  124. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/content_for_layout.haml +8 -0
  125. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/eval_suppressed.haml +11 -0
  126. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/filters.haml +66 -0
  127. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/helpers.haml +55 -0
  128. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/helpful.haml +11 -0
  129. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/just_stuff.haml +85 -0
  130. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/list.haml +12 -0
  131. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/nuke_inner_whitespace.haml +32 -0
  132. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/nuke_outer_whitespace.haml +144 -0
  133. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/original_engine.haml +17 -0
  134. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/partial_layout.haml +10 -0
  135. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/partialize.haml +1 -0
  136. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/partials.haml +12 -0
  137. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/render_layout.haml +2 -0
  138. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/silent_script.haml +40 -0
  139. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/standard.haml +43 -0
  140. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/standard_ugly.haml +43 -0
  141. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/tag_parsing.haml +21 -0
  142. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/very_basic.haml +4 -0
  143. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/templates/whitespace_handling.haml +87 -0
  144. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/haml/util_test.rb +300 -0
  145. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/linked_rails.rb +42 -0
  146. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/test/test_helper.rb +75 -0
  147. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/CONTRIBUTING +3 -0
  148. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/MIT-LICENSE +20 -0
  149. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/README.md +201 -0
  150. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/Rakefile +339 -0
  151. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/TODO +39 -0
  152. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/VERSION +1 -0
  153. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/VERSION_NAME +1 -0
  154. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/bin/sass +8 -0
  155. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/bin/sass-convert +7 -0
  156. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/bin/scss +8 -0
  157. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/doc-src/FAQ.md +35 -0
  158. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/doc-src/INDENTED_SYNTAX.md +210 -0
  159. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/doc-src/SASS_CHANGELOG.md +2327 -0
  160. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/doc-src/SASS_REFERENCE.md +1965 -0
  161. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/doc-src/SCSS_FOR_SASS_USERS.md +155 -0
  162. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/ext/extconf.rb +10 -0
  163. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/extra/update_watch.rb +13 -0
  164. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/init.rb +18 -0
  165. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass.rb +73 -0
  166. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/cache_stores.rb +15 -0
  167. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/cache_stores/base.rb +86 -0
  168. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/cache_stores/chain.rb +33 -0
  169. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/cache_stores/filesystem.rb +60 -0
  170. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/cache_stores/memory.rb +47 -0
  171. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/cache_stores/null.rb +25 -0
  172. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/callbacks.rb +66 -0
  173. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/css.rb +295 -0
  174. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/engine.rb +878 -0
  175. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/environment.rb +166 -0
  176. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/error.rb +201 -0
  177. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/exec.rb +672 -0
  178. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/importers.rb +22 -0
  179. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/importers/base.rb +139 -0
  180. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/importers/filesystem.rb +149 -0
  181. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/less.rb +382 -0
  182. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/logger.rb +15 -0
  183. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/logger/base.rb +32 -0
  184. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/logger/log_level.rb +49 -0
  185. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/plugin.rb +132 -0
  186. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/plugin/compiler.rb +383 -0
  187. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/plugin/configuration.rb +123 -0
  188. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/plugin/generic.rb +15 -0
  189. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/plugin/merb.rb +48 -0
  190. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/plugin/rack.rb +60 -0
  191. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/plugin/rails.rb +47 -0
  192. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/plugin/staleness_checker.rb +173 -0
  193. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/railtie.rb +9 -0
  194. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/repl.rb +58 -0
  195. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/root.rb +7 -0
  196. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script.rb +40 -0
  197. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/bool.rb +18 -0
  198. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/color.rb +480 -0
  199. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/css_lexer.rb +29 -0
  200. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/css_parser.rb +31 -0
  201. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/funcall.rb +175 -0
  202. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/functions.rb +1386 -0
  203. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/interpolation.rb +79 -0
  204. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/lexer.rb +339 -0
  205. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/list.rb +83 -0
  206. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/literal.rb +250 -0
  207. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/node.rb +99 -0
  208. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/number.rb +452 -0
  209. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/operation.rb +99 -0
  210. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/parser.rb +474 -0
  211. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/string.rb +51 -0
  212. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/string_interpolation.rb +103 -0
  213. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/unary_operation.rb +64 -0
  214. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/script/variable.rb +59 -0
  215. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/scss.rb +17 -0
  216. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/scss/css_parser.rb +46 -0
  217. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/scss/parser.rb +960 -0
  218. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/scss/rx.rb +128 -0
  219. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/scss/sass_parser.rb +11 -0
  220. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/scss/script_lexer.rb +15 -0
  221. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/scss/script_parser.rb +25 -0
  222. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/scss/static_parser.rb +40 -0
  223. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/selector.rb +361 -0
  224. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/selector/abstract_sequence.rb +62 -0
  225. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/selector/comma_sequence.rb +81 -0
  226. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/selector/sequence.rb +233 -0
  227. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/selector/simple.rb +113 -0
  228. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/selector/simple_sequence.rb +134 -0
  229. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/shared.rb +78 -0
  230. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/charset_node.rb +22 -0
  231. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/comment_node.rb +90 -0
  232. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/debug_node.rb +18 -0
  233. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/directive_node.rb +23 -0
  234. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/each_node.rb +24 -0
  235. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/extend_node.rb +29 -0
  236. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/for_node.rb +36 -0
  237. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/function_node.rb +27 -0
  238. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/if_node.rb +52 -0
  239. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/import_node.rb +68 -0
  240. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/media_node.rb +32 -0
  241. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/mixin_def_node.rb +27 -0
  242. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/mixin_node.rb +32 -0
  243. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/node.rb +201 -0
  244. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/prop_node.rb +148 -0
  245. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/return_node.rb +18 -0
  246. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/root_node.rb +28 -0
  247. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/rule_node.rb +136 -0
  248. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/variable_node.rb +30 -0
  249. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/visitors/base.rb +75 -0
  250. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/visitors/check_nesting.rb +133 -0
  251. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/visitors/convert.rb +260 -0
  252. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/visitors/cssize.rb +175 -0
  253. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/visitors/deep_copy.rb +87 -0
  254. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/visitors/perform.rb +332 -0
  255. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/visitors/set_options.rb +97 -0
  256. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/visitors/to_css.rb +210 -0
  257. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/warn_node.rb +18 -0
  258. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/tree/while_node.rb +18 -0
  259. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/util.rb +721 -0
  260. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/util/subset_map.rb +101 -0
  261. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/lib/sass/version.rb +112 -0
  262. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/rails/init.rb +1 -0
  263. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/sass.gemspec +33 -0
  264. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/Gemfile +4 -0
  265. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/Gemfile.lock +19 -0
  266. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/cache_test.rb +89 -0
  267. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/callbacks_test.rb +61 -0
  268. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/conversion_test.rb +1199 -0
  269. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/css2sass_test.rb +373 -0
  270. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/data/hsl-rgb.txt +319 -0
  271. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/engine_test.rb +2567 -0
  272. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/extend_test.rb +1348 -0
  273. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/fixtures/test_staleness_check_across_importers.css +1 -0
  274. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/fixtures/test_staleness_check_across_importers.scss +1 -0
  275. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/functions_test.rb +1038 -0
  276. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/importer_test.rb +192 -0
  277. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/less_conversion_test.rb +653 -0
  278. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/logger_test.rb +58 -0
  279. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/mock_importer.rb +49 -0
  280. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/more_results/more1.css +9 -0
  281. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/more_results/more1_with_line_comments.css +26 -0
  282. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/more_results/more_import.css +29 -0
  283. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/more_templates/_more_partial.sass +2 -0
  284. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/more_templates/more1.sass +23 -0
  285. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/more_templates/more_import.sass +11 -0
  286. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/plugin_test.rb +472 -0
  287. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/alt.css +4 -0
  288. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/basic.css +9 -0
  289. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/compact.css +5 -0
  290. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/complex.css +86 -0
  291. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/compressed.css +1 -0
  292. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/expanded.css +19 -0
  293. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/if.css +3 -0
  294. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/import.css +31 -0
  295. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/import_charset.css +4 -0
  296. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/import_charset_1_8.css +4 -0
  297. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/import_charset_ibm866.css +4 -0
  298. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/line_numbers.css +49 -0
  299. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/mixins.css +95 -0
  300. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/multiline.css +24 -0
  301. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/nested.css +22 -0
  302. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/options.css +1 -0
  303. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/parent_ref.css +13 -0
  304. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/script.css +16 -0
  305. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/scss_import.css +31 -0
  306. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/scss_importee.css +2 -0
  307. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/subdir/nested_subdir/nested_subdir.css +1 -0
  308. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/subdir/subdir.css +3 -0
  309. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/units.css +11 -0
  310. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/warn.css +0 -0
  311. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/results/warn_imported.css +0 -0
  312. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/script_conversion_test.rb +285 -0
  313. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/script_test.rb +514 -0
  314. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/scss/css_test.rb +922 -0
  315. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/scss/rx_test.rb +156 -0
  316. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/scss/scss_test.rb +1273 -0
  317. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/scss/test_helper.rb +37 -0
  318. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/_imported_charset_ibm866.sass +4 -0
  319. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/_imported_charset_utf8.sass +4 -0
  320. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/_partial.sass +2 -0
  321. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/alt.sass +16 -0
  322. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/basic.sass +23 -0
  323. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/bork1.sass +2 -0
  324. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/bork2.sass +2 -0
  325. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/bork3.sass +2 -0
  326. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/bork4.sass +2 -0
  327. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/bork5.sass +3 -0
  328. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/compact.sass +17 -0
  329. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/complex.sass +305 -0
  330. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/compressed.sass +15 -0
  331. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/expanded.sass +17 -0
  332. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/if.sass +11 -0
  333. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/import.sass +12 -0
  334. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/import_charset.sass +7 -0
  335. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/import_charset_1_8.sass +4 -0
  336. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/import_charset_ibm866.sass +9 -0
  337. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/importee.less +2 -0
  338. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/importee.sass +19 -0
  339. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/line_numbers.sass +13 -0
  340. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/mixin_bork.sass +5 -0
  341. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/mixins.sass +76 -0
  342. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/multiline.sass +20 -0
  343. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/nested.sass +25 -0
  344. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/nested_bork1.sass +2 -0
  345. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/nested_bork2.sass +2 -0
  346. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/nested_bork3.sass +2 -0
  347. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/nested_bork4.sass +2 -0
  348. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/nested_bork5.sass +2 -0
  349. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/nested_import.sass +2 -0
  350. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/nested_mixin_bork.sass +6 -0
  351. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/options.sass +2 -0
  352. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/parent_ref.sass +25 -0
  353. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/script.sass +101 -0
  354. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/scss_import.scss +11 -0
  355. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/scss_importee.scss +1 -0
  356. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +2 -0
  357. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +3 -0
  358. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/subdir/subdir.sass +6 -0
  359. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/units.sass +11 -0
  360. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/warn.sass +3 -0
  361. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/templates/warn_imported.sass +4 -0
  362. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/test_helper.rb +8 -0
  363. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/util/subset_map_test.rb +91 -0
  364. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/sass/util_test.rb +266 -0
  365. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/test/test_helper.rb +69 -0
  366. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/Gemfile +3 -0
  367. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/LICENSE +20 -0
  368. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/README.markdown +83 -0
  369. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/Rakefile +11 -0
  370. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/example.rb +12 -0
  371. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/fssm.gemspec +24 -0
  372. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/lib/fssm.rb +37 -0
  373. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/lib/fssm/backends/fsevents.rb +36 -0
  374. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/lib/fssm/backends/inotify.rb +26 -0
  375. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/lib/fssm/backends/polling.rb +25 -0
  376. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/lib/fssm/backends/rbfsevent.rb +42 -0
  377. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/lib/fssm/backends/rubycocoa/fsevents.rb +131 -0
  378. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/lib/fssm/monitor.rb +36 -0
  379. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/lib/fssm/path.rb +94 -0
  380. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/lib/fssm/pathname.rb +36 -0
  381. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/lib/fssm/state/directory.rb +75 -0
  382. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/lib/fssm/state/file.rb +24 -0
  383. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/lib/fssm/support.rb +92 -0
  384. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/lib/fssm/tree.rb +176 -0
  385. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/lib/fssm/version.rb +3 -0
  386. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/profile/prof-cache.rb +40 -0
  387. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/profile/prof-fssm-pathname.html +1231 -0
  388. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/profile/prof-pathname-rubinius.rb +35 -0
  389. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/profile/prof-pathname.rb +68 -0
  390. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/profile/prof-plain-pathname.html +988 -0
  391. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/profile/prof.html +2379 -0
  392. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/spec/count_down_latch.rb +151 -0
  393. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/spec/monitor_spec.rb +202 -0
  394. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/spec/path_spec.rb +96 -0
  395. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/spec/root/duck/quack.txt +0 -0
  396. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/spec/root/file.css +0 -0
  397. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/spec/root/file.rb +0 -0
  398. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/spec/root/file.yml +0 -0
  399. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/spec/root/moo/cow.txt +0 -0
  400. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/vendor/fssm/spec/spec_helper.rb +14 -0
  401. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/yard/callbacks.rb +29 -0
  402. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/yard/default/fulldoc/html/css/common.sass +26 -0
  403. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/yard/default/layout/html/footer.erb +12 -0
  404. data/vendor/bundle/ruby/1.8/gems/haml-3.1.8/vendor/sass/yard/inherited_hash.rb +41 -0
  405. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/COPYING +18 -0
  406. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/KNOWN-ISSUES +30 -0
  407. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/README.rdoc +624 -0
  408. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/Rakefile +125 -0
  409. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/SPEC +237 -0
  410. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/bin/rackup +4 -0
  411. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/contrib/rack.png +0 -0
  412. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/contrib/rack.svg +150 -0
  413. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/contrib/rack_logo.svg +111 -0
  414. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/contrib/rdoc.css +412 -0
  415. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/example/lobster.ru +4 -0
  416. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/example/protectedlobster.rb +14 -0
  417. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/example/protectedlobster.ru +8 -0
  418. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack.rb +87 -0
  419. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/auth/abstract/handler.rb +37 -0
  420. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/auth/abstract/request.rb +43 -0
  421. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/auth/basic.rb +58 -0
  422. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/auth/digest/md5.rb +129 -0
  423. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/auth/digest/nonce.rb +51 -0
  424. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/auth/digest/params.rb +53 -0
  425. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/auth/digest/request.rb +41 -0
  426. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/backports/uri/common_18.rb +56 -0
  427. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/backports/uri/common_192.rb +52 -0
  428. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/backports/uri/common_193.rb +29 -0
  429. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/body_proxy.rb +39 -0
  430. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/builder.rb +149 -0
  431. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/cascade.rb +52 -0
  432. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/chunked.rb +58 -0
  433. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/commonlogger.rb +64 -0
  434. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/conditionalget.rb +67 -0
  435. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/config.rb +20 -0
  436. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/content_length.rb +33 -0
  437. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/content_type.rb +29 -0
  438. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/deflater.rb +116 -0
  439. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/directory.rb +161 -0
  440. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/etag.rb +64 -0
  441. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/file.rb +138 -0
  442. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/handler.rb +107 -0
  443. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/handler/cgi.rb +61 -0
  444. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/handler/evented_mongrel.rb +8 -0
  445. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/handler/fastcgi.rb +98 -0
  446. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/handler/lsws.rb +61 -0
  447. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/handler/mongrel.rb +100 -0
  448. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/handler/scgi.rb +67 -0
  449. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/handler/swiftiplied_mongrel.rb +8 -0
  450. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/handler/thin.rb +27 -0
  451. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/handler/webrick.rb +81 -0
  452. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/head.rb +22 -0
  453. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/lint.rb +699 -0
  454. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/lobster.rb +65 -0
  455. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/lock.rb +26 -0
  456. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/logger.rb +18 -0
  457. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/methodoverride.rb +31 -0
  458. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/mime.rb +677 -0
  459. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/mock.rb +190 -0
  460. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/multipart.rb +34 -0
  461. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/multipart/generator.rb +93 -0
  462. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/multipart/parser.rb +176 -0
  463. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/multipart/uploaded_file.rb +34 -0
  464. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/nulllogger.rb +18 -0
  465. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/recursive.rb +61 -0
  466. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/reloader.rb +109 -0
  467. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/request.rb +380 -0
  468. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/response.rb +155 -0
  469. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/rewindable_input.rb +104 -0
  470. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/runtime.rb +27 -0
  471. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/sendfile.rb +155 -0
  472. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/server.rb +362 -0
  473. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/session/abstract/id.rb +398 -0
  474. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/session/cookie.rb +178 -0
  475. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/session/memcache.rb +93 -0
  476. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/session/pool.rb +79 -0
  477. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/showexceptions.rb +378 -0
  478. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/showstatus.rb +113 -0
  479. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/static.rb +153 -0
  480. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/urlmap.rb +76 -0
  481. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/utils.rb +628 -0
  482. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/lib/rack/utils/okjson.rb +599 -0
  483. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/rack.gemspec +33 -0
  484. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/builder/anything.rb +5 -0
  485. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/builder/comment.ru +4 -0
  486. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/builder/end.ru +5 -0
  487. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/builder/line.ru +1 -0
  488. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/builder/options.ru +2 -0
  489. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/cgi/assets/folder/test.js +1 -0
  490. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/cgi/assets/fonts/font.eot +1 -0
  491. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/cgi/assets/images/image.png +1 -0
  492. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/cgi/assets/index.html +1 -0
  493. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/cgi/assets/javascripts/app.js +1 -0
  494. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/cgi/assets/stylesheets/app.css +1 -0
  495. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/cgi/lighttpd.conf +26 -0
  496. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/cgi/rackup_stub.rb +6 -0
  497. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/cgi/sample_rackup.ru +5 -0
  498. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/cgi/test +9 -0
  499. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/cgi/test+directory/test+file +1 -0
  500. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/cgi/test.fcgi +8 -0
  501. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/cgi/test.ru +5 -0
  502. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/gemloader.rb +10 -0
  503. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/bad_robots +259 -0
  504. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/binary +0 -0
  505. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/content_type_and_no_filename +6 -0
  506. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/empty +10 -0
  507. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/fail_16384_nofile +814 -0
  508. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/file1.txt +1 -0
  509. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/filename_and_modification_param +7 -0
  510. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/filename_with_escaped_quotes +6 -0
  511. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/filename_with_escaped_quotes_and_modification_param +7 -0
  512. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/filename_with_percent_escaped_quotes +6 -0
  513. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/filename_with_unescaped_percentages +6 -0
  514. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/filename_with_unescaped_percentages2 +6 -0
  515. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/filename_with_unescaped_percentages3 +6 -0
  516. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/filename_with_unescaped_quotes +6 -0
  517. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/ie +6 -0
  518. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/mixed_files +21 -0
  519. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/nested +10 -0
  520. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/none +9 -0
  521. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/semicolon +6 -0
  522. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/text +15 -0
  523. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/multipart/webkit +32 -0
  524. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/rackup/config.ru +31 -0
  525. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/registering_handler/rack/handler/registering_myself.rb +8 -0
  526. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_auth_basic.rb +81 -0
  527. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_auth_digest.rb +259 -0
  528. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_body_proxy.rb +69 -0
  529. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_builder.rb +214 -0
  530. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_cascade.rb +61 -0
  531. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_cgi.rb +102 -0
  532. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_chunked.rb +85 -0
  533. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_commonlogger.rb +57 -0
  534. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_conditionalget.rb +102 -0
  535. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_config.rb +22 -0
  536. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_content_length.rb +83 -0
  537. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_content_type.rb +45 -0
  538. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_deflater.rb +204 -0
  539. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_directory.rb +88 -0
  540. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_etag.rb +98 -0
  541. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_fastcgi.rb +107 -0
  542. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_file.rb +213 -0
  543. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_handler.rb +59 -0
  544. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_head.rb +43 -0
  545. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_lint.rb +522 -0
  546. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_lobster.rb +58 -0
  547. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_lock.rb +164 -0
  548. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_logger.rb +23 -0
  549. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_methodoverride.rb +75 -0
  550. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_mime.rb +51 -0
  551. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_mock.rb +269 -0
  552. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_mongrel.rb +182 -0
  553. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_multipart.rb +445 -0
  554. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_nulllogger.rb +20 -0
  555. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_recursive.rb +72 -0
  556. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_request.rb +1078 -0
  557. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_response.rb +313 -0
  558. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_rewindable_input.rb +118 -0
  559. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_runtime.rb +49 -0
  560. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_sendfile.rb +130 -0
  561. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_server.rb +143 -0
  562. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_session_abstract_id.rb +53 -0
  563. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_session_cookie.rb +367 -0
  564. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_session_memcache.rb +321 -0
  565. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_session_pool.rb +209 -0
  566. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_showexceptions.rb +92 -0
  567. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_showstatus.rb +84 -0
  568. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_static.rb +145 -0
  569. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_thin.rb +91 -0
  570. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_urlmap.rb +213 -0
  571. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_utils.rb +573 -0
  572. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/spec_webrick.rb +143 -0
  573. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/static/another/index.html +1 -0
  574. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/static/index.html +1 -0
  575. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/testrequest.rb +78 -0
  576. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/unregistered_handler/rack/handler/unregistered.rb +7 -0
  577. data/vendor/bundle/ruby/1.8/gems/rack-1.5.2/test/unregistered_handler/rack/handler/unregistered_long_one.rb +7 -0
  578. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/License +20 -0
  579. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/README.md +82 -0
  580. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/Rakefile +48 -0
  581. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/lib/rack-protection.rb +1 -0
  582. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/lib/rack/protection.rb +40 -0
  583. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/lib/rack/protection/authenticity_token.rb +24 -0
  584. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/lib/rack/protection/base.rb +107 -0
  585. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/lib/rack/protection/escaped_params.rb +87 -0
  586. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/lib/rack/protection/form_token.rb +23 -0
  587. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/lib/rack/protection/frame_options.rb +37 -0
  588. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/lib/rack/protection/http_origin.rb +32 -0
  589. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/lib/rack/protection/ip_spoofing.rb +23 -0
  590. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/lib/rack/protection/json_csrf.rb +35 -0
  591. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/lib/rack/protection/path_traversal.rb +36 -0
  592. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/lib/rack/protection/remote_referrer.rb +20 -0
  593. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/lib/rack/protection/remote_token.rb +22 -0
  594. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/lib/rack/protection/session_hijacking.rb +36 -0
  595. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/lib/rack/protection/version.rb +16 -0
  596. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/lib/rack/protection/xss_header.rb +25 -0
  597. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/rack-protection.gemspec +92 -0
  598. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/spec/authenticity_token_spec.rb +33 -0
  599. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/spec/escaped_params_spec.rb +44 -0
  600. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/spec/form_token_spec.rb +33 -0
  601. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/spec/frame_options_spec.rb +39 -0
  602. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/spec/http_origin_spec.rb +38 -0
  603. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/spec/ip_spoofing_spec.rb +35 -0
  604. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/spec/json_csrf_spec.rb +44 -0
  605. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/spec/path_traversal_spec.rb +28 -0
  606. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/spec/protection_spec.rb +37 -0
  607. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/spec/remote_referrer_spec.rb +31 -0
  608. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/spec/remote_token_spec.rb +42 -0
  609. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/spec/session_hijacking_spec.rb +54 -0
  610. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/spec/spec_helper.rb +163 -0
  611. data/vendor/bundle/ruby/1.8/gems/rack-protection-1.4.0/spec/xss_header_spec.rb +56 -0
  612. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/CHANGES +526 -0
  613. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/MIT-LICENSE +21 -0
  614. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/README.rdoc +187 -0
  615. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/Rakefile +374 -0
  616. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/TODO +21 -0
  617. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/bin/rake +33 -0
  618. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/command_line_usage.rdoc +152 -0
  619. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/example/Rakefile1 +38 -0
  620. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/example/Rakefile2 +35 -0
  621. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/example/a.c +6 -0
  622. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/example/b.c +6 -0
  623. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/example/main.c +11 -0
  624. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/glossary.rdoc +51 -0
  625. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/jamis.rb +591 -0
  626. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/proto_rake.rdoc +127 -0
  627. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/rake.1.gz +0 -0
  628. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/rakefile.rdoc +557 -0
  629. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/rational.rdoc +151 -0
  630. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.4.14.rdoc +23 -0
  631. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.4.15.rdoc +35 -0
  632. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.5.0.rdoc +53 -0
  633. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.5.3.rdoc +78 -0
  634. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.5.4.rdoc +46 -0
  635. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.6.0.rdoc +141 -0
  636. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.7.0.rdoc +119 -0
  637. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.7.1.rdoc +59 -0
  638. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.7.2.rdoc +121 -0
  639. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.7.3.rdoc +47 -0
  640. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.8.0.rdoc +114 -0
  641. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.8.2.rdoc +165 -0
  642. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.8.3.rdoc +112 -0
  643. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.8.4.rdoc +147 -0
  644. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.8.5.rdoc +53 -0
  645. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.8.6.rdoc +55 -0
  646. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.8.7.rdoc +55 -0
  647. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.9.0.rdoc +112 -0
  648. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.9.1.rdoc +52 -0
  649. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.9.2.2.rdoc +55 -0
  650. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.9.2.rdoc +49 -0
  651. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.9.3.rdoc +102 -0
  652. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.9.4.rdoc +110 -0
  653. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.9.5.rdoc +114 -0
  654. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-0.9.6.rdoc +127 -0
  655. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-10.0.0.rdoc +178 -0
  656. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-10.0.1.rdoc +187 -0
  657. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-10.0.2.rdoc +191 -0
  658. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/doc/release_notes/rake-10.0.3.rdoc +191 -0
  659. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/install.rb +90 -0
  660. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake.rb +71 -0
  661. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/alt_system.rb +109 -0
  662. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/application.rb +669 -0
  663. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/backtrace.rb +18 -0
  664. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/clean.rb +32 -0
  665. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/cloneable.rb +16 -0
  666. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/contrib/compositepublisher.rb +21 -0
  667. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/contrib/ftptools.rb +151 -0
  668. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/contrib/publisher.rb +73 -0
  669. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/contrib/rubyforgepublisher.rb +16 -0
  670. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/contrib/sshpublisher.rb +50 -0
  671. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/contrib/sys.rb +1 -0
  672. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/default_loader.rb +10 -0
  673. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/dsl_definition.rb +156 -0
  674. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/early_time.rb +18 -0
  675. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/ext/core.rb +27 -0
  676. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/ext/module.rb +0 -0
  677. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/ext/string.rb +168 -0
  678. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/ext/time.rb +15 -0
  679. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/file_creation_task.rb +24 -0
  680. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/file_list.rb +410 -0
  681. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/file_task.rb +47 -0
  682. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/file_utils.rb +114 -0
  683. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/file_utils_ext.rb +146 -0
  684. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/gempackagetask.rb +1 -0
  685. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/invocation_chain.rb +51 -0
  686. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/invocation_exception_mixin.rb +16 -0
  687. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/loaders/makefile.rb +40 -0
  688. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/multi_task.rb +13 -0
  689. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/name_space.rb +25 -0
  690. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/packagetask.rb +185 -0
  691. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/pathmap.rb +1 -0
  692. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/phony.rb +15 -0
  693. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/private_reader.rb +20 -0
  694. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/promise.rb +99 -0
  695. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/pseudo_status.rb +24 -0
  696. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/rake_module.rb +37 -0
  697. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/rake_test_loader.rb +22 -0
  698. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/rdoctask.rb +1 -0
  699. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/ruby182_test_unit_fix.rb +25 -0
  700. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/rule_recursion_overflow_error.rb +20 -0
  701. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/runtest.rb +22 -0
  702. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/task.rb +350 -0
  703. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/task_argument_error.rb +7 -0
  704. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/task_arguments.rb +78 -0
  705. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/task_manager.rb +296 -0
  706. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/tasklib.rb +22 -0
  707. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/testtask.rb +198 -0
  708. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/thread_history_display.rb +48 -0
  709. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/thread_pool.rb +155 -0
  710. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/trace_output.rb +19 -0
  711. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/version.rb +13 -0
  712. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/lib/rake/win32.rb +55 -0
  713. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/file_creation.rb +34 -0
  714. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/helper.rb +562 -0
  715. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_private_reader.rb +42 -0
  716. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake.rb +40 -0
  717. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_application.rb +515 -0
  718. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_application_options.rb +443 -0
  719. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_backtrace.rb +89 -0
  720. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_clean.rb +14 -0
  721. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_definitions.rb +80 -0
  722. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_directory_task.rb +57 -0
  723. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_dsl.rb +40 -0
  724. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_early_time.rb +31 -0
  725. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_extension.rb +59 -0
  726. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_file_creation_task.rb +56 -0
  727. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_file_list.rb +628 -0
  728. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_file_list_path_map.rb +8 -0
  729. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_file_task.rb +122 -0
  730. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_file_utils.rb +305 -0
  731. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_ftp_file.rb +59 -0
  732. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_functional.rb +496 -0
  733. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_invocation_chain.rb +52 -0
  734. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_makefile_loader.rb +44 -0
  735. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_multi_task.rb +59 -0
  736. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_name_space.rb +43 -0
  737. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_package_task.rb +79 -0
  738. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_path_map.rb +157 -0
  739. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_path_map_explode.rb +34 -0
  740. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_path_map_partial.rb +18 -0
  741. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_pseudo_status.rb +21 -0
  742. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_rake_test_loader.rb +21 -0
  743. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_reduce_compat.rb +30 -0
  744. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_require.rb +40 -0
  745. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_rules.rb +327 -0
  746. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_task.rb +316 -0
  747. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_task_argument_parsing.rb +103 -0
  748. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_task_arguments.rb +88 -0
  749. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_task_lib.rb +9 -0
  750. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_task_manager.rb +157 -0
  751. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_task_manager_argument_resolution.rb +19 -0
  752. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_task_with_arguments.rb +171 -0
  753. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_test_task.rb +120 -0
  754. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_thread_pool.rb +123 -0
  755. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_top_level_functions.rb +71 -0
  756. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_rake_win32.rb +72 -0
  757. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_thread_history_display.rb +91 -0
  758. data/vendor/bundle/ruby/1.8/gems/rake-10.0.3/test/test_trace_output.rb +43 -0
  759. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/AUTHORS +61 -0
  760. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/CHANGES +1063 -0
  761. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/Gemfile +82 -0
  762. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/LICENSE +22 -0
  763. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/README.de.rdoc +2097 -0
  764. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/README.es.rdoc +2078 -0
  765. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/README.fr.rdoc +2036 -0
  766. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/README.hu.rdoc +607 -0
  767. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/README.jp.rdoc +1043 -0
  768. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/README.ko.rdoc +1926 -0
  769. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/README.pt-br.rdoc +647 -0
  770. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/README.pt-pt.rdoc +646 -0
  771. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/README.rdoc +2017 -0
  772. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/README.ru.rdoc +1785 -0
  773. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/README.zh.rdoc +1816 -0
  774. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/Rakefile +183 -0
  775. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/examples/chat.rb +61 -0
  776. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/examples/simple.rb +3 -0
  777. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/examples/stream.ru +26 -0
  778. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/lib/sinatra.rb +4 -0
  779. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/lib/sinatra/base.rb +1728 -0
  780. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/lib/sinatra/images/404.png +0 -0
  781. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/lib/sinatra/images/500.png +0 -0
  782. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/lib/sinatra/main.rb +28 -0
  783. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/lib/sinatra/showexceptions.rb +340 -0
  784. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/lib/sinatra/version.rb +3 -0
  785. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/sinatra.gemspec +18 -0
  786. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/base_test.rb +160 -0
  787. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/builder_test.rb +95 -0
  788. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/coffee_test.rb +92 -0
  789. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/contest.rb +98 -0
  790. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/creole_test.rb +65 -0
  791. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/delegator_test.rb +162 -0
  792. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/encoding_test.rb +20 -0
  793. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/erb_test.rb +104 -0
  794. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/extensions_test.rb +100 -0
  795. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/filter_test.rb +428 -0
  796. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/haml_test.rb +101 -0
  797. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/helper.rb +123 -0
  798. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/helpers_test.rb +1783 -0
  799. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/integration/app.rb +62 -0
  800. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/integration_helper.rb +214 -0
  801. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/integration_test.rb +85 -0
  802. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/less_test.rb +67 -0
  803. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/liquid_test.rb +59 -0
  804. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/mapped_error_test.rb +259 -0
  805. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/markaby_test.rb +80 -0
  806. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/markdown_test.rb +82 -0
  807. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/middleware_test.rb +68 -0
  808. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/nokogiri_test.rb +69 -0
  809. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/public/favicon.ico +0 -0
  810. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/rack_test.rb +45 -0
  811. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/radius_test.rb +59 -0
  812. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/rdoc_test.rb +66 -0
  813. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/readme_test.rb +136 -0
  814. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/request_test.rb +45 -0
  815. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/response_test.rb +66 -0
  816. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/result_test.rb +98 -0
  817. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/route_added_hook_test.rb +59 -0
  818. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/routing_test.rb +1126 -0
  819. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/sass_test.rb +116 -0
  820. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/scss_test.rb +89 -0
  821. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/server_test.rb +48 -0
  822. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/settings_test.rb +538 -0
  823. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/sinatra_test.rb +17 -0
  824. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/slim_test.rb +88 -0
  825. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/static_test.rb +178 -0
  826. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/streaming_test.rb +140 -0
  827. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/templates_test.rb +298 -0
  828. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/textile_test.rb +65 -0
  829. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/a/in_a.str +1 -0
  830. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/ascii.erb +2 -0
  831. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/b/in_b.str +1 -0
  832. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/calc.html.erb +1 -0
  833. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/error.builder +3 -0
  834. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/error.erb +3 -0
  835. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/error.haml +3 -0
  836. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/error.sass +2 -0
  837. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/explicitly_nested.str +1 -0
  838. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/foo/hello.test +1 -0
  839. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.builder +1 -0
  840. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.coffee +1 -0
  841. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.creole +1 -0
  842. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.erb +1 -0
  843. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.haml +1 -0
  844. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.less +5 -0
  845. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.liquid +1 -0
  846. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.mab +1 -0
  847. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.md +1 -0
  848. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.nokogiri +1 -0
  849. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.radius +1 -0
  850. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.rdoc +1 -0
  851. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.sass +2 -0
  852. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.scss +3 -0
  853. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.slim +1 -0
  854. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.str +1 -0
  855. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.test +1 -0
  856. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/hello.textile +1 -0
  857. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/layout2.builder +3 -0
  858. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/layout2.erb +2 -0
  859. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/layout2.haml +2 -0
  860. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/layout2.liquid +2 -0
  861. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/layout2.mab +2 -0
  862. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/layout2.nokogiri +3 -0
  863. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/layout2.radius +2 -0
  864. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/layout2.slim +3 -0
  865. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/layout2.str +2 -0
  866. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/layout2.test +1 -0
  867. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/nested.str +1 -0
  868. data/vendor/bundle/ruby/1.8/gems/sinatra-1.3.5/test/views/utf8.erb +2 -0
  869. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/CHANGELOG.rdoc +196 -0
  870. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/LICENSE +202 -0
  871. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/README.rdoc +132 -0
  872. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/Rakefile +80 -0
  873. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/bin/catstomp +74 -0
  874. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/bin/stompcat +75 -0
  875. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/client11_ex1.rb +89 -0
  876. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/client11_putget1.rb +71 -0
  877. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/conn11_ex1.rb +112 -0
  878. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/conn11_ex2.rb +87 -0
  879. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/conn11_hb1.rb +57 -0
  880. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/consumer.rb +34 -0
  881. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/get11conn_ex1.rb +117 -0
  882. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/get11conn_ex2.rb +77 -0
  883. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/logexamp.rb +81 -0
  884. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/logexamp_ssl.rb +81 -0
  885. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/publisher.rb +30 -0
  886. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/put11conn_ex1.rb +56 -0
  887. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/putget11_rh1.rb +93 -0
  888. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/slogger.rb +222 -0
  889. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/ssl_uc1.rb +46 -0
  890. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/ssl_uc1_ciphers.rb +46 -0
  891. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/ssl_uc2.rb +48 -0
  892. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/ssl_uc2_ciphers.rb +47 -0
  893. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/ssl_uc3.rb +50 -0
  894. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/ssl_uc3_ciphers.rb +47 -0
  895. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/ssl_uc4.rb +50 -0
  896. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/ssl_uc4_ciphers.rb +48 -0
  897. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/ssl_ucx_default_ciphers.rb +41 -0
  898. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/stomp11_common.rb +48 -0
  899. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/topic_consumer.rb +32 -0
  900. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/examples/topic_publisher.rb +29 -0
  901. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/lib/client/utils.rb +116 -0
  902. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/lib/connection/heartbeats.rb +175 -0
  903. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/lib/connection/netio.rb +360 -0
  904. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/lib/connection/utf8.rb +294 -0
  905. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/lib/connection/utils.rb +239 -0
  906. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/lib/stomp.rb +39 -0
  907. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/lib/stomp/client.rb +350 -0
  908. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/lib/stomp/codec.rb +44 -0
  909. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/lib/stomp/connection.rb +452 -0
  910. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/lib/stomp/constants.rb +114 -0
  911. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/lib/stomp/errors.rb +195 -0
  912. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/lib/stomp/ext/hash.rb +31 -0
  913. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/lib/stomp/message.rb +117 -0
  914. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/lib/stomp/sslparams.rb +84 -0
  915. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/lib/stomp/version.rb +12 -0
  916. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/spec/client_shared_examples.rb +71 -0
  917. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/spec/client_spec.rb +329 -0
  918. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/spec/connection_spec.rb +431 -0
  919. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/spec/message_spec.rb +58 -0
  920. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/spec/spec_helper.rb +8 -0
  921. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/stomp.gemspec +151 -0
  922. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/test/test_client.rb +531 -0
  923. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/test/test_codec.rb +119 -0
  924. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/test/test_connection.rb +517 -0
  925. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/test/test_connection1p.rb +396 -0
  926. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/test/test_helper.rb +168 -0
  927. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/test/test_message.rb +173 -0
  928. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/test/test_ssl.rb +81 -0
  929. data/vendor/bundle/ruby/1.8/gems/stomp-1.2.8/test/tlogger.rb +80 -0
  930. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/CHANGELOG.rdoc +142 -0
  931. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/Gemfile +19 -0
  932. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/LICENSE.md +20 -0
  933. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/README.md +28 -0
  934. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/Thorfile +30 -0
  935. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/bin/rake2thor +86 -0
  936. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/bin/thor +6 -0
  937. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor.rb +448 -0
  938. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/actions.rb +318 -0
  939. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/actions/create_file.rb +105 -0
  940. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/actions/create_link.rb +57 -0
  941. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/actions/directory.rb +117 -0
  942. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/actions/empty_directory.rb +153 -0
  943. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/actions/file_manipulation.rb +314 -0
  944. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/actions/inject_into_file.rb +109 -0
  945. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/base.rb +654 -0
  946. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/core_ext/file_binary_read.rb +9 -0
  947. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/core_ext/hash_with_indifferent_access.rb +80 -0
  948. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/core_ext/ordered_hash.rb +100 -0
  949. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/error.rb +35 -0
  950. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/group.rb +285 -0
  951. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/invocation.rb +170 -0
  952. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/parser.rb +4 -0
  953. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/parser/argument.rb +74 -0
  954. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/parser/arguments.rb +171 -0
  955. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/parser/option.rb +121 -0
  956. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/parser/options.rb +216 -0
  957. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/rake_compat.rb +72 -0
  958. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/runner.rb +321 -0
  959. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/shell.rb +88 -0
  960. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/shell/basic.rb +389 -0
  961. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/shell/color.rb +144 -0
  962. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/shell/html.rb +123 -0
  963. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/task.rb +132 -0
  964. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/util.rb +266 -0
  965. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/lib/thor/version.rb +3 -0
  966. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/actions/create_file_spec.rb +170 -0
  967. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/actions/create_link_spec.rb +81 -0
  968. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/actions/directory_spec.rb +156 -0
  969. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/actions/empty_directory_spec.rb +130 -0
  970. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/actions/file_manipulation_spec.rb +382 -0
  971. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/actions/inject_into_file_spec.rb +135 -0
  972. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/actions_spec.rb +331 -0
  973. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/base_spec.rb +279 -0
  974. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/core_ext/hash_with_indifferent_access_spec.rb +48 -0
  975. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/core_ext/ordered_hash_spec.rb +115 -0
  976. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/exit_condition_spec.rb +19 -0
  977. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/application.rb +2 -0
  978. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/app{1}/README +3 -0
  979. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/bundle/execute.rb +6 -0
  980. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/bundle/main.thor +1 -0
  981. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/doc/%file_name%.rb.tt +1 -0
  982. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/doc/COMMENTER +11 -0
  983. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/doc/README +3 -0
  984. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/doc/block_helper.rb +3 -0
  985. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/doc/config.rb +1 -0
  986. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/doc/config.yaml.tt +1 -0
  987. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/enum.thor +10 -0
  988. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/group.thor +114 -0
  989. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/invoke.thor +112 -0
  990. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/path with spaces b/data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/path with → spaces +0 -0
  991. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/preserve/script.sh +3 -0
  992. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/script.thor +195 -0
  993. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/fixtures/task.thor +10 -0
  994. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/group_spec.rb +216 -0
  995. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/invocation_spec.rb +100 -0
  996. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/parser/argument_spec.rb +53 -0
  997. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/parser/arguments_spec.rb +66 -0
  998. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/parser/option_spec.rb +202 -0
  999. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/parser/options_spec.rb +395 -0
  1000. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/rake_compat_spec.rb +72 -0
  1001. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/register_spec.rb +197 -0
  1002. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/runner_spec.rb +241 -0
  1003. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/shell/basic_spec.rb +312 -0
  1004. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/shell/color_spec.rb +81 -0
  1005. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/shell/html_spec.rb +32 -0
  1006. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/shell_spec.rb +47 -0
  1007. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/spec_helper.rb +63 -0
  1008. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/task_spec.rb +80 -0
  1009. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/thor_spec.rb +488 -0
  1010. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/spec/util_spec.rb +196 -0
  1011. data/vendor/bundle/ruby/1.8/gems/thor-0.17.0/thor.gemspec +20 -0
  1012. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/COPYING +18 -0
  1013. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/Gemfile +32 -0
  1014. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/HACKING +16 -0
  1015. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/README.md +211 -0
  1016. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/Rakefile +104 -0
  1017. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/TEMPLATES.md +516 -0
  1018. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/bin/tilt +112 -0
  1019. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt.rb +204 -0
  1020. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/asciidoc.rb +34 -0
  1021. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/builder.rb +40 -0
  1022. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/coffee.rb +54 -0
  1023. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/css.rb +80 -0
  1024. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/csv.rb +71 -0
  1025. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/erb.rb +110 -0
  1026. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/etanni.rb +27 -0
  1027. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/haml.rb +64 -0
  1028. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/liquid.rb +45 -0
  1029. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/markaby.rb +52 -0
  1030. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/markdown.rb +214 -0
  1031. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/nokogiri.rb +43 -0
  1032. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/plain.rb +20 -0
  1033. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/radius.rb +55 -0
  1034. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/rdoc.rb +47 -0
  1035. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/string.rb +21 -0
  1036. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/template.rb +246 -0
  1037. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/textile.rb +30 -0
  1038. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/wiki.rb +58 -0
  1039. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/lib/tilt/yajl.rb +94 -0
  1040. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/contest.rb +68 -0
  1041. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/markaby/locals.mab +1 -0
  1042. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/markaby/markaby.mab +1 -0
  1043. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/markaby/markaby_other_static.mab +1 -0
  1044. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/markaby/render_twice.mab +1 -0
  1045. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/markaby/scope.mab +1 -0
  1046. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/markaby/yielding.mab +2 -0
  1047. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_asciidoctor_test.rb +44 -0
  1048. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_blueclothtemplate_test.rb +45 -0
  1049. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_buildertemplate_test.rb +59 -0
  1050. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_cache_test.rb +32 -0
  1051. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_coffeescripttemplate_test.rb +114 -0
  1052. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_compilesite_test.rb +51 -0
  1053. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_creoletemplate_test.rb +28 -0
  1054. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_csv_test.rb +73 -0
  1055. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_erbtemplate_test.rb +239 -0
  1056. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_erubistemplate_test.rb +151 -0
  1057. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_etannitemplate_test.rb +173 -0
  1058. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_fallback_test.rb +122 -0
  1059. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_hamltemplate_test.rb +144 -0
  1060. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_kramdown_test.rb +42 -0
  1061. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_lesstemplate_test.less +1 -0
  1062. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_lesstemplate_test.rb +42 -0
  1063. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_liquidtemplate_test.rb +78 -0
  1064. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_markaby_test.rb +88 -0
  1065. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_markdown_test.rb +172 -0
  1066. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_marukutemplate_test.rb +48 -0
  1067. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_nokogiritemplate_test.rb +87 -0
  1068. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_radiustemplate_test.rb +75 -0
  1069. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_rdiscounttemplate_test.rb +55 -0
  1070. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_rdoctemplate_test.rb +31 -0
  1071. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_redcarpettemplate_test.rb +71 -0
  1072. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_redclothtemplate_test.rb +36 -0
  1073. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_sasstemplate_test.rb +41 -0
  1074. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_stringtemplate_test.rb +170 -0
  1075. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_template_test.rb +167 -0
  1076. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_test.rb +65 -0
  1077. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_wikiclothtemplate_test.rb +32 -0
  1078. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/test/tilt_yajltemplate_test.rb +101 -0
  1079. data/vendor/bundle/ruby/1.8/gems/tilt-1.3.4/tilt.gemspec +119 -0
  1080. data/vendor/bundle/ruby/1.8/specifications/haml-3.1.8.gemspec +34 -0
  1081. data/vendor/bundle/ruby/1.8/specifications/rack-1.5.2.gemspec +36 -0
  1082. data/vendor/bundle/ruby/1.8/specifications/rack-protection-1.4.0.gemspec +34 -0
  1083. data/vendor/bundle/ruby/1.8/specifications/rake-10.0.3.gemspec +34 -0
  1084. data/vendor/bundle/ruby/1.8/specifications/sinatra-1.3.5.gemspec +37 -0
  1085. data/vendor/bundle/ruby/1.8/specifications/stomp-1.2.8.gemspec +31 -0
  1086. data/vendor/bundle/ruby/1.8/specifications/thor-0.17.0.gemspec +30 -0
  1087. data/vendor/bundle/ruby/1.8/specifications/tilt-1.3.4.gemspec +98 -0
  1088. metadata +1263 -2
@@ -0,0 +1,2078 @@
1
+ = Sinatra
2
+ <i>Atención: Este documento es una traducción de la versión en inglés y puede estar desactualizado.</i>
3
+
4
+ Sinatra es un DSL para crear aplicaciones web rápidamente en Ruby con un mínimo
5
+ esfuerzo:
6
+
7
+ # miapp.rb
8
+ require 'sinatra'
9
+
10
+ get '/' do
11
+ 'Hola mundo!'
12
+ end
13
+
14
+ Instalá la gem y ejecutá la aplicación con:
15
+
16
+ gem install sinatra
17
+ ruby -rubygems miapp.rb
18
+
19
+ Podés verla en: http://localhost:4567
20
+
21
+ Es recomendable además ejecutar <tt>gem install thin</tt>, ya que Sinatra lo va
22
+ a utilizar cuando esté disponible.
23
+
24
+ == Rutas
25
+
26
+ En Sinatra, una ruta está compuesta por un método HTTP y un patrón de una URL.
27
+ Cada ruta se asocia con un bloque:
28
+
29
+ get '/' do
30
+ .. mostrar algo ..
31
+ end
32
+
33
+ post '/' do
34
+ .. crear algo ..
35
+ end
36
+
37
+ put '/' do
38
+ .. reemplazar algo ..
39
+ end
40
+
41
+ patch '/' do
42
+ .. modificar algo ..
43
+ end
44
+
45
+ delete '/' do
46
+ .. aniquilar algo ..
47
+ end
48
+
49
+ options '/' do
50
+ .. informar algo ..
51
+ end
52
+
53
+
54
+ Las rutas son comparadas en el orden en el que son definidas. La primer ruta
55
+ que coincide con la petición es invocada.
56
+
57
+ Los patrones de las rutas pueden incluir parámetros nombrados, accesibles a
58
+ través de el hash <tt>params</tt>:
59
+
60
+ get '/hola/:nombre' do
61
+ # coincide con "GET /hola/foo" y "GET /hola/bar"
62
+ # params[:nombre] es 'foo' o 'bar'
63
+ "Hola #{params[:nombre]}!"
64
+ end
65
+
66
+ También podés acceder a los parámetros nombrados usando parámetros de bloque:
67
+
68
+ get '/hola/:nombre' do |n|
69
+ "Hola #{n}!"
70
+ end
71
+
72
+ Los patrones de ruta también pueden incluir parámetros splat (o wildcard),
73
+ accesibles a través del arreglo <tt>params[:splat]</tt>:
74
+
75
+ get '/decir/*/al/*' do
76
+ # coincide con /decir/hola/al/mundo
77
+ params[:splat] # => ["hola", "mundo"]
78
+ end
79
+
80
+ get '/descargar/*.*' do
81
+ # coincide con /descargar/path/al/archivo.xml
82
+ params[:splat] # => ["path/al/archivo", "xml"]
83
+ end
84
+
85
+ O, con parámetros de bloque:
86
+
87
+ get '/descargar/*.*' do |path, ext|
88
+ [path, ext] # => ["path/al/archivo", "xml"]
89
+ end
90
+
91
+ Rutas con Expresiones Regulares:
92
+
93
+ get %r{/hola/([\w]+)} do
94
+ "Hola, #{params[:captures].first}!"
95
+ end
96
+
97
+ O con un parámetro de bloque:
98
+
99
+ get %r{/hola/([\w]+)} do |c|
100
+ "Hola, #{c}!"
101
+ end
102
+
103
+ Los patrones de ruta pueden contener parámetros opcionales:
104
+
105
+ get '/posts.?:formato?' do
106
+ # coincide con "GET /posts" y además admite cualquier extensión, por
107
+ # ejemplo, "GET /posts.json", "GET /posts.xml", etc.
108
+ end
109
+
110
+ A propósito, a menos que desactivés la protección para el ataque <em>path
111
+ traversal</em> (ver más abajo), el path de la petición puede ser modificado
112
+ antes de que se compare con los de tus rutas.
113
+
114
+ === Condiciones
115
+
116
+ Las rutas pueden incluir una variedad de condiciones de selección, como por
117
+ ejemplo el user agent:
118
+
119
+ get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
120
+ "Estás usando la versión de Songbird #{params[:agent][0]}"
121
+ end
122
+
123
+ get '/foo' do
124
+ # Coincide con browsers que no sean songbird
125
+ end
126
+
127
+ Otras condiciones disponibles son +host_name+ y +provides+:
128
+
129
+ get '/', :host_name => /^admin\./ do
130
+ "Área de Administración, Acceso denegado!"
131
+ end
132
+
133
+ get '/', :provides => 'html' do
134
+ haml :index
135
+ end
136
+
137
+ get '/', :provides => ['rss', 'atom', 'xml'] do
138
+ builder :feed
139
+ end
140
+
141
+ Podés definir tus propias condiciones fácilmente:
142
+
143
+ set(:probabilidad) { |valor| condition { rand <= valor } }
144
+
145
+ get '/gana_un_auto', :probabilidad => 0.1 do
146
+ "Ganaste!"
147
+ end
148
+
149
+ get '/gana_un_auto' do
150
+ "Lo siento, perdiste."
151
+ end
152
+
153
+ Si tu condición acepta más de un argumento, podés pasarle un arreglo. Al
154
+ definir la condición puede resultarte conveniente utilizar el operador splat en
155
+ la lista de parámetros:
156
+
157
+ set(:autorizar) do |*roles| # <- mirá el splat
158
+ condition do
159
+ unless sesion_iniciada? && roles.any? {|rol| usuario_actual.tiene_rol? rol }
160
+ redirect "/iniciar_sesion/", 303
161
+ end
162
+ end
163
+ end
164
+
165
+ get "/mi/cuenta/", :autorizar => [:usuario, :administrador] do
166
+ "Detalles de mi cuenta"
167
+ end
168
+
169
+ get "/solo/administradores/", :autorizar => :administrador do
170
+ "Únicamente para administradores!"
171
+ end
172
+
173
+ === Valores de Retorno
174
+
175
+ El valor de retorno de un bloque de ruta determina al menos el cuerpo de la
176
+ respuesta que se le pasa al cliente HTTP o al siguiente middleware en la pila
177
+ de Rack. Lo más común es que sea un string, como en los ejemplos anteriores.
178
+ Sin embargo, otros valor también son aceptados.
179
+
180
+ Podés devolver cualquier objeto que sea una respuesta Rack válida, un objeto
181
+ que represente el cuerpo de una respuesta Rack o un código de estado HTTP:
182
+
183
+ * Un arreglo con tres elementos: <tt>[estado (Fixnum), cabeceras (Hash), cuerpo de la respuesta (responde a #each)]</tt>
184
+ * Un arreglo con dos elementos: <tt>[estado (Fixnum), cuerpo de la respuesta (responde a #each)]</tt>
185
+ * Un objeto que responde a <tt>#each</tt> y que le pasa únicamente strings al bloque dado
186
+ * Un Fixnum representando el código de estado
187
+
188
+ De esa manera podemos, por ejemplo, implementar fácilmente un streaming:
189
+
190
+ class Stream
191
+ def each
192
+ 100.times { |i| yield "#{i}\n" }
193
+ end
194
+ end
195
+
196
+ get('/') { Stream.new }
197
+
198
+ === Comparadores de Rutas Personalizados
199
+
200
+ Como se mostró anteriormente, Sinatra permite utilizar Strings y expresiones
201
+ regulares para definir las rutas. Sin embargo, la cosa no termina ahí. Podés
202
+ definir tus propios comparadores muy fácilmente:
203
+
204
+ class PattronCualquieraMenos
205
+ Match = Struct.new(:captures)
206
+
207
+ def initialize(excepto)
208
+ @excepto = excepto
209
+ @capturas = Match.new([])
210
+ end
211
+
212
+ def match(str)
213
+ @capturas unless @excepto === str
214
+ end
215
+ end
216
+
217
+ def cualquiera_menos(patron)
218
+ PatronCualquieraMenos.new(patron)
219
+ end
220
+
221
+ get cualquiera_menos("/index") do
222
+ # ...
223
+ end
224
+
225
+ Tené en cuenta que el ejemplo anterior es un poco rebuscado. Un resultado
226
+ similar puede conseguirse más sencillamente:
227
+
228
+ get // do
229
+ pass if request.path_info == "/index"
230
+ # ...
231
+ end
232
+
233
+ O, usando un lookahead negativo:
234
+
235
+ get %r{^(?!/index$)} do
236
+ # ...
237
+ end
238
+
239
+ == Archivos Estáticos
240
+
241
+ Los archivos estáticos son servidos desde el directorio público
242
+ <tt>./public</tt>. Podés especificar una ubicación diferente ajustando la
243
+ opción <tt>:public_folder</tt>:
244
+
245
+ set :public_folder, File.dirname(__FILE__) + '/estaticos'
246
+
247
+ Notá que el nombre del directorio público no está incluido en la URL. Por
248
+ ejemplo, el archivo <tt>./public/css/style.css</tt> se accede a través de
249
+ <tt>http://ejemplo.com/css/style.css</tt>.
250
+
251
+ Usá la configuración <tt>:static_cache_control</tt> para agregar el encabezado
252
+ <tt>Cache-Control</tt> (ver la sección de configuración para más detalles).
253
+
254
+ == Vistas / Plantillas
255
+
256
+ Cada lenguaje de plantilla se expone a través de un método de renderizado que
257
+ lleva su nombre. Estos métodos simplemente devuelven un string:
258
+
259
+ get '/' do
260
+ erb :index
261
+ end
262
+
263
+ Renderiza <tt>views/index.erb</tt>.
264
+
265
+ En lugar del nombre de la plantilla podés proporcionar directamente el
266
+ contenido de la misma:
267
+
268
+ get '/' do
269
+ codigo = "<%= Time.now %>"
270
+ erb codigo
271
+ end
272
+
273
+ Los métodos de renderizado, aceptan además un segundo argumento, el hash de
274
+ opciones:
275
+
276
+ get '/' do
277
+ erb :index, :layout => :post
278
+ end
279
+
280
+ Renderiza <tt>views/index.erb</tt> embebido en <tt>views/post.erb</tt> (por
281
+ defecto, la plantilla :index es embebida en <tt>views/layout.erb</tt> siempre y
282
+ cuando este último archivo exista).
283
+
284
+ Cualquier opción que Sinatra no entienda le será pasada al motor de renderizado
285
+ de la plantilla:
286
+
287
+ get '/' do
288
+ haml :index, :format => :html5
289
+ end
290
+
291
+ Además podés definir las opciones para un lenguaje de plantillas de forma
292
+ general:
293
+
294
+ set :haml, :format => :html5
295
+
296
+ get '/' do
297
+ haml :index
298
+ end
299
+
300
+ Las opciones pasadas al método de renderizado tienen precedencia sobre las
301
+ definidas mediante +set+.
302
+
303
+ Opciones disponibles:
304
+
305
+ [locals]
306
+ Lista de variables locales pasadas al documento. Resultan muy útiles cuando
307
+ se combinan con parciales.
308
+ Ejemplo: <tt>erb "<%= foo %>", :locals => {:foo => "bar"}</tt>
309
+
310
+ [default_encoding]
311
+ Encoding utilizado cuando el de un string es dudoso. Por defecto toma el
312
+ valor de <tt>settings.default_encoding</tt>.
313
+
314
+ [views]
315
+ Directorio desde donde se cargan las vistas. Por defecto toma el valor de
316
+ <tt>settings.views</tt>.
317
+
318
+ [layout]
319
+ Si es +true+ o +false+ indica que se debe usar, o nó, un layout,
320
+ respectivamente. También puede ser un símbolo que especifique qué plantilla
321
+ usar. Ejemplo: <tt>erb :index, :layout => !request.xhr?</tt>
322
+
323
+ [content_type]
324
+ Content-Type que produce la plantilla. El valor por defecto depende de cada
325
+ lenguaje de plantillas.
326
+
327
+ [scope]
328
+ Ámbito en el que se renderiza la plantilla. Por defecto utiliza la instancia
329
+ de la aplicación. Tené en cuenta que si cambiás esta opción las variables de
330
+ instancia y los helpers van a dejar de estar disponibles.
331
+
332
+ [layout_engine]
333
+ Motor de renderizado de plantillas que usa para el layout. Resulta
334
+ conveniente para lenguajes que no soportan layouts. Por defecto toma el valor
335
+ del motor usado para renderizar la plantilla.
336
+ Ejemplo: <tt>set :rdoc, :layout_engine => :erb</tt>
337
+
338
+ Se asume que las plantillas están ubicadas directamente bajo el directorio
339
+ <tt>./views</tt>. Para usar un directorio de vistas diferente:
340
+
341
+ set :views, settings.root + '/plantillas'
342
+
343
+ Es importante acordarse que siempre tenés que referenciar a las plantillas con
344
+ símbolos, incluso cuando se encuentran en un subdirectorio (en este caso tenés
345
+ que usar <tt>:'subdir/plantilla'</tt>). Tenés que usar un símbolo porque los
346
+ métodos de renderización van a renderizar directamente cualquier string que se
347
+ les pase como argumento.
348
+
349
+ === Lenguajes de Plantillas Disponibles
350
+
351
+ Algunos lenguajes tienen varias implementaciones. Para especificar que
352
+ implementación usar (y para ser thread-safe), deberías requerirla antes de
353
+ usarla:
354
+
355
+ require 'rdiscount' # o require 'bluecloth'
356
+ get('/') { markdown :index }
357
+
358
+ === Plantillas Haml
359
+
360
+ Dependencias:: {haml}[http://haml.info/]
361
+ Extensiones de Archivo:: <tt>.haml</tt>
362
+ Ejemplo:: <tt>haml :index, :format => :html5</tt>
363
+
364
+ === Plantillas Erb
365
+
366
+ Dependencias:: {erubis}[http://www.kuwata-lab.com/erubis/] o
367
+ erb (incluida en Ruby)
368
+ Extensiones de Archivo:: <tt>.erb</tt>, <tt>.rhtml</tt> o <tt>.erubis</tt>
369
+ (solamente con Erubis)
370
+ Ejemplo:: <tt>erb :index</tt>
371
+
372
+ === Plantillas Builder
373
+
374
+ Dependencias:: {builder}[http://builder.rubyforge.org/]
375
+ Extensiones de Archivo:: <tt>.builder</tt>
376
+ Ejemplo:: <tt>builder { |xml| xml.em "hola" }</tt>
377
+
378
+ Además, acepta un bloque con la definición de la plantilla (ver el ejemplo).
379
+
380
+ === Plantillas Nokogiri
381
+
382
+ Dependencias:: {nokogiri}[http://nokogiri.org/]
383
+ Extensiones de Archivo:: <tt>.nokogiri</tt>
384
+ Ejemplo:: <tt>nokogiri { |xml| xml.em "hola" }</tt>
385
+
386
+ Además, acepta un bloque con la definición de la plantilla (ver el ejemplo).
387
+
388
+ === Plantillas Sass
389
+
390
+ Dependencias:: {sass}[http://sass-lang.com/]
391
+ Extensiones de Archivo:: <tt>.sass</tt>
392
+ Ejemplo:: <tt>sass :stylesheet, :style => :expanded</tt>
393
+
394
+ === Plantillas SCSS
395
+
396
+ Dependencias:: {scss}[http://sass-lang.com/]
397
+ Extensiones de Archivo:: <tt>.scss</tt>
398
+ Ejemplo:: <tt>scss :stylesheet, :style => :expanded</tt>
399
+
400
+ === Plantillas Less
401
+
402
+ Dependencias:: {less}[http://www.lesscss.org/]
403
+ Extensiones de Archivo:: <tt>.less</tt>
404
+ Ejemplo:: <tt>less :stylesheet</tt>
405
+
406
+ === Plantillas Liquid
407
+
408
+ Dependencias:: {liquid}[http://www.liquidmarkup.org/]
409
+ Extensiones de Archivo:: <tt>.liquid</tt>
410
+ Ejemplo:: <tt>liquid :index, :locals => { :clave => 'valor' }</tt>
411
+
412
+ Como no vas a poder llamar a métodos de Ruby (excepto por +yield+) desde una
413
+ plantilla Liquid, casi siempre vas a querer pasarle locales.
414
+
415
+ === Plantillas Markdown
416
+
417
+ Dependencias:: {rdiscount}[https://github.com/rtomayko/rdiscount],
418
+ {redcarpet}[https://github.com/tanoku/redcarpet],
419
+ {bluecloth}[http://deveiate.org/projects/BlueCloth],
420
+ {kramdown}[http://kramdown.rubyforge.org/] *o*
421
+ {maruku}[http://maruku.rubyforge.org/]
422
+ Extensiones de Archivo:: <tt>.markdown</tt>, <tt>.mkd</tt> y <tt>.md</tt>
423
+ Ejemplo:: <tt>markdown :index, :layout_engine => :erb</tt>
424
+
425
+ No es posible llamar métodos desde markdown, ni pasarle locales. Por lo tanto,
426
+ generalmente vas a usarlo en combinación con otro motor de renderizado:
427
+
428
+ erb :resumen, :locals => { :texto => markdown(:introduccion) }
429
+
430
+ Tené en cuenta que también podés llamar al método +markdown+ desde otras
431
+ plantillas:
432
+
433
+ %h1 Hola Desde Haml!
434
+ %p= markdown(:saludos)
435
+
436
+ Como no podés utilizar Ruby desde Markdown, no podés usar layouts escritos en
437
+ Markdown. De todos modos, es posible usar un motor de renderizado para el
438
+ layout distinto al de la plantilla pasando la opción <tt>:layout_engine</tt>.
439
+
440
+ === Plantillas Textile
441
+
442
+ Dependencias:: {RedCloth}[http://redcloth.org/]
443
+ Extensiones de Archivo:: <tt>.textile</tt>
444
+ Ejemplo:: <tt>textile :index, :layout_engine => :erb</tt>
445
+
446
+ No es posible llamar métodos desde textile, ni pasarle locales. Por lo tanto,
447
+ generalmente vas a usarlo en combinación con otro motor de renderizado:
448
+
449
+ erb :resumen, :locals => { :texto => textile(:introduccion) }
450
+
451
+ Tené en cuenta que también podés llamar al método +textile+ desde otras
452
+ plantillas:
453
+
454
+ %h1 Hola Desde Haml!
455
+ %p= textile(:saludos)
456
+
457
+ Como no podés utilizar Ruby desde Textile, no podés usar layouts escritos en
458
+ Textile. De todos modos, es posible usar un motor de renderizado para el
459
+ layout distinto al de la plantilla pasando la opción <tt>:layout_engine</tt>.
460
+
461
+ === Plantillas RDoc
462
+
463
+ Dependencias:: {rdoc}[http://rdoc.rubyforge.org/]
464
+ Extensiones de Archivo:: <tt>.rdoc</tt>
465
+ Ejemplo:: <tt>rdoc :LEEME, :layout_engine => :erb</tt>
466
+
467
+ No es posible llamar métodos desde rdoc, ni pasarle locales. Por lo tanto,
468
+ generalmente vas a usarlo en combinación con otro motor de renderizado:
469
+
470
+ erb :resumen, :locals => { :texto => rdoc(:introduccion) }
471
+
472
+ Tené en cuenta que también podés llamar al método +rdoc+ desde otras
473
+ plantillas:
474
+
475
+ %h1 Hola Desde Haml!
476
+ %p= rdoc(:saludos)
477
+
478
+ Como no podés utilizar Ruby desde RDoc, no podés usar layouts escritos en RDoc.
479
+ De todos modos, es posible usar un motor de renderizado para el layout distinto
480
+ al de la plantilla pasando la opción <tt>:layout_engine</tt>.
481
+
482
+ === Plantillas Radius
483
+
484
+ Dependencias:: {radius}[http://radius.rubyforge.org/]
485
+ Extensiones de Archivo:: <tt>.radius</tt>
486
+ Ejemplo:: <tt>radius :index, :locals => { :clave => 'valor' }</tt>
487
+
488
+ Como no vas a poder llamar a métodos de Ruby (excepto por +yield+) desde una
489
+ plantilla Radius, casi siempre vas a querer pasarle locales.
490
+
491
+ === Plantillas Markaby
492
+
493
+ Dependencias:: {markaby}[http://markaby.github.com/]
494
+ Extensiones de Archivo:: <tt>.mab</tt>
495
+ Ejemplos:: <tt>markaby { h1 "Bienvenido!" }</tt>
496
+
497
+ Además, acepta un bloque con la definición de la plantilla (ver el ejemplo).
498
+
499
+ === Plantillas Slim
500
+
501
+ Dependencias:: {slim}[http://slim-lang.com/]
502
+ Extensiones de Archivo:: <tt>.slim</tt>
503
+ Ejemplo:: <tt>slim :index</tt>
504
+
505
+ === Plantillas Creole
506
+
507
+ Dependencias:: {creole}[https://github.com/minad/creole]
508
+ Extensiones de Archivo:: <tt>.creole</tt>
509
+ Ejemplo:: <tt>creole :wiki, :layout_engine => :erb</tt>
510
+
511
+ No es posible llamar métodos desde creole, ni pasarle locales. Por lo tanto,
512
+ generalmente vas a usarlo en combinación con otro motor de renderizado:
513
+
514
+ erb :resumen, :locals => { :texto => cerole(:introduccion) }
515
+
516
+ Tené en cuenta que también podés llamar al método +creole+ desde otras
517
+ plantillas:
518
+
519
+ %h1 Hola Desde Haml!
520
+ %p= creole(:saludos)
521
+
522
+ Como no podés utilizar Ruby desde Creole, no podés usar layouts escritos en
523
+ Creloe. De todos modos, es posible usar un motor de renderizado para el layout
524
+ distinto al de la plantilla pasando la opción <tt>:layout_engine</tt>.
525
+
526
+ === Plantillas CoffeeScript
527
+
528
+ Dependencias:: {coffee-script}[https://github.com/josh/ruby-coffee-script]
529
+ y un {mecanismo para ejecutar javascript}[https://github.com/sstephenson/execjs/blob/master/README.md#readme]
530
+ Extensiones de Archivo:: <tt>.coffee</tt>
531
+ Ejemplo:: <tt>coffee :index</tt>
532
+
533
+ === Plantillas Embebidas
534
+
535
+ get '/' do
536
+ haml '%div.titulo Hola Mundo'
537
+ end
538
+
539
+ Renderiza el template embebido en el string.
540
+
541
+ === Accediendo a Variables en Plantillas
542
+
543
+ Las plantillas son evaluadas dentro del mismo contexto que los manejadores de
544
+ ruta. Las variables de instancia asignadas en los manejadores de ruta son
545
+ accesibles directamente por las plantillas:
546
+
547
+ get '/:id' do
548
+ @foo = Foo.find(params[:id])
549
+ haml '%h1= @foo.nombre'
550
+ end
551
+
552
+ O es posible especificar un Hash de variables locales explícitamente:
553
+
554
+ get '/:id' do
555
+ foo = Foo.find(params[:id])
556
+ haml '%h1= bar.nombre', :locals => { :bar => foo }
557
+ end
558
+
559
+ Esto es usado típicamente cuando se renderizan plantillas como parciales desde
560
+ adentro de otras plantillas.
561
+
562
+ === Plantillas Inline
563
+
564
+ Las plantillas pueden ser definidas al final del archivo fuente:
565
+
566
+ require 'rubygems'
567
+ require 'sinatra'
568
+
569
+ get '/' do
570
+ haml :index
571
+ end
572
+
573
+ __END__
574
+
575
+ @@ layout
576
+ %html
577
+ = yield
578
+
579
+ @@ index
580
+ %div.titulo Hola mundo!!!!!
581
+
582
+ NOTA: únicamente las plantillas inline definidas en el archivo fuente que
583
+ requiere sinatra son cargadas automáticamente. Llamá <tt>enable
584
+ :inline_templates</tt> explícitamente si tenés plantillas inline en otros
585
+ archivos fuente.
586
+
587
+ === Plantillas Nombradas
588
+
589
+ Las plantillas también pueden ser definidas usando el método top-level
590
+ <tt>template</tt>:
591
+
592
+ template :layout do
593
+ "%html\n =yield\n"
594
+ end
595
+
596
+ template :index do
597
+ '%div.titulo Hola Mundo!'
598
+ end
599
+
600
+ get '/' do
601
+ haml :index
602
+ end
603
+
604
+ Si existe una plantilla con el nombre "layout", va a ser usada cada vez que
605
+ una plantilla es renderizada. Podés desactivar los layouts individualmente
606
+ pasando <tt>:layout => false</tt> o globalmente con
607
+ <tt>set :haml, :layout => false</tt>:
608
+
609
+ get '/' do
610
+ haml :index, :layout => !request.xhr?
611
+ end
612
+
613
+ === Asociando Extensiones de Archivo
614
+
615
+ Para asociar una extensión de archivo con un motor de renderizado, usá
616
+ <tt>Tilt.register</tt>. Por ejemplo, si querés usar la extensión +tt+ para
617
+ las plantillas Textile, podés hacer lo siguiente:
618
+
619
+ Tilt.register :tt, Tilt[:textile]
620
+
621
+ === Agregando Tu Propio Motor de Renderizado
622
+
623
+ Primero, registrá tu motor con Tilt, y después, creá tu método de renderizado:
624
+
625
+ Tilt.register :mipg, MiMotorParaPlantillaGenial
626
+
627
+ helpers do
628
+ def mypg(*args) render(:mypg, *args) end
629
+ end
630
+
631
+ get '/' do
632
+ mypg :index
633
+ end
634
+
635
+ Renderiza <tt>./views/index.mypg</tt>. Mirá https://github.com/rtomayko/tilt
636
+ para aprender más de Tilt.
637
+
638
+ == Filtros
639
+
640
+ Los filtros +before+ son evaluados antes de cada petición dentro del mismo
641
+ contexto que las rutas. Pueden modificar la petición y la respuesta. Las
642
+ variables de instancia asignadas en los filtros son accesibles por las rutas y
643
+ las plantillas:
644
+
645
+ before do
646
+ @nota = 'Hey!'
647
+ request.path_info = '/foo/bar/baz'
648
+ end
649
+
650
+ get '/foo/*' do
651
+ @nota #=> 'Hey!'
652
+ params[:splat] #=> 'bar/baz'
653
+ end
654
+
655
+ Los filtros +after+ son evaluados después de cada petición dentro del mismo
656
+ contexto y también pueden modificar la petición y la respuesta. Las variables
657
+ de instancia asignadas en los filtros +before+ y en las rutas son accesibles por
658
+ los filtros +after+:
659
+
660
+ after do
661
+ puts response.status
662
+ end
663
+
664
+ Nota: A menos que usés el método +body+ en lugar de simplemente devolver un
665
+ string desde una ruta, el cuerpo de la respuesta no va a estar disponible en
666
+ un filtro after, debido a que todavía no se ha generado.
667
+
668
+ Los filtros aceptan un patrón opcional, que cuando está presente causa que los
669
+ mismos sean evaluados únicamente si el path de la petición coincide con ese
670
+ patrón:
671
+
672
+ before '/protegido/*' do
673
+ autenticar!
674
+ end
675
+
676
+ after '/crear/:slug' do |slug|
677
+ session[:ultimo_slug] = slug
678
+ end
679
+
680
+ Al igual que las rutas, los filtros también pueden aceptar condiciones:
681
+
682
+ before :agent => /Songbird/ do
683
+ # ...
684
+ end
685
+
686
+ after '/blog/*', :host_name => 'ejemplo.com' do
687
+ # ...
688
+ end
689
+
690
+ == Ayudantes
691
+
692
+ Usá el método top-level <tt>helpers</tt> para definir métodos ayudantes que
693
+ pueden ser utilizados dentro de los manejadores de rutas y las plantillas:
694
+
695
+ helpers do
696
+ def bar(nombre)
697
+ "#{nombre}bar"
698
+ end
699
+ end
700
+
701
+ get '/:nombre' do
702
+ bar(params[:nombre])
703
+ end
704
+
705
+ Por cuestiones organizativas, puede resultar conveniente organizar los métodos
706
+ ayudantes en distintos módulos:
707
+
708
+ module FooUtils
709
+ def foo(nombre) "#{nombre}foo" end
710
+ end
711
+
712
+ module BarUtils
713
+ def bar(nombre) "#{nombre}bar" end
714
+ end
715
+
716
+ helpers FooUtils, BarUtils
717
+
718
+ El efecto de utilizar <tt>helpers</tt> de esta manera es el mismo que resulta de
719
+ incluir los módulos en la clase de la aplicación.
720
+
721
+ === Usando Sesiones
722
+
723
+ Una sesión es usada para mantener el estado a través de distintas peticiones.
724
+ Cuando están activadas, tenés un hash de sesión para cada sesión de usuario:
725
+
726
+ enable :sessions
727
+
728
+ get '/' do
729
+ "valor = " << session[:valor].inspect
730
+ end
731
+
732
+ get '/:valor' do
733
+ session[:valor] = params[:valor]
734
+ end
735
+
736
+ Tené en cuenta que <tt>enable :sessions</tt> guarda todos los datos en una
737
+ cookie, lo que no es siempre deseable (guardar muchos datos va a incrementar
738
+ tu tráfico, por citar un ejemplo). Podés usar cualquier middleware Rack para
739
+ manejar sesiones, de la misma manera que usarías cualquier otro middleware,
740
+ pero con la salvedad de que *no* tenés que llamar a <tt>enable :sessions</tt>:
741
+
742
+ use Rack::Session::Pool, :expire_after => 2592000
743
+
744
+ get '/' do
745
+ "valor = " << session[:valor].inspect
746
+ end
747
+
748
+ get '/:valor' do
749
+ session[:valor] = params[:valor]
750
+ end
751
+
752
+ Para incrementar la seguridad, los datos de la sesión almacenados en
753
+ la cookie son firmados con un secreto de sesión. Este secreto, es
754
+ generado aleatoriamente por Sinatra. De cualquier manera, hay que
755
+ tener en cuenta que cada vez que inicies la aplicación se va a generar
756
+ uno nuevo. Así, si querés que todas las instancias de tu aplicación
757
+ compartan un único secreto, tenés que definirlo vos:
758
+
759
+ set :session_secret, 'super secreto'
760
+
761
+ Si necesitás una configuración más específica, +sessions+ acepta un
762
+ Hash con opciones:
763
+
764
+ set :sessions, :domain => 'foo.com'
765
+
766
+ === Interrupción
767
+
768
+ Para detener inmediatamente una petición dentro de un filtro o una ruta usá:
769
+
770
+ halt
771
+
772
+ También podés especificar el estado:
773
+
774
+ halt 410
775
+
776
+ O el cuerpo:
777
+
778
+ halt 'esto va a ser el cuerpo'
779
+
780
+ O los dos:
781
+
782
+ halt 401, 'salí de acá!'
783
+
784
+ Con cabeceras:
785
+
786
+ halt 402, { 'Content-Type' => 'text/plain' }, 'venganza'
787
+
788
+ Obviamente, es posible utilizar +halt+ con una plantilla:
789
+
790
+ halt erb(:error)
791
+
792
+ === Paso
793
+
794
+ Una ruta puede pasarle el procesamiento a la siguiente ruta que coincida con
795
+ la petición usando <tt>pass</tt>:
796
+
797
+ get '/adivina/:quien' do
798
+ pass unless params[:quien] == 'Franco'
799
+ 'Adivinaste!'
800
+ end
801
+
802
+ get '/adivina/*' do
803
+ 'Erraste!'
804
+ end
805
+
806
+ Se sale inmediatamente del bloque de la ruta y se le pasa el control a la
807
+ siguiente ruta que coincida. Si no coincide ninguna ruta, se devuelve un 404.
808
+
809
+ === Ejecutando Otra Ruta
810
+
811
+ Cuando querés obtener el resultado de la llamada a una ruta, +pass+ no te va a
812
+ servir. Para lograr esto, podés usar +call+:
813
+
814
+ get '/foo' do
815
+ status, headers, body = call env.merge("PATH_INFO" => '/bar')
816
+ [status, headers, body.map(&:upcase)]
817
+ end
818
+
819
+ get '/bar' do
820
+ "bar"
821
+ end
822
+
823
+ Notá que en el ejemplo anterior, es conveniente mover <tt>"bar"</tt> a un
824
+ helper, y llamarlo desde <tt>/foo</tt> y <tt>/bar</tt>. Así, vas a simplificar
825
+ las pruebas y a mejorar el rendimiento.
826
+
827
+ Si querés que la petición se envíe a la misma instancia de la aplicación en
828
+ lugar de a otra, usá <tt>call!</tt> en lugar de <tt>call</tt>.
829
+
830
+ En la especificación de Rack podés encontrar más información sobre
831
+ <tt>call</tt>.
832
+
833
+ === Asignando el Código de Estado, los Encabezados y el Cuerpo de una Respuesta
834
+
835
+ Es posible, y se recomienda, asignar el código de estado y el cuerpo de una
836
+ respuesta con el valor de retorno de una ruta. De cualquier manera, en varios
837
+ escenarios, puede que sea conveniente asignar el cuerpo en un punto arbitrario
838
+ del flujo de ejecución con el método +body+. A partir de ahí, podés usar ese
839
+ mismo método para acceder al cuerpo de la respuesta:
840
+
841
+ get '/foo' do
842
+ body "bar"
843
+ end
844
+
845
+ after do
846
+ puts body
847
+ end
848
+
849
+ También es posible pasarle un bloque a +body+, que será ejecutado por el Rack
850
+ handler (podés usar esto para implementar streaming, mirá "Valores de retorno").
851
+
852
+ De manera similar, también podés asignar el código de estado y encabezados:
853
+
854
+ get '/foo' do
855
+ status 418
856
+ headers \
857
+ "Allow" => "BREW, POST, GET, PROPFIND, WHEN",
858
+ "Refresh" => "Refresh: 20; http://www.ietf.org/rfc/rfc2324.txt"
859
+ body "I'm a tea pot!"
860
+ end
861
+
862
+ También, al igual que +body+, tanto +status+ como +headers+ pueden utilizarse
863
+ para obtener sus valores cuando no se les pasa argumentos.
864
+
865
+ === Streaming De Respuestas
866
+
867
+ A veces vas a querer empezar a enviar la respuesta a pesar de que todavía no
868
+ terminaste de generar su cuerpo. También es posible que, en algunos casos,
869
+ quieras seguir enviando información hasta que el cliente cierre la conexión.
870
+ Cuando esto ocurra, el +stream+ helper te va a ser de gran ayuda:
871
+
872
+ get '/' do
873
+ stream do |out|
874
+ out << "Esto va a ser legen -\n"
875
+ sleep 0.5
876
+ out << " (esperalo) \n"
877
+ sleep 1
878
+ out << "- dario!\n"
879
+ end
880
+ end
881
+
882
+ Podés implementar APIs de streaming,
883
+ {Server-Sent Events}[http://dev.w3.org/html5/eventsource/] y puede ser usado
884
+ como base para {WebSockets}[http://es.wikipedia.org/wiki/WebSockets]. También
885
+ puede ser usado para incrementar el throughput si solo una parte del contenido
886
+ depende de un recurso lento.
887
+
888
+ Hay que tener en cuenta que el comportamiento del streaming, especialmente el
889
+ número de peticiones concurrentes, depende del servidor web utilizado para
890
+ servir la aplicación. Puede que algunos servidores, como es el caso de
891
+ WEBRick, no soporten streaming directamente, así el cuerpo de la respuesta será
892
+ enviado completamente de una vez cuando el bloque pasado a +stream+ finalice su
893
+ ejecución. Si estás usando Shotgun, el streaming no va a funcionar.
894
+
895
+ Cuando se pasa +keep_open+ como parámetro, no se va a enviar el mensaje
896
+ +close+ al objeto de stream. Queda en vos cerrarlo en el punto de ejecución
897
+ que quieras. Nuevamente, hay que tener en cuenta que este comportamiento es
898
+ posible solo en servidores que soporten eventos, como Thin o Rainbows. El
899
+ resto de los servidores van a cerrar el stream de todos modos:
900
+
901
+ set :server, :thin
902
+ conexiones = []
903
+
904
+ get '/' do
905
+ # mantenemos abierto el stream
906
+ stream(:keep_open) { |salida| conexiones << salida }
907
+ end
908
+
909
+ post '/' do
910
+ # escribimos a todos los streams abiertos
911
+ conexiones.each { |salida| salida << params[:mensaje] << "\n" }
912
+ "mensaje enviado"
913
+ end
914
+
915
+ === Log (Registro)
916
+
917
+ En el ámbito de la petición, el helper +logger+ (registrador) expone
918
+ una instancia de +Logger+:
919
+
920
+ get '/' do
921
+ logger.info "cargando datos"
922
+ # ...
923
+ end
924
+
925
+ Este logger tiene en cuenta la configuración de logueo de tu Rack
926
+ handler. Si el logueo está desactivado, este método va a devolver un
927
+ objeto que se comporta como un logger pero que en realidad no hace
928
+ nada. Así, no vas a tener que preocuparte por esta situación.
929
+
930
+ Tené en cuenta que el logueo está habilitado por defecto únicamente
931
+ para <tt>Sinatra::Application</tt>. Si heredaste de
932
+ <tt>Sinatra::Base</tt>, probablemente quieras habilitarlo manualmente:
933
+
934
+ class MiApp < Sinatra::Base
935
+ configure :production, :development do
936
+ enable :logging
937
+ end
938
+ end
939
+
940
+ Para evitar que se inicialice cualquier middleware de logging, configurá
941
+ +logging+ a +nil+. Tené en cuenta que, cuando hagas esto, +logger+ va a
942
+ devolver +nil+. Un caso común es cuando querés usar tu propio logger. Sinatra
943
+ va a usar lo que encuentre en <tt>env['rack.logger']</tt>.
944
+
945
+ === Tipos Mime
946
+
947
+ Cuando usás <tt>send_file</tt> o archivos estáticos tal vez tengas tipos mime
948
+ que Sinatra no entiende. Usá +mime_type+ para registrarlos a través de la
949
+ extensión de archivo:
950
+
951
+ configure do
952
+ mime_type :foo, 'text/foo'
953
+ end
954
+
955
+ También lo podés usar con el ayudante +content_type+:
956
+
957
+ get '/' do
958
+ content_type :foo
959
+ "foo foo foo"
960
+ end
961
+
962
+ === Generando URLs
963
+
964
+ Para generar URLs deberías usar el método +url+. Por ejemplo, en Haml:
965
+
966
+ %a{:href => url('/foo')} foo
967
+
968
+ Tiene en cuenta proxies inversos y encaminadores de Rack, si están presentes.
969
+
970
+ Este método también puede invocarse mediante su alias +to+ (mirá un ejemplo
971
+ a continuación).
972
+
973
+ === Redirección del Navegador
974
+
975
+ Podés redireccionar al navegador con el método +redirect+:
976
+
977
+ get '/foo' do
978
+ redirect to('/bar')
979
+ end
980
+
981
+ Cualquier parámetro adicional se utiliza de la misma manera que los argumentos
982
+ pasados a +halt+:
983
+
984
+ redirect to('/bar'), 303
985
+ redirect 'http://google.com', 'te confundiste de lugar, compañero'
986
+
987
+ También podés redireccionar fácilmente de vuelta hacia la página desde donde
988
+ vino el usuario con +redirect back+:
989
+
990
+ get '/foo' do
991
+ "<a href='/bar'>hacer algo</a>"
992
+ end
993
+
994
+ get '/bar' do
995
+ hacer_algo
996
+ redirect back
997
+ end
998
+
999
+ Para pasar argumentos con una redirección, podés agregarlos a la cadena de
1000
+ búsqueda:
1001
+
1002
+ redirect to('/bar?suma=42')
1003
+
1004
+ O usar una sesión:
1005
+
1006
+ enable :sessions
1007
+
1008
+ get '/foo' do
1009
+ session[:secreto] = 'foo'
1010
+ redirect to('/bar')
1011
+ end
1012
+
1013
+ get '/bar' do
1014
+ session[:secreto]
1015
+ end
1016
+
1017
+ === Cache Control
1018
+
1019
+ Asignar tus encabezados correctamente es el cimiento para realizar un cacheo
1020
+ HTTP correcto.
1021
+
1022
+ Podés asignar el encabezado Cache-Control fácilmente:
1023
+
1024
+ get '/' do
1025
+ cache_control :public
1026
+ "cachealo!"
1027
+ end
1028
+
1029
+ Pro tip: configurar el cacheo en un filtro +before+:
1030
+
1031
+ before do
1032
+ cache_control :public, :must_revalidate, :max_age => 60
1033
+ end
1034
+
1035
+ Si estás usando el helper +expires+ para definir el encabezado correspondiente,
1036
+ <tt>Cache-Control</tt> se va a definir automáticamente:
1037
+
1038
+ before do
1039
+ expires 500, :public, :must_revalidate
1040
+ end
1041
+
1042
+ Para usar cachés adecuadamente, deberías considerar usar +etag+ o
1043
+ +last_modified+. Es recomendable que llames a estos helpers *antes* de hacer
1044
+ cualquier trabajo pesado, ya que van a enviar la respuesta inmediatamente si
1045
+ el cliente ya tiene la versión actual en su caché:
1046
+
1047
+ get '/articulo/:id' do
1048
+ @articulo = Articulo.find params[:id]
1049
+ last_modified @articulo.updated_at
1050
+ etag @articulo.sha1
1051
+ erb :articulo
1052
+ end
1053
+
1054
+ También es posible usar una
1055
+ {weak ETag}[http://en.wikipedia.org/wiki/HTTP_ETag#Strong_and_weak_validation]:
1056
+
1057
+ etag @articulo.sha1, :weak
1058
+
1059
+ Estos helpers no van a cachear nada por vos, sino que van a facilitar la
1060
+ información necesaria para poder hacerlo. Si estás buscando soluciones rápidas
1061
+ de cacheo con proxys inversos, mirá
1062
+ {rack-cache}[http://rtomayko.github.com/rack-cache/]:
1063
+
1064
+ require "rack/cache"
1065
+ require "sinatra"
1066
+
1067
+ use Rack::Cache
1068
+
1069
+ get '/' do
1070
+ cache_control :public, :max_age => 36000
1071
+ sleep 5
1072
+ "hola"
1073
+ end
1074
+
1075
+ Usá la configuración <tt>:static_cache_control</tt> para agregar el encabezado
1076
+ <tt>Cache-Control</tt> a archivos estáticos (ver la sección de configuración
1077
+ para más detalles).
1078
+
1079
+ De acuerdo con la RFC 2616 tu aplicación debería comportarse diferente si a las
1080
+ cabeceras If-Match o If-None-Match se le asigna el valor <tt>*</tt> cuando el
1081
+ recurso solicitado ya existe. Sinatra asume para peticiones seguras (como get)
1082
+ e idempotentes (como put) que el recurso existe, mientras que para el resto
1083
+ (como post), que no. Podes cambiar este comportamiento con la opción
1084
+ <tt>:new_resource</tt>:
1085
+
1086
+ get '/crear' do
1087
+ etag '', :new_resource => true
1088
+ Articulo.create
1089
+ erb :nuevo_articulo
1090
+ end
1091
+
1092
+ Si querés seguir usando una weak ETag, indicalo con la opción <tt>:kind</tt>:
1093
+
1094
+ etag '', :new_resource => true, :kind => :weak
1095
+
1096
+ === Enviando Archivos
1097
+
1098
+ Para enviar archivos, podés usar el método <tt>send_file</tt>:
1099
+
1100
+ get '/' do
1101
+ send_file 'foo.png'
1102
+ end
1103
+
1104
+ Además acepta un par de opciones:
1105
+
1106
+ send_file 'foo.png', :type => :jpg
1107
+
1108
+ Estas opciones son:
1109
+
1110
+ [filename]
1111
+ nombre del archivo devuelto, por defecto es el nombre real del archivo.
1112
+
1113
+ [last_modified]
1114
+ valor para el encabezado Last-Modified, por defecto toma el mtime del archivo.
1115
+
1116
+ [type]
1117
+ el content type que se va a utilizar, si no está presente se intenta adivinar
1118
+ a partir de la extensión del archivo.
1119
+
1120
+ [disposition]
1121
+ se utiliza para el encabezado Content-Disposition, y puede tomar alguno de los
1122
+ siguientes valores: +nil+ (por defecto), <tt>:attachment</tt> e
1123
+ <tt>:inline</tt>
1124
+
1125
+ [length]
1126
+ encabezado Content-Length, por defecto toma el tamaño del archivo.
1127
+
1128
+ Si el Rack handler lo soporta, se intentará no transmitir directamente desde el
1129
+ proceso de Ruby. Si usás este método, Sinatra se va a encargar automáticamente
1130
+ peticiones de rango.
1131
+
1132
+ === Accediendo al objeto de la petición
1133
+
1134
+ El objeto de la petición entrante puede ser accedido desde el nivel de la
1135
+ petición (filtros, rutas y manejadores de errores) a través del método
1136
+ <tt>request</tt>:
1137
+
1138
+ # app corriendo en http://ejemplo.com/ejemplo
1139
+ get '/foo' do
1140
+ t = %w[text/css text/html application/javascript]
1141
+ request.accept # ['text/html', '*/*']
1142
+ request.accept? 'text/xml' # true
1143
+ request.preferred_type(t) # 'text/html'
1144
+ request.body # cuerpo de la petición enviado por el cliente (ver más abajo)
1145
+ request.scheme # "http"
1146
+ request.script_name # "/ejemplo"
1147
+ request.path_info # "/foo"
1148
+ request.port # 80
1149
+ request.request_method # "GET"
1150
+ request.query_string # ""
1151
+ request.content_length # longitud de request.body
1152
+ request.media_type # tipo de medio de request.body
1153
+ request.host # "ejemplo.com"
1154
+ request.get? # true (hay métodos análogos para los otros verbos)
1155
+ request.form_data? # false
1156
+ request["UNA_CABECERA"] # valor de la cabecera UNA_CABECERA
1157
+ request.referrer # la referencia del cliente o '/'
1158
+ request.user_agent # user agent (usado por la condición :agent)
1159
+ request.cookies # hash de las cookies del browser
1160
+ request.xhr? # es una petición ajax?
1161
+ request.url # "http://ejemplo.com/ejemplo/foo"
1162
+ request.path # "/ejemplo/foo"
1163
+ request.ip # dirección IP del cliente
1164
+ request.secure? # false (sería true sobre ssl)
1165
+ request.forwarded? # true (si se está corriendo atrás de un proxy inverso)
1166
+ requuest.env # hash de entorno directamente entregado por Rack
1167
+ end
1168
+
1169
+ Algunas opciones, como <tt>script_name</tt> o <tt>path_info</tt> pueden
1170
+ también ser escritas:
1171
+
1172
+ before { request.path_info = "/" }
1173
+
1174
+ get "/" do
1175
+ "todas las peticiones llegan acá"
1176
+ end
1177
+
1178
+ El objeto <tt>request.body</tt> es una instancia de IO o StringIO:
1179
+
1180
+ post "/api" do
1181
+ request.body.rewind # en caso de que alguien ya lo haya leído
1182
+ datos = JSON.parse request.body.read
1183
+ "Hola #{datos['nombre']}!"
1184
+ end
1185
+
1186
+ === Archivos Adjuntos
1187
+
1188
+ Podés usar el método helper +attachment+ para indicarle al navegador que
1189
+ almacene la respuesta en el disco en lugar de mostrarla en pantalla:
1190
+
1191
+ get '/' do
1192
+ attachment
1193
+ "guardalo!"
1194
+ end
1195
+
1196
+ También podés pasarle un nombre de archivo:
1197
+
1198
+ get '/' do
1199
+ attachment "info.txt"
1200
+ "guardalo!"
1201
+ end
1202
+
1203
+ === Fecha y Hora
1204
+
1205
+ Sinatra pone a tu disposición el helper +time_for+, que genera un objeto +Time+
1206
+ a partir del valor que recibe como argumento. Este valor puede ser un
1207
+ +String+, pero también es capaz de convertir objetos +DateTime+, +Date+ y de
1208
+ otras clases similares:
1209
+
1210
+ get '/' do
1211
+ pass if Time.now > time_for('Dec 23, 2012')
1212
+ "todavía hay tiempo"
1213
+ end
1214
+
1215
+ Este método es usado internamente por métodos como +expires+ y +last_modified+,
1216
+ entre otros. Por lo tanto, es posible extender el comportamiento de estos
1217
+ métodos sobreescribiendo +time_for+ en tu aplicación:
1218
+
1219
+ helpers do
1220
+ def time_for(value)
1221
+ case value
1222
+ when :ayer then Time.now - 24*60*60
1223
+ when :mañana then Time.now + 24*60*60
1224
+ else super
1225
+ end
1226
+ end
1227
+ end
1228
+
1229
+ get '/' do
1230
+ last_modified :ayer
1231
+ expires :mañana
1232
+ "hola"
1233
+ end
1234
+
1235
+ === Buscando los Archivos de las Plantillas
1236
+
1237
+ El helper <tt>find_template</tt> se utiliza para encontrar los archivos de las
1238
+ plantillas que se van a renderizar:
1239
+
1240
+ find_template settings.views, 'foo', Tilt[:haml] do |archivo|
1241
+ puts "podría ser #{archivo}"
1242
+ end
1243
+
1244
+ Si bien esto no es muy útil, lo interesante es que podés sobreescribir este
1245
+ método, y así enganchar tu propio mecanismo de búsqueda. Por ejemplo, para
1246
+ poder utilizar más de un directorio de vistas:
1247
+
1248
+ set :views, ['vistas', 'plantillas']
1249
+
1250
+ helpers do
1251
+ def find_template(views, name, engine, &block)
1252
+ Array(views).each { |v| super(v, name, engine, &block) }
1253
+ end
1254
+ end
1255
+
1256
+ Otro ejemplo consiste en usar directorios diferentes para los distintos motores
1257
+ de renderizado:
1258
+
1259
+ set :views, :sass => 'vistas/sass', :haml => 'plantillas', :defecto => 'vistas'
1260
+
1261
+ helpers do
1262
+ def find_template(views, name, engine, &block)
1263
+ _, folder = views.detect { |k,v| engine == Tilt[k] }
1264
+ folder ||= views[:defecto]
1265
+ super(folder, name, engine, &block)
1266
+ end
1267
+ end
1268
+
1269
+ ¡Es muy fácil convertir estos ejemplos en una extensión y compartirla!.
1270
+
1271
+ Notá que <tt>find_template</tt> no verifica si un archivo existe realmente, sino
1272
+ que llama al bloque que recibe para cada path posible. Esto no representa un
1273
+ problema de rendimiento debido a que +render+ va a usar +break+ ni bien
1274
+ encuentre un archivo que exista. Además, las ubicaciones de las plantillas (y
1275
+ su contenido) se cachean cuando no estás en el modo de desarrollo. Es bueno
1276
+ tener en cuenta lo anteiror si escribís un método medio loco.
1277
+
1278
+ == Configuración
1279
+
1280
+ Ejecutar una vez, en el inicio, en cualquier entorno:
1281
+
1282
+ configure do
1283
+ # asignando una opción
1284
+ set :opcion, 'valor'
1285
+
1286
+ # asignando varias opciones
1287
+ set :a => 1, :b => 2
1288
+
1289
+ # atajo para `set :opcion, true`
1290
+ enable :opcion
1291
+
1292
+ # atajo para `set :opcion, false`
1293
+ disable :opcion
1294
+
1295
+ # también podés tener configuraciones dinámicas usando bloques
1296
+ set(:css_dir) { File.join(views, 'css') }
1297
+ end
1298
+
1299
+ Ejecutar únicamente cuando el entorno (la variable de entorno RACK_ENV) es
1300
+ <tt>:production</tt>:
1301
+
1302
+ configure :production do
1303
+ ...
1304
+ end
1305
+
1306
+ Ejecutar cuando el entorno es <tt>:production</tt> o <tt>:test</tt>:
1307
+
1308
+ configure :production, :test do
1309
+ ...
1310
+ end
1311
+
1312
+ Podés acceder a estas opciones utilizando el método <tt>settings</tt>:
1313
+
1314
+ configure do
1315
+ set :foo, 'bar'
1316
+ end
1317
+
1318
+ get '/' do
1319
+ settings.foo? # => true
1320
+ settings.foo # => 'bar'
1321
+ ...
1322
+ end
1323
+
1324
+ === Configurando la Protección de Ataques
1325
+
1326
+ Sinatra usa {Rack::Protection}[https://github.com/rkh/rack-protection#readme]
1327
+ para defender a tu aplicación de los ataques más comunes. Si por algún motivo,
1328
+ querés desactivar esta funcionalidad, podés hacerlo como se indica a
1329
+ continuación (tené en cuenta que tu aplicación va a quedar expuesta a un
1330
+ montón de vulnerabilidades bien conocidas):
1331
+
1332
+ disable :protection
1333
+
1334
+ También es posible desactivar una única capa de defensa:
1335
+
1336
+ set :protection, :except => :path_traversal
1337
+
1338
+ O varias:
1339
+
1340
+ set :protection, :except => [:path_traversal, :session_hijacking]
1341
+
1342
+ === Configuraciones Disponibles
1343
+
1344
+ [absolute_redirects] si está deshabilitada, Sinatra va a permitir
1345
+ redirecciones relativas, sin embargo, como consecuencia
1346
+ de esto, va a dejar de cumplir con el RFC 2616 (HTTP
1347
+ 1.1), que solamente permite redirecciones absolutas.
1348
+
1349
+ Activalo si tu apliación está corriendo atrás de un proxy
1350
+ inverso que no se ha configurado adecuadamente. Notá que
1351
+ el helper +url+ va a seguir produciendo URLs absolutas, a
1352
+ menos que le pasés +false+ como segundo parámetro.
1353
+
1354
+ Deshabilitada por defecto.
1355
+
1356
+ [add_charsets] tipos mime a los que el helper <tt>content_type</tt> les
1357
+ añade automáticamente el charset.
1358
+
1359
+ En general, no deberías asignar directamente esta opción,
1360
+ sino añadirle los charsets que quieras:
1361
+
1362
+ settings.add_charsets << "application/foobar"
1363
+
1364
+ [app_file] path del archivo principal de la aplicación, se utiliza
1365
+ para detectar la raíz del proyecto, el directorio de las
1366
+ vistas y el público, así como las plantillas inline.
1367
+
1368
+ [bind] dirección IP que utilizará el servidor integrado (por
1369
+ defecto: 0.0.0.0).
1370
+
1371
+ [default_encoding] encoding utilizado cuando el mismo se desconoce (por
1372
+ defecto <tt>"utf-8"</tt>).
1373
+
1374
+ [dump_errors] mostrar errores en el log.
1375
+
1376
+ [environment] entorno actual, por defecto toma el valor de
1377
+ <tt>ENV['RACK_ENV']</tt>, o <tt>"development"</tt> si no
1378
+ está disponible.
1379
+
1380
+ [logging] define si se utiliza el logger.
1381
+
1382
+ [lock] coloca un lock alrededor de cada petición, procesando
1383
+ solamente una por proceso.
1384
+
1385
+ Habilitá esta opción si tu aplicación no es thread-safe.
1386
+ Se encuentra deshabilitada por defecto.
1387
+
1388
+ [method_override] utiliza el parámetro <tt>_method</tt> para permtir
1389
+ formularios put/delete en navegadores que no los
1390
+ soportan.
1391
+
1392
+ [port] puerto en el que escuchará el servidor integrado.
1393
+
1394
+ [prefixed_redirects] define si inserta <tt>request.script_name</tt> en las
1395
+ redirecciones cuando no se proporciona un path absoluto.
1396
+ De esta manera, cuando está habilitada,
1397
+ <tt>redirect '/foo'</tt> se comporta de la misma manera
1398
+ que <tt>redirect to('/foo')</tt>. Se encuentra
1399
+ deshabilitada por defecto.
1400
+
1401
+ [protection] define si deben activarse las protecciones para los
1402
+ ataques web más comunes. Para más detalles mirá la
1403
+ sección sobre la configuración de protección de ataques
1404
+ más arriba.
1405
+
1406
+ [public_folder] path del directorio desde donde se sirven los archivos
1407
+ públicos. Solo se utiliza cuando se sirven archivos
1408
+ estáticos (ver la opción <tt>static</tt>). Si no
1409
+ está presente, se infiere del valor de la opción
1410
+ <tt>app_file</tt>.
1411
+
1412
+ [reload_templates] define si se recargan las plantillas entre peticiones.
1413
+
1414
+ Se encuentra activado en el entorno de desarrollo.
1415
+
1416
+ [root] path del directorio raíz del proyecto. Si no está
1417
+ presente, se infiere del valor de la opción
1418
+ <tt>app_file</tt>.
1419
+
1420
+ [raise_errors] elevar excepciones (detiene la aplicación). Se
1421
+ encuentra activada por defecto cuando el valor de
1422
+ <tt>environment</tt> es <tt>"test"</tt>. En caso
1423
+ contrario estará desactivada.
1424
+
1425
+ [run] cuando está habilitada, Sinatra se va a encargar de
1426
+ iniciar el servidor web, no la habilités cuando estés
1427
+ usando rackup o algún otro medio.
1428
+
1429
+ [running] indica si el servidor integrado está ejecutandose, ¡no
1430
+ cambiés esta configuración!.
1431
+
1432
+ [server] servidor, o lista de servidores, para usar como servidor
1433
+ integrado. Por defecto: ['thin', 'mongrel', 'webrick'],
1434
+ el orden establece la prioridad.
1435
+
1436
+ [sessions] habilita el soporte de sesiones basadas en cookies a
1437
+ través de <tt>Rack::Session::Cookie</tt>. Ver la
1438
+ sección 'Usando Sesiones' para más información.
1439
+
1440
+ [show_exceptions] muestra un stack trace en el navegador cuando ocurre una
1441
+ excepción. Se encuentra activada por defecto cuando el
1442
+ valor de <tt>environment</tt> es <tt>"development"</tt>.
1443
+ En caso contrario estará desactivada.
1444
+
1445
+ [static] define si Sinatra debe encargarse de servir archivos
1446
+ estáticos.
1447
+
1448
+ Deshabilitala cuando usés un servidor capaz de
1449
+ hacerlo por sí solo, porque mejorará el
1450
+ rendimiento. Se encuentra habilitada por
1451
+ defecto en el estilo clásico y desactivado en el
1452
+ el modular.
1453
+
1454
+ [static_cache_control] cuando Sinatra está sirviendo archivos estáticos, y
1455
+ está opción está habilitada, les va a agregar encabezados
1456
+ <tt>Cache-Control</tt> a las respuestas. Para esto
1457
+ utiliza el helper +cache_control+. Se encuentra
1458
+ deshabilitada por defecto. Notar que es necesario
1459
+ utilizar un array cuando se asignan múltiples valores:
1460
+ <tt>set :static_cache_control, [:public, :max_age => 300]</tt>.
1461
+
1462
+ [views] path del directorio de las vistas. Si no está presente,
1463
+ se infiere del valor de la opción <tt>app_file</tt>.
1464
+
1465
+ == Entornos
1466
+
1467
+ Existen tres entornos (+environments+) predefinidos: <tt>development</tt>,
1468
+ <tt>production</tt> y <tt>test</tt>. El entorno por defecto es
1469
+ <tt>development</tt> y tiene algunas particularidades:
1470
+
1471
+ * Se recargan las plantillas entre una petición y la siguiente, a diferencia
1472
+ de <tt>production</tt> y <tt>test</tt>, donde se cachean.
1473
+ * Se instalan manejadores de errores <tt>not_found</tt> y <tt>error</tt>
1474
+ especiales que muestran un stack trace en el navegador cuando son disparados.
1475
+
1476
+ Para utilizar alguno de los otros entornos puede asignarse el valor
1477
+ correspondiente a la variable de entorno +RACK_ENV+, o bien utilizar la opción
1478
+ <tt>-e</tt> al ejecutar la aplicación:
1479
+
1480
+ ruby mi_app.rb -e <ENTORNO>
1481
+
1482
+ Los métodos +development?+, +test?+ y +production?+ te permiten conocer el
1483
+ entorno actual.
1484
+
1485
+ == Manejo de Errores
1486
+
1487
+ Los manejadores de errores se ejecutan dentro del mismo contexto que las rutas
1488
+ y los filtros +before+, lo que significa que podés usar, por ejemplo,
1489
+ <tt>haml</tt>, <tt>erb</tt>, <tt>halt</tt>, etc.
1490
+
1491
+ === No encontrado <em>(Not Found)</em>
1492
+
1493
+ Cuando se eleva una excepción <tt>Sinatra::NotFound</tt>, o el código de
1494
+ estado de la respuesta es 404, el manejador <tt>not_found</tt> es invocado:
1495
+
1496
+ not_found do
1497
+ 'No existo'
1498
+ end
1499
+
1500
+ === Error
1501
+
1502
+ El manejador +error+ es invocado cada vez que una excepción es elevada
1503
+ desde un bloque de ruta o un filtro. El objeto de la excepción se puede
1504
+ obtener de la variable Rack <tt>sinatra.error</tt>:
1505
+
1506
+ error do
1507
+ 'Disculpá, ocurrió un error horrible - ' + env['sinatra.error'].name
1508
+ end
1509
+
1510
+ Errores personalizados:
1511
+
1512
+ error MiErrorPersonalizado do
1513
+ 'Lo que pasó fue...' + env['sinatra.error'].message
1514
+ end
1515
+
1516
+ Entonces, si pasa esto:
1517
+
1518
+ get '/' do
1519
+ raise MiErrorPersonalizado, 'algo malo'
1520
+ end
1521
+
1522
+ Obtenés esto:
1523
+
1524
+ Lo que pasó fue... algo malo
1525
+
1526
+ También, podés instalar un manejador de errores para un código de estado:
1527
+
1528
+ error 403 do
1529
+ 'Acceso prohibido'
1530
+ end
1531
+
1532
+ get '/secreto' do
1533
+ 403
1534
+ end
1535
+
1536
+ O un rango:
1537
+
1538
+ error 400..510 do
1539
+ 'Boom'
1540
+ end
1541
+
1542
+ Sinatra instala manejadores <tt>not_found</tt> y <tt>error</ttt> especiales
1543
+ cuando se ejecuta dentro del entorno de desarrollo "development".
1544
+
1545
+ == Rack Middleware
1546
+
1547
+ Sinatra corre sobre Rack[http://rack.rubyforge.org/], una interfaz minimalista
1548
+ que es un estándar para frameworks webs escritos en Ruby. Una de las
1549
+ capacidades más interesantes de Rack para los desarrolladores de aplicaciones
1550
+ es el soporte de "middleware" -- componentes que se ubican entre el servidor y
1551
+ tu aplicación, supervisando y/o manipulando la petición/respuesta HTTP para
1552
+ proporcionar varios tipos de funcionalidades comunes.
1553
+
1554
+ Sinatra hace muy sencillo construir tuberías de Rack middleware a través del
1555
+ método top-level +use+:
1556
+
1557
+ require 'sinatra'
1558
+ require 'mi_middleware_personalizado'
1559
+
1560
+ use Rack::Lint
1561
+ use MiMiddlewarePersonalizado
1562
+
1563
+ get '/hola' do
1564
+ 'Hola Mundo'
1565
+ end
1566
+
1567
+ Las semánticas de +use+ son idénticas a las definidas para el DSL
1568
+ Rack::Builder[http://rack.rubyforge.org/doc/classes/Rack/Builder.html] (más
1569
+ frecuentemente usado desde archivos rackup). Por ejemplo, el método +use+
1570
+ acepta argumentos múltiples/variables así como bloques:
1571
+
1572
+ use Rack::Auth::Basic do |nombre_de_usuario, password|
1573
+ nombre_de_usuario == 'admin' && password == 'secreto'
1574
+ end
1575
+
1576
+ Rack es distribuido con una variedad de middleware estándar para logging,
1577
+ debugging, enrutamiento URL, autenticación, y manejo de sesiones. Sinatra
1578
+ usa muchos de estos componentes automáticamente de acuerdo a su configuración
1579
+ para que típicamente no tengas que usarlas (con +use+) explícitamente.
1580
+
1581
+ Podés encontrar middleware útil en
1582
+ {rack}[https://github.com/rack/rack/tree/master/lib/rack],
1583
+ {rack-contrib}[https://github.com/rack/rack-contrib#readme],
1584
+ con {CodeRack}[http://coderack.org/] o en la
1585
+ {Rack wiki}[https://github.com/rack/rack/wiki/List-of-Middleware].
1586
+
1587
+ == Pruebas
1588
+
1589
+ Las pruebas para las aplicaciones Sinatra pueden ser escritas utilizando
1590
+ cualquier framework o librería de pruebas basada en Rack. Se recomienda usar
1591
+ {Rack::Test}[http://rdoc.info/github/brynary/rack-test/master/frames]:
1592
+
1593
+ require 'mi_app_sinatra'
1594
+ require 'test/unit'
1595
+ require 'rack/test'
1596
+
1597
+ class MiAppTest < Test::Unit::TestCase
1598
+ include Rack::Test::Methods
1599
+
1600
+ def app
1601
+ Sinatra::Application
1602
+ end
1603
+
1604
+ def test_mi_defecto
1605
+ get '/'
1606
+ assert_equal 'Hola Mundo!', last_response.body
1607
+ end
1608
+
1609
+ def test_con_parametros
1610
+ get '/saludar', :name => 'Franco'
1611
+ assert_equal 'Hola Frank!', last_response.body
1612
+ end
1613
+
1614
+ def test_con_entorno_rack
1615
+ get '/', {}, 'HTTP_USER_AGENT' => 'Songbird'
1616
+ assert_equal "Estás usando Songbird!", last_response.body
1617
+ end
1618
+ end
1619
+
1620
+ == Sinatra::Base - Middleware, Librerías, y Aplicaciones Modulares
1621
+
1622
+ Definir tu aplicación en el top-level funciona bien para micro-aplicaciones
1623
+ pero trae inconvenientes considerables a la hora de construir componentes
1624
+ reutilizables como Rack middleware, Rails metal, simple librerías con un
1625
+ componente de servidor, o incluso extensiones de Sinatra. El DSL de top-level
1626
+ contamina el espacio de nombres de Object y asume una configuración apropiada
1627
+ para micro-aplicaciones (por ejemplo, un único archivo de aplicación, los
1628
+ directorios <tt>./public</tt> y <tt>./views</tt>, logging, página con detalles
1629
+ de excepción, etc.). Ahí es donde <tt>Sinatra::Base</tt> entra en el juego:
1630
+
1631
+ require 'sinatra/base'
1632
+
1633
+ class MiApp < Sinatra::Base
1634
+ set :sessions, true
1635
+ set :foo, 'bar'
1636
+
1637
+ get '/' do
1638
+ 'Hola Mundo!'
1639
+ end
1640
+ end
1641
+
1642
+ Las subclases de <tt>Sinatra::Base</tt> tienen disponibles exactamente los
1643
+ mismos métodos que los provistos por el DSL de top-level. La mayoría de las
1644
+ aplicaciones top-level se pueden convertir en componentes
1645
+ <tt>Sinatra::Base</tt> con dos modificaciones:
1646
+
1647
+ * Tu archivo debe requerir <tt>sinatra/base</tt> en lugar de +sinatra+; de otra
1648
+ manera, todos los métodos del DSL de sinatra son importados dentro del
1649
+ espacio de nombres principal.
1650
+ * Poné las rutas, manejadores de errores, filtros y opciones de tu aplicación
1651
+ en una subclase de <tt>Sinatra::Base</tt>.
1652
+
1653
+ <tt>Sinatra::Base</tt> es una pizarra en blanco. La mayoría de las opciones están
1654
+ desactivadas por defecto, incluyendo el servidor incorporado. Mirá
1655
+ {Opciones y Configuraciones}[http://sinatra.github.com/configuration.html]
1656
+ para detalles sobre las opciones disponibles y su comportamiento.
1657
+
1658
+ === Estilo Modular vs. Clásico
1659
+
1660
+ Contrariamente a la creencia popular, no hay nada de malo con el estilo clásico.
1661
+ Si se ajusta a tu aplicación, no es necesario que la cambies a una modular.
1662
+
1663
+ Existen tan solo dos desventajas en comparación con el estilo modular:
1664
+
1665
+ * Solamente podés tener una aplicación Sinatra por proceso Ruby - si tenés
1666
+ planificado usar más, cambiá al estilo modular.
1667
+
1668
+ * El estilo clásico contamina Object con métodos delegadores - si tenés
1669
+ planificado empaquetar tu aplicación en una librería/gem, cambiá al estilo
1670
+ modular.
1671
+
1672
+ No hay ninguna razón por la cuál no puedas mezclar los estilos modular y
1673
+ clásico.
1674
+
1675
+ Cuando cambiés de un estilo al otro, tené en cuenta las sutiles diferencias
1676
+ entre sus configuraciones:
1677
+
1678
+ Configuración Clásica Modular
1679
+
1680
+ app_file archivo que carga sinatra archivo con la subclase de Sinatra::Base
1681
+ run $0 == app_file false
1682
+ logging true false
1683
+ method_override true false
1684
+ inline_templates true false
1685
+ static true false
1686
+
1687
+ === Sirviendo una Aplicación Modular
1688
+
1689
+ Las dos opciones más comunes para iniciar una aplicación modular son, iniciarla
1690
+ activamente con <tt>run!</tt>:
1691
+
1692
+ # mi_app.rb
1693
+ require 'sinatra/base'
1694
+
1695
+ class MiApp < Sinatra::Base
1696
+ # ... código de la app ...
1697
+
1698
+ # iniciar el servidor si el archivo fue ejecutado directamente
1699
+ run! if app_file == $0
1700
+ end
1701
+
1702
+ Iniciar con:
1703
+
1704
+ ruby mi_app.rb
1705
+
1706
+ O, con un archivo <tt>config.ru</tt>, que permite usar cualquier handler Rack:
1707
+
1708
+ # config.ru
1709
+ require './mi_app'
1710
+ run MiApp
1711
+
1712
+ Después ejecutar:
1713
+
1714
+ rackup -p 4567
1715
+
1716
+ === Usando una Aplicación Clásica con un Archivo config.ru
1717
+
1718
+ Escribí el archivo de tu aplicación:
1719
+
1720
+ # app.rb
1721
+ require 'sinatra'
1722
+
1723
+ get '/' do
1724
+ 'Hola mundo!'
1725
+ end
1726
+
1727
+ Y el <tt>config.ru</tt> correspondiente:
1728
+
1729
+ require './app'
1730
+ run Sinatra::Application
1731
+
1732
+ === ¿Cuándo Usar config.ru?
1733
+
1734
+ Indicadores de que probablemente querés usar <tt>config.ru</tt>:
1735
+
1736
+ * Querés realizar el deploy con un hanlder Rack distinto (Passenger, Unicorn,
1737
+ Heroku, ...).
1738
+ * Querés usar más de una subclase de <tt>Sinatra::Base</tt>.
1739
+ * Querés usar Sinatra únicamente para middleware, pero no como un endpoint.
1740
+
1741
+ <b>No hay necesidad de utilizar un archivo <tt>config.ru</tt> exclusivamente
1742
+ porque tenés una aplicación modular, y no necesitás una aplicación modular para
1743
+ iniciarla con <tt>config.ru</tt>.</b>
1744
+
1745
+ === Utilizando Sinatra como Middleware
1746
+
1747
+ Sinatra no solo es capaz de usar otro Rack middleware, sino que a su vez,
1748
+ cualquier aplicación Sinatra puede ser agregada delante de un endpoint Rack
1749
+ como middleware. Este endpoint puede ser otra aplicación Sinatra, o cualquier
1750
+ aplicación basada en Rack (Rails/Ramaze/Camping/...):
1751
+
1752
+ require 'sinatra/base'
1753
+
1754
+ class PantallaDeLogin < Sinatra::Base
1755
+ enable :sessions
1756
+
1757
+ get('/login') { haml :login }
1758
+
1759
+ post('/login') do
1760
+ if params[:nombre] == 'admin' && params[:password] == 'admin'
1761
+ session['nombre_de_usuario'] = params[:nombre]
1762
+ else
1763
+ redirect '/login'
1764
+ end
1765
+ end
1766
+ end
1767
+
1768
+ class MiApp < Sinatra::Base
1769
+ # el middleware se ejecutará antes que los filtros
1770
+ use PantallaDeLogin
1771
+
1772
+ before do
1773
+ unless session['nombre_de_usuario']
1774
+ halt "Acceso denegado, por favor <a href='/login'>iniciá sesión</a>."
1775
+ end
1776
+ end
1777
+
1778
+ get('/') { "Hola #{session['nombre_de_usuario']}." }
1779
+ end
1780
+
1781
+ === Creación Dinámica de Aplicaciones
1782
+
1783
+ Puede que en algunas ocasiones quieras crear nuevas aplicaciones en
1784
+ tiempo de ejecución sin tener que asignarlas a una constante. Para
1785
+ esto tenés <tt>Sinatra.new</tt>:
1786
+
1787
+ require 'sinatra/base'
1788
+ mi_app = Sinatra.new { get('/') { "hola" } }
1789
+ mi_app.run!
1790
+
1791
+ Acepta como argumento opcional una aplicación desde la que se
1792
+ heredará:
1793
+
1794
+ # config.ru
1795
+ require 'sinatra/base'
1796
+
1797
+ controller = Sinatra.new do
1798
+ enable :logging
1799
+ helpers MisHelpers
1800
+ end
1801
+
1802
+ map('/a') do
1803
+ run Sinatra.new(controller) { get('/') { 'a' } }
1804
+ end
1805
+
1806
+ map('/b') do
1807
+ run Sinatra.new(controller) { get('/') { 'b' } }
1808
+ end
1809
+
1810
+ Construir aplicaciones de esta forma resulta especialmente útil para
1811
+ testear extensiones Sinatra o para usar Sinatra en tus librerías.
1812
+
1813
+ Por otro lado, hace extremadamente sencillo usar Sinatra como
1814
+ middleware:
1815
+
1816
+ require 'sinatra/base'
1817
+
1818
+ use Sinatra do
1819
+ get('/') { ... }
1820
+ end
1821
+
1822
+ run ProyectoRails::Application
1823
+
1824
+ == Ámbitos y Ligaduras
1825
+
1826
+ El ámbito en el que te encontrás determina que métodos y variables están
1827
+ disponibles.
1828
+
1829
+ === Ámbito de Aplicación/Clase
1830
+
1831
+ Cada aplicación Sinatra es una subclase de <tt>Sinatra::Base</tt>. Si estás
1832
+ usando el DSL de top-level (<tt>require 'sinatra'</tt>), entonces esta clase es
1833
+ <tt>Sinatra::Application</tt>, de otra manera es la subclase que creaste
1834
+ explícitamente. Al nivel de la clase tenés métodos como +get+ o +before+, pero
1835
+ no podés acceder a los objetos +request+ o +session+, ya que hay una única
1836
+ clase de la aplicación para todas las peticiones.
1837
+
1838
+ Las opciones creadas utilizando +set+ son métodos al nivel de la clase:
1839
+
1840
+ class MiApp < Sinatra::Base
1841
+ # Ey, estoy en el ámbito de la aplicación!
1842
+ set :foo, 42
1843
+ foo # => 42
1844
+
1845
+ get '/foo' do
1846
+ # Hey, ya no estoy en el ámbito de la aplicación!
1847
+ end
1848
+ end
1849
+
1850
+ Tenés la ligadura al ámbito de la aplicación dentro de:
1851
+
1852
+ * El cuerpo de la clase de tu aplicación
1853
+ * Métodos definidos por extensiones
1854
+ * El bloque pasado a +helpers+
1855
+ * Procs/bloques usados como el valor para +set+
1856
+
1857
+ Este ámbito puede alcanzarse de las siguientes maneras:
1858
+
1859
+ * A través del objeto pasado a los bloques de configuración (<tt>configure { |c| ...}</tt>)
1860
+ * Llamando a +settings+ desde dentro del ámbito de la petición
1861
+
1862
+ === Ámbito de Petición/Instancia
1863
+
1864
+ Para cada petición entrante, una nueva instancia de la clase de tu aplicación
1865
+ es creada y todos los bloques de rutas son ejecutados en ese ámbito. Desde este
1866
+ ámbito podés acceder a los objetos +request+ y +session+ o llamar a los métodos
1867
+ de renderización como +erb+ o +haml+. Podés acceder al ámbito de la aplicación
1868
+ desde el ámbito de la petición utilizando +settings+:
1869
+
1870
+ class MiApp < Sinatra::Base
1871
+ # Ey, estoy en el ámbito de la aplicación!
1872
+ get '/definir_ruta/:nombre' do
1873
+ # Ámbito de petición para '/definir_ruta/:nombre'
1874
+ @valor = 42
1875
+
1876
+ settings.get("/#{params[:nombre]}") do
1877
+ # Ámbito de petición para "/#{params[:nombre]}"
1878
+ @valor # => nil (no es la misma petición)
1879
+ end
1880
+
1881
+ "Ruta definida!"
1882
+ end
1883
+ end
1884
+
1885
+ Tenés la ligadura al ámbito de la petición dentro de:
1886
+
1887
+ * bloques pasados a get/head/post/put/delete/options
1888
+ * filtros before/after
1889
+ * métodos ayudantes
1890
+ * plantillas/vistas
1891
+
1892
+ === Ámbito de Delegación
1893
+
1894
+ El ámbito de delegación solo reenvía métodos al ámbito de clase. De cualquier
1895
+ manera, no se comporta 100% como el ámbito de clase porque no tenés la ligadura
1896
+ de la clase: únicamente métodos marcados explícitamente para delegación están
1897
+ disponibles y no compartís variables/estado con el ámbito de clase (léase:
1898
+ tenés un +self+ diferente). Podés agregar delegaciones de método llamando a
1899
+ <tt>Sinatra::Delegator.delegate :nombre_del_metodo</tt>.
1900
+
1901
+ Tenés la ligadura al ámbito de delegación dentro de:
1902
+
1903
+ * La ligadura del top-level, si hiciste <tt>require "sinatra"</tt>
1904
+ * Un objeto extendido con el mixin <tt>Sinatra::Delegator</tt>
1905
+
1906
+ Pegale una mirada al código: acá está el
1907
+ {Sinatra::Delegator mixin}[http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/base.rb#L1128]
1908
+ que es {incluido en el espacio de nombres principal}[http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/main.rb#L28].
1909
+
1910
+ == Línea de Comandos
1911
+
1912
+ Las aplicaciones Sinatra pueden ser ejecutadas directamente:
1913
+
1914
+ ruby miapp.rb [-h] [-x] [-e ENTORNO] [-p PUERTO] [-o HOST] [-s MANEJADOR]
1915
+
1916
+ Las opciones son:
1917
+
1918
+ -h # ayuda
1919
+ -p # asigna el puerto (4567 es usado por defecto)
1920
+ -o # asigna el host (0.0.0.0 es usado por defecto)
1921
+ -e # asigna el entorno (development es usado por defecto)
1922
+ -s # especifica el servidor/manejador rack (thin es usado por defecto)
1923
+ -x # activa el mutex lock (está desactivado por defecto)
1924
+
1925
+ == Versiones de Ruby Soportadas
1926
+
1927
+ Las siguientes versiones de Ruby son soportadas oficialmente:
1928
+
1929
+ [ Ruby 1.8.7 ]
1930
+ 1.8.7 es soportado completamente. Sin embargo, si no hay nada que te lo
1931
+ prohíba, te recomendamos que usés 1.9.2 o cambies a JRuby o Rubinius. No se
1932
+ dejará de dar soporte a 1.8.7 hasta Sinatra 2.0 y Ruby 2.0, aunque si se
1933
+ libera la versión 1.8.8 de Ruby las cosas podrían llegar a cambiar. Sin
1934
+ embargo, que eso ocurra es muy poco probable, e incluso el caso de que lo
1935
+ haga, puede que se siga dando soporte a 1.8.7. <b>Hemos dejado de soportar
1936
+ Ruby 1.8.6.</b> Si querés ejecutar Sinatra sobre 1.8.6, podés utilizar la
1937
+ versión 1.2, pero tené en cuenta que una vez que Sinatra 1.4.0 sea liberado,
1938
+ ya no se corregirán errores por más que se reciban reportes de los mismos.
1939
+
1940
+ [ Ruby 1.9.2 ]
1941
+ 1.9.2 es soportado y recomendado. Tené en cuenta que Radius y Markaby no son
1942
+ compatibles con 1.9 actualmente. Además, no usés 1.9.2p0, porque se producen
1943
+ fallos de segmentación cuando se ejecuta Sinatra. El soporte se mantendrá al
1944
+ menos hasta que se libere la versión 1.9.4/2.0 de Ruby. El soporte para la
1945
+ última versión de la serie 1.9 se mantendrá mientras lo haga el core team de
1946
+ Ruby.
1947
+
1948
+ [ Ruby 1.9.3 ]
1949
+ 1.9.3 es soportado completamente. De todas maneras, recomendamos esperar a
1950
+ que se liberen niveles de parche superiores (el actual es p0) antes de usarlo
1951
+ en producción. Es importante notar que el cambio desde una versión anterior a
1952
+ 1.9.3 va a invalidar todas las sesiones.
1953
+
1954
+ [ Rubinius ]
1955
+ Rubinius es soportado oficialmente (Rubinius >= 1.2.4). Todo funciona
1956
+ correctamente, incluyendo los lenguajes de plantillas. La próxima versión,
1957
+ 2.0, también es soportada.
1958
+
1959
+ [ JRuby ]
1960
+ JRuby es soportado oficialmente (JRuby >= 1.6.5). No se conocen problemas
1961
+ con librerías de plantillas de terceras partes. Sin embargo, si elegís usar
1962
+ JRuby, deberías examinar sus Rack handlers porque el servidor web Thin no es
1963
+ soportado completamente. El soporte de JRuby para extensiones C se encuentra
1964
+ en una etapa experimental, sin embargo, de momento solamente RDiscount,
1965
+ Redcarpet y RedCloth se ven afectadas.
1966
+
1967
+ Siempre le prestamos atención a las nuevas versiones de Ruby.
1968
+
1969
+ Las siguientes implementaciones de Ruby no se encuentran soportadas
1970
+ oficialmente. De cualquier manera, pueden ejecutar Sinatra:
1971
+
1972
+ * Versiones anteriores de JRuby y Rubinius
1973
+ * Ruby Enterprise Edition
1974
+ * MacRuby, Maglev e IronRuby
1975
+ * Ruby 1.9.0 y 1.9.1 (pero no te recomendamos que los usés)
1976
+
1977
+ No estar soportada oficialmente, significa que si las cosas solamente se rompen
1978
+ ahí y no en una plataforma soportada, asumimos que no es nuestro problema sino
1979
+ el suyo.
1980
+
1981
+ Nuestro servidor CI también se ejecuta sobre ruby-head (que será la próxima
1982
+ versión 2.0.0) y la rama 1.9.4. Como están en movimiento constante, no podemos
1983
+ garantizar nada. De todas formas, podés contar con que tanto 1.9.4-p0 como
1984
+ 2.0.0-p0 sea soportadas.
1985
+
1986
+ Sinatra debería funcionar en cualquier sistema operativo soportado por la
1987
+ implementación de Ruby elegida.
1988
+
1989
+ En este momento, no vas a poder ejecutar Sinatra en Cardinal, SmallRuby,
1990
+ BlueRuby o cualquier versión de Ruby anterior a 1.8.7.
1991
+
1992
+ == A la Vanguardia
1993
+
1994
+ Si querés usar el código de Sinatra más reciente, sentite libre de ejecutar
1995
+ tu aplicación sobre la rama master, en general es bastante estable.
1996
+
1997
+ También liberamos prereleases de vez en cuando, así, podés hacer
1998
+
1999
+ gem install sinatra --pre
2000
+
2001
+ Para obtener algunas de las últimas características.
2002
+
2003
+ === Con Bundler
2004
+
2005
+ Esta es la manera recomendada para ejecutar tu aplicación sobre la última
2006
+ versión de Sinatra usando {Bundler}[http://gembundler.com/].
2007
+
2008
+ Primero, instalá bundler si no lo hiciste todavía:
2009
+
2010
+ gem install bundler
2011
+
2012
+ Después, en el directorio de tu proyecto, creá un archivo +Gemfile+:
2013
+
2014
+ source :rubygems
2015
+ gem 'sinatra', :git => "git://github.com/sinatra/sinatra.git"
2016
+
2017
+ # otras dependencias
2018
+ gem 'haml' # por ejemplo, si usás haml
2019
+ gem 'activerecord', '~> 3.0' # quizás también necesités ActiveRecord 3.x
2020
+
2021
+ Tené en cuenta que tenés que listar todas las dependencias directas de tu
2022
+ aplicación. No es necesario listar las dependencias de Sinatra (Rack y Tilt)
2023
+ porque Bundler las agrega directamente.
2024
+
2025
+ Ahora podés arrancar tu aplicación así:
2026
+
2027
+ bundle exec ruby miapp.rb
2028
+
2029
+ === Con Git
2030
+
2031
+ Cloná el repositorio localmente y ejecutá tu aplicación, asegurándote que el
2032
+ directorio <tt>sinatra/lib</tt> esté en el <tt>$LOAD_PATH</tt>:
2033
+
2034
+ cd miapp
2035
+ git clone git://github.com/sinatra/sinatra.git
2036
+ ruby -Isinatra/lib miapp.rb
2037
+
2038
+ Para actualizar el código fuente de Sinatra en el futuro:
2039
+
2040
+ cd miapp/sinatra
2041
+ git pull
2042
+
2043
+ === Instalación Global
2044
+
2045
+ Podés construir la gem vos mismo:
2046
+
2047
+ git clone git://github.com/sinatra/sinatra.git
2048
+ cd sinatra
2049
+ rake sinatra.gemspec
2050
+ rake install
2051
+
2052
+ Si instalás tus gems como root, el último paso debería ser
2053
+
2054
+ sudo rake install
2055
+
2056
+ == Versionado
2057
+
2058
+ Sinatra utiliza el {Versionado Semántico}[http://semver.org/],
2059
+ siguiendo las especificaciones SemVer y SemVerTag.
2060
+
2061
+ == Lecturas Recomendadas
2062
+
2063
+ * {Sito web del proyecto}[http://www.sinatrarb.com/] - Documentación
2064
+ adicional, noticias, y enlaces a otros recursos.
2065
+ * {Contribuyendo}[http://www.sinatrarb.com/contributing] - ¿Encontraste un
2066
+ error?. ¿Necesitás ayuda?. ¿Tenés un parche?.
2067
+ * {Seguimiento de problemas}[http://github.com/sinatra/sinatra/issues]
2068
+ * {Twitter}[http://twitter.com/sinatra]
2069
+ * {Lista de Correo}[http://groups.google.com/group/sinatrarb/topics]
2070
+ * {IRC: #sinatra}[irc://chat.freenode.net/#sinatra] en http://freenode.net
2071
+ * {Sinatra Book}[http://sinatra-book.gittr.com] Tutorial (en inglés).
2072
+ * {Sinatra Recipes}[http://recipes.sinatrarb.com/] Recetas contribuidas
2073
+ por la comunidad (en inglés).
2074
+ * Documentación de la API para la
2075
+ {última versión liberada}[http://rubydoc.info/gems/sinatra] o para la
2076
+ {rama de desarrollo actual}[http://rubydoc.info/github/sinatra/sinatra]
2077
+ en http://rubydoc.info/
2078
+ * {Servidor de IC}[http://ci.rkh.im/view/Sinatra/]