middleman 2.0.16.1 → 3.0.0.alpha.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (259) hide show
  1. data/.gitignore +2 -1
  2. data/CHANGELOG +16 -8
  3. data/features/builder.feature +2 -5
  4. data/features/cache_buster.feature +1 -1
  5. data/features/clean_build.feature +0 -1
  6. data/features/coffee-script.feature +3 -3
  7. data/features/custom_layout_engines.feature +10 -0
  8. data/features/directory_index.feature +0 -1
  9. data/features/dynamic_pages.feature +0 -1
  10. data/features/fonts.feature +0 -1
  11. data/features/{padrino_helpers.feature → former_padrino_helpers.feature} +1 -1
  12. data/features/sprockets.feature +34 -5
  13. data/features/sprockets_gems.feature +7 -4
  14. data/features/step_definitions/asset_host_steps.rb +7 -6
  15. data/features/step_definitions/builder_steps.rb +4 -0
  16. data/features/step_definitions/middleman_steps.rb +22 -16
  17. data/features/step_definitions/page_layout_steps.rb +10 -8
  18. data/fixtures/custom-layout-app/config.rb +1 -0
  19. data/fixtures/custom-layout-app/source/index.html.erb +1 -0
  20. data/fixtures/custom-layout-app/source/layout.haml +6 -0
  21. data/fixtures/sprockets-app/config.rb +2 -1
  22. data/fixtures/sprockets-app/source/library/css/bootstrap_include.css.scss +1 -0
  23. data/fixtures/sprockets-app/source/library/css/plain.css +3 -0
  24. data/fixtures/sprockets-app/source/library/css/sprockets_base1.css.scss +1 -0
  25. data/fixtures/sprockets-app/source/library/css/sprockets_base2.css.scss +1 -0
  26. data/fixtures/sprockets-app/source/library/css/sprockets_sub.css.scss +1 -0
  27. data/fixtures/sprockets-app/source/{jquery_include.js → library/js/jquery_include.js} +0 -0
  28. data/fixtures/sprockets-app/source/library/js/plain.js +3 -0
  29. data/fixtures/sprockets-app/source/library/{javascripts → js}/sprockets_base.js +0 -0
  30. data/fixtures/sprockets-app/source/library/{javascripts → js}/sprockets_sub.js +0 -0
  31. data/fixtures/test-app/config.rb +5 -4
  32. data/fixtures/test-app/source/{padrino_test.html.haml → former_padrino_test.html.haml} +0 -0
  33. data/fixtures/test-app/source/stylesheets/sprockets_base1.css.scss +1 -0
  34. data/fixtures/test-app/source/stylesheets/sprockets_base2.css.scss +1 -0
  35. data/fixtures/test-app/source/stylesheets/sprockets_sub.css.scss +1 -0
  36. data/lib/middleman.rb +27 -25
  37. data/lib/middleman/base.rb +408 -166
  38. data/lib/middleman/builder.rb +78 -162
  39. data/lib/middleman/cli.rb +61 -32
  40. data/lib/middleman/core_extensions/assets.rb +4 -44
  41. data/lib/middleman/core_extensions/builder.rb +12 -16
  42. data/lib/middleman/core_extensions/compass.rb +28 -57
  43. data/lib/middleman/core_extensions/data.rb +65 -49
  44. data/lib/middleman/core_extensions/default_helpers.rb +33 -18
  45. data/lib/middleman/core_extensions/features.rb +48 -26
  46. data/lib/middleman/core_extensions/file_watcher.rb +66 -0
  47. data/lib/middleman/core_extensions/front_matter.rb +91 -86
  48. data/lib/middleman/core_extensions/rendering.rb +9 -8
  49. data/lib/middleman/core_extensions/routing.rb +19 -53
  50. data/lib/middleman/core_extensions/sitemap.rb +229 -0
  51. data/lib/middleman/core_extensions/sprockets.rb +53 -37
  52. data/lib/middleman/features/asset_host.rb +20 -10
  53. data/lib/middleman/features/automatic_image_sizes.rb +12 -9
  54. data/lib/middleman/features/cache_buster.rb +38 -25
  55. data/lib/middleman/features/directory_indexes.rb +31 -28
  56. data/lib/middleman/features/minify_css.rb +3 -2
  57. data/lib/middleman/features/minify_css/cssmin.rb +55 -0
  58. data/lib/middleman/features/minify_javascript.rb +12 -5
  59. data/lib/middleman/features/relative_assets.rb +28 -25
  60. data/lib/middleman/features/sitemap_tree.rb +34 -0
  61. data/lib/middleman/guard.rb +57 -23
  62. data/lib/middleman/renderers/erb.rb +29 -0
  63. data/lib/middleman/renderers/liquid.rb +3 -12
  64. data/lib/middleman/renderers/markdown.rb +16 -15
  65. data/lib/middleman/renderers/sass.rb +34 -38
  66. data/lib/middleman/vendor/hooks-0.2.0/CHANGES.textile +9 -0
  67. data/lib/middleman/vendor/hooks-0.2.0/Gemfile +3 -0
  68. data/lib/middleman/vendor/hooks-0.2.0/README.rdoc +107 -0
  69. data/lib/middleman/vendor/hooks-0.2.0/Rakefile +12 -0
  70. data/lib/middleman/vendor/hooks-0.2.0/hooks.gemspec +22 -0
  71. data/lib/middleman/vendor/hooks-0.2.0/lib/hooks.rb +109 -0
  72. data/lib/middleman/vendor/hooks-0.2.0/lib/hooks/inheritable_attribute.rb +33 -0
  73. data/lib/middleman/vendor/hooks-0.2.0/test/hooks_test.rb +141 -0
  74. data/lib/middleman/vendor/hooks-0.2.0/test/inheritable_attribute_test.rb +55 -0
  75. data/lib/middleman/vendor/hooks-0.2.0/test/test_helper.rb +10 -0
  76. data/lib/middleman/vendor/padrino-core-0.10.5/.document +5 -0
  77. data/lib/middleman/vendor/padrino-core-0.10.5/.gitignore +22 -0
  78. data/lib/middleman/vendor/padrino-core-0.10.5/.yardopts +1 -0
  79. data/lib/middleman/vendor/padrino-core-0.10.5/LICENSE.txt +20 -0
  80. data/lib/middleman/vendor/padrino-core-0.10.5/README.rdoc +294 -0
  81. data/lib/middleman/vendor/padrino-core-0.10.5/Rakefile +5 -0
  82. data/lib/middleman/vendor/padrino-core-0.10.5/bin/padrino +9 -0
  83. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core.rb +167 -0
  84. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/application.rb +270 -0
  85. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/application/rendering.rb +292 -0
  86. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/application/routing.rb +934 -0
  87. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/application/showexceptions.rb +20 -0
  88. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/caller.rb +53 -0
  89. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/cli/adapter.rb +24 -0
  90. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/cli/base.rb +151 -0
  91. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/cli/console.rb +20 -0
  92. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/cli/rake.rb +24 -0
  93. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/cli/rake_tasks.rb +59 -0
  94. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/command.rb +38 -0
  95. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/images/404.png +0 -0
  96. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/images/500.png +0 -0
  97. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/loader.rb +210 -0
  98. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/cs.yml +34 -0
  99. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/da.yml +34 -0
  100. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/de.yml +34 -0
  101. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/en.yml +34 -0
  102. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/es.yml +34 -0
  103. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/fr.yml +34 -0
  104. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/hu.yml +34 -0
  105. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/it.yml +40 -0
  106. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/ja.yml +34 -0
  107. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/lv.yml +34 -0
  108. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/nl.yml +34 -0
  109. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/no.yml +35 -0
  110. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/pl.yml +34 -0
  111. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/pt_br.yml +40 -0
  112. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/ru.yml +35 -0
  113. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/tr.yml +34 -0
  114. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/uk.yml +34 -0
  115. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/zh_cn.yml +34 -0
  116. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/zh_tw.yml +34 -0
  117. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/logger.rb +345 -0
  118. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/mounter.rb +224 -0
  119. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/reloader.rb +254 -0
  120. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/router.rb +98 -0
  121. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/server.rb +79 -0
  122. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/support_lite.rb +199 -0
  123. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/tasks.rb +21 -0
  124. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/version.rb +20 -0
  125. data/lib/middleman/vendor/padrino-core-0.10.5/padrino-core.gemspec +38 -0
  126. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/apps/.components +6 -0
  127. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/apps/.gitignore +7 -0
  128. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/apps/complex.rb +32 -0
  129. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/apps/simple.rb +33 -0
  130. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/a.rb +9 -0
  131. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/b.rb +4 -0
  132. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/c.rb +1 -0
  133. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/circular/e.rb +13 -0
  134. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/circular/f.rb +2 -0
  135. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/circular/g.rb +2 -0
  136. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/d.rb +4 -0
  137. data/lib/middleman/vendor/padrino-core-0.10.5/test/helper.rb +81 -0
  138. data/lib/middleman/vendor/padrino-core-0.10.5/test/mini_shoulda.rb +45 -0
  139. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_application.rb +108 -0
  140. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_core.rb +79 -0
  141. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_dependencies.rb +44 -0
  142. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_filters.rb +278 -0
  143. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_locale.rb +21 -0
  144. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_logger.rb +100 -0
  145. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_mounter.rb +177 -0
  146. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_reloader_complex.rb +75 -0
  147. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_reloader_simple.rb +98 -0
  148. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_rendering.rb +461 -0
  149. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_restful_routing.rb +33 -0
  150. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_router.rb +146 -0
  151. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_routing.rb +1673 -0
  152. data/lib/middleman/vendor/padrino-helpers-0.10.5/.document +5 -0
  153. data/lib/middleman/vendor/padrino-helpers-0.10.5/.gitignore +21 -0
  154. data/lib/middleman/vendor/padrino-helpers-0.10.5/.yardopts +1 -0
  155. data/lib/middleman/vendor/padrino-helpers-0.10.5/LICENSE.txt +20 -0
  156. data/lib/middleman/vendor/padrino-helpers-0.10.5/README.rdoc +239 -0
  157. data/lib/middleman/vendor/padrino-helpers-0.10.5/Rakefile +5 -0
  158. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers.rb +58 -0
  159. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/asset_tag_helpers.rb +420 -0
  160. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/form_builder/abstract_form_builder.rb +220 -0
  161. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/form_builder/standard_form_builder.rb +43 -0
  162. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/form_helpers.rb +602 -0
  163. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/format_helpers.rb +381 -0
  164. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/cs.yml +103 -0
  165. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/da.yml +91 -0
  166. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/de.yml +81 -0
  167. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/en.yml +103 -0
  168. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/es.yml +103 -0
  169. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/fr.yml +80 -0
  170. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/hu.yml +103 -0
  171. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/it.yml +89 -0
  172. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/ja.yml +103 -0
  173. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/lv.yml +103 -0
  174. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/nl.yml +82 -0
  175. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/no.yml +91 -0
  176. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/pl.yml +95 -0
  177. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/pt_br.yml +103 -0
  178. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/ru.yml +103 -0
  179. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/tr.yml +103 -0
  180. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/uk.yml +103 -0
  181. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/zh_cn.yml +104 -0
  182. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/zh_tw.yml +103 -0
  183. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/number_helpers.rb +288 -0
  184. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers.rb +175 -0
  185. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers/abstract_handler.rb +98 -0
  186. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers/erb_handler.rb +79 -0
  187. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers/haml_handler.rb +63 -0
  188. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers/slim_handler.rb +81 -0
  189. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/render_helpers.rb +60 -0
  190. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/tag_helpers.rb +103 -0
  191. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/translation_helpers.rb +38 -0
  192. data/lib/middleman/vendor/padrino-helpers-0.10.5/padrino-helpers.gemspec +27 -0
  193. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/app.rb +73 -0
  194. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/capture_concat.erb +14 -0
  195. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/capture_concat.haml +12 -0
  196. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/capture_concat.slim +13 -0
  197. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_for.erb +14 -0
  198. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_for.haml +12 -0
  199. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_for.slim +12 -0
  200. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_tag.erb +11 -0
  201. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_tag.haml +9 -0
  202. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_tag.slim +9 -0
  203. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/current_engine.erb +5 -0
  204. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/current_engine.haml +5 -0
  205. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/current_engine.slim +5 -0
  206. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/fields_for.erb +20 -0
  207. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/fields_for.haml +15 -0
  208. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/fields_for.slim +15 -0
  209. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_for.erb +56 -0
  210. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_for.haml +47 -0
  211. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_for.slim +47 -0
  212. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_tag.erb +56 -0
  213. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_tag.haml +45 -0
  214. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_tag.slim +45 -0
  215. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/link_to.erb +5 -0
  216. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/link_to.haml +4 -0
  217. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/link_to.slim +4 -0
  218. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/mail_to.erb +3 -0
  219. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/mail_to.haml +3 -0
  220. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/mail_to.slim +3 -0
  221. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/meta_tag.erb +3 -0
  222. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/meta_tag.haml +3 -0
  223. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/meta_tag.slim +3 -0
  224. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/partials/_erb.erb +1 -0
  225. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/partials/_haml.haml +1 -0
  226. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/partials/_slim.slim +1 -0
  227. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/simple_partial.erb +1 -0
  228. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/simple_partial.haml +1 -0
  229. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/simple_partial.slim +1 -0
  230. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/app.rb +50 -0
  231. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/current_engine.haml +5 -0
  232. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/current_engines/_erb.erb +1 -0
  233. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/current_engines/_haml.haml +1 -0
  234. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/current_engines/_slim.slim +1 -0
  235. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/erb/test.erb +1 -0
  236. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/explicit_engine.haml +5 -0
  237. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/haml/test.haml +1 -0
  238. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/template/_user.haml +7 -0
  239. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/template/haml_template.haml +1 -0
  240. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/template/some_template.haml +2 -0
  241. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/helper.rb +66 -0
  242. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_asset_tag_helpers.rb +320 -0
  243. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_form_builder.rb +996 -0
  244. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_form_helpers.rb +645 -0
  245. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_format_helpers.rb +227 -0
  246. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_locale.rb +20 -0
  247. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_number_helpers.rb +136 -0
  248. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_output_helpers.rb +153 -0
  249. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_render_helpers.rb +76 -0
  250. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_tag_helpers.rb +105 -0
  251. data/lib/middleman/version.rb +1 -1
  252. data/middleman-x86-mingw32.gemspec +16 -33
  253. data/middleman.gemspec +16 -31
  254. metadata +590 -349
  255. data/features/sinatra.feature +0 -6
  256. data/lib/middleman/core_extensions/rack_map.rb +0 -35
  257. data/lib/middleman/renderers/coffee_script.rb +0 -8
  258. data/lib/middleman/renderers/haml.rb +0 -31
  259. data/lib/middleman/renderers/slim.rb +0 -8
@@ -0,0 +1,141 @@
1
+ require 'test_helper'
2
+
3
+ class HooksTest < Test::Unit::TestCase
4
+ class TestClass
5
+ include Hooks
6
+
7
+ def executed
8
+ @executed ||= [];
9
+ end
10
+ end
11
+
12
+
13
+ context "Hooks.define_hook" do
14
+ setup do
15
+ @klass = Class.new(TestClass)
16
+
17
+ @mum = @klass.new
18
+ @mum.class.define_hook :after_eight
19
+ end
20
+
21
+ should "provide accessors to the stored callbacks" do
22
+ assert_equal [], @klass._after_eight_callbacks
23
+ @klass._after_eight_callbacks << :dine
24
+ assert_equal [:dine], @klass._after_eight_callbacks
25
+ end
26
+
27
+ should "respond to Class.callbacks_for_hook" do
28
+ assert_equal [], @klass.callbacks_for_hook(:after_eight)
29
+ @klass.after_eight :dine
30
+ assert_equal [:dine], @klass.callbacks_for_hook(:after_eight)
31
+ end
32
+
33
+ context "creates a public writer for the hook that" do
34
+ should "accepts method names" do
35
+ @klass.after_eight :dine
36
+ assert_equal [:dine], @klass._after_eight_callbacks
37
+ end
38
+
39
+ should "accepts blocks" do
40
+ @klass.after_eight do true; end
41
+ assert @klass._after_eight_callbacks.first.kind_of? Proc
42
+ end
43
+
44
+ should "be inherited" do
45
+ @klass.after_eight :dine
46
+ subklass = Class.new(@klass)
47
+
48
+ assert_equal [:dine], subklass._after_eight_callbacks
49
+ end
50
+ end
51
+
52
+ context "Hooks#run_hook" do
53
+ should "run without parameters" do
54
+ @mum.instance_eval do
55
+ def a; executed << :a; nil; end
56
+ def b; executed << :b; end
57
+
58
+ self.class.after_eight :b
59
+ self.class.after_eight :a
60
+ end
61
+
62
+ @mum.run_hook(:after_eight)
63
+
64
+ assert_equal [:b, :a], @mum.executed
65
+ end
66
+
67
+ should "accept arbitrary parameters" do
68
+ @mum.instance_eval do
69
+ def a(me, arg); executed << arg+1; end
70
+ end
71
+ @mum.class.after_eight :a
72
+ @mum.class.after_eight lambda { |me, arg| me.executed << arg-1 }
73
+
74
+ @mum.run_hook(:after_eight, @mum, 1)
75
+
76
+ assert_equal [2, 0], @mum.executed
77
+ end
78
+
79
+ should "execute block callbacks in instance context" do
80
+ @mum.class.after_eight { executed << :c }
81
+ @mum.run_hook(:after_eight)
82
+ assert_equal [:c], @mum.executed
83
+ end
84
+ end
85
+
86
+ context "in class context" do
87
+ should "run a callback block" do
88
+ executed = []
89
+ @klass.after_eight do
90
+ executed << :klass
91
+ end
92
+ @klass.run_hook :after_eight
93
+
94
+ assert_equal [:klass], executed
95
+ end
96
+
97
+ should "run a class methods" do
98
+ executed = []
99
+ @klass.instance_eval do
100
+ after_eight :have_dinner
101
+
102
+ def have_dinner(executed)
103
+ executed << :have_dinner
104
+ end
105
+ end
106
+ @klass.run_hook :after_eight, executed
107
+
108
+ assert_equal [:have_dinner], executed
109
+ end
110
+ end
111
+ end
112
+
113
+ context "Deriving" do
114
+ setup do
115
+ @klass = Class.new(TestClass)
116
+
117
+ @mum = @klass.new
118
+ @mum.class.define_hook :after_eight
119
+ end
120
+
121
+ should "inherit the hook" do
122
+ @klass.class_eval do
123
+ after_eight :take_shower
124
+
125
+ def take_shower
126
+ executed << :take_shower
127
+ end
128
+ end
129
+
130
+ @kid = Class.new(@klass) do
131
+ after_eight :have_dinner
132
+
133
+ def have_dinner
134
+ executed << :have_dinner
135
+ end
136
+ end.new
137
+
138
+ assert_equal [:take_shower, :have_dinner], @kid.run_hook(:after_eight)
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,55 @@
1
+ require 'test_helper'
2
+
3
+ class HooksTest < Test::Unit::TestCase
4
+ context "Hooks.define_hook" do
5
+ setup do
6
+ @klass = Class.new(Object) do
7
+ extend Hooks::InheritableAttribute
8
+ end
9
+
10
+ @mum = @klass.new
11
+ @klass.inheritable_attr :drinks
12
+ end
13
+
14
+ should "provide a reader with empty inherited attributes, already" do
15
+ assert_equal nil, @klass.drinks
16
+ end
17
+
18
+ should "provide a reader with empty inherited attributes in a derived class" do
19
+ assert_equal nil, Class.new(@klass).drinks
20
+ #@klass.drinks = true
21
+ #Class.new(@klass).drinks # TODO: crashes.
22
+ end
23
+
24
+ should "provide an attribute copy in subclasses" do
25
+ @klass.drinks = []
26
+ assert @klass.drinks.object_id != Class.new(@klass).drinks.object_id
27
+ end
28
+
29
+ should "provide a writer" do
30
+ @klass.drinks = [:cabernet]
31
+ assert_equal [:cabernet], @klass.drinks
32
+ end
33
+
34
+ should "inherit attributes" do
35
+ @klass.drinks = [:cabernet]
36
+
37
+ subklass_a = Class.new(@klass)
38
+ subklass_a.drinks << :becks
39
+
40
+ subklass_b = Class.new(@klass)
41
+
42
+ assert_equal [:cabernet], @klass.drinks
43
+ assert_equal [:cabernet, :becks], subklass_a.drinks
44
+ assert_equal [:cabernet], subklass_b.drinks
45
+ end
46
+
47
+ should "not inherit attributes if we set explicitely" do
48
+ @klass.drinks = [:cabernet]
49
+ subklass = Class.new(@klass)
50
+
51
+ subklass.drinks = [:merlot] # we only want merlot explicitely.
52
+ assert_equal [:merlot], subklass.drinks # no :cabernet, here
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+
3
+ # wycats says...
4
+ require 'bundler'
5
+ Bundler.setup
6
+ require 'test/unit'
7
+ require 'shoulda'
8
+ require 'hooks'
9
+
10
+ $:.unshift File.dirname(__FILE__) # add current dir to LOAD_PATHS
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ README.rdoc
5
+ LICENSE.txt
@@ -0,0 +1,22 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
22
+ test/tmp/*
@@ -0,0 +1 @@
1
+ --title 'Padrino Core Documentation' --protected
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Padrino
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,294 @@
1
+ = Padrino (padrino-core)
2
+
3
+ Padrino is the godfather of Sinatra.
4
+
5
+ == Preface
6
+
7
+ Padrino is a ruby framework built upon the excellent {Sinatra Microframework}[http://www.sinatrarb.com].
8
+ Sinatra is a DSL for creating simple web applications in Ruby with speed and minimal effort.
9
+ This framework tries hard to make it as fun and easy as possible to code much more advanced web applications by
10
+ building upon the Sinatra philosophies and foundation.
11
+
12
+ == Introduction
13
+
14
+ Many people love Sinatra's simplicity and lightweight but often quickly come to miss a great deal
15
+ of functionality provided by other web frameworks such as Rails when building non-trivial applications.
16
+
17
+ Our goal with this framework is to match the essence of Sinatra and at the same time create a standard library
18
+ of tools, helpers and components that will make Sinatra suitable for more complex applications.
19
+
20
+ Here is a brief overview of functionality provided by the Padrino framework:
21
+
22
+ Agnostic:: Full support for many popular testing, templating, mocking, and data storage choices.
23
+ Generators:: Create Padrino applications, models, controllers i.e: padrino-gen project.
24
+ Mountable:: Unlike other ruby frameworks, principally designed for mounting multiple apps.
25
+ Routing:: Full url named routes, named params, respond_to support, before/after filter support.
26
+ Tag Helpers:: View helpers such as: tag, content_tag, input_tag.
27
+ Asset Helpers:: View helpers such as: link_to, image_tag, javascript_include_tag.
28
+ Form Helpers:: Builder support such as: form_tag, form_for, field_set_tag, text_field.
29
+ Text Helpers:: Useful formatting like: time_ago_in_words, js_escape_html, sanitize_html.
30
+ Mailer:: Fast and simple delivery support for sending emails (akin to ActionMailer).
31
+ Admin:: Builtin Admin interface (like Django)
32
+ Logging:: Provide a unified logger that can interact with your ORM or any library.
33
+ Reloading:: Automatically reloads server code during development.
34
+ Localization:: Full support of I18n language localization and can auto-set user's locale.
35
+
36
+ Keep in mind, the user will be able to pull in these components
37
+ {seperately into existing Sinatra applications}[http://www.padrinorb.com/guides/standalone-usage-in-sinatra]
38
+ or use them altogether for a comprehensive upgrade to Sinatra (a full-stack Padrino application).
39
+
40
+ == Installation
41
+
42
+ To install the padrino framework, simply grab the latest version from gemcutter:
43
+
44
+ $ sudo gem install padrino
45
+
46
+ This will install the necessary padrino gems to get you started.
47
+ Now you are ready to use this gem to enhance your sinatra projects or to create new Padrino applications.
48
+
49
+ For a more detailed look at Padrino installation,
50
+ check out the {Installation Guide}[http://www.padrinorb.com/guides/installation].
51
+
52
+ == Usage
53
+
54
+ Padrino is a framework which builds on the existing functionality and Sinatra and provides a variety of
55
+ additional tools and helpers to build upon that foundation. This README and Padrino documentation in general will focus
56
+ on the enhancements to the core Sinatra functionality. To use Padrino, one should be familiar with the basic
57
+ usage of Sinatra itself.
58
+
59
+ Please check out the
60
+ {Understanding Sinatra}[http://www.padrinorb.com/guides/underlying-sinatra-overview] guide
61
+ to learn more about these fundamentals.
62
+
63
+ For information on how to use a specific gem in isolation within an existing Sinatra project, checkout the guide for
64
+ {Using Padrino in Sinatra}[http://www.padrinorb.com/guides/standalone-usage-in-sinatra].
65
+
66
+ == Getting Started
67
+
68
+ Once a developer understands Sinatra, Padrino is quite easy to get comfortable with since Padrino is simply a superset
69
+ of existing Sinatra Functionality! Best way to get started with building Padrino applications is to read following resources:
70
+
71
+ * {Blog Tutorial}[http://www.padrinorb.com/guides/blog-tutorial] - Step-by-step guide to building a blog application with Padrino.
72
+ * {Quick Overview}[http://www.padrinorb.com/guides/basic-projects] - Outlines basic generation commands.
73
+ * {Padrino Examples}[http://www.padrinorb.com/guides/examples] - List of known Padrino applications which can serve as examples.
74
+
75
+ == Enhanced Base Application (padrino-core)
76
+
77
+ Sinatra has support for classes which can be extended to create an application: <tt>Sinatra::Base</tt> and <tt>Sinatra::Application</tt>
78
+ These classes can be extended in order to create a Sinatra web application. These classes provide support for all the basic
79
+ functionality afforded by Sinatra.
80
+
81
+ Padrino has support for an enhanced base application class <tt>Padrino::Application</tt>. <tt>Padrino::Application</tt>
82
+ expands the capabilities of Sinatra::Application and automatically provides the resulting application access to all of
83
+ the padrino framework's functionalities.
84
+
85
+ === Simple Application Definition
86
+
87
+ Let us first take a look at the simplest possible Padrino application:
88
+
89
+ # app.rb
90
+ PADRINO_ROOT = File.dirname(__FILE__) unless defined? PADRINO_ROOT
91
+ require 'padrino'
92
+ Padrino.load!
93
+
94
+ class SimpleApp < Padrino::Application
95
+ get '/' do
96
+ 'Hello world'
97
+ end
98
+
99
+ # and for read better we can divide with controllers
100
+ controller '/admin' do
101
+ get '/foo' do
102
+ 'Url is /admin/foo'
103
+ end
104
+ end
105
+ end
106
+
107
+ === Enhanced Route Definitions and Controllers
108
+
109
+ For a complete overview of the Padrino routing and controller system,
110
+ check out the {Routing and Controller guide}[http://www.padrinorb.com/guides/controllers].
111
+
112
+ Suppose we wanted to add additional routes to our Padrino application, and we want to organize the routes
113
+ within a more structured layout. Simply add a <tt>controllers</tt> or <tt>app/controllers</tt> folder and create a file as such:
114
+
115
+ # Simple Example
116
+ SimpleApp.controllers do
117
+ get "/test" do
118
+ "Text to return"
119
+ end
120
+ end
121
+
122
+ You can also do more complex route alias definitions:
123
+
124
+ # app/controllers/example.rb
125
+ SimpleApp.controllers :posts do
126
+ get :index do
127
+ ...
128
+ end
129
+
130
+ get :show, :with => :id do
131
+ # url generated is '/posts/show/:id'
132
+ # access params[:id]
133
+ end
134
+ end
135
+
136
+ as well as mapping the route aliases to an explicit url:
137
+
138
+ # app/controllers/example.rb
139
+ SimpleApp.controllers do
140
+ get :index, :map => '/index' do
141
+ ...
142
+ end
143
+
144
+ get :account, :map => '/the/accounts/:name/and/:id' do
145
+ # access params[:name] and params[:index]
146
+ end
147
+ end
148
+
149
+ and even configure the respond_to for each route:
150
+
151
+ # app/controllers/example.rb
152
+ SimpleApp.controllers :admin do
153
+ get :show, :with => :id, :provides => :js do
154
+ "Url is /admin/show/#{params[:id]}.#{params[:format]}"
155
+ end
156
+
157
+ get :other, with => [:id, :name], respond_to => [:html, :json] do
158
+ case content_type
159
+ when :js then ... end
160
+ when :json then ... end
161
+ end
162
+ end
163
+ end
164
+
165
+ or auto lookup for current locale or content_type
166
+
167
+ # app/controllers/example.rb
168
+ SimpleApp.controllers :admin do
169
+ get :show, :with => :id, :provides => [html, :js] do
170
+ render "admin/show"
171
+ end
172
+ end
173
+
174
+ When you visit :+show+ and your I18n.locale == :ru Padrino try to look for "admin/show.ru.js.*" if nothing match that path
175
+ they try "admin/show.ru.*" then "admin/show.js.*" if none match return "admin/show.erb" (or other engine i.e. haml)
176
+
177
+ For a complete overview of the routing and controller system, check out the
178
+ {Routing and Controller guide}[http://www.padrinorb.com/guides/controllers].
179
+
180
+ === Rendering
181
+
182
+ Unlike Sinatra, Padrino supports automatic template lookups such as:
183
+
184
+ # searches for 'account/index.{erb,haml,...}
185
+ render 'account/index'
186
+
187
+ This render does not require any template engine to be specified and will choose the first one that is discovered.
188
+ The existing render function works as well if an engine type should be specified:
189
+
190
+ # example.haml
191
+ render :haml, 'account/index'
192
+
193
+ For a complete overview of the Padrino rendering system, check out the
194
+ {Routing and Controller guide}[http://www.padrinorb.com/guides/controllers].
195
+
196
+ === Layout
197
+
198
+ With Padrino you can (like rails do) use for your custom layout, disable it
199
+
200
+ class SimpleApp < Padrino::Application
201
+
202
+ # Disable layouts
203
+ disable layout
204
+
205
+ # Use the layout located in views/layouts/custom.haml
206
+ layout :custom
207
+
208
+ For a complete overview of the layout functionality,
209
+ check out the {Routing and Controller guide}[http://www.padrinorb.com/guides/controllers].
210
+
211
+ === Mounting Applications
212
+
213
+ Padrino applications are all automatically mountable into other Padrino projects. This means that a given Padrino
214
+ project directory can easily mount multiple applications. This allows for better organization of complex applications,
215
+ re-usable applications that can be applied (i.e admin, auth, blog) and even more flexibility.
216
+
217
+ You can think of mountable applications as a 'full-featured' merb slice or rails engine. Instead of a separate construct,
218
+ any application can simply be packaged and mounted into another project.
219
+
220
+ Padrino stores application mounting information by default within <tt>config/apps.rb</tt>. This file is intended
221
+ to keep all information regarding what applications are mounted to which uri's.
222
+
223
+ For a complete look at mounting applications within a Padrino project,
224
+ check out the guide on {Mounting Applications}[http://www.padrinorb.com/guides/mounting-applications].
225
+
226
+ === Auto Load Paths
227
+
228
+ Padrino also intelligently supports requiring useful files within your application automatically and provides
229
+ functionality for easily splitting up your application into separate files. Padrino automatically requires <tt>config/database.rb</tt>
230
+ as a convention for establishing database connection. Also, any files within the <tt>lib</tt> folder will be required
231
+ automatically by Padrino.
232
+
233
+ For a complete overview of auto-loaded paths within Padrino,
234
+ check out the {Padrino Development Guide}[http://www.padrinorb.com/guides/development-and-terminal-commands].
235
+
236
+ === Application Logging
237
+
238
+ Padrino also supports robust logging capabilities. By default, logging information will
239
+ go to the STDOUT in development (for use in a console) and in an environment-specific log file <tt>log/development.log</tt>
240
+ in test and production environments.
241
+
242
+ To use the logger within a Padrino application, simply refer to the <tt>logger</tt> method accessible
243
+ within your app and any controller or views:
244
+
245
+ # controllers/example.rb
246
+ SimpleApp.controllers do
247
+ get("/test") { logger.info "This is a test" }
248
+ end
249
+
250
+ For a complete overview of Padrino logger functionality, check out the
251
+ {Padrino Development Guide}[http://www.padrinorb.com/guides/development-and-terminal-commands].
252
+
253
+ === Development Reloader
254
+
255
+ Padrino applications also have the enabled ability to automatically reload all changing application files without
256
+ the need to restart the server. Through the use of a customized Rack middleware, all files on the 'load path'
257
+ are monitored and reloaded whenever changes are applied.
258
+
259
+ This makes rapid development much easier and provides a better alternative to 'shotgun' or 'rerun'
260
+ which requires the application server to be restarted which makes requests take much longer to complete.
261
+
262
+ For a complete overview of code reloading in development,
263
+ check out the {Padrino Development Guide}[http://www.padrinorb.com/guides/development-and-terminal-commands].
264
+
265
+ === Terminal Commands
266
+
267
+ Padrino also comes equipped with multiple useful terminal commands which can be activated to perform
268
+ common tasks such as starting / stopping the application, executing the unit tests or activating an irb session.
269
+
270
+ The following commands are available:
271
+
272
+ # starts the app server (non-daemonized)
273
+ $ padrino start
274
+ # starts the app server (daemonized) with given port, environment and adapter
275
+ $ padrino start -d -p 3000 -e development -a thin
276
+
277
+ # Stops a daemonized app server
278
+ $ padrino stop
279
+
280
+ # Bootup the Padrino console (irb)
281
+ $ padrino console
282
+
283
+ # Run/List tasks
284
+ $ padrino rake
285
+
286
+ You can also create custom rake tasks as well. Using these commands can simplify common tasks
287
+ making development that much smoother.
288
+
289
+ For a complete overview of Padrino terminal commands, check out the
290
+ {Padrino Commands Guide}[http://www.padrinorb.com/guides/development-and-terminal-commands].
291
+
292
+ == Copyright
293
+
294
+ Copyright (c) 2011 Padrino. See LICENSE for details.