middleman-core 3.2.0 → 3.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (241) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +10 -0
  3. data/features/helpers_auto_javascript_include_tag.feature +21 -0
  4. data/features/helpers_auto_stylesheet_link_tag.feature +21 -0
  5. data/features/i18n_builder.feature +23 -13
  6. data/features/i18n_preview.feature +9 -9
  7. data/features/markdown_kramdown.feature +1 -1
  8. data/fixtures/i18n-test-app/source/{layout.erb → layouts/layout.erb} +0 -0
  9. data/fixtures/i18n-test-app/source/{morning.en.html.erb → localizable/morning.en.html.erb} +0 -0
  10. data/fixtures/i18n-test-app/source/{morning.es.html.erb → localizable/morning.es.html.erb} +0 -0
  11. data/fixtures/i18n-test-app/source/{one.en.md → localizable/one.en.md} +0 -0
  12. data/fixtures/i18n-test-app/source/{one.es.md → localizable/one.es.md} +0 -0
  13. data/lib/middleman-core/application.rb +4 -0
  14. data/lib/middleman-core/cli/build.rb +14 -2
  15. data/lib/middleman-core/cli/init.rb +1 -0
  16. data/lib/middleman-core/core_extensions.rb +6 -1
  17. data/lib/middleman-core/core_extensions/file_watcher.rb +1 -0
  18. data/lib/middleman-core/core_extensions/request.rb +2 -4
  19. data/lib/middleman-core/extensions.rb +13 -5
  20. data/lib/middleman-core/meta_pages.rb +25 -11
  21. data/lib/middleman-core/meta_pages/sitemap_resource.rb +2 -2
  22. data/lib/middleman-core/meta_pages/templates/config.html.erb +7 -9
  23. data/lib/middleman-core/meta_pages/templates/index.html.erb +3 -3
  24. data/lib/middleman-core/meta_pages/templates/sitemap.html.erb +6 -6
  25. data/lib/middleman-core/sitemap/extensions/redirects.rb +1 -2
  26. data/lib/middleman-core/sitemap/extensions/request_endpoints.rb +2 -3
  27. data/lib/middleman-core/sitemap/resource.rb +7 -13
  28. data/lib/middleman-core/util.rb +2 -3
  29. data/lib/middleman-core/version.rb +1 -1
  30. data/lib/middleman-more/core_extensions/default_helpers.rb +9 -5
  31. data/lib/middleman-more/core_extensions/i18n.rb +17 -10
  32. data/lib/middleman-more/extensions/{automatic-alt-tags.rb → automatic_alt_tags.rb} +0 -0
  33. data/lib/middleman-more/extensions/gzip.rb +29 -6
  34. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/.document +0 -0
  35. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/.gitignore +0 -0
  36. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/.yardopts +0 -0
  37. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/LICENSE.txt +0 -0
  38. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/README.rdoc +5 -5
  39. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/Rakefile +0 -0
  40. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/bin/padrino +0 -0
  41. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core.rb +4 -10
  42. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/application.rb +39 -35
  43. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/application/flash.rb +7 -7
  44. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/rendering.rb +317 -0
  45. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/application/rendering/extensions/erubis.rb +15 -6
  46. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/application/rendering/extensions/haml.rb +2 -0
  47. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/application/rendering/extensions/slim.rb +0 -0
  48. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/application/routing.rb +406 -368
  49. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/application/showexceptions.rb +21 -0
  50. data/lib/vendored-middleman-deps/padrino-core-0.11.4/lib/padrino-core/caller.rb +53 -0
  51. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/cli/adapter.rb +4 -4
  52. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/cli/base.rb +40 -39
  53. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/cli/console.rb +0 -0
  54. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/cli/rake.rb +2 -2
  55. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/cli/rake_tasks.rb +2 -4
  56. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/command.rb +2 -2
  57. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/images/404.png +0 -0
  58. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/images/500.png +0 -0
  59. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/loader.rb +14 -15
  60. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/cs.yml +0 -1
  61. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/da.yml +0 -1
  62. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/de.yml +0 -1
  63. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/en.yml +0 -1
  64. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/es.yml +1 -2
  65. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/fr.yml +2 -3
  66. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/hu.yml +1 -2
  67. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/it.yml +0 -1
  68. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/ja.yml +1 -2
  69. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/lv.yml +0 -1
  70. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/nl.yml +0 -1
  71. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/no.yml +0 -2
  72. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/pl.yml +0 -1
  73. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/pt_br.yml +0 -1
  74. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/ro.yml +0 -1
  75. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/ru.yml +0 -1
  76. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/sv.yml +0 -1
  77. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/tr.yml +0 -1
  78. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/uk.yml +0 -1
  79. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/zh_cn.yml +0 -1
  80. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/locale/zh_tw.yml +0 -1
  81. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/logger.rb +30 -36
  82. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/module.rb +3 -3
  83. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/mounter.rb +59 -59
  84. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/reloader.rb +23 -23
  85. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/router.rb +10 -13
  86. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/server.rb +17 -19
  87. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/support_lite.rb +0 -0
  88. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/tasks.rb +3 -3
  89. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/lib/padrino-core/version.rb +1 -1
  90. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/padrino-core.gemspec +2 -2
  91. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/fixtures/app_gem/Gemfile +0 -0
  92. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/fixtures/app_gem/app/app.rb +0 -0
  93. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/fixtures/app_gem/app_gem.gemspec +0 -0
  94. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/fixtures/app_gem/lib/app_gem.rb +0 -0
  95. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/fixtures/app_gem/lib/app_gem/version.rb +0 -0
  96. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/fixtures/apps/.components +0 -0
  97. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/fixtures/apps/.gitignore +0 -0
  98. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/fixtures/apps/complex.rb +0 -0
  99. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/fixtures/apps/simple.rb +0 -0
  100. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/fixtures/dependencies/a.rb +0 -0
  101. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/fixtures/dependencies/b.rb +0 -0
  102. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/fixtures/dependencies/c.rb +0 -0
  103. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/fixtures/dependencies/circular/e.rb +0 -0
  104. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/fixtures/dependencies/circular/f.rb +0 -0
  105. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/fixtures/dependencies/circular/g.rb +0 -0
  106. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/fixtures/dependencies/d.rb +0 -0
  107. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/helper.rb +0 -0
  108. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/mini_shoulda.rb +0 -0
  109. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/test_application.rb +7 -7
  110. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/test_core.rb +0 -0
  111. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/test_csrf_protection.rb +0 -0
  112. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/test_dependencies.rb +0 -0
  113. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/test_filters.rb +0 -0
  114. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/test_flash.rb +0 -0
  115. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/test_locale.rb +0 -0
  116. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/test_logger.rb +29 -0
  117. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/test_mounter.rb +0 -0
  118. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/test_reloader_complex.rb +0 -0
  119. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/test_reloader_simple.rb +0 -0
  120. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/test_rendering.rb +15 -2
  121. data/lib/vendored-middleman-deps/padrino-core-0.11.4/test/test_rendering_extensions.rb +14 -0
  122. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/test_restful_routing.rb +0 -0
  123. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/test_router.rb +0 -0
  124. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/test_routing.rb +69 -11
  125. data/lib/vendored-middleman-deps/{padrino-core-0.11.2 → padrino-core-0.11.4}/test/test_support_lite.rb +0 -0
  126. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/.document +0 -0
  127. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/.gitignore +0 -0
  128. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/.yardopts +0 -0
  129. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/LICENSE.txt +0 -0
  130. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/README.rdoc +1 -1
  131. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/Rakefile +0 -0
  132. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers.rb +3 -6
  133. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/asset_tag_helpers.rb +34 -42
  134. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/lib/padrino-helpers/breadcrumb_helpers.rb +183 -0
  135. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/form_builder/abstract_form_builder.rb +126 -118
  136. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/form_builder/standard_form_builder.rb +6 -9
  137. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/form_helpers.rb +252 -195
  138. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/format_helpers.rb +29 -42
  139. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/cs.yml +14 -14
  140. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/da.yml +1 -1
  141. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/de.yml +1 -1
  142. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/en.yml +16 -16
  143. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/es.yml +16 -16
  144. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/fr.yml +1 -2
  145. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/hu.yml +16 -16
  146. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/it.yml +2 -2
  147. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/ja.yml +16 -16
  148. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/lv.yml +16 -16
  149. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/nl.yml +1 -1
  150. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/no.yml +1 -1
  151. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/pl.yml +7 -7
  152. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/pt_br.yml +16 -16
  153. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/ro.yml +16 -16
  154. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/ru.yml +16 -16
  155. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/sv.yml +16 -16
  156. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/tr.yml +16 -16
  157. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/uk.yml +16 -16
  158. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/zh_cn.yml +16 -16
  159. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/locale/zh_tw.yml +16 -16
  160. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/number_helpers.rb +10 -15
  161. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/output_helpers.rb +50 -58
  162. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/output_helpers/abstract_handler.rb +16 -18
  163. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/output_helpers/erb_handler.rb +11 -12
  164. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/output_helpers/haml_handler.rb +9 -9
  165. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/output_helpers/slim_handler.rb +11 -13
  166. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/render_helpers.rb +5 -6
  167. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/tag_helpers.rb +26 -22
  168. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/lib/padrino-helpers/translation_helpers.rb +4 -6
  169. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/padrino-helpers.gemspec +0 -0
  170. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/app.rb +7 -3
  171. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/button_to.erb +8 -0
  172. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/button_to.haml +5 -0
  173. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/fixtures/markup_app/views/button_to.slim +6 -0
  174. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/capture_concat.erb +0 -0
  175. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/capture_concat.haml +0 -0
  176. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/capture_concat.slim +0 -0
  177. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/content_for.erb +0 -0
  178. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/content_for.haml +0 -0
  179. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/content_for.slim +0 -0
  180. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/content_tag.erb +0 -0
  181. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/content_tag.haml +0 -0
  182. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/content_tag.slim +0 -0
  183. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/current_engine.erb +0 -0
  184. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/current_engine.haml +0 -0
  185. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/current_engine.slim +0 -0
  186. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/fields_for.erb +0 -0
  187. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/fields_for.haml +0 -0
  188. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/fields_for.slim +0 -0
  189. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/form_for.erb +0 -0
  190. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/form_for.haml +0 -0
  191. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/form_for.slim +0 -0
  192. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/form_tag.erb +9 -0
  193. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/form_tag.haml +8 -0
  194. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/form_tag.slim +9 -0
  195. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/link_to.erb +0 -0
  196. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/link_to.haml +0 -0
  197. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/link_to.slim +0 -0
  198. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/mail_to.erb +0 -0
  199. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/mail_to.haml +0 -0
  200. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/mail_to.slim +0 -0
  201. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/meta_tag.erb +0 -0
  202. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/meta_tag.haml +0 -0
  203. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/meta_tag.slim +0 -0
  204. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/partials/_erb.erb +0 -0
  205. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/partials/_haml.haml +0 -0
  206. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/partials/_slim.slim +0 -0
  207. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/simple_partial.erb +0 -0
  208. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/simple_partial.haml +0 -0
  209. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/markup_app/views/simple_partial.slim +0 -0
  210. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/render_app/app.rb +1 -0
  211. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/render_app/views/current_engine.haml +0 -0
  212. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/render_app/views/current_engines/_erb.erb +0 -0
  213. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/render_app/views/current_engines/_haml.haml +0 -0
  214. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/render_app/views/current_engines/_slim.slim +0 -0
  215. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/render_app/views/double_capture_erb.erb +0 -0
  216. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/render_app/views/double_capture_haml.haml +0 -0
  217. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/render_app/views/double_capture_slim.slim +0 -0
  218. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/render_app/views/erb/test.erb +0 -0
  219. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/render_app/views/explicit_engine.haml +0 -0
  220. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/render_app/views/haml/test.haml +0 -0
  221. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/render_app/views/template/_user.haml +0 -0
  222. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/render_app/views/template/haml_template.haml +0 -0
  223. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/fixtures/render_app/views/template/some_template.haml +0 -0
  224. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/helper.rb +0 -0
  225. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/test_asset_tag_helpers.rb +9 -3
  226. data/lib/vendored-middleman-deps/padrino-helpers-0.11.4/test/test_breadcrumb_helpers.rb +134 -0
  227. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/test_form_builder.rb +38 -6
  228. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/test_form_helpers.rb +230 -12
  229. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/test_format_helpers.rb +3 -3
  230. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/test_locale.rb +0 -0
  231. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/test_number_helpers.rb +4 -0
  232. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/test_output_helpers.rb +1 -1
  233. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/test_render_helpers.rb +1 -1
  234. data/lib/vendored-middleman-deps/{padrino-helpers-0.11.2 → padrino-helpers-0.11.4}/test/test_tag_helpers.rb +3 -3
  235. data/middleman-core.gemspec +7 -8
  236. data/spec/spec_helper.rb +1 -1
  237. metadata +220 -215
  238. data/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/rendering.rb +0 -320
  239. data/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/application/showexceptions.rb +0 -20
  240. data/lib/vendored-middleman-deps/padrino-core-0.11.2/lib/padrino-core/caller.rb +0 -53
  241. data/lib/vendored-middleman-deps/padrino-helpers-0.11.2/lib/padrino-helpers/breadcrumb_helpers.rb +0 -171
@@ -2,9 +2,8 @@ require File.expand_path(File.dirname(__FILE__) + '/abstract_form_builder') unle
2
2
 
3
3
  module Padrino
4
4
  module Helpers
5
- module FormBuilder # @private
6
- class StandardFormBuilder < AbstractFormBuilder # @private
7
-
5
+ module FormBuilder
6
+ class StandardFormBuilder < AbstractFormBuilder
8
7
  ##
9
8
  # StandardFormBuilder
10
9
  #
@@ -26,18 +25,16 @@ module Padrino
26
25
  EOF
27
26
  end
28
27
 
29
- # submit_block("Update")
30
28
  def submit_block(caption, options={})
31
29
  submit_html = self.submit(caption, options)
32
30
  @template.content_tag(:p, submit_html)
33
31
  end
34
32
 
35
- # image_submit_block("submit.png")
36
33
  def image_submit_block(source, options={})
37
34
  submit_html = self.image_submit(source, options)
38
35
  @template.content_tag(:p, submit_html)
39
36
  end
40
- end # StandardFormBuilder
41
- end # FormBuilder
42
- end # Helpers
43
- end # Padrino
37
+ end
38
+ end
39
+ end
40
+ end
@@ -7,14 +7,16 @@ module Padrino
7
7
  #
8
8
  module FormHelpers
9
9
  ##
10
- # Constructs a form for object using given or default form_builder
10
+ # Constructs a form for object using given or default form_builder.
11
11
  #
12
12
  # @param [Object] object
13
13
  # The object for which the form is being built.
14
- # @param [String] url
14
+ # @param [String] URL
15
15
  # The url this form will submit to.
16
16
  # @param [Hash] settings
17
- # The settings associated with this form. Accepts html options.
17
+ # The settings associated with this form.
18
+ # Accepts a :namespace option that will be prepended to the id attributes of the form's elements.
19
+ # Also accepts HTML options.
18
20
  # @option settings [String] :builder ("StandardFormBuilder")
19
21
  # The FormBuilder class to use such as StandardFormBuilder.
20
22
  # @param [Proc] block
@@ -28,21 +30,22 @@ module Padrino
28
30
  # form_for :user, '/register' do |f| ... end
29
31
  # form_for @user, '/register', :id => 'register' do |f| ... end
30
32
  #
31
- # @api public
32
33
  def form_for(object, url, settings={}, &block)
33
34
  instance = builder_instance(object, settings)
34
35
  html = capture_html(instance, &block)
36
+ settings[:multipart] = instance.multipart unless settings.include?(:multipart)
37
+ settings.delete(:namespace)
35
38
  form_tag(url, settings) { html }
36
39
  end
37
40
 
38
41
  ##
39
- # Constructs form fields for an object using given or default form_builder
40
- # Used within an existing form to allow alternate objects within one form
42
+ # Constructs form fields for an object using given or default form_builder.
43
+ # Used within an existing form to allow alternate objects within one form.
41
44
  #
42
45
  # @param [Object] object
43
46
  # The object for which the fields are being built.
44
47
  # @param [Hash] settings
45
- # The settings associated with these fields. Accepts html options.
48
+ # The settings associated with these fields. Accepts HTML options.
46
49
  # @param [Proc] block
47
50
  # The content inside this set of fields.
48
51
  #
@@ -52,7 +55,6 @@ module Padrino
52
55
  # fields_for @user.assignment do |assignment| ... end
53
56
  # fields_for :assignment do |assigment| ... end
54
57
  #
55
- # @api public
56
58
  def fields_for(object, settings={}, &block)
57
59
  instance = builder_instance(object, settings)
58
60
  fields_html = capture_html(instance, &block)
@@ -61,40 +63,45 @@ module Padrino
61
63
  end
62
64
 
63
65
  ##
64
- # Constructs a form without object based on options
66
+ # Constructs a form without object based on options.
65
67
  #
66
68
  # @param [String] url
67
- # The url this form will submit to.
69
+ # The URL this form will submit to.
68
70
  # @param [Hash] options
69
71
  # The html options associated with this form.
70
72
  # @param [Proc] block
71
73
  # The fields and content inside this form.
72
74
  #
73
- # @return [String] The html form with the specified options and input fields.
75
+ # @return [String] The HTML form with the specified options and input fields.
74
76
  #
75
77
  # @example
76
78
  # form_tag '/register', :class => "registration_form" do ... end
77
79
  #
78
- # @api public
79
80
  def form_tag(url, options={}, &block)
80
81
  desired_method = options[:method].to_s
81
82
  options.delete(:method) unless desired_method =~ /get|post/i
82
- options.reverse_merge!(:method => 'post', :action => url)
83
+ options.reverse_merge!(:method => 'post',
84
+ :action => url,
85
+ :protect_from_csrf => is_protected_from_csrf? )
83
86
  options[:enctype] = 'multipart/form-data' if options.delete(:multipart)
84
87
  options['accept-charset'] ||= 'UTF-8'
85
88
  inner_form_html = hidden_form_method_field(desired_method)
86
- inner_form_html << csrf_token_field
89
+ if options[:protect_from_csrf] == true && !(desired_method =~ /get/i)
90
+ inner_form_html << csrf_token_field
91
+ end
87
92
  inner_form_html << mark_safe(capture_html(&block))
88
- concat_content content_tag(:form, inner_form_html, options)
93
+ not_concat = options.delete(:not_concat)
94
+ form_html = content_tag(:form, inner_form_html, options)
95
+ not_concat ? form_html : concat_content(form_html)
89
96
  end
90
97
 
91
98
  ##
92
- # Returns the hidden method field for 'put' and 'delete' forms
99
+ # Returns the hidden method field for 'put' and 'delete' forms.
93
100
  # Only 'get' and 'post' are allowed within browsers;
94
101
  # 'put' and 'delete' are just specified using hidden fields with form action still 'put'.
95
102
  #
96
103
  # @param [String] desired_method
97
- # The method this hidden field represents (i.e put or delete))
104
+ # The method this hidden field represents (i.e put or delete).
98
105
  #
99
106
  # @return [String] The hidden field representing the +desired_method+ for the form.
100
107
  #
@@ -102,14 +109,13 @@ module Padrino
102
109
  # # Generate: <input name="_method" value="delete" />
103
110
  # hidden_form_method_field('delete')
104
111
  #
105
- # @api semipublic
106
112
  def hidden_form_method_field(desired_method)
107
113
  return ActiveSupport::SafeBuffer.new if desired_method.blank? || desired_method.to_s =~ /get|post/i
108
114
  hidden_field_tag(:_method, :value => desired_method)
109
115
  end
110
116
 
111
117
  ##
112
- # Constructs a field_set to group fields with given options
118
+ # Constructs a field_set to group fields with given options.
113
119
  #
114
120
  # @overload field_set_tag(legend=nil, options={}, &block)
115
121
  # @param [String] legend The legend caption for the fieldset
@@ -125,7 +131,6 @@ module Padrino
125
131
  # field_set_tag(:class => "office-set") { }
126
132
  # field_set_tag("Office", :class => 'office-set') { }
127
133
  #
128
- # @api public
129
134
  def field_set_tag(*args, &block)
130
135
  options = args.extract_options!
131
136
  legend_text = args[0].is_a?(String) ? args.first : nil
@@ -135,13 +140,13 @@ module Padrino
135
140
  end
136
141
 
137
142
  ##
138
- # Constructs list html for the errors for a given symbol
143
+ # Constructs list HTML for the errors for a given symbol.
139
144
  #
140
145
  # @overload error_messages_for(*objects, options = {})
141
146
  # @param [Array<Object>] object Splat of objects to display errors for.
142
147
  # @param [Hash] options Error message display options.
143
148
  # @option options [String] :header_tag ("h2")
144
- # Used for the header of the error div
149
+ # Used for the header of the error div.
145
150
  # @option options [String] :id ("field-errors")
146
151
  # The id of the error div.
147
152
  # @option options [String] :class ("field-errors")
@@ -153,7 +158,7 @@ module Padrino
153
158
  # The object name to use in the header, or any text that you prefer.
154
159
  # If +:object_name+ is not set, the name of the first object will be used.
155
160
  # @option options [String] :header_message ("X errors prohibited this object from being saved")
156
- # The message in the header of the error div. Pass +nil+ or an empty string
161
+ # The message in the header of the error div. Pass +nil+ or an empty string
157
162
  # to avoid the header message altogether.
158
163
  # @option options [String] :message ("There were problems with the following fields:")
159
164
  # The explanation message after the header message and before
@@ -165,7 +170,6 @@ module Padrino
165
170
  # @example
166
171
  # error_messages_for :user
167
172
  #
168
- # @api public
169
173
  def error_messages_for(*objects)
170
174
  options = objects.extract_options!.symbolize_keys
171
175
  objects = objects.map { |object_name|
@@ -184,19 +188,19 @@ module Padrino
184
188
  end
185
189
  end
186
190
 
187
- options[:object_name] ||= objects.first.class
191
+ options[:object_name] ||= objects.first.class.to_s.underscore.gsub(/\//, ' ')
188
192
 
189
193
  I18n.with_options :locale => options[:locale], :scope => [:models, :errors, :template] do |locale|
190
194
  header_message = if options.include?(:header_message)
191
195
  options[:header_message]
192
196
  else
193
- object_name = options[:object_name].to_s.underscore.gsub(/\//, ' ')
197
+ object_name = options[:object_name]
194
198
  object_name = I18n.t(:name, :default => object_name.humanize, :scope => [:models, object_name], :count => 1)
195
199
  locale.t :header, :count => count, :model => object_name
196
200
  end
197
201
  message = options.include?(:message) ? options[:message] : locale.t(:body)
198
202
  error_messages = objects.map { |object|
199
- object_name = options[:object_name].to_s.underscore.gsub(/\//, ' ')
203
+ object_name = options[:object_name]
200
204
  object.errors.map { |f, msg|
201
205
  field = I18n.t(f, :default => f.to_s.humanize, :scope => [:models, object_name, :attributes])
202
206
  content_tag(:li, "%s %s" % [field, msg])
@@ -216,7 +220,8 @@ module Padrino
216
220
  end
217
221
 
218
222
  ##
219
- # Returns a string containing the error message attached to the +method+ on the +object+ if one exists.
223
+ # Returns a string containing the error message attached to the
224
+ # +method+ on the +object+ if one exists.
220
225
  #
221
226
  # @param [Object] object
222
227
  # The object to display the error for.
@@ -251,8 +256,8 @@ module Padrino
251
256
  error = if defined?(Ohm::Model) && object.is_a?(Ohm::Model)
252
257
  I18n.t("ohm.errors.messages.#{error[0]}", :default => error[0].to_s)
253
258
  else
254
- # Array(error).first is necessary because some ORMs
255
- # give us an array others directly a value
259
+ # Array(error).first is necessary because some ORMs
260
+ # give us an array others directly a value.
256
261
  Array(error)[0]
257
262
  end
258
263
 
@@ -267,7 +272,7 @@ module Padrino
267
272
  end
268
273
 
269
274
  ##
270
- # Constructs a label tag from the given options
275
+ # Constructs a label tag from the given options.
271
276
  #
272
277
  # @param [String] name
273
278
  # The name of the field to label.
@@ -284,7 +289,6 @@ module Padrino
284
289
  # label_tag :username, :class => 'long-label'
285
290
  # label_tag :username, :class => 'long-label' do ... end
286
291
  #
287
- # @api public
288
292
  def label_tag(name, options={}, &block)
289
293
  options.reverse_merge!(:caption => "#{name.to_s.humanize}: ", :for => name)
290
294
  caption_text = options.delete(:caption).html_safe
@@ -299,7 +303,7 @@ module Padrino
299
303
  end
300
304
 
301
305
  ##
302
- # Creates a text field input with the given name and options
306
+ # Creates a text field input with the given name and options.
303
307
  #
304
308
  # @macro [new] text_field
305
309
  # @param [Symbol] name
@@ -328,40 +332,39 @@ module Padrino
328
332
  # @option options [Boolean] :spellcheck
329
333
  # Specifies whether or not the field should have it's spelling and grammar checked for errors.
330
334
  # @option options [Boolean] :draggable
331
- # Specifies whether or not the field is draggable. (true, false, :auto)
335
+ # Specifies whether or not the field is draggable. (true, false, :auto).
332
336
  # @option options [String] :pattern
333
337
  # Specifies the regular expression pattern that the field's value is checked against.
334
338
  # @option options [Symbol] :autocomplete
335
- # Specifies whether or not the field should have autocomplete enabled. (:on, :off)
339
+ # Specifies whether or not the field should have autocomplete enabled. (:on, :off).
336
340
  # @option options [Boolean] :autofocus
337
341
  # Specifies whether or not the field should automatically get focus when the page loads.
338
342
  # @option options [Boolean] :required
339
- # Specifies whether or not the field is required to be completeled before the form is submitted.
343
+ # Specifies whether or not the field is required to be completed before the form is submitted.
340
344
  # @option options [Boolean] :readonly
341
345
  # Specifies whether or not the field is read only.
342
346
  # @option options [Boolean] :disabled
343
347
  # Specifies whether or not the field is disabled.
344
348
  #
345
349
  # @return [String]
346
- # Generated HTML with specified +options+
350
+ # Generated HTML with specified +options+.
347
351
  #
348
352
  # @example
349
353
  # text_field_tag :first_name, :maxlength => 40, :required => true
350
- # # => <input name="first_name" maxlength="40" required type="text">
354
+ # # => <input name="first_name" maxlength="40" required type="text" />
351
355
  #
352
356
  # text_field_tag :last_name, :class => 'string', :size => 40
353
- # # => <input name="last_name" class="string" size="40" type="text">
357
+ # # => <input name="last_name" class="string" size="40" type="text" />
354
358
  #
355
359
  # text_field_tag :username, :placeholder => 'Your Username'
356
- # # => <input name="username" placeholder="Your Username" type="text">
360
+ # # => <input name="username" placeholder="Your Username" type="text" />
357
361
  #
358
- # @api public
359
362
  def text_field_tag(name, options={})
360
363
  input_tag(:text, options.reverse_merge!(:name => name))
361
364
  end
362
365
 
363
366
  ##
364
- # Creates a number field input with the given name and options
367
+ # Creates a number field input with the given name and options.
365
368
  #
366
369
  # @macro [new] number_field
367
370
  # @param [Symbol] name
@@ -390,11 +393,11 @@ module Padrino
390
393
  # @option options [Boolean] :spellcheck
391
394
  # Specifies whether or not the field should have it's spelling and grammar checked for errors.
392
395
  # @option options [Boolean] :draggable
393
- # Specifies whether or not the field is draggable. (true, false, :auto)
396
+ # Specifies whether or not the field is draggable. (true, false, :auto).
394
397
  # @option options [String] :pattern
395
398
  # Specifies the regular expression pattern that the field's value is checked against.
396
399
  # @option options [Symbol] :autocomplete
397
- # Specifies whether or not the field should have autocomplete enabled. (:on, :off)
400
+ # Specifies whether or not the field should have autocomplete enabled. (:on, :off).
398
401
  # @option options [Boolean] :autofocus
399
402
  # Specifies whether or not the field should automatically get focus when the page loads.
400
403
  # @option options [Boolean] :required
@@ -405,138 +408,125 @@ module Padrino
405
408
  # Specifies whether or not the field is disabled.
406
409
  #
407
410
  # @return [String]
408
- # Generated HTML with specified +options+
411
+ # Generated HTML with specified +options+.
409
412
  #
410
413
  # @example
411
- # number_field_tag :quanity, :class => 'numeric'
412
- # # => <input name="quanity" class="numeric" type="number">
414
+ # number_field_tag :quantity, :class => 'numeric'
415
+ # # => <input name="quantity" class="numeric" type="number" />
413
416
  #
414
417
  # number_field_tag :zip_code, :pattern => /[0-9]{5}/
415
- # # => <input name="zip_code" pattern="[0-9]{5}" type="number">
418
+ # # => <input name="zip_code" pattern="[0-9]{5}" type="number" />
416
419
  #
417
420
  # number_field_tag :credit_card, :autocomplete => :off
418
- # # => <input name="credit_card" autocomplete="off" type="number">
421
+ # # => <input name="credit_card" autocomplete="off" type="number" />
419
422
  #
420
423
  # number_field_tag :age, :min => 18, :max => 120, :step => 1
421
- # # => <input name="age" min="18" max="120" step="1" type="number">
424
+ # # => <input name="age" min="18" max="120" step="1" type="number" />
422
425
  #
423
- # @api public
424
426
  def number_field_tag(name, options={})
425
427
  input_tag(:number, options.reverse_merge(:name => name))
426
428
  end
427
429
 
428
430
  ##
429
- # Creates a telephone field input with the given name and options
431
+ # Creates a telephone field input with the given name and options.
430
432
  #
431
433
  # @macro text_field
432
434
  #
433
435
  # @example
434
436
  # telephone_field_tag :phone_number, :class => 'string'
435
- # # => <input name="phone_number" class="string" type="tel">
437
+ # # => <input name="phone_number" class="string" type="tel" />
436
438
  #
437
439
  # telephone_field_tag :cell_phone, :tabindex => 1
438
440
  # telephone_field_tag :work_phone, :tabindex => 2
439
441
  # telephone_field_tag :home_phone, :tabindex => 3
440
442
  #
441
- # # => <input name="cell_phone" tabindex="1" type="tel">
442
- # # => <input name="work_phone" tabindex="2" type="tel">
443
- # # => <input name="home_phone" tabindex="3" type="tel">
443
+ # # => <input name="cell_phone" tabindex="1" type="tel" />
444
+ # # => <input name="work_phone" tabindex="2" type="tel" />
445
+ # # => <input name="home_phone" tabindex="3" type="tel" />
444
446
  #
445
- # @api public
446
447
  def telephone_field_tag(name, options={})
447
448
  input_tag(:tel, options.reverse_merge(:name => name))
448
449
  end
449
450
  alias_method :phone_field_tag, :telephone_field_tag
450
451
 
451
452
  ##
452
- # Creates an email field input with the given name and options
453
+ # Creates an email field input with the given name and options.
453
454
  #
454
455
  # @macro text_field
455
456
  #
456
457
  # @example
457
458
  # email_field_tag :email, :placeholder => 'you@example.com'
458
- # # => <input name="email" placeholder="you@example.com" type="email">
459
+ # # => <input name="email" placeholder="you@example.com" type="email" />
459
460
  #
460
461
  # email_field_tag :email, :value => 'padrinorb@gmail.com', :readonly => true
461
- # # => <input name="email" value="padrinorb@gmail.com" readonly type="email">
462
+ # # => <input name="email" value="padrinorb@gmail.com" readonly type="email" />
462
463
  #
463
- # @api public
464
464
  def email_field_tag(name, options={})
465
465
  input_tag(:email, options.reverse_merge(:name => name))
466
466
  end
467
467
 
468
468
  ##
469
- # Creates a search field input with the given name and options
469
+ # Creates a search field input with the given name and options.
470
470
  #
471
471
  # @macro text_field
472
472
  #
473
473
  # @example
474
474
  # search_field_tag :search, :placeholder => 'Search this website...'
475
- # # => <input name="search" placeholder="Search this website..." type="search">
475
+ # # => <input name="search" placeholder="Search this website..." type="search" />
476
476
  #
477
477
  # search_field_tag :search, :maxlength => 15, :class => ['search', 'string']
478
- # # => <input name="search" maxlength="15" class="search string">
478
+ # # => <input name="search" maxlength="15" class="search string" />
479
479
  #
480
480
  # search_field_tag :search, :id => 'search'
481
- # # => <input name="search" id="search" type="search">
481
+ # # => <input name="search" id="search" type="search" />
482
482
  #
483
483
  # search_field_tag :search, :autofocus => true
484
- # # => <input name="search" autofocus type="search">
484
+ # # => <input name="search" autofocus type="search" />
485
485
  #
486
- # @api public
487
486
  def search_field_tag(name, options={})
488
487
  input_tag(:search, options.reverse_merge(:name => name))
489
488
  end
490
489
 
491
490
  ##
492
- # Creates a url field input with the given name and options
491
+ # Creates a URL field input with the given name and options.
493
492
  #
494
493
  # @macro text_field
495
494
  #
496
495
  # @example
497
496
  # url_field_tag :favorite_website, :placeholder => 'http://padrinorb.com'
498
- # <input name="favorite_website" placeholder="http://padrinorb.com." type="url">
497
+ # <input name="favorite_website" placeholder="http://padrinorb.com." type="url" />
499
498
  #
500
499
  # url_field_tag :home_page, :class => 'string url'
501
- # <input name="home_page" class="string url", type="url">
500
+ # <input name="home_page" class="string url", type="url" />
502
501
  #
503
- # @api public
504
502
  def url_field_tag(name, options={})
505
503
  input_tag(:url, options.reverse_merge(:name => name))
506
504
  end
507
505
 
508
506
  ##
509
- # Constructs a hidden field input from the given options
510
- #
511
- # @macro text_field
507
+ # Constructs a hidden field input from the given options.
512
508
  #
513
509
  # @example
514
510
  # hidden_field_tag :session_key, :value => "__secret__"
515
511
  #
516
- # @api public
517
512
  def hidden_field_tag(name, options={})
518
513
  options.reverse_merge!(:name => name)
519
514
  input_tag(:hidden, options)
520
515
  end
521
516
 
522
517
  ##
523
- # Constructs a text area input from the given options
524
- #
525
- # @macro text_field
518
+ # Constructs a text area input from the given options.
526
519
  #
527
520
  # @example
528
521
  # text_area_tag :username, :class => 'long', :value => "Demo?"
529
522
  #
530
- # @api public
531
523
  def text_area_tag(name, options={})
532
524
  options.reverse_merge!(:name => name, :rows => "", :cols => "")
533
525
  content_tag(:textarea, options.delete(:value).to_s, options)
534
526
  end
535
527
 
536
528
  ##
537
- # Constructs a password field input from the given options
538
- #
539
- # @macro text_field
529
+ # Constructs a password field input from the given options.
540
530
  #
541
531
  # @example
542
532
  # password_field_tag :password, :class => 'long'
@@ -548,37 +538,29 @@ module Padrino
548
538
  end
549
539
 
550
540
  ##
551
- # Constructs a check_box from the given options
552
- #
553
- # @macro text_field
541
+ # Constructs a check_box from the given options.
554
542
  #
555
543
  # @example
556
544
  # check_box_tag :remember_me, :value => 'Yes'
557
545
  #
558
- # @api public
559
546
  def check_box_tag(name, options={})
560
547
  options.reverse_merge!(:name => name, :value => '1')
561
548
  input_tag(:checkbox, options)
562
549
  end
563
550
 
564
551
  ##
565
- # Constructs a radio_button from the given options
566
- #
567
- # @macro text_field
552
+ # Constructs a radio_button from the given options.
568
553
  #
569
554
  # @example
570
555
  # radio_button_tag :remember_me, :value => 'true'
571
556
  #
572
- # @api public
573
557
  def radio_button_tag(name, options={})
574
558
  options.reverse_merge!(:name => name)
575
559
  input_tag(:radio, options)
576
560
  end
577
561
 
578
562
  ##
579
- # Constructs a file field input from the given options
580
- #
581
- # @macro text_field
563
+ # Constructs a file field input from the given options.
582
564
  #
583
565
  # @example
584
566
  # file_field_tag :photo, :class => 'long'
@@ -591,7 +573,7 @@ module Padrino
591
573
  end
592
574
 
593
575
  ##
594
- # Constructs a select from the given options
576
+ # Constructs a select from the given options.
595
577
  #
596
578
  # @example
597
579
  # options = [['caption', 'value'], ['Green', 'green1'], ['Blue', 'blue1'], ['Black', "black1"]]
@@ -628,9 +610,8 @@ module Padrino
628
610
  # @option options [Boolean] :multiple (false)
629
611
  # Allow multiple options to be selected at once.
630
612
  #
631
- # @return [String] The html input field based on the +options+ specified
613
+ # @return [String] The HTML input field based on the +options+ specified.
632
614
  #
633
- # @api public
634
615
  def select_tag(name, options={})
635
616
  options.reverse_merge!(:name => name)
636
617
  collection, fields = options.delete(:collection), options.delete(:fields)
@@ -647,7 +628,7 @@ module Padrino
647
628
  end
648
629
 
649
630
  ##
650
- # Constructs a button input from the given options
631
+ # Constructs a button input from the given options.
651
632
  #
652
633
  # @param [String] caption
653
634
  # The caption for the button.
@@ -659,16 +640,15 @@ module Padrino
659
640
  # @example
660
641
  # button_tag "Cancel", :class => 'clear'
661
642
  #
662
- # @api public
663
643
  def button_tag(caption, options = {})
664
644
  options.reverse_merge!(:value => caption)
665
645
  input_tag(:button, options)
666
646
  end
667
647
 
668
648
  ##
669
- # Constructs a submit button from the given options
649
+ # Constructs a submit button from the given options.
670
650
  #
671
- # @param [String] caption
651
+ # @param [String] caption (defaults to: +Submit+)
672
652
  # The caption for the submit button.
673
653
  # @param [Hash] options
674
654
  # The html options for the input field.
@@ -677,14 +657,17 @@ module Padrino
677
657
  #
678
658
  # @example
679
659
  # submit_tag "Create", :class => 'success'
660
+ # submit_tag :class => 'btn'
680
661
  #
681
- # @api public
682
- def submit_tag(caption="Submit", options={})
662
+ def submit_tag(*args)
663
+ options = args[-1].is_a?(Hash) ? args.pop : {}
664
+ caption = args.length >= 1 ? args.shift : "Submit"
683
665
  options.reverse_merge!(:value => caption)
684
666
  input_tag(:submit, options)
685
667
  end
686
668
 
687
- # Constructs a submit button from the given options
669
+ ##
670
+ # Constructs a submit button from the given options.
688
671
  #
689
672
  # @param [String] source
690
673
  # The source image path for the button.
@@ -696,12 +679,12 @@ module Padrino
696
679
  # @example
697
680
  # submit_tag "Create", :class => 'success'
698
681
  #
699
- # @api public
700
682
  def image_submit_tag(source, options={})
701
683
  options.reverse_merge!(:src => image_path(source))
702
684
  input_tag(:image, options)
703
685
  end
704
686
 
687
+ ##
705
688
  # Constructs a hidden field containing a CSRF token.
706
689
  #
707
690
  # @param [String] token
@@ -712,17 +695,28 @@ module Padrino
712
695
  # @example
713
696
  # csrf_token_field
714
697
  #
715
- # @api public
716
698
  def csrf_token_field(token = nil)
717
- if defined? session
718
- token ||= (session[:csrf] ||= SecureRandom.hex(32))
719
- end
699
+ hidden_field_tag csrf_param, :value => csrf_token
700
+ end
720
701
 
721
- hidden_field_tag :authenticity_token, :value => token
702
+ ##
703
+ # Constructs meta tags `csrf-param` and `csrf-token` with the name of the
704
+ # cross-site request forgery protection parameter and token, respectively.
705
+ #
706
+ # @return [String] The meta tags with the CSRF token and the param your app expects it in.
707
+ #
708
+ # @example
709
+ # csrf_meta_tags
710
+ #
711
+ def csrf_meta_tags
712
+ if is_protected_from_csrf?
713
+ meta_tag(csrf_param, :name => 'csrf-param') <<
714
+ meta_tag(csrf_token, :name => 'csrf-token')
715
+ end
722
716
  end
723
717
 
724
718
  ##
725
- # Creates a form containing a single button that submits to the url.
719
+ # Creates a form containing a single button that submits to the URL.
726
720
  #
727
721
  # @overload button_to(name, url, options={})
728
722
  # @param [String] caption The text caption.
@@ -739,6 +733,8 @@ module Padrino
739
733
  # Instructs ujs handler to handle the submit as ajax.
740
734
  # @option options [Symbol] :method
741
735
  # Instructs ujs handler to use different http method (i.e :post, :delete).
736
+ # @option options [Hash] :submit_options
737
+ # Hash of any options, that you want to pass to submit_tag (i.e :id, :class)
742
738
  #
743
739
  # @return [String] Form and button html with specified +options+.
744
740
  #
@@ -750,113 +746,174 @@ module Padrino
750
746
  # # <input type="submit" value="Delete" />
751
747
  # # </form>
752
748
  #
753
- # @api public
754
749
  def button_to(*args, &block)
755
750
  name, url = args[0], args[1]
756
751
  options = args.extract_options!
757
752
  options['data-remote'] = 'true' if options.delete(:remote)
753
+ submit_options = options.delete(:submit_options) || {}
758
754
  if block_given?
759
755
  form_tag(url, options, &block)
760
756
  else
761
- form_tag(url, options) do
762
- submit_tag(name)
757
+ form_tag(url, options.merge!(:not_concat => true)) do
758
+ submit_tag(name, submit_options)
763
759
  end
764
760
  end
765
761
  end
766
762
 
763
+ ##
764
+ # Constructs a range tag from the given options.
765
+ #
766
+ # @example
767
+ # range_field_tag('ranger_with_min_max', :min => 1, :max => 50)
768
+ # range_field_tag('ranger_with_range', :range => 1..5)
769
+ #
770
+ # @param [String] name
771
+ # The name of the range field.
772
+ # @param [Hash] options
773
+ # The html options for the range field.
774
+ # @option options [Integer] :min
775
+ # The min range of the range field.
776
+ # @option options [Integer] :max
777
+ # The max range of the range field.
778
+ # @option options [range] :range
779
+ # The range, in lieu of :min and :max. See examples for details.
780
+ # @return [String] The html range field
781
+ #
782
+ def range_field_tag(name, options = {})
783
+ options.reverse_merge!(:name => name)
784
+ if range = options.delete(:range)
785
+ options[:min], options[:max] = range.min, range.max
786
+ end
787
+ input_tag(:range, options)
788
+ end
789
+
767
790
  protected
768
791
 
769
- ##
770
- # Returns an array of option items for a select field based on the given collection
771
- # fields is an array containing the fields to display from each item in the collection
772
- #
773
- def options_from_collection(collection, fields)
774
- collection.map { |item| [ item.send(fields.first), item.send(fields.last) ] }
775
- end
792
+ ##
793
+ # Returns an array of option items for a select field based on the given collection.
794
+ #
795
+ # @param [Array] fields
796
+ # fields is an array containing the fields to display from each item in the collection.
797
+ #
798
+ def options_from_collection(collection, fields)
799
+ collection.map { |item| [ item.send(fields.first), item.send(fields.last) ] }
800
+ end
776
801
 
777
- #
778
- # Returns the options tags for a select based on the given option items
779
- #
780
- def options_for_select(option_items, selected_value=nil)
781
- return [] if option_items.blank?
782
- option_items.map do |caption, value|
783
- value ||= caption
784
- content_tag(:option, caption, :value => value, :selected => option_is_selected?(value, caption, selected_value))
785
- end
802
+ ##
803
+ # Returns the options tags for a select based on the given option items.
804
+ #
805
+ def options_for_select(option_items, selected_value=nil)
806
+ return [] if option_items.blank?
807
+ option_items.map do |caption, value, disabled|
808
+ value ||= caption
809
+ disabled ||= false
810
+ content_tag(:option, caption, :value => value, :selected => option_is_selected?(value, caption, selected_value), :disabled => disabled)
786
811
  end
812
+ end
787
813
 
788
- #
789
- # Returns the optgroups with options tags for a select based on the given :grouped_options items
790
- #
791
- def grouped_options_for_select(collection, selected=nil, prompt=false)
792
- if collection.is_a?(Hash)
793
- collection.map do |key, value|
794
- content_tag :optgroup, :label => key do
795
- options_for_select(value, selected)
796
- end
797
- end
798
- elsif collection.is_a?(Array)
799
- collection.map do |optgroup|
800
- content_tag :optgroup, :label => optgroup.first do
801
- options_for_select(optgroup.last, selected)
802
- end
803
- end
814
+ ##
815
+ # Returns the optgroups with options tags for a select based on the given :grouped_options items.
816
+ #
817
+ def grouped_options_for_select(collection, selected=nil, prompt=false)
818
+ if collection.is_a?(Hash)
819
+ collection.map do |key, value|
820
+ # Hash format:
821
+ # {:first => [1,2,3], :second => [4,5,6]}
822
+ # or:
823
+ # {:first => [[1,2,3], {:disabled => true}], :second => [4,5,6]}
824
+ attributes_hash = value.last.is_a?(Hash) ? value.pop : nil
825
+ disabled ||= attributes_hash && attributes_hash.include?(:disabled) ? attributes_hash[:disabled] : false
826
+ content_tag :optgroup, options_for_select(value, selected), :label => key, :disabled => disabled
827
+ end
828
+ elsif collection.is_a?(Array)
829
+ # Array format:
830
+ # ["Option Label", [:option1, :option2, ...]]
831
+ # or:
832
+ # ["Option Label", [:option1, :option2, ...], true]
833
+ # the last item tells if it is disabled or not. This is keeps it backwards compatible.
834
+ collection.map do |optgroup|
835
+ disabled ||= optgroup.count > 2 ? optgroup.pop : false
836
+ content_tag :optgroup, options_for_select(optgroup.last, selected), :label => optgroup.first, :disabled => disabled
804
837
  end
805
838
  end
839
+ end
806
840
 
807
- #
808
- # Returns the blank option serving as a prompt if passed
809
- #
810
- def blank_option(prompt)
811
- return unless prompt
812
- case prompt
813
- when String then content_tag(:option, prompt, :value => '')
814
- when Array then content_tag(:option, prompt.first, :value => prompt.last)
815
- else content_tag(:option, '', :value => '')
816
- end
841
+ ##
842
+ # Returns the blank option serving as a prompt if passed.
843
+ #
844
+ def blank_option(prompt)
845
+ return unless prompt
846
+ case prompt
847
+ when String then content_tag(:option, prompt, :value => '')
848
+ when Array then content_tag(:option, prompt.first, :value => prompt.last)
849
+ else content_tag(:option, '', :value => '')
817
850
  end
851
+ end
852
+
853
+ ##
854
+ # Returns whether the application is being protected from CSRF. Defaults to true.
855
+ #
856
+ def is_protected_from_csrf?
857
+ defined?(settings) ? settings.protect_from_csrf : true
858
+ end
859
+
860
+ ##
861
+ # Returns the current CSRF token (based on the session). If it doesn't exist,
862
+ # it will create one and assign it to the session's `csrf` key.
863
+ #
864
+ def csrf_token
865
+ session[:csrf] ||= SecureRandom.hex(32) if defined?(session)
866
+ end
867
+
868
+ ##
869
+ # Returns the param/field name in which your CSRF token should be expected by your
870
+ # controllers. Defaults to `authenticity_token`.
871
+ #
872
+ # Set this in your application with `set :csrf_param, :something_else`.
873
+ #
874
+ def csrf_param
875
+ defined?(settings) && settings.respond_to?(:csrf_param) ?
876
+ settings.csrf_param : :authenticity_token
877
+ end
818
878
 
819
879
  private
820
- ##
821
- # Returns the FormBuilder class to use based on all available setting sources
822
- # If explicitly defined, returns that, otherwise returns defaults.
823
- #
824
- # @example
825
- # configured_form_builder_class(nil) => StandardFormBuilder
826
- #
827
- # @api private
828
- def configured_form_builder_class(explicit_builder=nil)
829
- default_builder = self.respond_to?(:settings) && self.settings.default_builder
830
- configured_builder = explicit_builder || default_builder || 'StandardFormBuilder'
831
- configured_builder = "Padrino::Helpers::FormBuilder::#{configured_builder}".constantize if configured_builder.is_a?(String)
832
- configured_builder
833
- end
880
+ ##
881
+ # Returns the FormBuilder class to use based on all available setting sources
882
+ # If explicitly defined, returns that, otherwise returns defaults.
883
+ #
884
+ # @example
885
+ # configured_form_builder_class(nil) => StandardFormBuilder
886
+ #
887
+ def configured_form_builder_class(explicit_builder=nil)
888
+ default_builder = self.respond_to?(:settings) && self.settings.default_builder
889
+ configured_builder = explicit_builder || default_builder || 'StandardFormBuilder'
890
+ configured_builder = "Padrino::Helpers::FormBuilder::#{configured_builder}".constantize if configured_builder.is_a?(String)
891
+ configured_builder
892
+ end
834
893
 
835
- ##
836
- # Returns an initialized builder instance for the given object and settings
837
- #
838
- # @example
839
- # builder_instance(@account, :nested => { ... }) => <FormBuilder>
840
- #
841
- # @api private
842
- def builder_instance(object, settings={})
843
- builder_class = configured_form_builder_class(settings.delete(:builder))
844
- builder_class.new(self, object, settings)
845
- end
894
+ ##
895
+ # Returns an initialized builder instance for the given object and settings.
896
+ #
897
+ # @example
898
+ # builder_instance(@account, :nested => { ... }) => <FormBuilder>
899
+ #
900
+ def builder_instance(object, settings={})
901
+ builder_class = configured_form_builder_class(settings.delete(:builder))
902
+ builder_class.new(self, object, settings)
903
+ end
846
904
 
847
- ##
848
- # Returns whether the option should be selected or not
849
- #
850
- # @example
851
- # option_is_selected?("red", "Red", ["red", "blue"]) => true
852
- # option_is_selected?("red", "Red", ["green", "blue"]) => false
853
- #
854
- # @api private
855
- def option_is_selected?(value, caption, selected_values)
856
- Array(selected_values).any? do |selected|
857
- [value.to_s, caption.to_s].include?(selected.to_s)
858
- end
905
+ ##
906
+ # Returns whether the option should be selected or not.
907
+ #
908
+ # @example
909
+ # option_is_selected?("red", "Red", ["red", "blue"]) => true
910
+ # option_is_selected?("red", "Red", ["green", "blue"]) => false
911
+ #
912
+ def option_is_selected?(value, caption, selected_values)
913
+ Array(selected_values).any? do |selected|
914
+ [value.to_s, caption.to_s].include?(selected.to_s)
859
915
  end
860
- end # FormHelpers
861
- end # Helpers
862
- end # Padrino
916
+ end
917
+ end
918
+ end
919
+ end