middleman 2.0.16.1 → 3.0.0.alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,103 @@
1
+ uk:
2
+ number:
3
+ # Used in number_with_delimiter()
4
+ # These are also the defaults for 'currency', 'percentage', 'precision', and 'human'
5
+ format:
6
+ # Sets the separator between the units, for more precision (e.g. 1.0 / 2.0 == 0.5)
7
+ separator: ","
8
+ # Delimets thousands (e.g. 1,000,000 is a million) (always in groups of three)
9
+ delimiter: ""
10
+ # Number of decimals, behind the separator (the number 1 with a precision of 2 gives: 1.00)
11
+ precision: 3
12
+
13
+ # Used in number_to_currency()
14
+ currency:
15
+ format:
16
+ # Where is the currency sign? %u is the currency unit, %n the number (default: $5.00)
17
+ format: "%n %u"
18
+ unit: "грн"
19
+ # These three are to override number.format and are optional
20
+ separator: ","
21
+ delimiter: " "
22
+ precision: 2
23
+
24
+ # Used in number_to_percentage()
25
+ percentage:
26
+ format:
27
+ # These three are to override number.format and are optional
28
+ # separator:
29
+ delimiter: ""
30
+ # precision:
31
+
32
+ # Used in number_to_precision()
33
+ precision:
34
+ format:
35
+ # These three are to override number.format and are optional
36
+ # separator:
37
+ delimiter: ""
38
+ # precision:
39
+
40
+ # Used in number_to_human_size()
41
+ human:
42
+ format:
43
+ # These three are to override number.format and are optional
44
+ # separator:
45
+ delimiter: ""
46
+ precision: 1
47
+ storage_units:
48
+ # Storage units output formatting.
49
+ # %u is the storage unit, %n is the number (default: 2 MB)
50
+ format: "%n %u"
51
+ units:
52
+ byte:
53
+ one: "Байт"
54
+ other: "Байт"
55
+ kb: "Кб"
56
+ mb: "Мб"
57
+ gb: "Гб"
58
+ tb: "Тб"
59
+
60
+ # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words()
61
+ datetime:
62
+ distance_in_words:
63
+ half_a_minute: "півхвилини"
64
+ less_than_x_seconds:
65
+ one: "менше секунди"
66
+ other: "менше %{count} секунд"
67
+ x_seconds:
68
+ one: "1 секунда"
69
+ other: "%{count} секунд"
70
+ less_than_x_minutes:
71
+ one: "менше хвилини"
72
+ other: "менше %{count} хвилин"
73
+ x_minutes:
74
+ one: "1 хвилина"
75
+ other: "%{count} хвилин"
76
+ about_x_hours:
77
+ one: "близько години"
78
+ other: "близько %{count} годин"
79
+ x_days:
80
+ one: "1 день"
81
+ other: "%{count} днів"
82
+ about_x_months:
83
+ one: "близько місяця"
84
+ other: "близько %{count} місяців"
85
+ x_months:
86
+ one: "1 місяць"
87
+ other: "%{count} месяців"
88
+ about_x_years:
89
+ one: "близько року"
90
+ other: "близько %{count} років"
91
+ over_x_years:
92
+ one: "більше року"
93
+ other: "більше %{count} років"
94
+ almost_x_years:
95
+ one: "майже рік"
96
+ other: "майжу %{count} роки"
97
+ models:
98
+ errors:
99
+ template:
100
+ header:
101
+ one: "Дані «%{model}» не можуть бути збережені через 1 помилки"
102
+ other: "Дані «%{model}» не можуть бути збережені через %{count} помилок"
103
+ body: "Допущені помилки в наступних полях:"
@@ -0,0 +1,104 @@
1
+ zh_cn:
2
+ number:
3
+ # Used in number_with_delimiter()
4
+ # These are also the defaults for 'currency', 'percentage', 'precision', and 'human'
5
+ format:
6
+ # Sets the separator between the units, for more precision (e.g. 1.0 / 2.0 == 0.5)
7
+ separator: "."
8
+ # Delimets thousands (e.g. 1,000,000 is a million) (always in groups of three)
9
+ delimiter: ","
10
+ # Number of decimals, behind the separator (the number 1 with a precision of 2 gives: 1.00)
11
+ precision: 3
12
+
13
+ # Used in number_to_currency()
14
+ currency:
15
+ format:
16
+ # Where is the currency sign? %u is the currency unit, %n the number (default: $5.00)
17
+ format: "%u %n"
18
+ unit: "元"
19
+ # These three are to override number.format and are optional
20
+ separator: "."
21
+ delimiter: ","
22
+ precision: 2
23
+
24
+ # Used in number_to_percentage()
25
+ percentage:
26
+ format:
27
+ # These three are to override number.format and are optional
28
+ # separator:
29
+ delimiter: ""
30
+ # precision:
31
+
32
+ # Used in number_to_precision()
33
+ precision:
34
+ format:
35
+ # These three are to override number.format and are optional
36
+ # separator:
37
+ delimiter: ""
38
+ # precision:
39
+
40
+ # Used in number_to_human_size()
41
+ human:
42
+ format:
43
+ # These three are to override number.format and are optional
44
+ # separator:
45
+ delimiter: ""
46
+ precision: 1
47
+ storage_units:
48
+ # Storage units output formatting.
49
+ # %u is the storage unit, %n is the number (default: 2 MB)
50
+ format: "%n %u"
51
+ units:
52
+ byte:
53
+ one: "Byte"
54
+ other: "Bytes"
55
+ kb: "KB"
56
+ mb: "MB"
57
+ gb: "GB"
58
+ tb: "TB"
59
+
60
+ # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words()
61
+ datetime:
62
+ distance_in_words:
63
+ half_a_minute: "半分钟"
64
+ less_than_x_seconds:
65
+ one: "不到一秒"
66
+ other: "不到 %{count} 秒"
67
+ x_seconds:
68
+ one: "一秒"
69
+ other: "%{count} 秒"
70
+ less_than_x_minutes:
71
+ one: "不到一分钟"
72
+ other: "不到 %{count} 分钟"
73
+ x_minutes:
74
+ one: "一分钟"
75
+ other: "%{count} 分钟"
76
+ about_x_hours:
77
+ one: "大约一小时"
78
+ other: "大约 %{count} 小时"
79
+ x_days:
80
+ one: "一天"
81
+ other: "%{count} 天"
82
+ about_x_months:
83
+ one: "大约一个月"
84
+ other: "大约 %{count} 个月"
85
+ x_months:
86
+ one: "一个月"
87
+ other: "%{count} 个月"
88
+ about_x_years:
89
+ one: "大约一年"
90
+ other: "大约 %{count} 年"
91
+ over_x_years:
92
+ one: "一年多"
93
+ other: "%{count} 年多"
94
+ almost_x_years:
95
+ one: "接近一年"
96
+ other: "接近 %{count} 年"
97
+ models:
98
+ errors:
99
+ template:
100
+ header:
101
+ one: "有1 个错误发生使得「%{model}」无法被储存。 "
102
+ other: "有%{count} 个错误发生使得「%{model}」无法被储存。 "
103
+ body: "以下栏位发生问题:"
104
+
@@ -0,0 +1,103 @@
1
+ zh_tw:
2
+ number:
3
+ # Used in number_with_delimiter()
4
+ # These are also the defaults for 'currency', 'percentage', 'precision', and 'human'
5
+ format:
6
+ # Sets the separator between the units, for more precision (e.g. 1.0 / 2.0 == 0.5)
7
+ separator: "."
8
+ # Delimets thousands (e.g. 1,000,000 is a million) (always in groups of three)
9
+ delimiter: ","
10
+ # Number of decimals, behind the separator (the number 1 with a precision of 2 gives: 1.00)
11
+ precision: 3
12
+
13
+ # Used in number_to_currency()
14
+ currency:
15
+ format:
16
+ # Where is the currency sign? %u is the currency unit, %n the number (default: $5.00)
17
+ format: "%u %n"
18
+ unit: "NT$"
19
+ # These three are to override number.format and are optional
20
+ separator: "."
21
+ delimiter: ","
22
+ precision: 2
23
+
24
+ # Used in number_to_percentage()
25
+ percentage:
26
+ format:
27
+ # These three are to override number.format and are optional
28
+ # separator:
29
+ delimiter: ""
30
+ # precision:
31
+
32
+ # Used in number_to_precision()
33
+ precision:
34
+ format:
35
+ # These three are to override number.format and are optional
36
+ # separator:
37
+ delimiter: ""
38
+ # precision:
39
+
40
+ # Used in number_to_human_size()
41
+ human:
42
+ format:
43
+ # These three are to override number.format and are optional
44
+ # separator:
45
+ delimiter: ""
46
+ precision: 1
47
+ storage_units:
48
+ # Storage units output formatting.
49
+ # %u is the storage unit, %n is the number (default: 2 MB)
50
+ format: "%n %u"
51
+ units:
52
+ byte:
53
+ one: "Byte"
54
+ other: "Bytes"
55
+ kb: "KB"
56
+ mb: "MB"
57
+ gb: "GB"
58
+ tb: "TB"
59
+
60
+ # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words()
61
+ datetime:
62
+ distance_in_words:
63
+ half_a_minute: "半分鐘"
64
+ less_than_x_seconds:
65
+ one: "不到一秒"
66
+ other: "不到 %{count} 秒"
67
+ x_seconds:
68
+ one: "一秒"
69
+ other: "%{count} 秒"
70
+ less_than_x_minutes:
71
+ one: "不到一分鐘"
72
+ other: "不到 %{count} 分鐘"
73
+ x_minutes:
74
+ one: "一分鐘"
75
+ other: "%{count} 分鐘"
76
+ about_x_hours:
77
+ one: "大約一小時"
78
+ other: "大約 %{count} 小時"
79
+ x_days:
80
+ one: "一天"
81
+ other: "%{count} 天"
82
+ about_x_months:
83
+ one: "大約一個月"
84
+ other: "大約 %{count} 個月"
85
+ x_months:
86
+ one: "一個月"
87
+ other: "%{count} 個月"
88
+ about_x_years:
89
+ one: "大約一年"
90
+ other: "大約 %{count} 年"
91
+ over_x_years:
92
+ one: "一年多"
93
+ other: "%{count} 年多"
94
+ almost_x_years:
95
+ one: "接近一年"
96
+ other: "接近 %{count} 年"
97
+ models:
98
+ errors:
99
+ template:
100
+ header:
101
+ one: "有 1 個錯誤發生使得「%{model}」無法被儲存。"
102
+ other: "有 %{count} 個錯誤發生使得「%{model}」無法被儲存。"
103
+ body: "以下欄位發生問題:"
@@ -0,0 +1,288 @@
1
+ module Padrino
2
+ module Helpers
3
+ ##
4
+ # Provides methods for converting numbers into formatted strings.
5
+ # Methods are provided for phone numbers, currency, percentage,
6
+ # precision, positional notation, and file size.
7
+ #
8
+ # Adapted from Rails Number Helpers.
9
+ #
10
+ module NumberHelpers
11
+ ##
12
+ # Formats a +number+ into a currency string (e.g., $13.65). You can customize the format
13
+ # in the +options+ hash.
14
+ #
15
+ # @param [Float] number
16
+ # Currency value to format.
17
+ # @param [Hash] options
18
+ # Options for currency conversion.
19
+ # @option options [Fixnum] :precision (2)
20
+ # Sets the level of precision.
21
+ # @option options [String] :unit ("$")
22
+ # Sets the denomination of the currency.
23
+ # @option options [String] :separator (".")
24
+ # Sets the separator between the units.
25
+ # @option options [String] :delimiter (",")
26
+ # Sets the thousands delimiter.
27
+ # @option options [String] :format ("%u%n")
28
+ # Sets the format of the output string. The field types are:
29
+ # %u The currency unit
30
+ # %n The number
31
+ #
32
+ # @return [String] The formatted representation of the currency
33
+ #
34
+ # @example
35
+ # number_to_currency(1234567890.50) # => $1,234,567,890.50
36
+ # number_to_currency(1234567890.506) # => $1,234,567,890.51
37
+ # number_to_currency(1234567890.506, :precision => 3) # => $1,234,567,890.506
38
+ # number_to_currency(1234567890.50, :unit => "£", :separator => ",", :delimiter => "")
39
+ # # => £1234567890,50
40
+ # number_to_currency(1234567890.50, :unit => "£", :separator => ",", :delimiter => "", :format => "%n %u")
41
+ # # => 1234567890,50 £
42
+ #
43
+ # @api public
44
+ def number_to_currency(number, options = {})
45
+ options.symbolize_keys!
46
+
47
+ defaults = I18n.translate(:'number.format', :locale => options[:locale], :raise => true) rescue {}
48
+ currency = I18n.translate(:'number.currency.format', :locale => options[:locale], :raise => true) rescue {}
49
+ defaults = defaults.merge(currency)
50
+
51
+ precision = options[:precision] || defaults[:precision]
52
+ unit = options[:unit] || defaults[:unit]
53
+ separator = options[:separator] || defaults[:separator]
54
+ delimiter = options[:delimiter] || defaults[:delimiter]
55
+ format = options[:format] || defaults[:format]
56
+ separator = '' if precision == 0
57
+
58
+ begin
59
+ format.gsub(/%n/, number_with_precision(number,
60
+ :precision => precision,
61
+ :delimiter => delimiter,
62
+ :separator => separator)
63
+ ).gsub(/%u/, unit)
64
+ rescue
65
+ number
66
+ end
67
+ end
68
+
69
+ ##
70
+ # Formats a +number+ as a percentage string (e.g., 65%). You can customize the
71
+ # format in the +options+ hash.
72
+ #
73
+ # @param [Fixnum, Float] number
74
+ # Percentage value to format.
75
+ # @param [Hash] options
76
+ # Options for percentage conversion.
77
+ # @option options [Fixnum] :precision (3)
78
+ # Sets the level of precision.
79
+ # @option options [String] :separator (".")
80
+ # Sets the separator between the units.
81
+ # @option options [String] :delimiter ("")
82
+ # Sets the thousands delimiter
83
+ #
84
+ # @return [String] The formatted representation of the percentage
85
+ #
86
+ # @example
87
+ # number_to_percentage(100) # => 100.000%
88
+ # number_to_percentage(100, :precision => 0) # => 100%
89
+ # number_to_percentage(1000, :delimiter => '.', :separator => ',') # => 1.000,000%
90
+ # number_to_percentage(302.24398923423, :precision => 5) # => 302.24399%
91
+ #
92
+ # @api public
93
+ def number_to_percentage(number, options = {})
94
+ options.symbolize_keys!
95
+
96
+ defaults = I18n.translate(:'number.format', :locale => options[:locale], :raise => true) rescue {}
97
+ percentage = I18n.translate(:'number.percentage.format', :locale => options[:locale], :raise => true) rescue {}
98
+ defaults = defaults.merge(percentage)
99
+
100
+ precision = options[:precision] || defaults[:precision]
101
+ separator = options[:separator] || defaults[:separator]
102
+ delimiter = options[:delimiter] || defaults[:delimiter]
103
+
104
+ begin
105
+ number_with_precision(number,
106
+ :precision => precision,
107
+ :separator => separator,
108
+ :delimiter => delimiter) + "%"
109
+ rescue
110
+ number
111
+ end
112
+ end
113
+
114
+ ##
115
+ # Formats a +number+ with grouped thousands using +delimiter+ (e.g., 12,324). You can
116
+ # customize the format in the +options+ hash.
117
+ #
118
+ # @overload number_with_delimiter(number, options={})
119
+ # @param [Fixnum, Float] number
120
+ # Number value to format.
121
+ # @param [Hash] options
122
+ # Options for formatter.
123
+ # @option options [String] :delimiter (", ")
124
+ # Sets the thousands delimiter
125
+ # @option options [String] :separator (".")
126
+ # Sets the separator between the units.
127
+ #
128
+ # @return [String] The formatted representation of the number
129
+ #
130
+ # @example
131
+ # number_with_delimiter(12345678) # => 12,345,678
132
+ # number_with_delimiter(12345678.05) # => 12,345,678.05
133
+ # number_with_delimiter(12345678, :delimiter => ".") # => 12.345.678
134
+ # number_with_delimiter(12345678, :separator => ",") # => 12,345,678
135
+ # number_with_delimiter(98765432.98, :delimiter => " ", :separator => ",")
136
+ # # => 98 765 432,98
137
+ #
138
+ # @api public
139
+ def number_with_delimiter(number, *args)
140
+ options = args.extract_options!
141
+ options.symbolize_keys!
142
+
143
+ defaults = I18n.translate(:'number.format', :locale => options[:locale], :raise => true) rescue {}
144
+
145
+ delimiter ||= (options[:delimiter] || defaults[:delimiter])
146
+ separator ||= (options[:separator] || defaults[:separator])
147
+
148
+ begin
149
+ parts = number.to_s.split('.')
150
+ parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{delimiter}")
151
+ parts.join(separator)
152
+ rescue
153
+ number
154
+ end
155
+ end
156
+
157
+ ##
158
+ # Formats a +number+ with the specified level of <tt>:precision</tt> (e.g., 112.32 has a precision of 2).
159
+ # You can customize the format in the +options+ hash.
160
+ #
161
+ # @overload number_with_precision(number, options={})
162
+ # @param [Fixnum, Float] number
163
+ # Number value to format.
164
+ # @param [Hash] options
165
+ # Options for formatter.
166
+ # @option options [Fixnum] :precision (3)
167
+ # Sets the level of precision.
168
+ # @option options [String] :separator (".")
169
+ # Sets the separator between the units.
170
+ # @option options [String] :delimiter ("")
171
+ # Sets the thousands delimiter
172
+ #
173
+ # @return [String] The formatted representation of the number
174
+ #
175
+ # @example
176
+ # number_with_precision(111.2345) # => 111.235
177
+ # number_with_precision(111.2345, :precision => 2) # => 111.23
178
+ # number_with_precision(13, :precision => 5) # => 13.00000
179
+ # number_with_precision(389.32314, :precision => 0) # => 389
180
+ # number_with_precision(1111.2345, :precision => 2, :separator => ',', :delimiter => '.')
181
+ # # => 1.111,23
182
+ #
183
+ # @api public
184
+ def number_with_precision(number, *args)
185
+ options = args.extract_options!
186
+ options.symbolize_keys!
187
+
188
+ defaults = I18n.translate(:'number.format', :locale => options[:locale], :raise => true) rescue {}
189
+ precision_defaults = I18n.translate(:'number.precision.format', :locale => options[:locale],
190
+ :raise => true) rescue {}
191
+ defaults = defaults.merge(precision_defaults)
192
+
193
+ precision ||= (options[:precision] || defaults[:precision])
194
+ separator ||= (options[:separator] || defaults[:separator])
195
+ delimiter ||= (options[:delimiter] || defaults[:delimiter])
196
+
197
+ begin
198
+ rounded_number = (Float(number) * (10 ** precision)).round.to_f / 10 ** precision
199
+ number_with_delimiter("%01.#{precision}f" % rounded_number,
200
+ :separator => separator,
201
+ :delimiter => delimiter)
202
+ rescue
203
+ number
204
+ end
205
+ end
206
+
207
+ # The units available for storage formatting.
208
+ STORAGE_UNITS = [:byte, :kb, :mb, :gb, :tb].freeze
209
+
210
+ ##
211
+ # Formats the bytes in +size+ into a more understandable representation
212
+ # (e.g., giving it 1500 yields 1.5 KB). This method is useful for
213
+ # reporting file sizes to users. This method returns nil if
214
+ # +size+ cannot be converted into a number. You can customize the
215
+ # format in the +options+ hash.
216
+ #
217
+ #
218
+ # @overload number_to_human_size(number, options={})
219
+ # @param [Fixnum] number
220
+ # Number value to format.
221
+ # @param [Hash] options
222
+ # Options for formatter.
223
+ # @option options [Fixnum] :precision (1)
224
+ # Sets the level of precision.
225
+ # @option options [String] :separator (".")
226
+ # Sets the separator between the units.
227
+ # @option options [String] :delimiter ("")
228
+ # Sets the thousands delimiter
229
+ #
230
+ # @return [String] The formatted representation of bytes
231
+ #
232
+ # @example
233
+ # number_to_human_size(123) # => 123 Bytes
234
+ # number_to_human_size(1234) # => 1.2 KB
235
+ # number_to_human_size(12345) # => 12.1 KB
236
+ # number_to_human_size(1234567) # => 1.2 MB
237
+ # number_to_human_size(1234567890) # => 1.1 GB
238
+ # number_to_human_size(1234567890123) # => 1.1 TB
239
+ # number_to_human_size(1234567, :precision => 2) # => 1.18 MB
240
+ # number_to_human_size(483989, :precision => 0) # => 473 KB
241
+ # number_to_human_size(1234567, :precision => 2, :separator => ',') # => 1,18 MB
242
+ #
243
+ # @api public
244
+ def number_to_human_size(number, *args)
245
+ return nil if number.nil?
246
+
247
+ options = args.extract_options!
248
+ options.symbolize_keys!
249
+
250
+ defaults = I18n.translate(:'number.format', :locale => options[:locale], :raise => true) rescue {}
251
+ human = I18n.translate(:'number.human.format', :locale => options[:locale], :raise => true) rescue {}
252
+ defaults = defaults.merge(human)
253
+
254
+ precision ||= (options[:precision] || defaults[:precision])
255
+ separator ||= (options[:separator] || defaults[:separator])
256
+ delimiter ||= (options[:delimiter] || defaults[:delimiter])
257
+
258
+ storage_units_format = I18n.translate(:'number.human.storage_units.format', :locale => options[:locale], :raise => true)
259
+
260
+ if number.to_i < 1024
261
+ unit = I18n.translate(:'number.human.storage_units.units.byte', :locale => options[:locale], :count => number.to_i, :raise => true)
262
+ storage_units_format.gsub(/%n/, number.to_i.to_s).gsub(/%u/, unit)
263
+ else
264
+ max_exp = STORAGE_UNITS.size - 1
265
+ number = Float(number)
266
+ exponent = (Math.log(number) / Math.log(1024)).to_i # Convert to base 1024
267
+ exponent = max_exp if exponent > max_exp # we need this to avoid overflow for the highest unit
268
+ number /= 1024 ** exponent
269
+
270
+ unit_key = STORAGE_UNITS[exponent]
271
+ unit = I18n.translate(:"number.human.storage_units.units.#{unit_key}", :locale => options[:locale], :count => number, :raise => true)
272
+
273
+ begin
274
+ escaped_separator = Regexp.escape(separator)
275
+ formatted_number = number_with_precision(number,
276
+ :precision => precision,
277
+ :separator => separator,
278
+ :delimiter => delimiter
279
+ ).sub(/(#{escaped_separator})(\d*[1-9])?0+\z/, '\1\2').sub(/#{escaped_separator}\z/, '')
280
+ storage_units_format.gsub(/%n/, formatted_number).gsub(/%u/, unit)
281
+ rescue
282
+ number
283
+ end
284
+ end
285
+ end
286
+ end # NumberHelpers
287
+ end # Helpers
288
+ end # Padrino