middleman-core 4.0.0.rc.1 → 4.0.0.rc.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 (415) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -0
  3. data/Rakefile +0 -1
  4. data/cucumber.yml +2 -0
  5. data/features/asset_hash.feature +25 -16
  6. data/features/asset_host.feature +5 -1
  7. data/features/chained_templates.feature +8 -5
  8. data/features/clean_build.feature +18 -0
  9. data/features/cli/preview_server-hook.feature +17 -0
  10. data/features/cli/preview_server.feature +533 -0
  11. data/features/cli_init.feature +3 -3
  12. data/features/collections.feature +5 -3
  13. data/features/content_type.feature +3 -0
  14. data/features/default-layout.feature +90 -0
  15. data/features/extension_api_deprecations.feature +10 -0
  16. data/features/front-matter.feature +6 -1
  17. data/features/i18n_link_to.feature +209 -0
  18. data/features/import_files.feature +17 -0
  19. data/features/javascript-testing.feature +18 -0
  20. data/features/markdown_redcarpet.feature +0 -1
  21. data/features/markdown_redcarpet_in_haml.feature +0 -1
  22. data/features/minify_css.feature +87 -5
  23. data/features/minify_javascript.feature +55 -8
  24. data/features/move_files.feature +44 -0
  25. data/features/redirects.feature +1 -0
  26. data/features/relative_assets.feature +13 -2
  27. data/features/slim.feature +1 -1
  28. data/features/stylus.feature +0 -1
  29. data/features/support/env.rb +5 -1
  30. data/features/support/preserve_mime_types.rb +7 -0
  31. data/fixtures/asset-hash-app/source/fonts/fontawesome-webfont.woff +0 -0
  32. data/fixtures/asset-hash-app/source/fonts/fontawesome-webfont.woff2 +0 -0
  33. data/fixtures/asset-hash-app/source/stylesheets/site.css.scss +2 -2
  34. data/fixtures/asset-hash-app/source/stylesheets/uses_fonts.css +4 -0
  35. data/fixtures/asset-host-app/source/asset_host.html.erb +5 -1
  36. data/fixtures/chained-app/source/test.erb.combobreaker.str.erb +8 -0
  37. data/fixtures/clean-app/config-hidden-dir-after.rb +5 -0
  38. data/fixtures/clean-app/config-hidden-dir-before.rb +1 -0
  39. data/fixtures/content-type-app/source/index.php +1 -0
  40. data/fixtures/extension-api-deprecations-app/config.rb +11 -0
  41. data/fixtures/extension-api-deprecations-app/source/index.html.erb +1 -0
  42. data/fixtures/extension-api-deprecations-app/source/layouts/layout.erb +3 -0
  43. data/fixtures/frontmatter-app/config.rb +1 -0
  44. data/fixtures/frontmatter-app/source/front-matter-haml.html.haml +6 -0
  45. data/fixtures/frontmatter-neighbor-app/config.rb +1 -1
  46. data/fixtures/frontmatter-settings-neighbor-app/config.rb +1 -1
  47. data/fixtures/i18n-test-app/source/localizable/partials/index.html.erb +3 -1
  48. data/fixtures/import-app/bower.json +21 -0
  49. data/fixtures/import-app/bower_components/jquery/.bower.json +39 -0
  50. data/fixtures/import-app/bower_components/jquery/MIT-LICENSE.txt +21 -0
  51. data/fixtures/import-app/bower_components/jquery/bower.json +28 -0
  52. data/fixtures/import-app/bower_components/jquery/dist/jquery.js +9210 -0
  53. data/fixtures/import-app/bower_components/jquery/dist/jquery.min.js +5 -0
  54. data/fixtures/import-app/bower_components/jquery/dist/jquery.min.map +1 -0
  55. data/fixtures/import-app/bower_components/jquery/src/ajax.js +786 -0
  56. data/fixtures/import-app/bower_components/jquery/src/ajax/jsonp.js +89 -0
  57. data/fixtures/import-app/bower_components/jquery/src/ajax/load.js +75 -0
  58. data/fixtures/import-app/bower_components/jquery/src/ajax/parseJSON.js +13 -0
  59. data/fixtures/import-app/bower_components/jquery/src/ajax/parseXML.js +28 -0
  60. data/fixtures/import-app/bower_components/jquery/src/ajax/script.js +64 -0
  61. data/fixtures/import-app/bower_components/jquery/src/ajax/var/nonce.js +5 -0
  62. data/fixtures/import-app/bower_components/jquery/src/ajax/var/rquery.js +3 -0
  63. data/fixtures/import-app/bower_components/jquery/src/ajax/xhr.js +136 -0
  64. data/fixtures/import-app/bower_components/jquery/src/attributes.js +11 -0
  65. data/fixtures/import-app/bower_components/jquery/src/attributes/attr.js +141 -0
  66. data/fixtures/import-app/bower_components/jquery/src/attributes/classes.js +158 -0
  67. data/fixtures/import-app/bower_components/jquery/src/attributes/prop.js +94 -0
  68. data/fixtures/import-app/bower_components/jquery/src/attributes/support.js +35 -0
  69. data/fixtures/import-app/bower_components/jquery/src/attributes/val.js +161 -0
  70. data/fixtures/import-app/bower_components/jquery/src/callbacks.js +205 -0
  71. data/fixtures/import-app/bower_components/jquery/src/core.js +502 -0
  72. data/fixtures/import-app/bower_components/jquery/src/core/access.js +60 -0
  73. data/fixtures/import-app/bower_components/jquery/src/core/init.js +123 -0
  74. data/fixtures/import-app/bower_components/jquery/src/core/parseHTML.js +39 -0
  75. data/fixtures/import-app/bower_components/jquery/src/core/ready.js +97 -0
  76. data/fixtures/import-app/bower_components/jquery/src/core/var/rsingleTag.js +4 -0
  77. data/fixtures/import-app/bower_components/jquery/src/css.js +450 -0
  78. data/fixtures/import-app/bower_components/jquery/src/css/addGetHookIf.js +22 -0
  79. data/fixtures/import-app/bower_components/jquery/src/css/curCSS.js +57 -0
  80. data/fixtures/import-app/bower_components/jquery/src/css/defaultDisplay.js +70 -0
  81. data/fixtures/import-app/bower_components/jquery/src/css/hiddenVisibleSelectors.js +15 -0
  82. data/fixtures/import-app/bower_components/jquery/src/css/support.js +96 -0
  83. data/fixtures/import-app/bower_components/jquery/src/css/swap.js +28 -0
  84. data/fixtures/import-app/bower_components/jquery/src/css/var/cssExpand.js +3 -0
  85. data/fixtures/import-app/bower_components/jquery/src/css/var/getStyles.js +12 -0
  86. data/fixtures/import-app/bower_components/jquery/src/css/var/isHidden.js +13 -0
  87. data/fixtures/import-app/bower_components/jquery/src/css/var/rmargin.js +3 -0
  88. data/fixtures/import-app/bower_components/jquery/src/css/var/rnumnonpx.js +5 -0
  89. data/fixtures/import-app/bower_components/jquery/src/data.js +178 -0
  90. data/fixtures/import-app/bower_components/jquery/src/data/Data.js +181 -0
  91. data/fixtures/import-app/bower_components/jquery/src/data/accepts.js +20 -0
  92. data/fixtures/import-app/bower_components/jquery/src/data/var/data_priv.js +5 -0
  93. data/fixtures/import-app/bower_components/jquery/src/data/var/data_user.js +5 -0
  94. data/fixtures/import-app/bower_components/jquery/src/deferred.js +149 -0
  95. data/fixtures/import-app/bower_components/jquery/src/deprecated.js +13 -0
  96. data/fixtures/import-app/bower_components/jquery/src/dimensions.js +50 -0
  97. data/fixtures/import-app/bower_components/jquery/src/effects.js +648 -0
  98. data/fixtures/import-app/bower_components/jquery/src/effects/Tween.js +114 -0
  99. data/fixtures/import-app/bower_components/jquery/src/effects/animatedSelector.js +13 -0
  100. data/fixtures/import-app/bower_components/jquery/src/event.js +868 -0
  101. data/fixtures/import-app/bower_components/jquery/src/event/ajax.js +13 -0
  102. data/fixtures/import-app/bower_components/jquery/src/event/alias.js +39 -0
  103. data/fixtures/import-app/bower_components/jquery/src/event/support.js +9 -0
  104. data/fixtures/import-app/bower_components/jquery/src/exports/amd.js +24 -0
  105. data/fixtures/import-app/bower_components/jquery/src/exports/global.js +32 -0
  106. data/fixtures/import-app/bower_components/jquery/src/intro.js +44 -0
  107. data/fixtures/import-app/bower_components/jquery/src/jquery.js +37 -0
  108. data/fixtures/import-app/bower_components/jquery/src/manipulation.js +580 -0
  109. data/fixtures/import-app/bower_components/jquery/src/manipulation/_evalUrl.js +18 -0
  110. data/fixtures/import-app/bower_components/jquery/src/manipulation/support.js +32 -0
  111. data/fixtures/import-app/bower_components/jquery/src/manipulation/var/rcheckableType.js +3 -0
  112. data/fixtures/import-app/bower_components/jquery/src/offset.js +207 -0
  113. data/fixtures/import-app/bower_components/jquery/src/outro.js +1 -0
  114. data/fixtures/import-app/bower_components/jquery/src/queue.js +142 -0
  115. data/fixtures/import-app/bower_components/jquery/src/queue/delay.js +22 -0
  116. data/fixtures/import-app/bower_components/jquery/src/selector-native.js +172 -0
  117. data/fixtures/import-app/bower_components/jquery/src/selector-sizzle.js +14 -0
  118. data/fixtures/import-app/bower_components/jquery/src/selector.js +1 -0
  119. data/fixtures/import-app/bower_components/jquery/src/serialize.js +111 -0
  120. data/fixtures/import-app/bower_components/jquery/src/sizzle/dist/sizzle.js +2067 -0
  121. data/fixtures/import-app/bower_components/jquery/src/sizzle/dist/sizzle.min.js +3 -0
  122. data/fixtures/import-app/bower_components/jquery/src/sizzle/dist/sizzle.min.map +1 -0
  123. data/fixtures/import-app/bower_components/jquery/src/traversing.js +199 -0
  124. data/fixtures/import-app/bower_components/jquery/src/traversing/findFilter.js +100 -0
  125. data/fixtures/import-app/bower_components/jquery/src/traversing/var/rneedsContext.js +6 -0
  126. data/fixtures/import-app/bower_components/jquery/src/var/arr.js +3 -0
  127. data/fixtures/import-app/bower_components/jquery/src/var/class2type.js +4 -0
  128. data/fixtures/import-app/bower_components/jquery/src/var/concat.js +5 -0
  129. data/fixtures/import-app/bower_components/jquery/src/var/hasOwn.js +5 -0
  130. data/fixtures/import-app/bower_components/jquery/src/var/indexOf.js +5 -0
  131. data/fixtures/import-app/bower_components/jquery/src/var/pnum.js +3 -0
  132. data/fixtures/import-app/bower_components/jquery/src/var/push.js +5 -0
  133. data/fixtures/import-app/bower_components/jquery/src/var/rnotwhite.js +3 -0
  134. data/fixtures/import-app/bower_components/jquery/src/var/slice.js +5 -0
  135. data/fixtures/import-app/bower_components/jquery/src/var/strundefined.js +3 -0
  136. data/fixtures/import-app/bower_components/jquery/src/var/support.js +4 -0
  137. data/fixtures/import-app/bower_components/jquery/src/var/toString.js +5 -0
  138. data/fixtures/import-app/bower_components/jquery/src/wrap.js +79 -0
  139. data/fixtures/import-app/config.rb +7 -0
  140. data/fixtures/{twitter-bootstrap-app/config.rb → import-app/source/test.html} +0 -0
  141. data/fixtures/import-app/static.html +1 -0
  142. data/fixtures/javascript-app/config.rb +0 -0
  143. data/fixtures/javascript-app/source/index.html +17 -0
  144. data/fixtures/minify-css-app/source/inline-css.php +8 -0
  145. data/fixtures/minify-css-app/source/stylesheets/base/_base.scss +15 -0
  146. data/fixtures/minify-css-app/source/stylesheets/base/_buttons.scss +35 -0
  147. data/fixtures/minify-css-app/source/stylesheets/base/_forms.scss +90 -0
  148. data/fixtures/minify-css-app/source/stylesheets/base/_grid-settings.scss +14 -0
  149. data/fixtures/minify-css-app/source/stylesheets/base/_lists.scss +31 -0
  150. data/fixtures/minify-css-app/source/stylesheets/base/_tables.scss +25 -0
  151. data/fixtures/minify-css-app/source/stylesheets/base/_typography.scss +49 -0
  152. data/fixtures/minify-css-app/source/stylesheets/base/_variables.scss +42 -0
  153. data/fixtures/minify-css-app/source/stylesheets/bourbon/_bourbon-deprecated-upcoming.scss +411 -0
  154. data/fixtures/minify-css-app/source/stylesheets/bourbon/_bourbon.scss +87 -0
  155. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-color.scss +26 -0
  156. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-radius.scss +48 -0
  157. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-style.scss +25 -0
  158. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-width.scss +25 -0
  159. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_buttons.scss +64 -0
  160. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_clearfix.scss +25 -0
  161. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_ellipsis.scss +30 -0
  162. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_font-stacks.scss +31 -0
  163. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_hide-text.scss +27 -0
  164. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_margin.scss +26 -0
  165. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_padding.scss +26 -0
  166. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_position.scss +48 -0
  167. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_prefixer.scss +66 -0
  168. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_retina-image.scss +25 -0
  169. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_size.scss +51 -0
  170. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_text-inputs.scss +113 -0
  171. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_timing-functions.scss +34 -0
  172. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_triangle.scss +63 -0
  173. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_word-wrap.scss +29 -0
  174. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_animation.scss +43 -0
  175. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_appearance.scss +3 -0
  176. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_backface-visibility.scss +3 -0
  177. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_background-image.scss +42 -0
  178. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_background.scss +55 -0
  179. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_border-image.scss +59 -0
  180. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_calc.scss +4 -0
  181. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_columns.scss +47 -0
  182. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_filter.scss +4 -0
  183. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_flex-box.scss +287 -0
  184. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_font-face.scss +24 -0
  185. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_font-feature-settings.scss +4 -0
  186. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_hidpi-media-query.scss +10 -0
  187. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_hyphens.scss +4 -0
  188. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_image-rendering.scss +14 -0
  189. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_keyframes.scss +36 -0
  190. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_linear-gradient.scss +38 -0
  191. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_perspective.scss +8 -0
  192. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_placeholder.scss +8 -0
  193. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_radial-gradient.scss +39 -0
  194. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_selection.scss +42 -0
  195. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_text-decoration.scss +19 -0
  196. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_transform.scss +15 -0
  197. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_transition.scss +71 -0
  198. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_user-select.scss +3 -0
  199. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_assign-inputs.scss +11 -0
  200. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_contains-falsy.scss +20 -0
  201. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_contains.scss +26 -0
  202. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-length.scss +11 -0
  203. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-light.scss +21 -0
  204. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-number.scss +11 -0
  205. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-size.scss +13 -0
  206. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_modular-scale.scss +69 -0
  207. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_px-to-em.scss +13 -0
  208. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_px-to-rem.scss +15 -0
  209. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_shade.scss +24 -0
  210. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_strip-units.scss +17 -0
  211. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_tint.scss +24 -0
  212. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_transition-property-name.scss +22 -0
  213. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_unpack.scss +27 -0
  214. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_convert-units.scss +21 -0
  215. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_directional-values.scss +96 -0
  216. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_font-source-declaration.scss +43 -0
  217. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_gradient-positions-parser.scss +13 -0
  218. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-angle-parser.scss +25 -0
  219. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-gradient-parser.scss +41 -0
  220. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-positions-parser.scss +61 -0
  221. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-side-corner-parser.scss +31 -0
  222. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_radial-arg-parser.scss +69 -0
  223. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_radial-gradient-parser.scss +50 -0
  224. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_radial-positions-parser.scss +18 -0
  225. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_render-gradients.scss +26 -0
  226. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_shape-size-stripper.scss +10 -0
  227. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_str-to-num.scss +50 -0
  228. data/fixtures/minify-css-app/source/stylesheets/bourbon/settings/_asset-pipeline.scss +7 -0
  229. data/fixtures/minify-css-app/source/stylesheets/bourbon/settings/_prefixer.scss +9 -0
  230. data/fixtures/minify-css-app/source/stylesheets/bourbon/settings/_px-to-em.scss +1 -0
  231. data/fixtures/minify-css-app/source/stylesheets/site.xcss.sass +6 -0
  232. data/fixtures/minify-js-app/source/inline-js.php +22 -0
  233. data/fixtures/minify-js-app/source/javascripts/js_test.xjs +8 -0
  234. data/fixtures/partials-app/source/locals.html.erb +1 -1
  235. data/fixtures/preview-server-app/bin/dns_server.rb +33 -0
  236. data/fixtures/preview-server-app/config.rb +0 -0
  237. data/fixtures/preview-server-app/source/index.html.erb +1 -0
  238. data/fixtures/preview-server-app/source/layout.erb +9 -0
  239. data/fixtures/preview-server-app/source/layouts/custom.erb +8 -0
  240. data/fixtures/preview-server-app/source/real.html +1 -0
  241. data/fixtures/preview-server-app/source/real/index.html.erb +5 -0
  242. data/fixtures/preview-server-app/source/should_be_ignored.html +1 -0
  243. data/fixtures/preview-server-app/source/should_be_ignored2.html +1 -0
  244. data/fixtures/preview-server-app/source/should_be_ignored3.html +1 -0
  245. data/fixtures/preview-server-app/source/static.html +1 -0
  246. data/fixtures/preview-server-hook-app/config.rb +19 -0
  247. data/fixtures/preview-server-hook-app/source/index.html.erb +9 -0
  248. data/fixtures/related-files-app/config.rb +0 -0
  249. data/fixtures/related-files-app/source/index.html.erb +0 -0
  250. data/fixtures/related-files-app/source/partials/_test.erb +0 -0
  251. data/fixtures/related-files-app/source/partials/_test2.haml +0 -0
  252. data/fixtures/related-files-app/source/stylesheets/_include3.sass +0 -0
  253. data/fixtures/related-files-app/source/stylesheets/_include4.scss +0 -0
  254. data/fixtures/related-files-app/source/stylesheets/include1.css +0 -0
  255. data/fixtures/related-files-app/source/stylesheets/include2.css.scss +0 -0
  256. data/fixtures/related-files-app/source/stylesheets/site.css.scss +0 -0
  257. data/fixtures/relative-assets-app/source/absolute_image_relative_css.html.erb +9 -0
  258. data/fixtures/relative-assets-app/source/javascripts/app.js +3 -0
  259. data/fixtures/relative-assets-app/source/relative_image.html.erb +1 -0
  260. data/fixtures/relative-assets-app/source/relative_image_absolute_css.html.erb +9 -0
  261. data/lib/middleman-core/application.rb +44 -18
  262. data/lib/middleman-core/builder.rb +1 -27
  263. data/lib/middleman-core/callback_manager.rb +3 -3
  264. data/lib/middleman-core/configuration.rb +1 -1
  265. data/lib/middleman-core/core_extensions/collections/step_context.rb +1 -1
  266. data/lib/middleman-core/core_extensions/data.rb +2 -2
  267. data/lib/middleman-core/core_extensions/default_helpers.rb +37 -3
  268. data/lib/middleman-core/core_extensions/external_helpers.rb +2 -1
  269. data/lib/middleman-core/core_extensions/front_matter.rb +5 -2
  270. data/lib/middleman-core/core_extensions/i18n.rb +95 -29
  271. data/lib/middleman-core/core_extensions/routing.rb +2 -2
  272. data/lib/middleman-core/dns_resolver.rb +73 -0
  273. data/lib/middleman-core/dns_resolver/basic_network_resolver.rb +52 -0
  274. data/lib/middleman-core/dns_resolver/hosts_resolver.rb +63 -0
  275. data/lib/middleman-core/dns_resolver/local_link_resolver.rb +44 -0
  276. data/lib/middleman-core/dns_resolver/network_resolver.rb +42 -0
  277. data/lib/middleman-core/extension.rb +1 -1
  278. data/lib/middleman-core/extensions/asset_hash.rb +3 -3
  279. data/lib/middleman-core/extensions/automatic_image_sizes.rb +9 -1
  280. data/lib/middleman-core/extensions/minify_css.rb +49 -17
  281. data/lib/middleman-core/extensions/minify_javascript.rb +60 -30
  282. data/lib/middleman-core/extensions/relative_assets.rb +13 -0
  283. data/lib/middleman-core/file_renderer.rb +2 -2
  284. data/lib/middleman-core/meta_pages.rb +1 -1
  285. data/lib/middleman-core/preview_server.rb +109 -47
  286. data/lib/middleman-core/preview_server/checks.rb +81 -0
  287. data/lib/middleman-core/preview_server/information.rb +273 -0
  288. data/lib/middleman-core/preview_server/network_interface_inventory.rb +65 -0
  289. data/lib/middleman-core/preview_server/server_hostname.rb +39 -0
  290. data/lib/middleman-core/preview_server/server_information.rb +153 -0
  291. data/lib/middleman-core/preview_server/server_information_callback_proxy.rb +35 -0
  292. data/lib/middleman-core/preview_server/server_information_validator.rb +18 -0
  293. data/lib/middleman-core/preview_server/server_ip_address.rb +55 -0
  294. data/lib/middleman-core/preview_server/server_url.rb +63 -0
  295. data/lib/middleman-core/preview_server/tcp_port_prober.rb +29 -0
  296. data/lib/middleman-core/rack.rb +7 -1
  297. data/lib/middleman-core/renderers/haml.rb +1 -2
  298. data/lib/middleman-core/renderers/liquid.rb +1 -1
  299. data/lib/middleman-core/renderers/sass.rb +23 -36
  300. data/lib/middleman-core/renderers/sass_functions.rb +20 -22
  301. data/lib/middleman-core/sitemap/extensions/ignores.rb +5 -1
  302. data/lib/middleman-core/sitemap/extensions/import.rb +108 -0
  303. data/lib/middleman-core/sitemap/extensions/move_file.rb +68 -0
  304. data/lib/middleman-core/sitemap/extensions/proxies.rb +7 -2
  305. data/lib/middleman-core/sitemap/extensions/redirects.rb +1 -0
  306. data/lib/middleman-core/sitemap/resource.rb +3 -7
  307. data/lib/middleman-core/sitemap/store.rb +22 -19
  308. data/lib/middleman-core/sources.rb +2 -3
  309. data/lib/middleman-core/sources/source_watcher.rb +21 -37
  310. data/lib/middleman-core/step_definitions.rb +1 -0
  311. data/lib/middleman-core/step_definitions/builder_steps.rb +0 -47
  312. data/lib/middleman-core/step_definitions/commandline_steps.rb +88 -0
  313. data/lib/middleman-core/step_definitions/middleman_steps.rb +51 -6
  314. data/lib/middleman-core/step_definitions/server_steps.rb +21 -53
  315. data/lib/middleman-core/template_context.rb +14 -13
  316. data/lib/middleman-core/util.rb +127 -4
  317. data/lib/middleman-core/util/data.rb +87 -138
  318. data/lib/middleman-core/version.rb +1 -1
  319. data/middleman-core.gemspec +11 -11
  320. data/spec/middleman-core/dns_resolver_spec.rb +118 -0
  321. data/spec/middleman-core/preview_server/server_hostname_spec.rb +39 -0
  322. data/spec/middleman-core/preview_server/server_ip_address_spec.rb +43 -0
  323. data/spec/middleman-core/util_spec.rb +111 -3
  324. data/spec/spec_helper.rb +29 -1
  325. data/spec/support/given.rb +42 -0
  326. metadata +528 -221
  327. data/features/twitter-bootstrap-compile.feature +0 -6
  328. data/features/working_directory.feature +0 -33
  329. data/fixtures/collections-app/config.rb +0 -16
  330. data/fixtures/collections-app/source/index.html.erb +0 -26
  331. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/.gitignore +0 -36
  332. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/.travis.yml +0 -3
  333. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/LICENSE +0 -176
  334. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/README.md +0 -137
  335. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/img/glyphicons-halflings-white.png +0 -0
  336. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/img/glyphicons-halflings.png +0 -0
  337. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/.jshintrc +0 -10
  338. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/README.md +0 -112
  339. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-alert.js +0 -90
  340. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-button.js +0 -96
  341. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-carousel.js +0 -169
  342. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-collapse.js +0 -157
  343. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-dropdown.js +0 -100
  344. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-modal.js +0 -218
  345. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-popover.js +0 -98
  346. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-scrollspy.js +0 -151
  347. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-tab.js +0 -135
  348. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-tooltip.js +0 -275
  349. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-transition.js +0 -61
  350. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-typeahead.js +0 -285
  351. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/index.html +0 -54
  352. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/phantom.js +0 -63
  353. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/server.js +0 -14
  354. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-alert.js +0 -56
  355. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-button.js +0 -77
  356. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-carousel.js +0 -28
  357. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-collapse.js +0 -54
  358. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-dropdown.js +0 -87
  359. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-modal.js +0 -114
  360. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-phantom.js +0 -21
  361. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-popover.js +0 -93
  362. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-scrollspy.js +0 -31
  363. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-tab.js +0 -61
  364. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-tooltip.js +0 -155
  365. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-transition.js +0 -13
  366. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-typeahead.js +0 -148
  367. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/vendor/jquery.js +0 -9252
  368. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/vendor/qunit.css +0 -232
  369. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/vendor/qunit.js +0 -1510
  370. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_accordion.less +0 -33
  371. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_alerts.less +0 -58
  372. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_breadcrumbs.less +0 -24
  373. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_button-groups.less +0 -191
  374. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_buttons.less +0 -191
  375. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_carousel.less +0 -121
  376. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_close.less +0 -29
  377. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_code.less +0 -57
  378. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_component-animations.less +0 -20
  379. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_dropdowns.less +0 -143
  380. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_forms.less +0 -583
  381. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_grid.less +0 -5
  382. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_hero-unit.less +0 -22
  383. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_labels-badges.less +0 -55
  384. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_layouts.less +0 -17
  385. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_mixins.less +0 -646
  386. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_modals.less +0 -90
  387. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_navbar.less +0 -358
  388. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_navs.less +0 -363
  389. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_pager.less +0 -36
  390. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_pagination.less +0 -56
  391. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_popovers.less +0 -49
  392. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_progress-bars.less +0 -117
  393. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_reset.less +0 -131
  394. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_responsive-1200px-min.less +0 -26
  395. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_responsive-767px-max.less +0 -149
  396. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_responsive-768px-979px.less +0 -17
  397. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_responsive-navbar.less +0 -153
  398. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_responsive-utilities.less +0 -41
  399. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_scaffolding.less +0 -29
  400. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_sprites.less +0 -191
  401. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_tables.less +0 -176
  402. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_thumbnails.less +0 -47
  403. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_tooltip.less +0 -35
  404. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_type.less +0 -232
  405. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_utilities.less +0 -23
  406. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_variables.less +0 -206
  407. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_wells.less +0 -27
  408. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/bootstrap.less +0 -62
  409. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/responsive.less +0 -48
  410. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/tests/css-tests.css +0 -52
  411. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/tests/css-tests.html +0 -917
  412. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/tests/forms.html +0 -179
  413. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/tests/navbar.html +0 -108
  414. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/package.json +0 -25
  415. data/lib/middleman-core/cli/server.rb +0 -96
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 71268bae4249190ca97e9b59b2f57fcbabe51640
4
- data.tar.gz: 0d27c4d829aff2c5d2a9683d92e41a36c7dfbfd6
3
+ metadata.gz: e4fbad2c8b2e8f79d77e59085bed54f286080284
4
+ data.tar.gz: e806c91c3ac8c0ff6baea2c8dbe2a07e07360db6
5
5
  SHA512:
6
- metadata.gz: 7f09e7350b658d6734deaa92725ad54604fedb9e85ebc0d8d8b993b521625063fadca6fdc0a2053b29280cb5a328b7cd1f3cf3c8ddd84a208214891accc771c5
7
- data.tar.gz: 63db8645b7888f204e71a0a19ca8d9a9dc2f1dee8d315100e4756969f58965a9362ee4e26562940d63d78e9bea0e7b234dbd5c60c4eac19b354ad0cf6a1e66ab
6
+ metadata.gz: e05b311fde8777f53ed3108aec6ad948cd6c65b5ca0e064ee9e47c46b227d0a3398d5a43cbc26d4b61867c52ca8a967eae802d2ff287c0630b07121292f165db
7
+ data.tar.gz: 3c0c9f764d86066d7fb1a15f0ade47ec28e9b757d5b197166bf84ee653f785d2fda0692d33b53a8430c0b991d0e63fc24eb9aa0fadf16c99ff281424c2c08372
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Rakefile CHANGED
@@ -1,5 +1,4 @@
1
1
  # coding:utf-8
2
2
  RAKE_ROOT = __FILE__
3
3
  GEM_NAME = ENV['NAME'] || 'middleman-core'
4
- require 'rubygems'
5
4
  require File.expand_path(File.dirname(__FILE__) + '/../gem_rake_helper')
@@ -0,0 +1,2 @@
1
+ default: --require features --tags ~@wip
2
+ wip: --require features --tags @wip
@@ -12,7 +12,7 @@ Feature: Assets get file hashes appended to them and references to them are upda
12
12
  | images/300px-59adce76.jpg |
13
13
  | images/100px-5fd6fb90.gif |
14
14
  | javascripts/application-1d8d5276.js |
15
- | stylesheets/site-7474cadd.css |
15
+ | stylesheets/site-8bc55985.css |
16
16
  | index.html |
17
17
  | subdir/index.html |
18
18
  | other/index.html |
@@ -26,21 +26,21 @@ Feature: Assets get file hashes appended to them and references to them are upda
26
26
  | stylesheets/site.css |
27
27
 
28
28
  And the file "javascripts/application-1d8d5276.js" should contain "img.src = '/images/100px-5fd6fb90.jpg'"
29
- And the file "stylesheets/site-7474cadd.css" should contain:
29
+ And the file "stylesheets/site-8bc55985.css" should contain:
30
30
  """
31
31
  background-image: url("../images/100px-5fd6fb90.jpg")
32
32
  """
33
33
  And the file "index.html" should contain 'href="apple-touch-icon.png"'
34
- And the file "index.html" should contain 'href="stylesheets/site-7474cadd.css"'
34
+ And the file "index.html" should contain 'href="stylesheets/site-8bc55985.css"'
35
35
  And the file "index.html" should contain 'src="javascripts/application-1d8d5276.js"'
36
36
  And the file "index.html" should contain 'src="images/100px-5fd6fb90.jpg"'
37
- And the file "subdir/index.html" should contain 'href="../stylesheets/site-7474cadd.css"'
37
+ And the file "subdir/index.html" should contain 'href="../stylesheets/site-8bc55985.css"'
38
38
  And the file "index.html" should contain 'srcset="images/100px-5fd6fb90.jpg 1x, images/200px-c11eb203.jpg 2x, images/300px-59adce76.jpg 3x"'
39
39
  And the file "index.html" should contain 'src="images/100px-5fd6fb90.gif"'
40
40
  And the file "index.html" should contain 'src="images/100px-1242c368.png"'
41
41
  And the file "subdir/index.html" should contain 'src="../javascripts/application-1d8d5276.js"'
42
42
  And the file "subdir/index.html" should contain 'src="../images/100px-5fd6fb90.jpg"'
43
- And the file "other/index.html" should contain 'href="../stylesheets/site-7474cadd.css"'
43
+ And the file "other/index.html" should contain 'href="../stylesheets/site-8bc55985.css"'
44
44
  And the file "other/index.html" should contain 'src="../javascripts/application-1d8d5276.js"'
45
45
  And the file "other/index.html" should contain 'src="../images/100px-5fd6fb90.jpg"'
46
46
  And the file "api.json" should contain 'images/100px-5fd6fb90.gif'
@@ -50,25 +50,34 @@ Feature: Assets get file hashes appended to them and references to them are upda
50
50
  And the file "subdir/api.json" should contain 'images/100px-5fd6fb90.jpg'
51
51
  And the file "subdir/api.json" should contain 'images/100px-1242c368.png'
52
52
 
53
+ Scenario: Hashed fonts assets work with woff and woff2 extension
54
+ Given a successfully built app at "asset-hash-app"
55
+ When I cd to "build"
56
+ Then the following files should exist:
57
+ | fonts/fontawesome-webfont-56ce13e7.woff |
58
+ | fonts/fontawesome-webfont-10752316.woff2 |
59
+ And the file "stylesheets/uses_fonts-88aa3e2b.css" should contain "src: url('../fonts/fontawesome-webfont-10752316.woff2')"
60
+ And the file "stylesheets/uses_fonts-88aa3e2b.css" should contain "url('../fonts/fontawesome-webfont-56ce13e7.woff')"
61
+
53
62
  Scenario: Hashed assets work in preview server
54
63
  Given the Server is running at "asset-hash-app"
55
64
  When I go to "/"
56
65
  Then I should see 'href="apple-touch-icon.png"'
57
- And I should see 'href="stylesheets/site-7474cadd.css"'
66
+ And I should see 'href="stylesheets/site-d2959d87.css"'
58
67
  And I should see 'src="javascripts/application-1d8d5276.js"'
59
68
  And I should see 'src="images/100px-5fd6fb90.jpg"'
60
69
  And I should see 'srcset="images/100px-5fd6fb90.jpg 1x, images/200px-c11eb203.jpg 2x, images/300px-59adce76.jpg 3x"'
61
70
  When I go to "/subdir/"
62
- Then I should see 'href="../stylesheets/site-7474cadd.css"'
71
+ Then I should see 'href="../stylesheets/site-d2959d87.css"'
63
72
  And I should see 'src="../javascripts/application-1d8d5276.js"'
64
73
  And I should see 'src="../images/100px-5fd6fb90.jpg"'
65
74
  When I go to "/other/"
66
- Then I should see 'href="../stylesheets/site-7474cadd.css"'
75
+ Then I should see 'href="../stylesheets/site-d2959d87.css"'
67
76
  And I should see 'src="../javascripts/application-1d8d5276.js"'
68
77
  And I should see 'src="../images/100px-5fd6fb90.jpg"'
69
78
  When I go to "/javascripts/application-1d8d5276.js"
70
79
  Then I should see "img.src = '/images/100px-5fd6fb90.jpg'"
71
- When I go to "/stylesheets/site-7474cadd.css"
80
+ When I go to "/stylesheets/site-d2959d87.css"
72
81
  Then I should see 'background-image: url("../images/100px-5fd6fb90.jpg")'
73
82
  When I go to "/api.json"
74
83
  Then I should see 'images/100px-5fd6fb90.gif'
@@ -89,13 +98,13 @@ Feature: Assets get file hashes appended to them and references to them are upda
89
98
  Scenario: Enabling an asset host still produces hashed files and references
90
99
  Given the Server is running at "asset-hash-host-app"
91
100
  When I go to "/"
92
- Then I should see 'href="http://middlemanapp.com/stylesheets/site-1fdf4fb5.css"'
101
+ Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
93
102
  And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
94
103
  When I go to "/subdir/"
95
- Then I should see 'href="http://middlemanapp.com/stylesheets/site-1fdf4fb5.css"'
104
+ Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
96
105
  And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
97
106
  When I go to "/other/"
98
- Then I should see 'href="http://middlemanapp.com/stylesheets/site-1fdf4fb5.css"'
107
+ Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
99
108
  And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
100
109
 
101
110
  Scenario: The asset hash should change when a SASS partial changes
@@ -106,14 +115,14 @@ Feature: Assets get file hashes appended to them and references to them are upda
106
115
  font-size: 14px
107
116
  """
108
117
  When I go to "/partials/"
109
- Then I should see 'href="../stylesheets/uses_partials-423a00f7.css'
118
+ Then I should see 'href="../stylesheets/uses_partials-44fb2764.css'
110
119
  And the file "source/stylesheets/_partial.sass" has the contents
111
120
  """
112
121
  body
113
122
  font-size: 18px !important
114
123
  """
115
124
  When I go to "/partials/"
116
- Then I should see 'href="../stylesheets/uses_partials-e8c3d4eb.css'
125
+ Then I should see 'href="../stylesheets/uses_partials-10d8ae33.css'
117
126
 
118
127
  Scenario: The asset hash should change when a Rack-based filter changes
119
128
  Given a fixture app "asset-hash-app"
@@ -127,8 +136,8 @@ Feature: Assets get file hashes appended to them and references to them are upda
127
136
  """
128
137
  Given the Server is running at "asset-hash-app"
129
138
  When I go to "/"
130
- Then I should see 'href="stylesheets/site-ac2166fd.css'
131
- When I go to "stylesheets/site-ac2166fd.css"
139
+ Then I should see 'href="stylesheets/site-30784643.css'
140
+ When I go to "stylesheets/site-30784643.css"
132
141
  Then I should see 'background-image'
133
142
  Then I should see 'Added by Rack filter'
134
143
  When I go to "stylesheets/site-7474cadd.css"
@@ -11,6 +11,8 @@ Feature: Alternate between multiple asset hosts
11
11
  Then I should see 'src="https://code.jquery.com/jquery-2.1.3.min.js"'
12
12
  Then I should see content matching %r{http://assets1.example.com/}
13
13
  Then I should not see content matching %r{http://assets1.example.com//}
14
+ Then I should see content matching %r{<a href="https://github.com/angular/angular.js">Angular.js</a>}
15
+ Then I should see content matching %r{'//www.example.com/script.js'}
14
16
  When I go to "/stylesheets/asset_host.css"
15
17
  Then I should see content matching %r{http://assets1.example.com/}
16
18
  Then I should not see content matching %r{http://assets1.example.com//}
@@ -28,6 +30,8 @@ Feature: Alternate between multiple asset hosts
28
30
  Then I should see 'src="https://code.jquery.com/jquery-2.1.3.min.js"'
29
31
  Then I should see content matching %r{http://assets1.example.com/}
30
32
  Then I should not see content matching %r{http://assets1.example.com//}
33
+ Then I should see content matching %r{<a href="https://github.com/angular/angular.js">Angular.js</a>}
34
+ Then I should see content matching %r{'//www.example.com/script.js'}
31
35
  When I go to "/stylesheets/asset_host.css"
32
36
  Then I should see content matching %r{http://assets1.example.com/}
33
- Then I should not see content matching %r{http://assets1.example.com//}
37
+ Then I should not see content matching %r{http://assets1.example.com//}
@@ -7,16 +7,19 @@ Feature: Templates should be chainable
7
7
  Then I should see "Title</h1>"
8
8
  And I should see "Subtitle</h2>"
9
9
  And I should see "Sup</h3>"
10
-
10
+
11
11
  Scenario: Build chained template
12
12
  Given a successfully built app at "chained-app"
13
13
  When I cd to "build"
14
14
  Then the following files should exist:
15
15
  | index.html |
16
-
16
+ | test.erb.combobreaker |
17
17
  And the file "index.html" should contain "Title</h1>"
18
18
  And the file "index.html" should contain "Subtitle</h2>"
19
19
  And the file "index.html" should contain "Sup</h3>"
20
+ And the file "test.erb.combobreaker" should contain "Title</h1>"
21
+ And the file "test.erb.combobreaker" should contain "Subtitle</h2>"
22
+ And the file "test.erb.combobreaker" should contain "Sup</h3>"
20
23
 
21
24
  Scenario: Partials are parsed by multiple template engines: Outer template has .erb and inner .md.erb
22
25
  Given a fixture app "partial-chained_templates-app"
@@ -29,7 +32,7 @@ Feature: Templates should be chainable
29
32
  And a template named "my_partial.html.md.erb" with:
30
33
  """
31
34
  ## My Partial
32
-
35
+
33
36
  <%= 'hello world' %>
34
37
  """
35
38
  And the Server is running
@@ -58,7 +61,7 @@ Feature: Templates should be chainable
58
61
  And a template named "my_partial.html.md.erb" with:
59
62
  """
60
63
  ## My Partial
61
-
64
+
62
65
  <%= 'hello world' %>
63
66
  """
64
67
  And the Server is running
@@ -87,7 +90,7 @@ Feature: Templates should be chainable
87
90
  And a template named "my_partial.html.erb" with:
88
91
  """
89
92
  <h2>My Partial</h2>
90
-
93
+
91
94
  <%= 'hello world' %>
92
95
  """
93
96
  And the Server is running
@@ -42,3 +42,21 @@ Feature: Build Clean
42
42
  Then the following files should not exist:
43
43
  | sub/dir/about.html |
44
44
  | sub/dir/nested/nested.html |
45
+
46
+ Scenario: Build and clean an app under a hidden directory
47
+ Given a fixture app "clean-app"
48
+ And app "clean-app" is using config "hidden-dir-before"
49
+ And a built app at "clean-app"
50
+ Then the following files should exist:
51
+ | .build/index.html |
52
+ | .build/should_be_ignored.html |
53
+ | .build/should_be_ignored2.html |
54
+ | .build/should_be_ignored3.html |
55
+ Given app "clean-app" is using config "hidden-dir-after"
56
+ And a built app at "clean-app"
57
+ Then the following files should exist:
58
+ | .build/index.html |
59
+ And the following files should not exist:
60
+ | .build/should_be_ignored.html |
61
+ | .build/should_be_ignored2.html |
62
+ | .build/should_be_ignored3.html |
@@ -0,0 +1,17 @@
1
+ Feature: Run preview server before hook
2
+
3
+ Scenario: When run
4
+ Given a fixture app "preview-server-hook-app"
5
+ And the default aruba timeout is 30 seconds
6
+ When I run `middleman server --server-name localhost --bind-address 127.0.0.1` interactively
7
+ And I stop middleman if the output contains:
8
+ """
9
+ ### END ###
10
+ """
11
+ Then the output should contain:
12
+ """
13
+ /// 127.0.0.1:4567 ///
14
+ /// 4567 ///
15
+ /// localhost ///
16
+ /// http://localhost:4567 ///
17
+ """
@@ -0,0 +1,533 @@
1
+ Feature: Run the preview server
2
+
3
+ As a software developer
4
+ I want to start the preview server
5
+ In order to view my changes immediately in the browser
6
+
7
+ Background:
8
+ Given a fixture app "preview-server-app"
9
+ And the default aruba timeout is 30 seconds
10
+
11
+ Scenario: Start the server with defaults
12
+ When I run `middleman server` interactively
13
+ And I stop middleman if the output contains:
14
+ """
15
+ Inspect your site configuration
16
+ """
17
+ And the output should contain:
18
+ """
19
+ View your site at "http://
20
+ """
21
+ And the output should contain:
22
+ """
23
+ Inspect your site configuration at "http://
24
+ """
25
+
26
+ Scenario: Start the server with defaults in verbose mode
27
+ When I run `middleman server --verbose` interactively
28
+ And I stop middleman if the output contains:
29
+ """
30
+ Inspect your site configuration
31
+ """
32
+ Then the output should contain:
33
+ """
34
+ The Middleman preview server is bound to ":::4567", "0.0.0.0:4567"
35
+ """
36
+ And the output should contain:
37
+ """
38
+ View your site at "http://
39
+ """
40
+ And the output should contain:
41
+ """
42
+ Inspect your site configuration at "http://
43
+ """
44
+
45
+ @ruby-2.1
46
+ Scenario: Start the server with defaults in verbose mode, when a local mdns server resolves the local hostname
47
+ Given I start a mdns server for the local hostname
48
+ When I run `middleman server --verbose` interactively
49
+ And I stop middleman if the output contains:
50
+ """
51
+ Inspect your site configuration
52
+ """
53
+ Then the output should contain:
54
+ """
55
+ The Middleman preview server is bound to ":::4567", "0.0.0.0:4567"
56
+ """
57
+ And the output should contain:
58
+ """
59
+ View your site at "http://
60
+ """
61
+ And the output should contain:
62
+ """
63
+ Inspect your site configuration at "http://
64
+ """
65
+
66
+ Scenario: Start the server with bind address 127.0.0.1
67
+ Given I have a local hosts file with:
68
+ """
69
+ # <ip-address> <hostname.domain.org> <hostname>
70
+ 127.0.0.1 localhost.localdomain localhost
71
+ """
72
+ When I run `middleman server --verbose --bind-address 127.0.0.1` interactively
73
+ And I stop middleman if the output contains:
74
+ """
75
+ Inspect your site configuration
76
+ """
77
+ Then the output should contain:
78
+ """
79
+ The Middleman preview server is bound to "127.0.0.1:4567"
80
+ """
81
+ And the output should contain:
82
+ """
83
+ View your site at "http://127.0.0.1:4567"
84
+ """
85
+ And the output should contain:
86
+ """
87
+ Inspect your site configuration at "http://127.0.0.1:4567/__middleman"
88
+ """
89
+
90
+ Scenario: Start the server with bind address 127.0.0.1 configured via config.rb
91
+ Given I have a local hosts file with:
92
+ """
93
+ # <ip-address> <hostname.domain.org> <hostname>
94
+ 127.0.0.1 localhost.localdomain localhost
95
+ """
96
+ And a file named "config.rb" with:
97
+ """
98
+ set :bind_address, '127.0.0.1'
99
+ """
100
+ When I run `middleman server --verbose` interactively
101
+ And I stop middleman if the output contains:
102
+ """
103
+ Inspect your site configuration
104
+ """
105
+ Then the output should contain:
106
+ """
107
+ The Middleman preview server is bound to "127.0.0.1:4567"
108
+ """
109
+ And the output should contain:
110
+ """
111
+ View your site at "http://127.0.0.1:4567"
112
+ """
113
+ And the output should contain:
114
+ """
115
+ Inspect your site configuration at "http://127.0.0.1:4567/__middleman"
116
+ """
117
+
118
+ Scenario: Start the server with bind address 127.0.0.5
119
+
120
+ This will have no hostname attached because the hosts file, the DNS server
121
+ and the MDNS-server do not know anything about 127.0.0.5
122
+
123
+ When I run `middleman server --verbose --bind-address 127.0.0.5` interactively
124
+ And I stop middleman if the output contains:
125
+ """
126
+ Inspect your site configuration
127
+ """
128
+ Then the output should contain:
129
+ """
130
+ The Middleman preview server is bound to "127.0.0.5:4567"
131
+ """
132
+ And the output should contain:
133
+ """
134
+ View your site at "http://127.0.0.5:4567"
135
+ """
136
+ And the output should contain:
137
+ """
138
+ Inspect your site configuration at "http://127.0.0.5:4567/__middleman"
139
+ """
140
+
141
+ Scenario: Start the server with bind address ::1
142
+ Given a file named ".hosts" with:
143
+ """
144
+ # <ip-address> <hostname.domain.org> <hostname>
145
+ ::1 localhost.localdomain localhost
146
+ """
147
+ When I run `middleman server --verbose --bind-address ::1` interactively
148
+ And I stop middleman if the output contains:
149
+ """
150
+ Inspect your site configuration
151
+ """
152
+ Then the output should contain:
153
+ """
154
+ The Middleman preview server is bound to "::1:4567"
155
+ """
156
+ And the output should contain:
157
+ """
158
+ View your site at "http://[::1]:4567"
159
+ """
160
+ And the output should contain:
161
+ """
162
+ Inspect your site configuration at "http://[::1]:4567/__middleman"
163
+ """
164
+
165
+ Scenario: Start the server with bind address 0.0.0.0
166
+ When I run `middleman server --verbose --bind-address 0.0.0.0` interactively
167
+ And I stop middleman if the output contains:
168
+ """
169
+ Inspect your site configuration
170
+ """
171
+ Then the output should contain:
172
+ """
173
+ The Middleman preview server is bound to "0.0.0.0:4567"
174
+ """
175
+ And the output should contain:
176
+ """
177
+ View your site at "http://
178
+ """
179
+ And the output should contain:
180
+ """
181
+ Inspect your site configuration at "http://
182
+ """
183
+
184
+ Scenario: Start the server with bind address ::
185
+ When I run `middleman server --verbose --bind-address ::` interactively
186
+ And I stop middleman if the output contains:
187
+ """
188
+ Inspect your site configuration
189
+ """
190
+ Then the output should contain:
191
+ """
192
+ The Middleman preview server is bound to ":::4567"
193
+ """
194
+ And the output should contain:
195
+ """
196
+ View your site at "http://
197
+ """
198
+ And the output should contain:
199
+ """
200
+ Inspect your site configuration at "http://
201
+ """
202
+
203
+ Scenario: Start the server with server name "localhost"
204
+ Given I have a local hosts file with:
205
+ """
206
+ # <ip-address> <hostname.domain.org> <hostname>
207
+ 127.0.0.1 localhost.localdomain localhost
208
+ """
209
+ When I run `middleman server --verbose --server-name localhost` interactively
210
+ And I stop middleman if the output contains:
211
+ """
212
+ Inspect your site configuration
213
+ """
214
+ Then the output should contain:
215
+ """
216
+ The Middleman preview server is bound to "127.0.0.1:4567"
217
+ """
218
+ And the output should contain:
219
+ """
220
+ View your site at "http://localhost:4567", "http://127.0.0.1:4567"
221
+ """
222
+ And the output should contain:
223
+ """
224
+ Inspect your site configuration at "http://localhost:4567/__middleman", "http://127.0.0.1:4567/__middleman"
225
+ """
226
+
227
+ Scenario: Start the server with server name "localhost" configured via config.rb
228
+ Given I have a local hosts file with:
229
+ """
230
+ # <ip-address> <hostname.domain.org> <hostname>
231
+ 127.0.0.1 localhost.localdomain localhost
232
+ """
233
+ And a file named "config.rb" with:
234
+ """
235
+ set :server_name, 'localhost'
236
+ """
237
+ When I run `middleman server --verbose` interactively
238
+ And I stop middleman if the output contains:
239
+ """
240
+ Inspect your site configuration
241
+ """
242
+ Then the output should contain:
243
+ """
244
+ The Middleman preview server is bound to "127.0.0.1:4567"
245
+ """
246
+ And the output should contain:
247
+ """
248
+ View your site at "http://localhost:4567", "http://127.0.0.1:4567"
249
+ """
250
+ And the output should contain:
251
+ """
252
+ Inspect your site configuration at "http://localhost:4567/__middleman", "http://127.0.0.1:4567/__middleman"
253
+ """
254
+
255
+ Scenario: Start the server with server name "localhost" and bind address "127.0.0.1"
256
+ Given I have a local hosts file with:
257
+ """
258
+ # <ip-address> <hostname.domain.org> <hostname>
259
+ 127.0.0.1 localhost.localdomain localhost
260
+ """
261
+ When I run `middleman server --verbose --server-name localhost --bind-address 127.0.0.1` interactively
262
+ And I stop middleman if the output contains:
263
+ """
264
+ Inspect your site configuration
265
+ """
266
+ Then the output should contain:
267
+ """
268
+ The Middleman preview server is bound to "127.0.0.1:4567"
269
+ """
270
+ And the output should contain:
271
+ """
272
+ View your site at "http://localhost:4567", "http://127.0.0.1:4567"
273
+ """
274
+ And the output should contain:
275
+ """
276
+ Inspect your site configuration at "http://localhost:4567/__middleman", "http://127.0.0.1:4567/__middleman"
277
+ """
278
+
279
+ Scenario: Start the server with server name "127.0.0.1"
280
+ When I run `middleman server --verbose --server-name 127.0.0.1` interactively
281
+ And I stop middleman if the output contains:
282
+ """
283
+ Inspect your site configuration
284
+ """
285
+ Then the output should contain:
286
+ """
287
+ The Middleman preview server is bound to "127.0.0.1:4567"
288
+ """
289
+ And the output should contain:
290
+ """
291
+ View your site at "http://127.0.0.1:4567"
292
+ """
293
+ And the output should contain:
294
+ """
295
+ Inspect your site configuration at "http://127.0.0.1:4567/__middleman"
296
+ """
297
+
298
+ Scenario: Start the server with server name "::1"
299
+ When I run `middleman server --verbose --server-name ::1` interactively
300
+ And I stop middleman if the output contains:
301
+ """
302
+ Inspect your site configuration
303
+ """
304
+ Then the output should contain:
305
+ """
306
+ The Middleman preview server is bound to "::1:4567"
307
+ """
308
+ And the output should contain:
309
+ """
310
+ View your site at "http://[::1]:4567"
311
+ """
312
+ And the output should contain:
313
+ """
314
+ Inspect your site configuration at "http://[::1]:4567/__middleman"
315
+ """
316
+
317
+ Scenario: Start the server with https
318
+ When I run `middleman server --verbose --https` interactively
319
+ And I stop middleman if the output contains:
320
+ """
321
+ Inspect your site configuration
322
+ """
323
+ Then the output should contain:
324
+ """
325
+ The Middleman preview server is bound to ":::4567", "0.0.0.0:4567"
326
+ """
327
+ And the output should contain:
328
+ """
329
+ View your site at "https://
330
+ """
331
+ And the output should contain:
332
+ """
333
+ Inspect your site configuration at "https://
334
+ """
335
+
336
+ Scenario: Start the server with port 65432
337
+ When I run `middleman server --verbose --port 65432` interactively
338
+ And I stop middleman if the output contains:
339
+ """
340
+ Inspect your site configuration
341
+ """
342
+ Then the output should contain:
343
+ """
344
+ The Middleman preview server is bound to ":::65432", "0.0.0.0:65432"
345
+ """
346
+
347
+ Scenario: Start the server with port 65432 configured via config.rb
348
+ Given a file named "config.rb" with:
349
+ """
350
+ set :port, 65432
351
+ """
352
+ When I run `middleman server --verbose` interactively
353
+ And I stop middleman if the output contains:
354
+ """
355
+ Inspect your site configuration
356
+ """
357
+ Then the output should contain:
358
+ """
359
+ The Middleman preview server is bound to ":::65432", "0.0.0.0:65432"
360
+ """
361
+
362
+ @ruby-2.1
363
+ Scenario: Start the server when port is blocked by other middleman instance
364
+ Given `middleman server` is running in background
365
+ When I run `middleman server --verbose` interactively
366
+ And I stop all commands if the output of the last command contains:
367
+ """
368
+ Inspect your site configuration
369
+ """
370
+ Then the output should contain:
371
+ """
372
+ The Middleman uses a different port
373
+ """
374
+
375
+ Scenario: Start the server with bind address 1.1.1.1
376
+
377
+ This should fail, because "1.1.1.1" is not an interface available on this computer.
378
+
379
+ Given a file named ".hosts" with:
380
+ """
381
+ 1.1.1.1 www.example.com www
382
+ """
383
+ When I run `middleman server --verbose --bind-address 1.1.1.1` interactively
384
+ And I stop middleman if the output contains:
385
+ """
386
+ Running Middleman failed:
387
+ """
388
+ Then the output should contain:
389
+ """
390
+ Bind address "1.1.1.1" is not available on your system
391
+ """
392
+
393
+ Scenario: Start the server with server name www.example.com and bind address 0.0.0.0
394
+
395
+ This should fail, because the user can just use `--server-name`. It does
396
+ not make sense for `middleman` to only listen on `0.0.0.0` (IPv4 all
397
+ interfaces), but not on `::` (IPv6 all interfaces). There are other tools
398
+ like `iptables` (Linux-only) or better some `kernel`-configurations to make
399
+ this possible.
400
+
401
+ When I run `middleman server --verbose --server-name www.example.com --bind-address 0.0.0.0` interactively
402
+ And I stop middleman if the output contains:
403
+ """
404
+ Running Middleman failed:
405
+ """
406
+ Then the output should contain:
407
+ """
408
+ Undefined combination of options "--server-name" and "--bind-address".
409
+ """
410
+
411
+ Scenario: Start the server with server name "www.example.com" and bind address "127.0.0.1"
412
+
413
+ This should fail because the server name does not resolve to the ip address.
414
+
415
+ Given a file named ".hosts" with:
416
+ """
417
+ 1.1.1.1 www.example.com www
418
+ """
419
+ When I run `middleman server --verbose --server-name www.example.com --bind-address 127.0.0.1` interactively
420
+ And I stop middleman if the output contains:
421
+ """
422
+ Running Middleman failed:
423
+ """
424
+ Then the output should contain:
425
+ """
426
+ Server name "www.example.com" does not resolve to bind address "127.0.0.1". Please fix that and try again.
427
+ """
428
+
429
+ Scenario: Start the server with server name "garbage.example.com"
430
+ When I run `middleman server --verbose --server-name garbage.example.com` interactively
431
+ And I stop middleman if the output contains:
432
+ """
433
+ Running Middleman failed:
434
+ """
435
+ Then the output should contain:
436
+ """
437
+ Server name "garbage.example.com" does not resolve to an ip address. Please fix that and try again.
438
+ """
439
+
440
+ Scenario: Start the server with server name "www.example.com" and the network name server is used to resolve the server name
441
+ Given I have a local hosts file with:
442
+ """
443
+ # empty
444
+ """
445
+ And I start a mdns server with:
446
+ """
447
+ # empty
448
+ """
449
+ And I start a dns server with:
450
+ """
451
+ www.example.com: 127.0.0.1
452
+ """
453
+ When I run `middleman server --verbose --server-name www.example.com` interactively
454
+ And I stop middleman if the output contains:
455
+ """
456
+ Inspect your site configuration
457
+ """
458
+ Then the output should contain:
459
+ """
460
+ The Middleman preview server is bound to "127.0.0.1:4567"
461
+ """
462
+ And the output should contain:
463
+ """
464
+ View your site at "http://www.example.com:4567", "http://127.0.0.1:4567"
465
+ """
466
+ And the output should contain:
467
+ """
468
+ Inspect your site configuration at "http://www.example.com:4567/__middleman", "http://127.0.0.1:4567/__middleman"
469
+ """
470
+
471
+ @ruby-2.1
472
+ Scenario: Start the server with server name "host.local" and the link local name server is used to resolve the server name
473
+
474
+ To make the mdns resolver resolve a name, it needs to end with ".local".
475
+ Otherwise the resolver returns [].
476
+
477
+ Given I have a local hosts file with:
478
+ """
479
+ # empty
480
+ """
481
+ And I start a mdns server with:
482
+ """
483
+ host.local: 127.0.0.1
484
+ """
485
+ When I run `middleman server --verbose --server-name host.local` interactively
486
+ And I stop middleman if the output contains:
487
+ """
488
+ Inspect your site configuration
489
+ """
490
+ Then the output should contain:
491
+ """
492
+ The Middleman preview server is bound to "127.0.0.1:4567"
493
+ """
494
+ And the output should contain:
495
+ """
496
+ View your site at "http://host.local:4567", "http://127.0.0.1:4567"
497
+ """
498
+ And the output should contain:
499
+ """
500
+ Inspect your site configuration at "http://host.local:4567/__middleman", "http://127.0.0.1:4567/__middleman"
501
+ """
502
+
503
+ @ruby-2.1
504
+ Scenario: Start the server with server name "host" and the link local name server is used to resolve the server name
505
+
506
+ To make the mdns resolver resolve a name, it needs to end with ".local". If
507
+ a plain hostname is given `middleman` appends ".local" automatically.
508
+
509
+ Given I have a local hosts file with:
510
+ """
511
+ # empty
512
+ """
513
+ And I start a mdns server with:
514
+ """
515
+ host.local: 127.0.0.1
516
+ """
517
+ When I run `middleman server --verbose --server-name host` interactively
518
+ And I stop middleman if the output contains:
519
+ """
520
+ Inspect your site configuration
521
+ """
522
+ Then the output should contain:
523
+ """
524
+ The Middleman preview server is bound to "127.0.0.1:4567"
525
+ """
526
+ And the output should contain:
527
+ """
528
+ View your site at "http://host.local:4567", "http://127.0.0.1:4567"
529
+ """
530
+ And the output should contain:
531
+ """
532
+ Inspect your site configuration at "http://host.local:4567/__middleman", "http://127.0.0.1:4567/__middleman"
533
+ """