Compare commits

...

225 Commits

Author SHA1 Message Date
Thomas Reynolds b6167b1369 Fix #2019 2016-12-03 11:32:09 -08:00
Thomas Reynolds 30217d2c04 Change how config options are passed to Thor. Removes new Thor warnings from #2017 2016-11-29 20:14:19 -08:00
Thomas Reynolds 073f273fe4 Prep 2016-11-25 14:03:56 -08:00
Thomas Reynolds e30f413376 Fix broken block ignore form. 2016-11-25 13:59:43 -08:00
Stanislav a680fb30c5 Add bower_components ignore (#2010) 2016-11-23 09:34:53 -08:00
Jonathan Allard 42e31c8c5e Make .html implicit for page IDs (#1996)
* Make .html implicit for page IDs

* Add Pry gem

* Add setting :page_id_generator to override page ID derivation
2016-11-16 21:00:16 -08:00
sandstrom 046d15cfa5 Fix addressable require (#2009) 2016-11-16 20:59:25 -08:00
Thomas Reynolds 5adea781c9 Fix up tests 2016-11-04 08:23:33 -07:00
James Pearson 97082d5fc4 Added addressable to the gemfile (#2001)
addressable is required for middleman init, but was not installed as part of a fresh install of Middleman
2016-11-04 07:56:30 -07:00
René Klačan 604c0e2b5d Fix source watcher configuration (#1999)
* Fix source watcher configuration

* Keep old Sources#initialize signature

* Poll source on path change
2016-10-31 10:50:03 -07:00
Mike Vastola 7c968b9572 Updates to support Rails 5, Rack 3 and Sinatra 2 (beta) (#1984)
* Updates to support Rails 5, Rack 3 and Sinatra 2 (beta).

- Bump upper boundary of version for Rack dependency from 2.0 to 3 (exclusive).
- Version bump sinatra for CI testing to >= 2.0.0.beta2.
- Also replaces use of String#hash in middleman-core/features/asset_host.feature
to ensure sufficiently random variables are returned.

Closes middleman/middleman#1983.

* Testing revert of the version requirements...

To confirm my changes don't cause a regression for any of:
- Rails < 5
- Sinatra < 2
- Rack < 2

* Revert "Testing revert of the version requirements..."

This reverts commit 5cf4c2a07c0814eefa573358b1bc9b0eeb62f9c1.
2016-09-13 10:25:17 +02:00
Kevin Glowacz 197093b36c Tilt 2 (#1974)
* Updates for mappings change in tilt 2

* drop RedcarpetTemplate::Redcarpet2 which was removed in tilt 2

* require Tilt 2.0 or higher

* Make use of tilt 2's extensions_for method instead
2016-09-09 00:18:34 +02:00
Kevin Glowacz ea2115f3f8 Allow for activesupport 4.2 again (#1976)
There is no current reason to remove support for 4.2
This now makes for a backwards compatible change whereas before this would
have called for a new major version of middleman-core
2016-08-30 17:22:31 -07:00
Thomas Reynolds 07651c63a6 Update Ruby version requirement. 2016-08-13 15:41:19 -07:00
Mark Rowe 65462cbc43 Improve performance of ignoring files (#1971)
* Determine the type of ignore pattern once per pattern.

Performing this work when checking when each file was ignored accounted
for around 4.5 of the 6 seconds that processing ignored files was taking
on a site with ~14,000 files and a small number of ignore patterns.
After this change, processing ignored files takes less than 1.5 seconds.

* Cache the normalized paths on Resource and SourceFile.

Normalizing the paths is expensive, so avoid doing it multiple
times. `Util::normalize_path` is marked as memoized, but this
is not effective as:

1. `memoize` doesn't appear to work with module functions.
2. Checking whether we have a memoized value is as expensive as
   normalizing the path.

This further drops the time it takes to process ignored files on a site
with ~14,000 files from ~1.5 seconds to ~0.6 seconds.
2016-08-12 16:33:18 -07:00
Eliott Appleford c264b05906 Merge pull request #1970 from bdash/source_watcher-poll_once-perf
Eliminate quadratic behavior in SourceWatcher::poll_once!
2016-08-11 10:02:38 +01:00
Mark Rowe dcd36a4f99 Eliminate quadratic behavior in `SourceWatcher::poll_once!`.
Both `Array#reject` and `Array#include?` have linear time
complexity. This results in quadratic time complexity when
`Array#include?` is called within `Array#reject`'s block. Using
`Array`'s difference operator gives the same result in linear time.

In a site with ~14,000 files, this drops the time taken by some calls to
`SourceWatcher::poll_once!` from ~15 seconds each to just a few
milliseconds.
2016-08-11 00:24:42 -07:00
Thomas Reynolds 7027b4933a Update .travis.yml 2016-08-03 13:00:25 -07:00
Peter Sankauskas cbad571338 Updating to activesupport version 5 (#1967) 2016-08-03 12:59:57 -07:00
sandstrom ffef14deb4 Create ISSUE_TEMPLATE.md (#1966) 2016-07-29 09:00:10 -07:00
Thomas Reynolds 62dba443a0 Fix japanese characters encoding in URLs 2016-07-10 17:03:22 -07:00
Adam Heath 389e3f5a8c Add prefix option to asset_hash (#1949)
This allows manually changing the filename so that fiel header changes
can be reflected on the CDN. E.g. if you turn on crossOrigin serving
(CORS) the asset hash doesn't change, but the CDN cache needs to be
broken in order to pickup the new header.
2016-07-02 17:55:25 -07:00
Thomas Reynolds ea39d16d81 Try to be safe 2016-06-23 12:41:23 -07:00
Peter Suschlik 1581bfc27e Convert `latency` option to a Fixnum (#1928)
As @vill pointed out in https://github.com/middleman/middleman/issues/1866#issuecomment-222869287
passing `--watcher-latency=2` fails because the gem `listen` expects `latency` to be an `Fixnum`.

This commit fixes this issue.
2016-06-01 14:19:13 -07:00
Thomas Reynolds e8f10fe3c2 prep 2016-05-31 13:15:37 -07:00
Thomas Reynolds 1efa585c11 Fix #1866 2016-05-31 13:15:37 -07:00
Shawn Van Ittersum 0d5c9e4313 Prevent overwrite of Slim embedded options (#1927)
* Fix middleman/middleman#1925: Slim embedded options overwrite

* Remove context_hack from Slim renderer

* Remove debugging output
2016-05-31 13:15:21 -07:00
Thomas Reynolds 51ccfe1143 only encode if current path is broken 2016-05-25 11:25:24 -07:00
Thomas Reynolds 4ffaa9dde5 Try to encode URI before parsing so spaces in paths work. Fixes #1914 2016-05-25 11:13:59 -07:00
Thomas Reynolds 6440d53e7a Add support for dotenv 2016-05-25 10:54:49 -07:00
Ben Hollis 38a9025560 Fix asset_url with asset_hash (#1919)
* Fix asset_url with asset_hash.

* Fix asset hashes.
2016-05-22 12:31:53 -07:00
Steven Sloan 5de9e86a55 allow partial lookups without a current_resource (#1912)
current_resource is only needed for relative lookups, so for lookups from source allow them to run without a current resource.
2016-05-13 13:01:21 -07:00
Thomas Reynolds ccc1cc1288 Fix ordering in tests 2016-05-11 11:48:21 -07:00
Thomas Reynolds 849fc65260 prep 2016-05-11 10:59:48 -07:00
Matthew Lehner 3e4187568b require the `try` core extension (#1911) 2016-05-10 15:17:28 -07:00
PiotrMisiurek 1c57626445 Fix contract for Sitemap::Store.register_resource_list_manipulator (#1907)
Contract said that optional param priority can be only a number.
But the code also handle the boolean as a value to be compatibile
with old versions

Change contract to accept both Num and Bool
2016-05-06 00:12:03 -07:00
Steven Sloan cf4d40caff loosen contract on Resource#source_file to Maybe[String] (#1906)
this could legitimately return nil if there is no file_descriptor, as would be the case for a StringResource
2016-05-05 09:08:29 -07:00
Dennis Günnewig 599cf1e6d3 Use https:// to clone templates (#1901)
Using git://-protocol for cloning git repositories does not work via
HTTP proxies. By replacing it with https:// instead it works for more
users.
2016-04-29 14:23:55 -07:00
Thomas Reynolds 3ebd902ec3 Move capybara dep 2016-04-28 15:44:50 -07:00
Thomas Reynolds 158c3e9f25 Test new ruby 2016-04-28 08:47:48 -07:00
Thomas Reynolds cdcd2bd42d Expose development? and production? helpers to template context. Related #1895 2016-04-26 09:24:49 -07:00
Thomas Bruketta 4918704800 Allow numbers to be unique page_ids (#1886) 2016-04-25 09:51:11 -07:00
Nick Giancola 8a8ee768ac Fix/issue 1889 (#1892)
* Add regression test for infinite loop issue in Util::step_through_extensions (#1889)

* Prevent infinite loop when encountering files where base filename is a possible templating engine
2016-04-25 09:50:51 -07:00
Thomas Reynolds 71a20bb3ee Merge pull request #1891 from danielbayerlein/incompatibility-of-listen
Incompatibility of listen with Ruby < 2.2
2016-04-24 16:59:07 -07:00
Daniel Bayerlein ce58073539 Incompatibility of listen with Ruby < 2.2 fixed 2016-04-24 09:57:13 +02:00
Thomas Reynolds 13d62cb276 Experiment with non-rack rewriters 2016-04-22 15:52:42 -07:00
Thomas Reynolds 0f2bc1e0ea Minor perf tweaks 2016-04-21 16:12:33 -07:00
Thomas Reynolds a14934e08b Merge pull request #1888 from mortonfox/patch-1
Fix RubyInstaller Devkit link.
2016-04-20 14:22:42 -07:00
Morton Fox a95f721490 Fix RubyInstaller Devkit link. 2016-04-20 00:27:15 -04:00
Thomas Reynolds 2b0f720850 Bad merge 2016-04-19 11:54:00 -07:00
Thomas Reynolds b386dcdc40 Fix #1884 for realz 2016-04-19 11:08:23 -07:00
Thomas Reynolds 0ac5650229 Throw when trying to overwrite a template context value. Fixes #1884 2016-04-19 11:06:51 -07:00
Thomas Reynolds 7e3baed196 Throw when trying to overwrite a template context value. Fixes #1884 2016-04-19 10:37:23 -07:00
Thomas Reynolds 09a7d89fd3 Throw when trying to overwrite a template context value. Fixes #1884 2016-04-19 10:36:49 -07:00
Thomas Reynolds 6872e07d34 Expose extensions in config. Helps middleman/middleman-sprockets#111 2016-04-17 13:02:23 -07:00
Thomas Reynolds a01656df39 Steps should try passing unknown methods to config context before failing. Fixes #1879 2016-04-14 11:30:46 -07:00
Thomas Reynolds f2535f4fda Bump dep 2016-04-13 09:23:28 -07:00
Thomas Reynolds dd2413857e prep 2016-04-12 13:12:09 -07:00
Thomas Reynolds b058d26564 Bump fast image 2016-04-12 13:05:46 -07:00
Thomas Reynolds b794961916 Only rewrite urls in sitemap. Fixes #1873 2016-04-12 12:53:50 -07:00
Thomas Reynolds 4791e01f10 Merge pull request #1877 from middleman/bugfix/restarting-external-pipeline
Allow restarting external-pipeline without orphaning processes
2016-04-12 10:23:38 -07:00
Thomas Reynolds ac974ca05f Allow restarting external-pipeline without orphaning processes 2016-04-12 10:00:09 -07:00
Thomas Reynolds c7669609e6 Merge pull request #1876 from middleman/bugfix/global-collection-steps
Make global config access work inside steps
2016-04-11 16:23:07 -07:00
Thomas Reynolds e99649b33e Make global config access work inside steps 2016-04-11 16:02:31 -07:00
Thomas Reynolds ec213efb95 Merge pull request #1871 from luskjh/sprockets-readme-link-change
Update link in README to sprockets repository.
2016-04-08 13:39:57 -05:00
Joshua Lusk 21f4f40e21 Update README.md 2016-04-06 12:37:15 -04:00
Thomas Reynolds 16c82fe57a Really fix #1864 2016-03-27 14:12:32 -07:00
Thomas Reynolds 058a63a0de Make #1831 work 2016-03-26 16:43:47 -07:00
Thomas Reynolds 49da6156a0 Fixes #1860 2016-03-26 15:17:09 -07:00
Thomas Reynolds 3cbd9fdede Add back plain environment helper to context. Helps with #1861 2016-03-25 10:23:05 -07:00
Thomas Reynolds 7ae8e904a6 Merge pull request #1862 from balthisar/server_cli_fix
Fix server CLI
2016-03-25 10:17:25 -07:00
Thomas Reynolds 55230229f6 Fix #1857 2016-03-25 10:16:54 -07:00
Jim Derry 9e774b608a Fix server CLI 2016-03-25 14:00:48 +08:00
Thomas Reynolds b950af89ac Really prep 2016-03-22 16:04:00 -07:00
Thomas Reynolds 5a2f9c8ca6 Create a single default list of asset extensions. Add .ico to it. Fixes #1830. 2016-03-22 15:43:48 -07:00
Thomas Reynolds bca8b854dd prep 2016-03-22 12:34:03 -07:00
Thomas Reynolds ebc2baa13f Merge pull request #1855 from bradgessler/asset-host-extensions
Add exts to asset_host extension
2016-03-22 12:11:01 -07:00
Brad Gessler 179d6c0be4 Add extensions to asset_host extension. 2016-03-22 11:22:06 -07:00
Thomas Reynolds 2701bede2a Merge pull request #1851 from FearGoidte/master
Typo reversed meaning
2016-03-22 11:04:36 -07:00
James cc25c784f9 Merge branch 'master' into master 2016-03-22 17:35:21 +00:00
Thomas Reynolds 9d29cd58de Merge pull request #1853 from adam-h/asset-hash-1852
Fix asset_hash with content rule and uncommented CSS url
2016-03-22 10:09:53 -07:00
Adam Heath 025e35f6a1 Fix asset_hash with content rule and uncommented CSS url
Fixes middleman/middleman#1852
2016-03-22 17:34:40 +08:00
FearGoidte f5a668d380 Typo reversed meaning 2016-03-22 08:24:21 +00:00
Thomas Reynolds 0df7f0d6ac Merge pull request #1847 from FearGoidte/master
Added .xhtml
2016-03-21 12:02:19 -07:00
FearGoidte d461473f81 Added .xhtml
Fixes pretty U.R.L.s for xhtml files
2016-03-21 15:19:36 +00:00
Thomas Reynolds 8425692b86 Try to fix preview server config 2016-03-20 17:33:44 -07:00
Thomas Reynolds aab7bac8a6 Apply CLI options later in process. Fixes 1843 2016-03-20 16:44:20 -07:00
Thomas Reynolds 7e42954258 Define a :config mode, dont run external pipeline on config mode. Fixes #1844 2016-03-20 16:31:15 -07:00
Thomas Reynolds 02a0b557f6 Merge pull request #1842 from puyo/fix/asset-url-and-relative-paths
Fix asset_url and relative option bug.
2016-03-20 16:06:47 -07:00
Gregory McIntyre d539d4aa3d Merge branch 'master' into fix/asset-url-and-relative-paths 2016-03-19 16:04:44 +11:00
Gregory McIntyre 0436c211c6 Fix asset_url and relative option bug.
If the relative option is set and the asset is stored in the directory
alongside the resource referencing it, asset_url produces the
wrong path ('../images/image.jpg' rather than just 'image.jpg').
2016-03-19 13:42:41 +11:00
Thomas Reynolds d22bd914ae Add specific test for #1556 2016-03-18 10:37:02 -07:00
Thomas Reynolds dfa389bde4 bump 2016-03-17 14:47:14 -07:00
Thomas Reynolds 5337d0640b Allow skipping sitemap. Helps #1837 2016-03-17 13:23:36 -07:00
Thomas Reynolds 7484c9f242 Merge pull request #1836 from puyo/fix-proxy-metadata-lookup-during-store-rebuild
Fix bug with store rebuilding and proxy resources.
2016-03-16 10:15:20 -07:00
Gregory McIntyre 563da9d45b Fix bug with store rebuilding and proxy resources. 2016-03-16 12:22:13 +11:00
Thomas Reynolds 0904652c6f Try to fix #1832 2016-03-15 14:10:27 -07:00
Thomas Reynolds 1f3bf47e3c Expose all config options to CLIs. Helps with #1829 2016-03-12 13:55:25 -08:00
Thomas Reynolds d624dc4601 Refine gemspec 2016-03-10 13:17:44 -08:00
Thomas Reynolds 260a9cd94c Merge pull request #1826 from gltarsa/flag-missing-partial
Ensure that misspelled or missing partials generate an error
2016-03-03 09:05:24 -08:00
Greg Tarsa fbc572f920 Ensure that misspelled or missing partials generate an error 2016-03-03 11:23:17 -05:00
Thomas Reynolds 737e6f5e64 expand_path on custom source directories. Fixes #1823 2016-03-02 12:54:14 -08:00
Thomas Reynolds 7b59f240d5 Fixes #1821 2016-03-02 12:00:39 -08:00
Thomas Reynolds c44f7482b1 Fix #1822 2016-03-01 09:25:05 -08:00
Thomas Reynolds e14107ba65 prep v4.1.2 2016-02-28 20:17:35 -08:00
Thomas Reynolds d776f07bfc Merge pull request #1815 from adam-h/sourcemap-hashing
Add sourceMap comment to asset_hash and hash .map files by default
2016-02-26 10:09:18 -08:00
Adam Heath d883152e99 Add sourceMap comment to asset_hash and hash .map files by default 2016-02-26 08:46:00 +08:00
Thomas Reynolds 0d983231d0 Run helper after collections. Fixes #1226 2016-02-24 14:20:42 -08:00
Thomas Reynolds 4733488e8d Update deps 2016-02-24 13:14:50 -08:00
Thomas Reynolds edb1a53060 Add page_id concept 2016-02-22 11:17:21 -08:00
Thomas Reynolds b695f6da1e Fix #1028 2016-02-19 13:24:16 -08:00
Thomas Reynolds e36fd3f476 move contrib file 2016-02-19 11:26:15 -08:00
Thomas Reynolds eaac03ab4b Merge pull request #1809 from adam-h/external-pipeline-error
Make build fail when external_pipeline fails
2016-02-18 12:48:02 -08:00
Adam Heath 351003b4fe Make build fail when external_pipeline fails 2016-02-18 12:41:48 +08:00
Thomas Reynolds 476287452d Merge pull request #1808 from stevenosloan/loosen_data_store_contracts
loosen contracts for setting/returning data in Datastore
2016-02-17 15:06:53 -08:00
Steven Sloan fc0f5d24d6 feat(data): allow for setting & getting Arrays through #store & #data_for_path
Seeing that in #touch_file that a value in data could be an Array or Hash, loosen contracts to allow for other storage & retrieval methods to set the same types. Array & Hash being allowable is strongly tied to what *could* be returned after passing through Util.recursively_enhance

[close #1803]
2016-02-17 17:20:24 -05:00
Thomas Reynolds a24e5986a2 Merge pull request #1805 from melvinsh/fix_404_html_injection
Escape path in 404 (not found) page
2016-02-16 09:28:07 -08:00
Melvin Lammerts b7886aa14c escape path in 404 (not found) page
This escapes the `path` variable using `escape_html` from `Rack::Utils` to prevent Cross-Site Scripting in 404 (Not Found) pages.
2016-02-15 23:42:05 +01:00
Thomas Reynolds 6c8fc2ee07 Merge pull request #1792 from jimothyGator/feature/show-version-on-middleman-page
show version on Middleman Information page
2016-02-04 22:58:26 -08:00
Jim Cushing 7bd417fad1 show version on middleman page 2016-02-04 20:44:39 -05:00
Thomas Reynolds d7967a86bb Merge pull request #1791 from jimothyGator/fix/1790-blocks-with-partials
fix partials used with blocks
2016-02-04 08:53:09 -08:00
Jim Cushing b1778a92cd fix partials used with blocks 2016-02-03 16:56:12 -05:00
Thomas Reynolds a2181a2fd9 Allow findup to be false 2016-02-03 09:57:30 -08:00
Thomas Reynolds 6de25dfd0e Fix #1787 2016-02-02 18:49:14 -08:00
Thomas Reynolds f596d8ebf5 bump 2016-02-02 13:11:53 -08:00
Thomas Reynolds 3f18efeed9 split up util module, fix some rubocop complaints 2016-01-31 14:13:52 -08:00
Thomas Reynolds c5aabbbe4f Confirm nested frontmatter doesn't work 2016-01-29 10:30:08 -08:00
Thomas Reynolds 598d72480f Fix slow server boot. It was recursing through node_modules and .git on initial boot 2016-01-28 16:45:54 -08:00
Thomas Reynolds 8c27d9a2e7 Merge pull request #1781 from FearGoidte/master
Support for .xhtml
2016-01-28 10:50:39 -08:00
FearGoidte d863733160 Merge remote-tracking branch 'origin/master' 2016-01-28 08:18:35 +00:00
FearGoidte 13c351f2bf Merge remote-tracking branch 'middleman/master' 2016-01-28 08:18:25 +00:00
James 17f5f19002 Merge branch 'master' into master 2016-01-28 08:18:01 +00:00
FearGoidte 007c626d58 .xml removed from Gzip defaults 2016-01-28 08:16:23 +00:00
Thomas Reynolds e169d3d07e Merge pull request #1782 from jsdalton/allow-watcher-disable-in-server-mode
Disable file watching completely when watcher_disable is true
2016-01-28 00:05:40 -08:00
Jim Dalton cc36267de5 Disable file watching completely when watcher_disable is true 2016-01-27 20:56:17 -08:00
FearGoidte 475fa41de0 Support for .xhtml
I’ve attempted to make support for .htm and .xhtml consistent.
Extensions are in alphabetical order to make it easier to compare them.
2016-01-27 09:48:36 +00:00
Thomas Reynolds 2bba7888b0 Fixes #1780 2016-01-26 13:47:27 -08:00
Thomas Reynolds 0c29fd4abf Make templates extensions with layouts configurable 2016-01-26 13:21:39 -08:00
Thomas Reynolds 9553796731 Fix passing template locals down to partials. Helps #1753 2016-01-26 11:01:32 -08:00
Thomas Reynolds 24ef35026e Merge pull request #1779 from bhollis/minify-js
Minify inline JS when there are other attributes.
2016-01-25 10:11:09 -08:00
Ben Hollis 8881389b42 Minify inline JS when there are other attributes. 2016-01-24 22:55:48 -08:00
Thomas Reynolds e7d9c8ad0e Fix a threading issue caused by parallel 2016-01-24 13:02:39 -08:00
Thomas Reynolds deae5d2216 Fix #1778 2016-01-24 12:30:53 -08:00
Thomas Reynolds 4deaa65a6d update donate link 2016-01-23 17:14:35 -08:00
Thomas Reynolds c7a4618166 Perf work and Parallel builds 2016-01-22 15:57:07 -08:00
Thomas Reynolds b8c0fd34e7 additional perf work 2016-01-22 14:25:02 -08:00
Thomas Reynolds e0818e2118 remove debug code 2016-01-21 14:47:45 -08:00
Thomas Reynolds 4e8273295b tweak some checksums, something slightly changed file output upstream 2016-01-21 10:50:44 -08:00
Thomas Reynolds 92d96f6604 typo 2016-01-21 10:19:52 -08:00
Thomas Reynolds 8bacc35bf2 Merge pull request #1770 from jsdalton/add-mm-data-dir-env-var
Add option for MM_DATA_DIR env var to define :data_dir default value
2016-01-21 10:06:55 -08:00
Jim Dalton 68127003b9 Add option for MM_DATA_DIR env var to define :data_dir default value 2016-01-20 21:11:03 -08:00
Thomas Reynolds 5586784947 Add some options to watcher to opt out of features later 2016-01-20 13:34:12 -08:00
Thomas Reynolds 6d1c3562a7 Differentiate polling from find_new_files to remove double reads in build mode 2016-01-20 12:20:27 -08:00
Thomas Reynolds ffa662a917 Add system-wide file read cache 2016-01-20 11:50:25 -08:00
Thomas Reynolds 827d5fbb1d Still parse frontmatter on ignored resources. Proxies need it 2016-01-20 10:42:12 -08:00
Thomas Reynolds 2864902fa0 Fix #1767 2016-01-20 10:02:19 -08:00
Thomas Reynolds 6077ae43e9 rejigger cop 2016-01-19 15:35:37 -08:00
Thomas Reynolds 65aebc1887 Move some tests around 2016-01-19 14:55:47 -08:00
Thomas Reynolds 801a83f7cb Update changelog 2016-01-19 09:46:55 -08:00
Thomas Reynolds c2999786ee Merge pull request #1763 from iiska/fix-gzip-log-output
Fix gzip extension status output
2016-01-19 09:45:47 -08:00
Thomas Reynolds 2b88773640 Fix contract in i18n. Closes #1764 2016-01-19 09:44:56 -08:00
Thomas Reynolds 7bf4e4681f Show an error message when git CLI is not available. Closes #1765 2016-01-19 09:43:40 -08:00
Juhamatti Niemelä 22812cb340 Fix gzip extension status output 2016-01-18 19:55:45 +02:00
Thomas Reynolds 732ac7cbe9 Merge pull request #1762 from jsdalton/fix-removed-paths-type
Use correct type for removed paths passed to update
2016-01-16 18:49:01 -08:00
Jim Dalton dc3eac9e96 Use correct type for removed paths passed to update 2016-01-16 11:58:00 -08:00
Thomas Reynolds 03c95f0863 prep 2016-01-14 14:48:40 -08:00
Thomas Reynolds 5529062bc4 Changelog 2016-01-14 14:31:00 -08:00
Thomas Reynolds a47b2138f8 Add specific check for TLD-like strings when replacing inline urls. Fixes #1751 2016-01-14 14:29:45 -08:00
Thomas Reynolds be2788b6ca Fix automatic images with absolute (or images dir missing) paths in markdown. Fixes #1755 2016-01-14 14:14:50 -08:00
Thomas Reynolds ff9c34bca9 Allow sorting of rewriters. Fixes #1752 2016-01-14 14:02:33 -08:00
Thomas Reynolds d82ac590db Cop 2016-01-14 11:21:42 -08:00
Thomas Reynolds 5f8beba4b3 Perf 2016-01-14 11:05:41 -08:00
Thomas Reynolds c213bd19df Move block run 2016-01-12 17:11:56 -08:00
Thomas Reynolds 8daa5eba3e Add back app.ignore 2016-01-12 10:53:25 -08:00
Thomas Reynolds 18e4ee41d0 Allow 2.3 failure 2016-01-12 10:46:50 -08:00
Thomas Reynolds 95c7a53291 Convert more basic config commands to ConfigExtensions 2016-01-12 10:38:53 -08:00
Thomas Reynolds 56d71fe7d6 Merge pull request #1747 from jsdalton/mode-check-helper
Add app method to detect mode
2016-01-11 15:57:23 -08:00
Jim Dalton f954415c95 Add app method to detect mode 2016-01-11 14:24:28 -08:00
Thomas Reynolds edd5eb2057 Prep 2016-01-11 13:58:19 -08:00
Thomas Reynolds 7bc9e03642 Merge pull request #1746 from middleman/refactor/ignores
Create ConfigExtension to simplify the APIs for config vs Step.
2016-01-11 13:44:35 -08:00
Thomas Reynolds 179268a4f6 Create ConfigExtension to simplify the APIs for config vs Step. Fixes #1743. Fixes #1745 2016-01-11 13:05:41 -08:00
Thomas Reynolds 8f66077dd0 Allow 2.3.0 failure until frozen string bug is fixed upstream 2016-01-10 17:25:11 -08:00
Thomas Reynolds 98fe7ce7d2 WIP encoding test 2016-01-10 17:24:43 -08:00
Thomas Reynolds c6401f1cd9 Fixes #1716 2016-01-10 17:14:41 -08:00
Thomas Reynolds 5cac6a1896 Add test for #1718 2016-01-10 16:56:18 -08:00
Thomas Reynolds b4a6a503b3 Fixes #1719 2016-01-10 16:47:24 -08:00
Thomas Reynolds 47d0e1cb7b update changelog 2016-01-10 16:47:24 -08:00
Thomas Reynolds 4243676073 Merge pull request #1741 from jfeaver/fix/msoffice-files-as-binary
consider all MS Office files to be binary
2016-01-10 16:30:20 -08:00
Nathan Feaver 17df162e7b consider all MS Office files to be binary 2016-01-10 06:28:18 -07:00
Thomas Reynolds 46ca147560 Merge pull request #1740 from GUI/rewrite-ignore
Add rewrite_ignore option to asset_hash extension
2016-01-09 19:15:38 -08:00
Nick Muerdter 37be89ed68 Add rewrite_ignore option to asset_host, cache_buster, relative_assets. 2016-01-09 08:06:47 -07:00
Nick Muerdter 0563523a81 Add rewrite_ignore option to asset_hash extension.
This allows for configuring the files that will be skipped when
performing URL rewriting on the file content. This differs from the
existing `ignore` option, which configures the files that won't have
hashes added to the filename.
2016-01-08 15:04:45 -07:00
Thomas Reynolds 1e8080b44c Merge pull request #1739 from douo/patch-1
Fixes #1723
2016-01-07 11:38:06 -08:00
Thomas Reynolds a0105c9b48 Merge pull request #1738 from johnnyshields/patch-2
Add SVG to the default list of gzipped exts
2016-01-07 11:36:34 -08:00
Tiou Lims a7631b2f0d Fixes #1723 2016-01-07 23:23:50 +08:00
Johnny Shields 133c02d05c Add SVG to the default list of gzipped exts 2016-01-07 09:43:35 +09:00
Thomas Reynolds 1605f425e8 Fixes #1733 2016-01-05 10:58:22 -08:00
Thomas Reynolds bfb6a7fa16 Merge pull request #1725 from maxmeyer/feature/phantomjs
Added phantomjs as gem to make test suite pass
2016-01-05 10:34:46 -08:00
Thomas Reynolds 41212d7fa3 Merge pull request #1713 from tricknotes/ruby-2.3
Test against Ruby 2.3.0 on Travis CI
2016-01-05 10:34:39 -08:00
Thomas Reynolds 62b17d38ad Merge pull request #1734 from GhostGambler/issue-1702
Issue #1702
2016-01-05 09:50:41 -08:00
Thomas Reynolds fed3fae6bb Merge pull request #1733 from GhostGambler/issue-1709
Test for issue 1709; parent relations with localized and non-localized sources
2016-01-05 09:50:02 -08:00
Ulrich Gabor 298b3909ed First fix to actually use the encoding option again 2016-01-05 15:15:06 +01:00
Ulrich Gabor 1ca5be7b19 Tests for issue #1702 2016-01-05 15:15:01 +01:00
Ulrich Gabor bdeb19059a Test for issue 1709; parent relations with localized and non-localized sources 2016-01-05 15:08:26 +01:00
Dennis Günnewig b0a4d53963 Added phantomjs as gem to make test suite pass 2016-01-01 20:51:26 +01:00
Thomas Reynolds 5684caeee6 Merge pull request #1721 from bhollis/issue1721-relative-paths
relative URLs don't work in image_tag
2015-12-30 16:04:09 -08:00
Thomas Reynolds 03e13c5a26 Merge pull request #1715 from bhollis/issue1715-asset-url
Error calling Util#asset_url from DefaultHelpers#asset_url
2015-12-30 16:01:16 -08:00
Thomas Reynolds da1f3f7af6 Merge pull request #1710 from tricknotes/exit-with-1
Exit with error code on `init` command failed
2015-12-30 15:59:27 -08:00
Ben Hollis 9311a72e4a Use our relative_path_from_resource helper in asset_url. 2015-12-28 20:52:22 -08:00
Ben Hollis 412f6ac1fc Fix #1721 by passing through options to url_for. 2015-12-28 20:52:22 -08:00
Ben Hollis d464162e8e Fix #1715 by passing along path in DefaultHelpers#asset_url. 2015-12-28 17:40:21 -08:00
Ryunosuke SATO e56227c945 Exit with error code on `init` command failed 2015-12-27 18:12:53 +09:00
Ryunosuke SATO 2dcd2c5b1d Test against Ruby 2.3.0 on Travis CI 2015-12-26 01:11:15 +09:00
Thomas Reynolds 3b596d5e3e Merge pull request #1711 from tricknotes/ruby-2.2.4
Test against 2.2.4 that is the latest of Ruby 2.2
2015-12-24 15:09:20 -08:00
Ryunosuke SATO 3fdd963923 Test against 2.2.4 that is the latest of Ruby 2.2 2015-12-23 23:54:04 +09:00
Thomas Reynolds 4a8cd4c3d2 fix extension test 2015-12-21 13:27:44 -08:00
Thomas Reynolds a5821bccec Fix asset hash with query string or hash params. Closes #1411 2015-12-21 13:07:01 -08:00
Thomas Reynolds ba0416b330 Set min version in gemspec 2015-12-20 13:47:18 -08:00
Thomas Reynolds 6aeda854c0 Update local extension template 2015-12-20 12:48:05 -08:00
Thomas Reynolds 5d0f12e6ca Merge pull request #1707 from jordanandree/v4-skip-front-matter-for-ignored-resource
Skip front matter parsing for ignored resources
2015-12-17 15:28:05 -08:00
jordanandree e035d625c8 skip front matter on ingored resources 2015-12-17 14:01:37 -05:00
Thomas Reynolds b2b461935d Here we go 2015-12-15 19:58:04 -08:00
Thomas Reynolds 9e5b137ed8 Really fix #1689 2015-12-15 09:58:22 -08:00
Thomas Reynolds 6af784d5d5 One more RC 2015-12-14 11:02:07 -08:00
Thomas Reynolds 0e620a1ba1 Resolve Contracts warning 2015-12-14 10:22:27 -08:00
255 changed files with 4089 additions and 2071 deletions

3
.gitignore vendored
View File

@ -1,3 +1,6 @@
.byebug_history
npm-debug.log
manifest.yaml
/.bundle
.DS_Store
coverage

View File

@ -10,11 +10,13 @@ AllCops:
- '**/tmp/**/*'
- '**/bin/**/*'
- 'middleman-core/lib/middleman-core/step_definitions/**/*'
- 'middleman-core/lib/vendored-middleman-deps/**/*'
- 'middleman-cli/lib/middleman-templates/**/*'
- 'middleman-core/fixtures/**/*'
- 'middleman-core/features/**/*'
- 'middleman-core/spec/**/*'
- 'middleman-cli/lib/middleman-cli/templates/**/*'
- 'middleman-cli/fixtures/**/*'
- 'middleman-cli/features/**/*'
- 'middleman-cli/spec/**/*'
DoubleNegation:
Enabled: false
LineLength:
@ -37,8 +39,6 @@ AssignmentInCondition:
Enabled: false
CyclomaticComplexity:
Enabled: false
AbcSize:
Enabled: false
HandleExceptions:
Enabled: false
EndAlignment:
@ -52,7 +52,9 @@ FormatString:
CaseIndentation:
IndentWhenRelativeTo: end
TrivialAccessors:
ExactNameMatch: true
Enabled: false
SingleLineBlockParams:
Enabled: false
Metrics/AbcSize:
Enabled: false
Metrics/PerceivedComplexity:
@ -63,3 +65,7 @@ Style/BlockDelimiters:
Enabled: false
Style/MultilineBlockChain:
Enabled: false
Style/SpecialGlobalVars:
Enabled: false
Style/FrozenStringLiteralComment:
Enabled: false

View File

@ -5,9 +5,8 @@ before_script:
- bundle update
rvm:
- ruby-head
- 2.2.2
- 2.1
- 2.0
- 2.3.1
- 2.2.4
os:
- linux
# - osx

View File

@ -1,6 +1,103 @@
master
===
# 4.1.13
* Change how config options are passed to Thor. Removes new Thor warnings from #2017
# 4.1.12
* Fix broken `ignore { |p| true }` form.
# 4.1.11
* Upgrade to Rack 2.
# 4.1.10
* Fix unicode issues in URL deeplinks.
* Add prefix option to asset_hash (#1949)
# 4.1.9
* Fix `--watcher-*` CLI flags.
* Allow spaces in paths to work with `link_to`. Fixes #1914
* Add support for dotenv
* Fix asset_url with asset_hash (#1919)
* Allow partial lookups without a current_resource (#1912)
# 4.1.8
* Expose `development?` and `production?` helpers to template context.
* require the `try` core extension (#1911)
* Fix contract for Sitemap::Store.register_resource_list_manipulator (#1907)
* Loosen contract on Resource#source_file to Maybe[String] (#1906)
* Let collection loops access ConfigContext for helpers. #1879
* Use https:// to clone templates (#1901)
* Allow numbers to be unique page_ids (#1886)
* Prevent infinite loop when encountering files where base filename is a possible templating engine
# 4.1.7
* Upgrade fastimage to 2.0
* Fix shutdown of external_pipeline commands when config.rb is changed. #1877
* Allow calls to `app.` to work as collections after initial config parse. #1876
# 4.1.5-4.1.6
* Fix file recursion when looking for possible asset dependencies. Major preview server performance improvement.
# 4.1.4
* Unify default extensions for all URL processing extensions. #1855
* Fix URL regex for `content: ` context of CSS. #1853
* Make sure CLI config over-rides `config.rb` order.
* Fix relative assets in some contexts. #1842
# 4.1.3
* Expose all top-level config options to CLI (flags now match config. latency -> watcher_latency, etc).
* Fix directory indexes with `.htm` and `.xhtml` files. #1821
# 4.1.2
* Add `page_id` concept. Using the `id` key in frontmatter, proxy or page will set an ID on a resource which can be referenced by `url_for` and `link_to`.
* Allow looking for `Gemfile` when setting up a project to fail gracefully.
* Send correct exit code when external_pipeline fails during build.
* Fix error when customizing `layouts_dir`. #1028
* Fix collections (commands in loops) not being processed by `page` command. #1226
* Correctly asset_hash sourcemap references.
# 4.1.1
* Fix bad code that made `/__middleman/` break.
# 4.1.0
* Add rewrite_ignore option to asset_hash, asset_host, cache_buster & relative_assets. This proc let's you opt-out of the extension behavior on a per-path basis.
* gzip extension now compresses svgs by default
* Fix the `encoding` option.
* Fix relative paths on `image_tag` helper.
* Correctly exit with error code on failed `init`
* Fixed `asset_hash` when path has query string or #hashes
* Fix new extension template
* Don't parse frontmatter on ignored files.
* Fix displaying frontmatter on `/__middleman/sitemap`
* Add `skip_build_clean` config which when set to a block, will avoid removing non-generated paths from build, like .git #1716
* Minor performance improvements
* DRY-up config.rb-specific commands like `ignore` or `path`.
* Fix automatic images with absolute (or images dir missing) paths in markdown. Fixes #1755
* Fix asset_host in combination with Google Analytics snippet. #1751
* Show an error message when git CLI is not available. #1765
* Correctly show file names of GZIP'ed assets. #1364
* Build file output is now parallel-ized! Use `middleman build --no-parallel` to disable.
* Make template file extensions that get layouts by default configurable via `config[:extensions_with_layout]`
* Remove `=` from inline url matcher. This means paths in HTML attributes MUST be quoted. Fixes #1780
# 4.0.0
* Add `:locales` and `:data` source types to the list of files which trigger a live-reload.
* Rename i18n `lang` and `langs` to `locale` and `locales`.
* Avoid matching URLs across new lines. #1689
* Load Middleman Directory when doing `init` over SSL
@ -32,7 +129,7 @@ master
* Add `resources` class method to extensions to allow simple string-based resource generation.
* rename `app.add_to_instance` to `Extension.expose_to_application` for adding extension-local methods to the shared app instance.
* rename `app.add_to_config_context` to `Extension.expose_to_config` for adding extension-local methods to the sandboxed scope of `config.rb`
* Add `Extension.expose_to_templates`, which auto binds copies of extension-local methods into a Template context.
* Add `Extension.expose_to_template`, which auto binds copies of extension-local methods into a Template context.
* Remove side-loading of CLI tasks from `tasks/`
* Add the option of naming `config.rb` as `middleman.rb`.
* Builder extracted from Thor. `after_build` hook now passes an instance of a Builder instead of the Thor CLI.

13
Gemfile
View File

@ -5,12 +5,16 @@ gem 'rake', '~> 10.3', require: false
gem 'yard', '~> 0.8', require: false
# Test tools
gem 'pry', '~> 0.10', group: :development, require: false
gem 'pry-byebug'
gem 'pry-stack_explorer'
gem 'byebug'
gem 'aruba', '~> 0.7.4', require: false
gem 'rspec', '~> 3.0', require: false
gem 'cucumber', '~> 2.0', require: false
gem 'addressable', '~> 2.4.0', require: false
# Pry tools
gem 'pry'
gem 'pry-stack_explorer'
gem 'pry-rescue'
# Optional middleman dependencies, included for tests
gem 'haml', '>= 4.0.5', require: false
@ -20,7 +24,7 @@ gem 'kramdown', '~> 1.2', require: false
gem 'slim', '>= 2.0', require: false
gem 'liquid', '>= 2.6', require: false
gem 'stylus', '>= 1.0', require: false
gem 'sinatra', '>= 1.4', require: false
gem 'sinatra', '>= 2.0.0.beta2', require: false
gem 'redcarpet', '>= 3.1', require: false
# Dns server to test preview server
@ -28,6 +32,7 @@ gem 'rubydns', '~> 1.0.1', require: false
# To test javascript
gem 'poltergeist', '~> 1.8', require: false
gem 'phantomjs', '~> 2.1.1.0', require: false
# For less, note there is no compatible JS runtime for windows
gem 'therubyrhino', '>= 2.0', platforms: :jruby

9
ISSUE_TEMPLATE.md Normal file
View File

@ -0,0 +1,9 @@
## Expected behavior and actual behavior
## Steps to reproduce the problem (from a clean middleman installation)
## Additional information
- Ruby version:
- Middleman version:
- OS version:

View File

@ -10,7 +10,7 @@ The last few years have seen an explosion in the amount and variety of tools dev
* [Sass](http://sass-lang.com/) for DRY stylesheets
* [CoffeeScript](http://coffeescript.org/) for safer and less verbose javascript
* Multiple asset management solutions, including [Sprockets](https://github.com/sstephenson/sprockets)
* Multiple asset management solutions, including [Sprockets](https://github.com/rails/sprockets)
* [ERb](http://ruby-doc.org/stdlib-2.0.0/libdoc/erb/rdoc/ERB.html) & [Haml](http://haml.info/) for dynamic pages and simplified HTML syntax
**Middleman** gives the stand-alone developer access to all these tools and many, many more. Why would you use a stand-alone framework instead of Ruby on Rails?
@ -91,7 +91,7 @@ The best way to get quick responses to your issues and swift fixes to your bugs
## Donate
[Click here to lend your support to Middleman](https://spacebox.io/s/4dXbHBorC3)
[Click here to lend your support to Middleman](https://plasso.co/s/4dXbHBorC3)
## Versioning
@ -121,6 +121,6 @@ Copyright (c) 2010-2015 Thomas Reynolds. MIT Licensed, see [LICENSE] for details
[codeclimate]: https://codeclimate.com/github/middleman/middleman
[gittip]: https://www.gittip.com/middleman/
[rubyinstaller]: http://rubyinstaller.org/
[RubyInstaller-Devkit]: http:rubyinstaller.org/add-ons/devkit/
[RubyInstaller-Devkit]: http://rubyinstaller.org/add-ons/devkit/
[rubydoc]: http://rubydoc.info/github/middleman/middleman
[LICENSE]: https://github.com/middleman/middleman/blob/master/LICENSE.md

View File

@ -3,7 +3,7 @@ require 'rake'
require File.expand_path('../middleman-core/lib/middleman-core/version.rb', __FILE__)
ROOT = File.expand_path(File.dirname(__FILE__))
GEM_NAME = 'middleman'
GEM_NAME = 'middleman'.freeze
middleman_gems = %w(middleman-core middleman-cli middleman)
GEM_PATHS = middleman_gems.freeze
@ -36,7 +36,7 @@ end
desc 'Generate documentation for all middleman gems'
task :doc do
GEM_PATHS.each do |g|
Dir.chdir("#{File.join(ROOT, g)}") { sh "#{Gem.ruby} -S rake yard" }
Dir.chdir(File.join(ROOT, g).to_s) { sh "#{Gem.ruby} -S rake yard" }
end
end
@ -45,14 +45,14 @@ task :test do
Rake::Task['rubocop'].invoke
GEM_PATHS.each do |g|
Dir.chdir("#{File.join(ROOT, g)}") { sh "#{Gem.ruby} -S rake test" }
Dir.chdir(File.join(ROOT, g).to_s) { sh "#{Gem.ruby} -S rake test" }
end
end
desc 'Run specs for all middleman gems'
task :spec do
GEM_PATHS.each do |g|
Dir.chdir("#{File.join(ROOT, g)}") { sh "#{Gem.ruby} -S rake spec" }
Dir.chdir(File.join(ROOT, g).to_s) { sh "#{Gem.ruby} -S rake spec" }
end
end

View File

@ -1,4 +1,4 @@
# coding:utf-8
RAKE_ROOT = __FILE__
GEM_NAME = 'middleman-cli'
RAKE_ROOT = __FILE__.freeze
GEM_NAME = 'middleman-cli'.freeze
require File.expand_path(File.dirname(__FILE__) + '/../gem_rake_helper')

View File

@ -4,11 +4,37 @@ require 'middleman-core/profiling'
if ARGV.include? '--profile'
Middleman::Profiling.profiler = Middleman::Profiling::RubyProfProfiler.new
end
Middleman::Profiling.start
# Middleman::Profiling.start
require "middleman-core/load_paths"
Middleman.setup_load_paths
require 'dotenv'
::Dotenv.load
require 'middleman-core'
require 'middleman-core/logger'
module Middleman::Cli
class << self
attr_accessor :config
end
def self.import_config(base)
::Middleman::Cli.config.all_settings.each do |setting|
if setting.default.is_a?(String) || setting.default.is_a?(NilClass)
base.class_option setting.key,
type: :string,
desc: setting.description
elsif setting.default.is_a?(TrueClass) || setting.default.is_a?(FalseClass)
base.class_option setting.key,
type: :boolean,
desc: setting.description
end
end
end
end
require "middleman-cli"
# Change directory to the root
@ -19,5 +45,26 @@ if ARGV[0] != 'help' && (ARGV.length < 1 || ARGV.first.include?('-'))
ARGV.unshift('server')
end
::Middleman::Logger.singleton(3)
::Middleman::Cli.config = ::Middleman::Application.new do
#
config[:environment] = (ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development').to_sym
config[:mode] = :config
config[:exit_before_ready] = true
config[:watcher_disable] = true
config[:disable_sitemap] = true
end.config
# Require the Middleman version
require 'middleman-core/version'
# Include the core CLI items
require 'middleman-cli/init'
require 'middleman-cli/extension'
require 'middleman-cli/server'
require 'middleman-cli/build'
require 'middleman-cli/console'
require 'middleman-cli/config'
# Start the CLI
Middleman::Cli::Base.start(ARGV)

View File

@ -9,6 +9,6 @@ Feature: Middleman New Extension CLI
| Rakefile |
| my-extension-library.gemspec |
| features/support/env.rb |
| lib/middleman_extension.rb |
| lib/my-extension-library/extension.rb |
| lib/my-extension-library.rb |
| .gitignore |

View File

@ -63,6 +63,10 @@ Feature: Middleman CLI
And the file "Gemfile" should contain "middleman-blog"
And the file ".gitignore" should exist
Scenario: Create an invalid project using Middleman directory
When I run `middleman init MY_PROJECT -T does-not-exist-for-reals`
Then the exit status should be 1
Scenario: Create a new project using github(user/repository)
When I run `middleman init MY_PROJECT -T middleman/middleman-templates-default` interactively
And I type "y"

View File

@ -42,7 +42,7 @@ Feature: Run the preview server
Inspect your site configuration at "http://
"""
@ruby-2.1
@wip
Scenario: Start the server with defaults in verbose mode, when a local mdns server resolves the local hostname
Given I start a mdns server for the local hostname
When I run `middleman server --verbose` interactively
@ -115,6 +115,7 @@ Feature: Run the preview server
Inspect your site configuration at "http://127.0.0.1:4567/__middleman"
"""
@wip
Scenario: Start the server with bind address 127.0.0.5
This will have no hostname attached because the hosts file, the DNS server
@ -359,7 +360,6 @@ Feature: Run the preview server
The Middleman preview server is bound to ":::65432", "0.0.0.0:65432"
"""
@ruby-2.1
@wip
Scenario: Start the server when port is blocked by other middleman instance
Given `middleman server` is running in background
@ -469,7 +469,8 @@ Feature: Run the preview server
Inspect your site configuration at "http://www.example.com:4567/__middleman", "http://127.0.0.1:4567/__middleman"
"""
@ruby-2.1
@ruby-2.1
@wip
Scenario: Start the server with server name "host.local" and the link local name server is used to resolve the server name
To make the mdns resolver resolve a name, it needs to end with ".local".
@ -501,7 +502,8 @@ Feature: Run the preview server
Inspect your site configuration at "http://host.local:4567/__middleman", "http://127.0.0.1:4567/__middleman"
"""
@ruby-2.1
@ruby-2.1
@wip
Scenario: Start the server with server name "host" and the link local name server is used to resolve the server name
To make the mdns resolver resolve a name, it needs to end with ".local". If

View File

@ -0,0 +1,19 @@
ENV["TEST"] = "true"
require 'sassc'
require 'simplecov'
SimpleCov.root(File.expand_path(File.dirname(__FILE__) + '/../..'))
require 'phantomjs/poltergeist'
Capybara.javascript_driver = :poltergeist
require 'coveralls'
Coveralls.wear!
require 'codeclimate-test-reporter'
CodeClimate::TestReporter.start
PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__)))
require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-cli')
require File.join(File.dirname(PROJECT_ROOT_PATH), 'middleman-core', 'lib', 'middleman-core', 'step_definitions')

View File

@ -21,14 +21,3 @@ module Middleman::Cli
end
end
end
# Require the Middleman version
require 'middleman-core/version'
# Include the core CLI items
require 'middleman-cli/init'
require 'middleman-cli/extension'
require 'middleman-cli/server'
require 'middleman-cli/build'
require 'middleman-cli/console'
require 'middleman-cli/config'

View File

@ -1,3 +1,5 @@
require 'middleman-core/application'
# CLI Module
module Middleman::Cli
# The CLI Build class
@ -8,12 +10,15 @@ module Middleman::Cli
class_option :environment,
aliases: '-e',
default: ENV['MM_ENV'] || ENV['RACK_ENV'] || 'production',
desc: 'The environment Middleman will run under'
default: ENV['MM_ENV'] || ENV['RACK_ENV'] || :production
class_option :clean,
type: :boolean,
default: true,
desc: 'Remove orphaned files from build (--no-clean to disable)'
class_option :parallel,
type: :boolean,
default: true,
desc: 'Output files in parallel (--no-parallel to disable)'
class_option :glob,
type: :string,
aliases: '-g',
@ -24,7 +29,7 @@ module Middleman::Cli
default: false,
desc: 'Print debug messages'
class_option :instrument,
type: :string,
type: :boolean,
default: false,
desc: 'Print instrument messages'
class_option :profile,
@ -32,6 +37,8 @@ module Middleman::Cli
default: false,
desc: 'Generate profiling report for the build'
Middleman::Cli.import_config(self)
# Core build Thor command
# @return [void]
def build
@ -44,35 +51,44 @@ module Middleman::Cli
require 'middleman-core/builder'
require 'fileutils'
env = options['environment'].to_sym
verbose = options['verbose'] ? 0 : 1
instrument = options['instrument']
@app = ::Middleman::Application.new do
config[:mode] = :build
config[:environment] = env
config[:show_exceptions] = false
::Middleman::Logger.singleton(verbose, instrument)
builder = nil
cli_options = options
::Middleman::Logger.singleton(verbose, instrument)
::Middleman::Util.instrument 'builder.setup' do
@app = ::Middleman::Application.new do
config[:mode] = :build
config[:show_exceptions] = false
config[:cli_options] = cli_options.each_with_object({}) do |(k, v), sum|
sum[k] = v
end
end
builder = Middleman::Builder.new(@app,
glob: options['glob'],
clean: options['clean'],
parallel: options['parallel'])
builder.thor = self
builder.on_build_event(&method(:on_event))
end
builder = Middleman::Builder.new(@app,
glob: options['glob'],
clean: options['clean'],
parallel: options['parallel'])
builder.thor = self
builder.on_build_event(&method(:on_event))
::Middleman::Util.instrument 'builder.run' do
if builder.run!
clean_directories! if options['clean']
shell.say 'Project built successfully.'
else
msg = 'There were errors during this build'
unless options['verbose']
msg << ', re-run with `middleman build --verbose` to see the full exception.'
end
shell.say msg, :red
if builder.run!
clean_directories! if options['clean']
shell.say "Project built successfully."
else
msg = 'There were errors during this build'
unless options['verbose']
msg << ', re-run with `middleman build --verbose` to see the full exception.'
exit(1)
end
shell.say msg, :red
exit(1)
end
end

View File

@ -23,6 +23,9 @@ module Middleman::Cli
::Middleman::Logger.singleton(2, false)
app = ::Middleman::Application.new do
config[:mode] = :config
config[:disable_sitemap] = true
config[:watcher_disable] = true
config[:exit_before_ready] = true
config[:environment] = opts[:environment].to_sym if opts[:environment]
end

View File

@ -30,8 +30,8 @@ module Middleman::Cli
template 'extension/Rakefile', File.join(name, 'Rakefile')
template 'extension/gemspec', File.join(name, "#{name}.gemspec")
template 'extension/Gemfile', File.join(name, 'Gemfile')
template 'extension/lib/middleman_extension.rb', File.join(name, 'lib', 'middleman_extension.rb')
template 'extension/lib/lib.rb', File.join(name, 'lib', "#{name}.rb")
template 'extension/lib/lib/extension.rb', File.join(name, 'lib', name, 'extension.rb')
template 'extension/features/support/env.rb', File.join(name, 'features', 'support', 'env.rb')
empty_directory File.join(name, 'fixtures')
end

View File

@ -4,6 +4,8 @@ module Middleman::Cli
class Init < Thor::Group
include Thor::Actions
GIT_CMD = 'git'.freeze
check_unknown_options!
argument :target, type: :string, default: '.'
@ -25,6 +27,13 @@ module Middleman::Cli
require 'fileutils'
require 'tmpdir'
unless git_present?
msg = 'You need to install the git command line tool to initialize a new project. '
msg << "For help installing git, please refer to GitHub's tutorial at https://help.github.com/articles/set-up-git"
say msg, :red
exit 1
end
repo_path, repo_branch = if shortname?(options[:template])
require 'open-uri'
require 'json'
@ -39,7 +48,7 @@ module Middleman::Cli
rescue ::OpenURI::HTTPError
say "Template `#{options[:template]}` not found in Middleman Directory."
say 'Did you mean to use a full `user/repo` path?'
exit
exit 1
end
else
repo_name, repo_branch = options[:template].split('#')
@ -51,11 +60,12 @@ module Middleman::Cli
begin
branch_cmd = repo_branch ? "-b #{repo_branch} " : ''
run("git clone --depth 1 #{branch_cmd}#{repo_path} #{dir}")
git_path = "#{branch_cmd}#{repo_path}"
run("#{GIT_CMD} clone --depth 1 #{branch_cmd}#{repo_path} #{dir}")
unless File.directory?(dir)
say 'Git clone failed, maybe the url is invalid or you don\'t have the permissions?', :red
exit
unless $?.success?
say "Git clone command failed. Make sure git repository exists: #{git_path}", :red
exit 1
end
inside(target) do
@ -79,12 +89,31 @@ module Middleman::Cli
protected
# Copied from Bundler
def git_present?
return @git_present if defined?(@git_present)
@git_present = which(GIT_CMD) || which('git.exe')
end
# Copied from Bundler
def which(executable)
if File.file?(executable) && File.executable?(executable)
executable
elsif ENV['PATH']
path = ENV['PATH'].split(File::PATH_SEPARATOR).find do |p|
abs_path = File.join(p, executable)
File.file?(abs_path) && File.executable?(abs_path)
end
path && File.expand_path(executable, path)
end
end
def shortname?(repo)
repo.split('/').length == 1
end
def repository_path(repo)
repo.include?('://') || repo.include?('git@') ? repo : "git://github.com/#{repo}.git"
repo.include?('://') || repo.include?('git@') ? repo : "https://github.com/#{repo}.git"
end
# Add to CLI

View File

@ -5,56 +5,33 @@ module Middleman::Cli
check_unknown_options!
class_option :environment,
aliases: '-e',
default: ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development',
desc: 'The environment Middleman will run under'
aliases: '-e'
class_option :port,
aliases: '-p',
desc: 'The port Middleman will listen on'
aliases: '-p'
class_option :server_name,
aliases: '-s',
desc: 'The server name Middleman will use'
aliases: '-s'
class_option :bind_address,
aliases: '-b',
desc: 'The bind address Middleman will listen on'
class_option :https,
type: :boolean,
desc: 'Serve the preview server over SSL/TLS'
class_option :ssl_certificate,
desc: 'Path to an X.509 certificate to use for the preview server'
class_option :ssl_private_key,
desc: "Path to an RSA private key for the preview server's certificate"
aliases: '-b'
class_option :verbose,
type: :boolean,
default: false,
desc: 'Print debug messages'
class_option :instrument,
type: :string,
default: false,
desc: 'Print instrument messages'
class_option :disable_watcher,
type: :boolean,
default: false,
desc: 'Disable the file change and delete watcher process'
desc: 'Print instrument messages'
class_option :profile,
type: :boolean,
default: false,
desc: 'Generate profiling report for server startup'
class_option :force_polling,
type: :boolean,
default: false,
desc: 'Force file watcher into polling mode'
class_option :latency,
type: :numeric,
aliases: '-l',
default: 0.5,
desc: 'Set file watcher latency, in seconds'
class_option :daemon,
type: :boolean,
aliases: '-d',
default: false,
desc: 'Daemonize preview server'
Middleman::Cli.import_config(self)
# Start the server
def server
require 'middleman-core'
@ -66,24 +43,14 @@ module Middleman::Cli
end
params = {
port: options['port'],
bind_address: options['bind_address'],
https: options['https'],
server_name: options['server_name'],
ssl_certificate: options['ssl_certificate'],
ssl_private_key: options['ssl_private_key'],
environment: options['environment'],
debug: options['verbose'],
instrumenting: options['instrument'],
disable_watcher: options['disable_watcher'],
reload_paths: options['reload_paths'],
force_polling: options['force_polling'],
latency: options['latency'],
daemon: options['daemon']
}
puts '== The Middleman is loading'
::Middleman::PreviewServer.start(params)
::Middleman::PreviewServer.start(params, options)
end
# Add to CLI

View File

@ -1,38 +1,6 @@
# Require core library
require 'middleman-core'
require "middleman-core"
# Extension namespace
class MyExtension < ::Middleman::Extension
option :my_option, 'default', 'An example option'
def initialize(app, options_hash={}, &block)
# Call super to build options from the options_hash
super
# Require libraries only when activated
# require 'necessary/library'
# set up your extension
# puts options.my_option
end
def after_configuration
# Do something
end
# A Sitemap Manipulator
# def manipulate_resource_list(resources)
# end
# helpers do
# def a_helper
# end
# end
Middleman::Extensions.register :<%= name %> do
require "my-extension/extension"
MyExtension
end
# Register extensions which can be activated
# Make sure we have the version of Middleman we expect
# Name param may be omited, it will default to underscored
# version of class name
# MyExtension.register(:my_extension)

View File

@ -0,0 +1,31 @@
# Require core library
require 'middleman-core'
# Extension namespace
class MyExtension < ::Middleman::Extension
option :my_option, 'default', 'An example option'
def initialize(app, options_hash={}, &block)
# Call super to build options from the options_hash
super
# Require libraries only when activated
# require 'necessary/library'
# set up your extension
# puts options.my_option
end
def after_configuration
# Do something
end
# A Sitemap Manipulator
# def manipulate_resource_list(resources)
# end
# helpers do
# def a_helper
# end
# end
end

View File

@ -17,7 +17,7 @@ Gem::Specification.new do |s|
s.test_files = `git ls-files -z -- {fixtures,features}/*`.split("\0")
s.executable = 'middleman'
s.require_path = 'lib'
s.required_ruby_version = '>= 1.9.3'
s.required_ruby_version = '>= 2.2.0'
# CLI
s.add_dependency('thor', ['>= 0.17.0', '< 2.0'])

View File

@ -1,4 +1,4 @@
# coding:utf-8
RAKE_ROOT = __FILE__
RAKE_ROOT = __FILE__.freeze
GEM_NAME = ENV['NAME'] || 'middleman-core'
require File.expand_path(File.dirname(__FILE__) + '/../gem_rake_helper')

View File

@ -63,22 +63,29 @@ Feature: Assets get file hashes appended to them and references to them are upda
Given the Server is running at "asset-hash-app"
When I go to "/"
Then I should see 'href="apple-touch-icon.png"'
And I should see 'href="stylesheets/site-d2959d87.css"'
And I should see 'href="stylesheets/site-d1a750ca.css"'
And I should see 'href="stylesheets/fragment-99b76247.css"'
And I should see 'src="javascripts/application-1d8d5276.js"'
And I should see 'src="images/100px-5fd6fb90.jpg"'
And I should see 'srcset="images/100px-5fd6fb90.jpg 1x, images/200px-c11eb203.jpg 2x, images/300px-59adce76.jpg 3x"'
And I should see 'src="images/100px-5fd6fb90.jpg?test"'
And I should see 'src="images/100px-5fd6fb90.jpg?#test"'
And I should see 'src="images/100px-5fd6fb90.jpg#test"'
When I go to "/subdir/"
Then I should see 'href="../stylesheets/site-d2959d87.css"'
Then I should see 'href="../stylesheets/site-d1a750ca.css"'
And I should see 'src="../javascripts/application-1d8d5276.js"'
And I should see 'src="../images/100px-5fd6fb90.jpg"'
When I go to "/other/"
Then I should see 'href="../stylesheets/site-d2959d87.css"'
Then I should see 'href="../stylesheets/site-d1a750ca.css"'
And I should see 'src="../javascripts/application-1d8d5276.js"'
And I should see 'src="../images/100px-5fd6fb90.jpg"'
And I should see 'src="../images/100px-5fd6fb90.jpg?test"'
And I should see 'src="../images/100px-5fd6fb90.jpg?#test"'
And I should see 'src="../images/100px-5fd6fb90.jpg#test"'
When I go to "/javascripts/application-1d8d5276.js"
Then I should see "img.src = '/images/100px-5fd6fb90.jpg'"
When I go to "/stylesheets/site-d2959d87.css"
Then I should see 'background-image: url("../images/100px-5fd6fb90.jpg")'
When I go to "/stylesheets/site-d1a750ca.css"
Then I should see 'background-image: url("../images/100px-5fd6fb90.jpg");'
When I go to "/api.json"
Then I should see 'images/100px-5fd6fb90.gif'
And I should see 'images/100px-5fd6fb90.jpg'
@ -87,6 +94,11 @@ Feature: Assets get file hashes appended to them and references to them are upda
Then I should see 'images/100px-5fd6fb90.gif'
And I should see 'images/100px-5fd6fb90.jpg'
And I should see 'images/100px-1242c368.png'
When I go to "/stylesheets/fragment-99b76247.css"
And I should see 'url("../images/100px-5fd6fb90.jpg");'
And I should see 'url("../images/100px-5fd6fb90.jpg?test");'
And I should see 'url("../images/100px-5fd6fb90.jpg?#test");'
And I should see 'url("../images/100px-5fd6fb90.jpg#test");'
Scenario: Hashed assets work with Slim
Given the Server is running at "asset-hash-app"
@ -95,17 +107,69 @@ Feature: Assets get file hashes appended to them and references to them are upda
And I should see 'src="images/100px-5fd6fb90.jpg"'
And I should see 'srcset="images/100px-5fd6fb90.jpg 1x, images/200px-c11eb203.jpg 2x, images/300px-59adce76.jpg 3x"'
Scenario: Enabling an asset host still produces hashed files and references
Scenario: Enabling an asset host still produces hashed files and references (hash first)
Given a fixture app "asset-hash-host-app"
And a file named "config.rb" with:
"""
set :sass_source_maps, false
activate :asset_hash
activate :directory_indexes
activate :asset_host, host: 'http://middlemanapp.com'
"""
Given the Server is running at "asset-hash-host-app"
When I go to "/"
Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"'
Then I should see 'href="http://middlemanapp.com/stylesheets/fragment-2902933e.css"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
When I go to "/subdir/"
Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
When I go to "/other/"
Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
When I go to "/stylesheets/fragment-2902933e.css"
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg");'
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?test");'
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test");'
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg#test");'
Scenario: Enabling an asset host still produces hashed files and references (host first)
Given a fixture app "asset-hash-host-app"
And a file named "config.rb" with:
"""
set :sass_source_maps, false
activate :asset_host, host: 'http://middlemanapp.com'
activate :directory_indexes
activate :asset_hash
"""
Given the Server is running at "asset-hash-host-app"
When I go to "/"
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"'
Then I should see 'href="http://middlemanapp.com/stylesheets/fragment-2902933e.css"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
When I go to "/subdir/"
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
When I go to "/other/"
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
When I go to "/stylesheets/fragment-2902933e.css"
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg")'
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?test")'
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test")'
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg#test")'
Scenario: The asset hash should change when a SASS partial changes
Given the Server is running at "asset-hash-app"
@ -115,14 +179,14 @@ Feature: Assets get file hashes appended to them and references to them are upda
font-size: 14px
"""
When I go to "/partials/"
Then I should see 'href="../stylesheets/uses_partials-44fb2764.css'
Then I should see 'href="../stylesheets/uses_partials-4d4e34e6.css'
And the file "source/stylesheets/_partial.sass" has the contents
"""
body
font-size: 18px !important
"""
When I go to "/partials/"
Then I should see 'href="../stylesheets/uses_partials-10d8ae33.css'
Then I should see 'href="../stylesheets/uses_partials-ec347271.css'
Scenario: The asset hash should change when a Rack-based filter changes
Given a fixture app "asset-hash-app"
@ -136,12 +200,10 @@ Feature: Assets get file hashes appended to them and references to them are upda
"""
Given the Server is running at "asset-hash-app"
When I go to "/"
Then I should see 'href="stylesheets/site-30784643.css'
When I go to "stylesheets/site-30784643.css"
Then I should see 'background-image'
Then I should see 'href="stylesheets/site-5ad7def0.css'
When I go to "stylesheets/site-5ad7def0.css"
Then I should see 'background-image: url("../images/100px-5fd6fb90.jpg")'
Then I should see 'Added by Rack filter'
When I go to "stylesheets/site-7474cadd.css"
Then I should see 'Not Found'
Scenario: Hashed-asset files are not produced for ignored paths
Given a fixture app "asset-hash-app"
@ -179,10 +241,84 @@ Feature: Assets get file hashes appended to them and references to them are upda
| javascripts/application-1d8d5276.js |
| stylesheets/site-7474cadd.css |
Scenario: Hashed-asset files are not replaced for rewrite ignored paths
Given a fixture app "asset-hash-app"
And a file named "config.rb" with:
"""
is_stylesheet = proc { |path| path.start_with? '/stylesheets' }
activate :asset_hash, rewrite_ignore: [
%r(javascripts/*),
'/subdir/*',
is_stylesheet
]
activate :relative_assets
activate :directory_indexes
"""
And a successfully built app at "asset-hash-app"
When I cd to "build"
Then the following files should exist:
| index.html |
| subdir/index.html |
| images/100px-5fd6fb90.jpg |
| javascripts/application-1d8d5276.js |
| stylesheets/site-8bc55985.css |
And the following files should not exist:
| images/100px.jpg |
| javascripts/application.js |
| stylesheets/site.css |
And the file "javascripts/application-1d8d5276.js" should contain "img.src = '/images/100px.jpg'"
And the file "stylesheets/site-8bc55985.css" should contain:
"""
background-image: url("../images/100px.jpg")
"""
And the file "index.html" should contain 'href="stylesheets/site-8bc55985.css"'
And the file "index.html" should contain 'src="javascripts/application-1d8d5276.js"'
And the file "index.html" should contain 'src="images/100px-5fd6fb90.jpg"'
And the file "subdir/index.html" should contain:
"""
<h2>Image url3:</h2>
<p><img src="../images/100px.jpg"></p>
"""
Scenario: Already minified files should still be hashed
Given a successfully built app at "asset-hash-minified-app"
When I cd to "build"
Then the following files should exist:
| javascripts/jquery.min-276c87ff.js |
| stylesheets/test-7de2ad06.css |
And the following files should not exist:
| javascripts/jquery.min.js |
And the file "stylesheets/test-7de2ad06.css" should contain:
"""
.no-bug{background-image:url(/images/100px-5fd6fb90.jpg)}
.bug{content:"";background-image:url(/images/100px-5fd6fb90.jpg)}
.no-bug{content:""; background-image:url(/images/100px-5fd6fb90.jpg)}
"""
Scenario: Source map paths include the hash
Given a successfully built app at "asset-hash-source-map"
When I cd to "build"
Then the following files should exist:
| index.html |
| javascripts/application-4553338c.js |
| javascripts/application.js-22cc2b5f.map |
| index.html |
And the following files should not exist:
| javascripts/application.js |
| javascripts/application.js.map |
And the file "javascripts/application-4553338c.js" should contain "//# sourceMappingURL=application.js-22cc2b5f.map"
Scenario: Hashes can contain a prefix
Given a successfully built app at "asset-hash-prefix"
When I cd to "build"
Then the following files should exist:
| index.html |
| javascripts/application-myprefix-4553338c.js |
| javascripts/application.js-myprefix-22cc2b5f.map |
| index.html |
And the following files should not exist:
| javascripts/application.js |
| javascripts/application.js.map |
And the file "javascripts/application-myprefix-4553338c.js" should contain "//# sourceMappingURL=application.js-myprefix-22cc2b5f.map"

View File

@ -8,6 +8,7 @@ Feature: Alternate between multiple asset hosts
"""
And the Server is running
When I go to "/asset_host.html"
Then I should see "'.google-analytics.com/ga.js'"
Then I should see 'src="https://code.jquery.com/jquery-2.1.3.min.js"'
Then I should see content matching %r{http://assets1.example.com/}
Then I should not see content matching %r{http://assets1.example.com//}
@ -16,13 +17,16 @@ Feature: Alternate between multiple asset hosts
When I go to "/stylesheets/asset_host.css"
Then I should see content matching %r{http://assets1.example.com/}
Then I should not see content matching %r{http://assets1.example.com//}
When I go to "/javascripts/asset_host.js"
Then I should not see content matching %r{http://assets1.example.com/}
Scenario: Set proc host with inline-option
Given a fixture app "asset-host-app"
And a file named "config.rb" with:
"""
activate :asset_host, host: Proc.new { |asset|
"http://assets%d.example.com" % (asset.hash % 4)
hash = Digest::MD5.digest(asset).bytes.map!(&:ord).reduce(&:+)
"http://assets%d.example.com" % (hash % 4)
}
"""
And the Server is running
@ -35,3 +39,17 @@ Feature: Alternate between multiple asset hosts
When I go to "/stylesheets/asset_host.css"
Then I should see content matching %r{http://assets1.example.com/}
Then I should not see content matching %r{http://assets1.example.com//}
Scenario: Hosts are not rewritten for rewrite ignored paths
Given a fixture app "asset-host-app"
And a file named "config.rb" with:
"""
activate :asset_host, host: "http://assets1.example.com", rewrite_ignore: [
'/stylesheets/asset_host.css',
]
"""
And the Server is running
When I go to "/asset_host.html"
Then I should see content matching %r{http://assets1.example.com/}
When I go to "/stylesheets/asset_host.css"
Then I should not see content matching %r{http://assets1.example.com/}

View File

@ -2,15 +2,28 @@ Feature: Automatically detect and insert image dimensions into tags
In order to speed up development and appease YSlow
Scenario: Rendering an image with the feature disabled
Given "automatic_image_sizes" feature is "disabled"
Given a fixture app "automatic-image-size-app"
And a file named "config.rb" with:
"""
"""
And the Server is running at "automatic-image-size-app"
When I go to "/auto-image-sizes.html"
Then I should not see "width="
And I should not see "height="
When I go to "/markdown-sizes.html"
Then I should not see "width="
And I should not see "height="
Scenario: Rendering an image with the feature enabled
Given "automatic_image_sizes" feature is "enabled"
Given a fixture app "automatic-image-size-app"
And a file named "config.rb" with:
"""
activate :automatic_image_sizes
"""
And the Server is running at "automatic-image-size-app"
When I go to "/auto-image-sizes.html"
Then I should see "width="
And I should see "height="
Then I should see 'width="1"'
And I should see 'height="1"'
When I go to "/markdown-sizes.html"
Then I should see 'width="1"'
And I should see 'height="1"'

View File

@ -20,13 +20,13 @@ Feature: Builder
| layout |
| layouts/custom |
| layouts/content_for |
And the file "index.html" should contain "Comment in layout"
And the file "index.html" should contain "<h1>Welcome</h1>"
And the file "static.html" should contain "Static, no code!"
And the file "services/index.html" should contain "Services"
And the file "stylesheets/static.css" should contain "body"
Scenario: Build glob
Given a successfully built app at "glob-app" with flags "--glob '*.css'"
When I cd to "build"
@ -34,15 +34,19 @@ Feature: Builder
| index.html |
Then the following files should exist:
| stylesheets/site.css |
Scenario: Build with errors
Given a built app at "build-with-errors-app"
Then the exit status should be 1
Scenario: Build empty errors
Given a built app at "empty-app"
Then the exit status should be 1
Scenario: Build external_pipeline errors
Given a built app at "external-pipeline-error"
Then the exit status should be 1
Scenario: Build alias (b)
Given a fixture app "large-build-app"
When I run `middleman b`

View File

@ -39,4 +39,18 @@ Feature: Generate mtime-based query string for busting browser caches
And the Server is running at "cache-buster-app"
When I go to "/cache-buster.html"
Then I should see "site.css?"
Then I should see "blank.gif?"
Then I should see "blank.gif?"
Scenario: URLs are not rewritten for rewrite ignored paths
Given a fixture app "cache-buster-app"
And a file named "config.rb" with:
"""
activate :cache_buster, rewrite_ignore: [
'/cache-buster.html',
]
"""
And the Server is running at "cache-buster-app"
When I go to "/cache-buster.html"
Then I should see 'site.css"'
Then I should see 'empty-with-include.js"'
Then I should see 'blank.gif"'

View File

@ -16,6 +16,22 @@ Feature: Build Clean
| build/should_be_ignored3.html |
And the file "build/index.html" should contain "Comment in layout"
Scenario: Clean build has a whitelist
Given a fixture app "clean-app"
When a file named "build/.test" with:
"""
Hello
"""
When a file named "config.rb" with:
"""
set :skip_build_clean do |path|
path =~ /\.test/
end
"""
Given a built app at "clean-app"
Then the following files should exist:
| build/.test |
Scenario: Clean build an app with newly ignored files and a nested output directory
Given a fixture app "clean-nested-app"
When a file named "config.rb" with:

View File

@ -144,6 +144,33 @@ Feature: Collections
And I should see 'Article: Blog3 Another Article'
And I should see 'Article: Blog2 Yet Another Article'
Scenario: Work with local helpers
Given a fixture app "collections-app"
And a file named "config.rb" with:
"""
module TestHelper
def help_me
"ok"
end
end
include TestHelper
data.articles.each_with_index do |a, i|
proxy "/#{i}-#{help_me}.html", a
end
"""
And a file named "data/articles.yaml" with:
"""
---
- "/blog1/2011-01-01-new-article.html"
- "/blog2/2011-01-02-another-article.html"
"""
Given the Server is running at "collections-app"
When I go to "0-ok.html"
Then I should see 'Newer Article Content'
When I go to "1-ok.html"
Then I should see 'Another Article Content'
Scenario: Collected data update with file changes
Given a fixture app "collections-app"

View File

@ -11,6 +11,22 @@ Feature: Custom layouts
When I go to "/custom-layout.html"
Then I should see "Custom Layout"
Scenario: Using custom :layout attribute with proxy
Given a fixture app "custom-layout-app2"
And a file named "config.rb" with:
"""
page '/test/*', layout: :custom
proxy "/test/me.html", "/custom-layout.html"
live { %w(you) }.each do |who|
proxy "/test/#{who}.html", "/custom-layout.html"
end
"""
And the Server is running at "custom-layout-app2"
When I go to "/test/me.html"
Then I should see "Custom Layout"
When I go to "/test/you.html"
Then I should see "Custom Layout"
Scenario: Using custom :layout attribute with folders
Given a fixture app "custom-layout-app2"
And a file named "config.rb" with:
@ -65,4 +81,4 @@ Feature: Custom layouts
When I go to "/path/index.html"
Then I should see "Alt"
And I should see "Monde"
And I should not see "Hello"
And I should not see "Hello"

View File

@ -9,6 +9,7 @@ Feature: Directory Index
| a_folder/needs_index/index.html |
| leave_me_alone.html |
| wildcard_leave_me_alone.html |
| regex_leave_me_alone2.html |
| evil spaces/index.html |
| regular/index.html |
| .htaccess |
@ -21,12 +22,13 @@ Feature: Directory Index
| a_folder/needs_index.html |
| leave_me_alone/index.html |
| wildcard_leave_me_alone/index.html |
| regex_leave_me_alone2/index.html |
And the file "needs_index/index.html" should contain "Indexable"
And the file "a_folder/needs_index/index.html" should contain "Indexable"
And the file "leave_me_alone.html" should contain "Stay away"
And the file "regular/index.html" should contain "Regular"
And the file "evil spaces/index.html" should contain "Filled with Evil Spaces"
Scenario: Preview normal file
Given the Server is running at "indexable-app"
When I go to "/needs_index/"

View File

@ -31,7 +31,8 @@ Feature: Dynamic Pages
| should_be_ignored6.html |
| should_be_ignored7.html |
| should_be_ignored8.html |
| should_be_ignored9.html |
Scenario: Preview basic proxy
Given the Server is running at "dynamic-pages-app"
When I go to "/fake.html"
@ -42,46 +43,46 @@ Feature: Dynamic Pages
Then I should see "I am real"
When I go to "/fake4.html"
Then I should see "I am real"
Scenario: Preview proxy with variable one
Given the Server is running at "dynamic-pages-app"
When I go to "/fake/one.html"
Then I should see "I am real: one"
Then I should see "Global: I am one glob"
Then I should see "All: I am all glob"
When I go to "/fake2/one.html"
Then I should see "I am real: one"
Then I should see "Global: I am two glob"
Then I should see "All: I am all glob"
When I go to "/fake3/one.html"
Then I should see "I am real: one"
Then I should see "Global: I am three glob"
Then I should see "All: I am all glob"
When I go to "/fake4/one.html"
Then I should see "I am real: one"
Then I should see "Global: I am four glob"
Then I should see "All: I am all glob"
Scenario: Preview proxy with variable two
Given the Server is running at "dynamic-pages-app"
When I go to "/fake/two.html"
Then I should see "I am real: two"
Then I should see "Global: I am one glob"
Then I should see "All: I am all glob"
When I go to "/fake2/two.html"
Then I should see "I am real: two"
Then I should see "Global: I am two glob"
Then I should see "All: I am all glob"
When I go to "/fake3/two.html"
Then I should see "I am real: two"
Then I should see "Global: I am three glob"
Then I should see "All: I am all glob"
When I go to "/fake4/two.html"
Then I should see "I am real: two"
Then I should see "Global: I am four glob"
@ -101,7 +102,7 @@ Feature: Dynamic Pages
Then the file "fake3/one.html" should contain "I am real: one"
Then the file "fake3/one.html" should contain "Global: I am three glob"
Then the file "fake3/one.html" should contain "All: I am all glob"
Scenario: Target ignore
Given the Server is running at "dynamic-pages-app"
When I go to "/target_ignore.html"
@ -112,7 +113,7 @@ Feature: Dynamic Pages
Then I should see "Ignore me! 7"
When I go to "/target_ignore4.html"
Then I should see "Ignore me! 8"
Scenario: Preview ignored paths
Given the Server is running at "dynamic-pages-app"
When I go to "/should_be_ignored.html"
@ -130,4 +131,6 @@ Feature: Dynamic Pages
When I go to "/should_be_ignored7.html"
Then I should see "File Not Found"
When I go to "/should_be_ignored8.html"
Then I should see "File Not Found"
Then I should see "File Not Found"
When I go to "/should_be_ignored9.html"
Then I should see "File Not Found"

View File

@ -0,0 +1,28 @@
# encoding: iso-8859-1
Feature: encoding option
Scenario: No encoding set
Given a fixture app "clean-app"
Given the Server is running at "clean-app"
When I go to "/index.html"
Then the "Content-Type" header should contain "text/html"
Then the "Content-Type" header should contain "charset=utf-8"
@wip
Scenario: Custom encoding set
Given a fixture app "i-8859-1-app"
And a file named "config.rb" with:
"""
set :encoding, "ISO-8859-1"
::Rack::Mime::MIME_TYPES['.html'] = 'text/html; charset=iso-8859-1'
::Rack::Mime::MIME_TYPES['.htm'] = 'text/html; charset=iso-8859-1'
::Rack::Mime::MIME_TYPES['.map'] = 'application/json; charset=iso-8859-1'
"""
Given the Server is running at "i-8859-1-app"
When I go to "/index.html"
Then the "Content-Type" header should contain "text/html"
Then the "Content-Type" header should contain "charset=iso-8859-1"
Then I should see "äöü"

View File

@ -22,7 +22,7 @@ Feature: Neighboring YAML Front Matter
Then I should not see "---"
When I go to "/raw-front-matter.php.frontmatter"
Then I should see "File Not Found"
Scenario: YAML not on first line, with encoding
Given the Server is running at "frontmatter-neighbor-app"
When I go to "/front-matter-encoding.html"
@ -35,7 +35,7 @@ Feature: Neighboring YAML Front Matter
Given the Server is running at "frontmatter-neighbor-app"
And the file "source/front-matter-change.html.erb" has the contents
"""
<%= current_page.data.title %>
FileA <%= current_page.data.title %>
"""
And the file "source/front-matter-change.html.erb.frontmatter" has the contents
"""
@ -43,6 +43,8 @@ Feature: Neighboring YAML Front Matter
title: Hello World
layout: false
---
FileB
"""
When I go to "/front-matter-change.html"
Then I should see "Hello World"
@ -52,6 +54,8 @@ Feature: Neighboring YAML Front Matter
title: Hola Mundo
layout: false
---
FileC
"""
When I go to "/front-matter-change.html"
Then I should see "Hola Mundo"

View File

@ -22,7 +22,7 @@ Feature: GZIP assets during build
Given a fixture app "gzip-app"
And a file named "config.rb" with:
"""
activate :gzip, exts: %w(.js .html .htm)
activate :gzip, exts: %w(.htm .html .js .xhtml)
"""
And a successfully built app at "gzip-app"
Then the following files should exist:

View File

@ -40,19 +40,29 @@ Feature: link_to helper
"""
absolute: <%= link_to "Needs Index", "/needs_index.html", relative: true %>
relative: <%= link_to "Relative", "needs_index.html", relative: true %>
absolute spaces: <%= link_to "Spaces Index", "/evil spaces.html", relative: true %>
relative spaces: <%= link_to "Spaces Relative", "evil spaces.html", relative: true %>
"""
And a file named "source/link_to/sub.html.erb" with:
"""
absolute: <%= link_to "Needs Index", "/needs_index.html", relative: true %>
relative: <%= link_to "Relative", "../needs_index.html", relative: true %>
absolute spaces: <%= link_to "Spaces Index", "/evil spaces.html", relative: true %>
relative spaces: <%= link_to "Spaces Relative", "../evil spaces.html", relative: true %>
"""
And the Server is running at "indexable-app"
When I go to "/link_to.html"
Then I should see 'absolute: <a href="needs_index.html">Needs Index</a>'
Then I should see 'relative: <a href="needs_index.html">Relative</a>'
Then I should see 'absolute spaces: <a href="evil%20spaces.html">Spaces Index</a>'
Then I should see 'relative spaces: <a href="evil%20spaces.html">Spaces Relative</a>'
When I go to "/link_to/sub.html"
Then I should see 'absolute: <a href="../needs_index.html">Needs Index</a>'
Then I should see 'relative: <a href="../needs_index.html">Relative</a>'
Then I should see 'absolute spaces: <a href="../evil%20spaces.html">Spaces Index</a>'
Then I should see 'relative spaces: <a href="../evil%20spaces.html">Spaces Relative</a>'
Scenario: link_to relative works with strip_index_file
Given a fixture app "indexable-app"
@ -113,7 +123,7 @@ Feature: link_to helper
When I go to "/link_to/sub.html"
Then I should see 'absolute: <a href="../needs_index.html">Needs Index</a>'
Then I should see 'relative: <a href="../needs_index.html">Relative</a>'
Scenario: link_to knows about directory indexes
Given a fixture app "indexable-app"
And a file named "source/link_to.html.erb" with:

View File

@ -4,7 +4,7 @@ Feature: i18n Paths
Given a fixture app "empty-app"
And a file named "data/pages.yml" with:
"""
- hello.html
- hello.html
"""
And a file named "locales/en.yml" with:
"""
@ -50,24 +50,24 @@ Feature: i18n Paths
Given the Server is running at "empty-app"
When I go to "/hello.html"
Then I should see "Page: Hello"
Then I should see '<a class="current" href="/index.html">Current Home</a>'
Then I should see '<a title="Other Home" href="/es/index.html">Other Home</a>'
Then I should see '<a class="current" href="/index.html"><span>Home: Current Block</span></a>'
Then I should see '<a title="Other Home" href="/es/index.html"><span>Home: Other Block</span></a>'
Then I should see '<a class="current" href="/hello.html">Current hello.html</a>'
Then I should see '<a title="Other hello.html" href="/es/hola.html">Other hello.html</a>'
Then I should see '<a class="current" href="/hello.html"><span>Current Block</span></a>'
Then I should see '<a title="Other hello.html" href="/es/hola.html"><span>Other Block</span></a>'
Then I should see '<a href="/index.html" class="current">Current Home</a>'
Then I should see '<a href="/es/index.html" title="Other Home">Other Home</a>'
Then I should see '<a href="/index.html" class="current"><span>Home: Current Block</span></a>'
Then I should see '<a href="/es/index.html" title="Other Home"><span>Home: Other Block</span></a>'
Then I should see '<a href="/hello.html" class="current">Current hello.html</a>'
Then I should see '<a href="/es/hola.html" title="Other hello.html">Other hello.html</a>'
Then I should see '<a href="/hello.html" class="current"><span>Current Block</span></a>'
Then I should see '<a href="/es/hola.html" title="Other hello.html"><span>Other Block</span></a>'
When I go to "/es/hola.html"
Then I should see "Page: Hola"
Then I should see '<a class="current" href="/es/index.html">Current Home</a>'
Then I should see '<a title="Other Home" href="/index.html">Other Home</a>'
Then I should see '<a class="current" href="/es/index.html"><span>Home: Current Block</span></a>'
Then I should see '<a title="Other Home" href="/index.html"><span>Home: Other Block</span></a>'
Then I should see '<a class="current" href="/es/hola.html">Current hello.html</a>'
Then I should see '<a title="Other hello.html" href="/hello.html">Other hello.html</a>'
Then I should see '<a class="current" href="/es/hola.html"><span>Current Block</span></a>'
Then I should see '<a title="Other hello.html" href="/hello.html"><span>Other Block</span></a>'
Then I should see '<a href="/es/index.html" class="current">Current Home</a>'
Then I should see '<a href="/index.html" title="Other Home">Other Home</a>'
Then I should see '<a href="/es/index.html" class="current"><span>Home: Current Block</span></a>'
Then I should see '<a href="/index.html" title="Other Home"><span>Home: Other Block</span></a>'
Then I should see '<a href="/es/hola.html" class="current">Current hello.html</a>'
Then I should see '<a href="/hello.html" title="Other hello.html">Other hello.html</a>'
Then I should see '<a href="/es/hola.html" class="current"><span>Current Block</span></a>'
Then I should see '<a href="/hello.html" title="Other hello.html"><span>Other Block</span></a>'
Scenario: link_to is i18n aware and supports relative_links
Given a fixture app "empty-app"
@ -124,30 +124,30 @@ Feature: i18n Paths
Then I should see "assets/css/main.css"
When I go to "/hello.html"
Then I should see "Page: Hello"
Then I should see '<a class="current" href="index.html">Current Home</a>'
Then I should see '<a title="Other Home" href="es/index.html">Other Home</a>'
Then I should see '<a class="current" href="index.html"><span>Home: Current Block</span></a>'
Then I should see '<a title="Other Home" href="es/index.html"><span>Home: Other Block</span></a>'
Then I should see '<a class="current" href="hello.html">Current hello.html</a>'
Then I should see '<a title="Other hello.html" href="es/hola.html">Other hello.html</a>'
Then I should see '<a class="current" href="hello.html"><span>Current Block</span></a>'
Then I should see '<a title="Other hello.html" href="es/hola.html"><span>Other Block</span></a>'
Then I should see '<a href="index.html" class="current">Current Home</a>'
Then I should see '<a href="es/index.html" title="Other Home">Other Home</a>'
Then I should see '<a href="index.html" class="current"><span>Home: Current Block</span></a>'
Then I should see '<a href="es/index.html" title="Other Home"><span>Home: Other Block</span></a>'
Then I should see '<a href="hello.html" class="current">Current hello.html</a>'
Then I should see '<a href="es/hola.html" title="Other hello.html">Other hello.html</a>'
Then I should see '<a href="hello.html" class="current"><span>Current Block</span></a>'
Then I should see '<a href="es/hola.html" title="Other hello.html"><span>Other Block</span></a>'
When I go to "/es/hola.html"
Then I should see "Page: Hola"
Then I should see '<a class="current" href="index.html">Current Home</a>'
Then I should see '<a title="Other Home" href="../index.html">Other Home</a>'
Then I should see '<a class="current" href="index.html"><span>Home: Current Block</span></a>'
Then I should see '<a title="Other Home" href="../index.html"><span>Home: Other Block</span></a>'
Then I should see '<a class="current" href="hola.html">Current hello.html</a>'
Then I should see '<a title="Other hello.html" href="../hello.html">Other hello.html</a>'
Then I should see '<a class="current" href="hola.html"><span>Current Block</span></a>'
Then I should see '<a title="Other hello.html" href="../hello.html"><span>Other Block</span></a>'
Then I should see '<a href="index.html" class="current">Current Home</a>'
Then I should see '<a href="../index.html" title="Other Home">Other Home</a>'
Then I should see '<a href="index.html" class="current"><span>Home: Current Block</span></a>'
Then I should see '<a href="../index.html" title="Other Home"><span>Home: Other Block</span></a>'
Then I should see '<a href="hola.html" class="current">Current hello.html</a>'
Then I should see '<a href="../hello.html" title="Other hello.html">Other hello.html</a>'
Then I should see '<a href="hola.html" class="current"><span>Current Block</span></a>'
Then I should see '<a href="../hello.html" title="Other hello.html"><span>Other Block</span></a>'
Scenario: url_for is i18n aware
Given a fixture app "empty-app"
And a file named "data/pages.yml" with:
"""
- hello.html
- hello.html
- article.html
"""
And a file named "locales/en.yml" with:

View File

@ -0,0 +1,39 @@
Feature: i18n merging path trees
Scenario: Mixing localized and non-localized sources and merging the path trees (see issue #1709)
Given a fixture app "i18n-test-app"
And a file named "config.rb" with:
"""
activate :i18n, mount_at_root: :en, langs: [:en, :es]
"""
Given the Server is running at "i18n-mixed-sources"
When I go to "/"
Then I should see "Current locale: en"
Then I should see "path: is-localized Home"
When I go to "/es"
Then I should see "Current locale: es"
Then I should see "path: is-localized Home"
When I go to "/a/"
Then I should see "Current locale: en"
Then I should see "path: is-localized Home # a/index.html.erb"
When I go to "/es/a/"
Then I should see "Current locale: es"
Then I should see "path: is-localized Home # a/index.html.erb"
When I go to "/b/"
Then I should see "Current locale: en"
Then I should see "path: is-localized Home # b/index.html.erb"
When I go to "/a/sub.html"
Then I should see "Current locale: en"
Then I should see "path: is-localized Home # a/index.html.erb # a/sub.html.erb"
When I go to "/b/sub.html"
Then I should see "Current locale: en"
Then I should see "path: is-localized Home # b/index.html.erb # b/sub.html.erb"
When I go to "/es/b/sub.html"
Then I should see "Current locale: es"
Then I should see "path: is-localized Home # b/index.html.erb # b/sub.html.erb"

View File

@ -12,7 +12,7 @@ Feature: Ignoring paths
And the following files should not exist:
| build/plain.html |
| build/about.html |
Scenario: Ignore a single path (server)
Given a fixture app "ignore-app"
And a file named "config.rb" with:
@ -28,6 +28,35 @@ Feature: Ignoring paths
When I go to "/about.html"
Then I should see "File Not Found"
Scenario: Ignoring collected values
Given a fixture app "ignore-app"
And a file named "data/ignores.yaml" with:
"""
---
- "plain"
"""
And a file named "config.rb" with:
"""
data.ignores.each do |name|
ignore "#{name}.html"
end
"""
And the Server is running
When I go to "/plain.html"
Then I should see "File Not Found"
When I go to "/about.html"
Then I should not see "File Not Found"
When the file "data/ignores.yaml" has the contents
"""
---
- "about"
"""
When I go to "/plain.html"
Then I should not see "File Not Found"
When I go to "/about.html"
Then I should see "File Not Found"
Scenario: Ignore a globbed path (build)
Given a fixture app "ignore-app"
And a file named "config.rb" with:
@ -47,7 +76,7 @@ Feature: Ignoring paths
| build/reports/index.html |
| build/reports/another.html |
| build/images/icons/messages.png |
Scenario: Ignore a globbed path (server)
Given a fixture app "ignore-app"
And a file named "config.rb" with:
@ -93,7 +122,7 @@ Feature: Ignoring paths
| build/reports/index.html |
| build/reports/another.html |
| build/images/icons/messages.png |
Scenario: Ignore a regex (server)
Given a fixture app "ignore-app"
And a file named "config.rb" with:
@ -118,4 +147,4 @@ Feature: Ignoring paths
When I go to "/reports/another.html"
Then I should see "File Not Found"
When I go to "/images/icons/messages.png"
Then I should see "File Not Found"
Then I should see "File Not Found"

View File

@ -13,5 +13,3 @@ Feature: Import files
Then I should see 'jQuery'
When I go to "/bower_components2/jquery/dist/jquery.js"
Then I should see 'jQuery'

View File

@ -0,0 +1,41 @@
Feature: Markdown support in Slim
In order to test support of the Slim markdown filter
Scenario: Markdown filter in Slim works
Given a fixture app "markdown-in-slim-app"
And a file named "config.rb" with:
"""
set :markdown_engine, :redcarpet
activate :directory_indexes
"""
And a file named "source/markdown_filter.html.slim" with:
"""
markdown:
# H1
paragraph
"""
Given the Server is running at "markdown-in-slim-app"
When I go to "/markdown_filter/"
Then I should see ">H1</h1>"
Then I should see "<p>paragraph</p>"
Scenario: Markdown filter in Slim uses our link_to and image_tag helpers
Given a fixture app "markdown-in-slim-app"
And a file named "config.rb" with:
"""
set :markdown_engine, :redcarpet
activate :directory_indexes
"""
And a file named "source/link_and_image.html.slim" with:
"""
markdown:
[A link](/link_target.html)
![image](blank.gif)
"""
Given the Server is running at "markdown-in-slim-app"
When I go to "/link_and_image/"
Then I should see "/link_target/"
Then I should see 'src="/images/blank.gif"'

View File

@ -5,37 +5,37 @@ Feature: Allow nesting of layouts
When I go to "/index.html"
Then I should see:
"""
Master
Master Erb
<h1>Index Title</h1>
Outer
Inner
I am Outer
I am Inner
Template
"""
When I go to "/another.html"
Then I should see:
"""
Master
Master Erb
<h1>New Article Title</h1>
Outer
Inner
I am Outer
I am Inner
<p>The Article Content</p>
"""
Scenario: A page uses an inner layout when uses an outer layout (slim)
Given the Server is running at "nested-layout-app"
When I go to "/slim-test.html"
Then I should see "<h1>Master</h1><p>New Article Title</p><div><h2>Outer</h2><h3>Inner</h3><p>The Article Content</p>"
Then I should see "<h1>Master Slim</h1><p>New Article Title</p><div><h2>I am Outer</h2><h3>I am Inner</h3><p>The Article Content</p>"
Scenario: A page uses an inner layout when uses an outer layout (haml)
Given the Server is running at "nested-layout-app"
When I go to "/haml-test.html"
Then I should see:
"""
Master
Master Haml
<h1>New Article Title</h1>
Outer
Inner
I am Outer
I am Inner
<p>The Article Content</p>
"""
@ -43,13 +43,16 @@ Feature: Allow nesting of layouts
Given the Server is running at "nested-layout-app"
When I go to "/data-one.html"
Then I should see "Page Number One"
And I should see "Inner"
And I should see "Page #1"
And I should see "I am Inner"
And I should see "I am Outer"
And I should see "Master Erb"
When I go to "/data-two.html"
Then I should see "Page Number Two"
And I should not see "Inner"
And I should not see "I am Inner"
When I go to "/data-one.html"
Then I should see "Page Number One"
And I should see "Inner"
And I should see "I am Inner"
When I go to "/data-two.html"
Then I should see "Page Number Two"
And I should not see "Inner"
And I should not see "I am Inner"

View File

@ -0,0 +1,72 @@
Feature: Page IDs
Scenario: link_to works with blocks (erb)
Given the Server is running at "page-id-app"
When I go to "/index.html"
Then I should see "I am: index"
And I should see "URL1: /fm.html"
And I should see "URL2: /2.html"
And I should see 'URL3: <a href="/3.html">Hi</a>'
And I should see 'URL4: <a href="/overwrites/from-default.html">Sym</a>'
And I should see 'URL5: <a href="/implicit.html">Imp</a>'
And I should see 'URL6: <a href="/folder/foldern.html">Foldern</a>'
And I should see 'URL7: <a href="/feed.xml">Feed</a>'
When I go to "/fm.html"
Then I should see "I am: frontmatter"
When I go to "/implicit.html"
Then I should see "I am: implicit"
When I go to "/feed.xml"
Then I should see "I am: feed.xml"
When I go to "/folder/foldern.html"
Then I should see "I am: folder/foldern"
When I go to "/1.html"
Then I should see "I am: page1"
When I go to "/2.html"
Then I should see "I am: page2"
When I go to "/3.html"
Then I should see "I am: page3"
When I go to "/overwrites/from-default.html"
Then I should see "I am: something-else"
When I go to "/overwrites/from-frontmatter.html"
Then I should see "I am: from_frontmatter"
Scenario: Override page ID derivation with a proc
Given a fixture app "page-id-app"
And app "page-id-app" is using config "proc"
And the Server is running at "page-id-app"
When I go to "/index.html"
Then I should see "I am: index.html-foo"
And I should see "URL1: /fm.html"
And I should see "URL2: /2.html"
And I should see 'URL3: <a href="/3.html">Hi</a>'
And I should see 'URL4: <a href="/overwrites/from-default.html">Sym</a>'
And I should see 'URL8: <a href="/implicit.html">Imp</a>'
And I should see 'URL9: <a href="/folder/foldern.html">Foldern</a>'
And I should see 'URL10: <a href="/feed.xml">Feed</a>'
When I go to "/fm.html"
Then I should see "I am: frontmatter"
When I go to "/implicit.html"
Then I should see "I am: implicit.html-foo"
When I go to "/feed.xml"
Then I should see "I am: feed.xml-foo"
When I go to "/folder/foldern.html"
Then I should see "I am: folder/foldern.html-foo"
When I go to "/1.html"
Then I should see "I am: page1"
When I go to "/2.html"
Then I should see "I am: page2"
When I go to "/3.html"
Then I should see "I am: page3"
When I go to "/overwrites/from-default.html"
Then I should see "I am: something-else"
When I go to "/overwrites/from-frontmatter.html"
Then I should see "I am: from_frontmatter"

View File

@ -5,25 +5,30 @@ Feature: Provide Sane Defaults for Partial Behavior
When I go to "/index.html"
Then I should see "Header"
And I should see "Footer"
Scenario: Finds shared partials relative to the root (sub)
Given the Server is running at "partials-app"
When I go to "/sub/index.html"
Then I should see "Header"
And I should see "Footer"
Scenario: Flags error when partial is not found
Given the Server is running at "partials-app"
When I go to "/index_missing.html"
Then I should see "Error: Could not locate partial"
Scenario: Prefers partials of the same engine type
Given the Server is running at "partials-app"
When I go to "/index.html"
Then I should see "ERb Main"
Scenario: Prefers partials of the same engine type
Given the Server is running at "partials-app"
When I go to "/second.html"
Then I should see "Str Main"
And I should see "Header"
And I should see "Footer"
Scenario: Finds partial relative to template
Given the Server is running at "partials-app"
When I go to "/sub/index.html"
@ -33,7 +38,7 @@ Feature: Provide Sane Defaults for Partial Behavior
Given the Server is running at "partials-app"
When I go to "/locals.html"
Then I should see "Local var is bar"
Scenario: Partial and Layout use different engines
Given the Server is running at "different-engine-partial"
When I go to "/index.html"
@ -50,3 +55,10 @@ Feature: Provide Sane Defaults for Partial Behavior
Then I should see "File Not Found"
When I go to "/_code_snippet.html"
Then I should see "File Not Found"
Scenario: Works with blocks
Given the Server is running at "partials-app"
When I go to "/block.html"
Then I should see "Start"
And I should see "Contents"
And I should see "End"

View File

@ -41,6 +41,11 @@ Feature: Relative Assets
And I should see 'url(../fonts/roboto/roboto-regular-webfont.woff'
And I should see 'url(../fonts/roboto/roboto-regular-webfont.ttf'
And I should see 'url(../fonts/roboto/roboto-regular-webfont.svg'
When I go to "/stylesheets/fonts2.css"
Then I should see 'url(../fonts/roboto/roboto-regular-webfont.eot'
And I should see 'url(../fonts/roboto/roboto-regular-webfont.woff'
And I should see 'url(../fonts/roboto/roboto-regular-webfont.ttf'
And I should see 'url(../fonts/roboto/roboto-regular-webfont.svg'
Scenario: Building css with the feature enabled
Given a fixture app "relative-assets-app"
@ -115,7 +120,7 @@ Feature: Relative Assets
"""
And the Server is running at "relative-assets-app"
When I go to "/sub/image_tag.html"
Then I should see '<img src="../img/blank.gif" />'
Then I should see '<img src="../img/blank.gif"'
Scenario: Relative assets should not break data URIs in image_tag
Given a fixture app "relative-assets-app"
@ -127,3 +132,17 @@ Feature: Relative Assets
And the Server is running at "relative-assets-app"
When I go to "/sub/image_tag.html"
Then I should see '<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" />'
Scenario: URLs are not rewritten for rewrite ignored paths
Given a fixture app "relative-assets-app"
And a file named "config.rb" with:
"""
activate :relative_assets, rewrite_ignore: [
'/stylesheets/fonts.css',
]
"""
And the Server is running at "relative-assets-app"
When I go to "/stylesheets/relative_assets.css"
Then I should see 'url("../images/blank.gif'
When I go to "/stylesheets/fonts.css"
Then I should see 'url(/fonts/roboto/roboto-regular-webfont.eot'

View File

@ -0,0 +1,123 @@
Feature: Relative Assets (Helpers Only)
Scenario: Rendering css with the feature enabled
Given a fixture app "relative-assets-app"
And a file named "config.rb" with:
"""
activate :relative_assets, helpers_only: true
"""
And a file named "source/stylesheets/relative_assets.css.sass.erb" with:
"""
h1
background: url("<%= asset_url('images/blank.gif') %>")
h2
background: url("<%= asset_url('/images/blank2.gif') %>")
"""
And a file named "source/javascripts/application.js.erb" with:
"""
function foo() {
var img = document.createElement('img');
img.src = '<%= asset_url("images/100px.jpg") %>';
var body = document.getElementsByTagName('body')[0];
body.insertBefore(img, body.firstChild);
}
window.onload = foo;
"""
And a file named "source/stylesheets/fonts3.css.erb" with:
"""
@font-face {
font-family: 'Roboto2';
src: url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.eot") %>);
src: url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.eot?#iefix") %>) format('embedded-opentype'),
url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.woff") %>) format('woff'),
url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.ttf") %>) format('truetype'),
url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.svg#robotoregular") %>) format('svg');
font-weight: normal;
font-style: normal;
}
"""
And the Server is running at "relative-assets-app"
When I go to "/stylesheets/relative_assets.css"
Then I should see 'url("../images/blank.gif'
And I should see 'url("../images/blank2.gif'
When I go to "/javascripts/application.js"
Then I should not see "../"
When I go to "/stylesheets/fonts3.css"
Then I should see 'url(../fonts/roboto/roboto-regular-webfont.eot'
And I should see 'url(../fonts/roboto/roboto-regular-webfont.woff'
And I should see 'url(../fonts/roboto/roboto-regular-webfont.ttf'
And I should see 'url(../fonts/roboto/roboto-regular-webfont.svg'
Scenario: Relative css reference with directory indexes
Given a fixture app "relative-assets-app"
And a file named "config.rb" with:
"""
activate :directory_indexes
activate :relative_assets, helpers_only: true
"""
And the Server is running at "relative-assets-app"
When I go to "/relative_image/index.html"
Then I should see "../stylesheets/relative_assets.css"
Scenario: Relative assets via image_tag
Given a fixture app "relative-assets-app"
And a file named "config.rb" with:
"""
activate :relative_assets, helpers_only: true
"""
And a file named "source/sub/image_tag.html.erb" with:
"""
<%= image_tag '/img/blank.gif' %>
"""
And the Server is running at "relative-assets-app"
When I go to "/sub/image_tag.html"
Then I should see '<img src="../img/blank.gif"'
Scenario: Relative assets should not break data URIs in image_tag
Given a fixture app "relative-assets-app"
And a file named "config.rb" with:
"""
activate :relative_assets, helpers_only: true
"""
And a file named "source/sub/image_tag.html.erb" with:
"""
<%= image_tag "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" %>
"""
And the Server is running at "relative-assets-app"
When I go to "/sub/image_tag.html"
Then I should see '<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" />'
Scenario: URLs are not rewritten for rewrite ignored paths
Given a fixture app "relative-assets-app"
And a file named "config.rb" with:
"""
activate :relative_assets, rewrite_ignore: [
'/stylesheets/fonts3.css',
], helpers_only: true
"""
And a file named "source/stylesheets/relative_assets.css.sass.erb" with:
"""
h1
background: url("<%= asset_url('images/blank.gif') %>")
h2
background: url("<%= asset_url('/images/blank2.gif') %>")
"""
And a file named "source/stylesheets/fonts3.css.erb" with:
"""
@font-face {
font-family: 'Roboto2';
src: url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.eot") %>);
src: url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.eot?#iefix") %>) format('embedded-opentype'),
url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.woff") %>) format('woff'),
url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.ttf") %>) format('truetype'),
url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.svg#robotoregular") %>) format('svg');
font-weight: normal;
font-style: normal;
}
"""
And the Server is running at "relative-assets-app"
When I go to "/stylesheets/relative_assets.css"
Then I should see 'url("../images/blank.gif'
When I go to "/stylesheets/fonts3.css"
Then I should see 'url(/fonts/roboto/roboto-regular-webfont.eot'

View File

@ -0,0 +1,40 @@
Feature: Sass/SCSS support in Slim
In order to test support of the Slim sass and scss filters
Scenario: Sass filter in Slim works
Given a fixture app "sass-in-slim-app"
And a file named "config.rb" with:
"""
activate :directory_indexes
"""
And a file named "source/sass_filter.html.slim" with:
"""
sass:
.sass
margin: 0
"""
Given the Server is running at "sass-in-slim-app"
When I go to "/sass_filter/"
Then I should see "text/css"
Then I should see ".sass"
Then I should see "margin:0"
Scenario: SCSS filter in Slim works
Given a fixture app "sass-in-slim-app"
And a file named "config.rb" with:
"""
activate :directory_indexes
"""
And a file named "source/scss_filter.html.slim" with:
"""
scss:
.scss {
margin: 0;
}
"""
Given the Server is running at "sass-in-slim-app"
When I go to "/scss_filter/"
Then I should see "text/css"
Then I should see ".scss"
Then I should see "margin:0"

View File

@ -5,7 +5,7 @@ require 'sassc'
require 'simplecov'
SimpleCov.root(File.expand_path(File.dirname(__FILE__) + '/../..'))
require 'capybara/poltergeist'
require 'phantomjs/poltergeist'
Capybara.javascript_driver = :poltergeist
require 'coveralls'

View File

@ -0,0 +1,26 @@
Feature: Don't allow template locals to overwrite template helpers
Scenario: Normal Template
Given an empty app
And a file named "config.rb" with:
"""
class TestExt < ::Middleman::Extension
expose_to_template foo: :foo
def foo
"bar"
end
end
::Middleman::Extensions.register :test, TestExt
activate :test
page "/index.html", locals: { foo: false }
"""
And a file named "source/index.html.erb" with:
"""
<%= foo %>
"""
Given a built app at "empty_app"
Then the exit status should be 1

View File

@ -4,6 +4,9 @@
<h2>Image url:</h2>
<img src="<%= image_path('100px.jpg') %>" srcset="<%= image_path('100px.jpg') %> 1x, <%= image_path('200px.jpg') %> 2x, <%= image_path('300px.jpg') %> 3x">
<%= image_tag('100px.jpg?test') %>
<%= image_tag('100px.jpg?#test') %>
<%= image_tag('100px.jpg#test') %>
<h2>Ignored path:</h2>
<link rel="apple-touch-icon" href="apple-touch-icon.png">

View File

@ -3,16 +3,16 @@
<head>
<meta charset="utf-8">
<%= stylesheet_link_tag "site" %>
<%= stylesheet_link_tag "site", "fragment" %>
<%= javascript_include_tag "application" %>
<%= yield_content :head %>
</head>
<body class="<%= page_classes %>">
<div id="main" role="main">
<%= yield %>
</div>
</body>
</html>

View File

@ -1,2 +1,5 @@
<h2>Image url:</h2>
<img src="<%= image_path('100px.jpg') %>">
<img src="<%= image_path('100px.jpg?test') %>">
<img src="<%= image_path('100px.jpg?#test') %>">
<img src="<%= image_path('100px.jpg#test') %>">

View File

@ -0,0 +1,7 @@
#main {
padding: 50px;
background-image: image-url('100px.jpg');
background-image: image-url('100px.jpg?test');
background-image: image-url('100px.jpg?#test');
background-image: image-url('100px.jpg#test');
}

View File

@ -1,4 +0,0 @@
activate :asset_hash
activate :directory_indexes
activate :asset_host, host: 'http://middlemanapp.com'

View File

@ -3,4 +3,7 @@
<% end %>
<h2>Image url:</h2>
<%= image_tag('100px.jpg') %>
<img src="/images/100px.jpg">
<%= image_tag('100px.jpg?test') %>
<%= image_tag('100px.jpg?#test') %>
<%= image_tag('100px.jpg#test') %>

View File

@ -3,15 +3,15 @@
<head>
<meta charset="utf-8">
<%= stylesheet_link_tag "site" %>
<%= stylesheet_link_tag "site", "fragment" %>
<%= yield_content :head %>
</head>
<body class="<%= page_classes %>">
<div id="main" role="main">
<%= yield %>
</div>
</body>
</html>

View File

@ -1,2 +1,5 @@
<h2>Image url:</h2>
<img src="<%= image_path('100px.jpg') %>">
<img src="<%= image_path('100px.jpg?test') %>">
<img src="<%= image_path('100px.jpg?#test') %>">
<img src="<%= image_path('100px.jpg#test') %>">

View File

@ -1,4 +1,7 @@
#main {
padding: 50px;
background-image: image-url('100px.jpg');
background-image: image-url('100px.jpg?test');
background-image: image-url('100px.jpg?#test');
background-image: image-url('100px.jpg#test');
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 B

View File

@ -0,0 +1,3 @@
.no-bug{background-image:url(/images/100px.jpg)}
.bug{content:"";background-image:url(/images/100px.jpg)}
.no-bug{content:""; background-image:url(/images/100px.jpg)}

View File

@ -0,0 +1,7 @@
activate :asset_hash,
prefix: "myprefix-"
activate :relative_assets
activate :directory_indexes

View File

@ -0,0 +1,16 @@
class Middleware
def initialize(app)
@app = app
end
def call(env)
status, headers, response = @app.call(env)
body = ''
response.each {|part| body += part }
if (env["PATH_INFO"] =~ /css$/)
body += "\n/* Added by Rack filter */"
status, headers, response = Rack::Response.new(body, status, headers).finish
end
[status, headers, response]
end
end

View File

@ -0,0 +1,6 @@
<% content_for :head do %>
<title>The Middleman!</title>
<% end %>
<h1>Testing the sitemap hashing</h1>
<br /><br /><br />

View File

@ -0,0 +1,2 @@
function foo(){var message="HEY THERE FRIEND!";var para=document.createElement("p");para.innerHTML=message;var body=document.getElementsByTagName("body")[0];body.insertBefore(para,body.firstChild)}window.onload=foo;
//# sourceMappingURL=application.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["source/javascripts/application.js"],"names":["foo","message","para","document","createElement","innerHTML","body","getElementsByTagName","insertBefore","firstChild","window","onload"],"mappings":"AAAA,QAASA,OACP,GAAIC,SAAU,mBACd,IAAIC,MAAOC,SAASC,cAAc,IAClCF,MAAKG,UAAYJ,OACb,IAAIK,MAAOH,SAASI,qBAAqB,QAAQ,EAC/CD,MAAKE,aAAaN,KAAMI,KAAKG,YAGpCC,OAAOC,OAASX"}

View File

@ -0,0 +1,17 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<%= javascript_include_tag "application" %>
<%= yield_content :head %>
</head>
<body class="<%= page_classes %>">
<div id="main" role="main">
<%= yield %>
</div>
</body>
</html>

View File

@ -0,0 +1,6 @@
activate :asset_hash
activate :relative_assets
activate :directory_indexes

View File

@ -0,0 +1,16 @@
class Middleware
def initialize(app)
@app = app
end
def call(env)
status, headers, response = @app.call(env)
body = ''
response.each {|part| body += part }
if (env["PATH_INFO"] =~ /css$/)
body += "\n/* Added by Rack filter */"
status, headers, response = Rack::Response.new(body, status, headers).finish
end
[status, headers, response]
end
end

View File

@ -0,0 +1,6 @@
<% content_for :head do %>
<title>The Middleman!</title>
<% end %>
<h1>Testing the sitemap hashing</h1>
<br /><br /><br />

View File

@ -0,0 +1,2 @@
function foo(){var message="HEY THERE FRIEND!";var para=document.createElement("p");para.innerHTML=message;var body=document.getElementsByTagName("body")[0];body.insertBefore(para,body.firstChild)}window.onload=foo;
//# sourceMappingURL=application.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["source/javascripts/application.js"],"names":["foo","message","para","document","createElement","innerHTML","body","getElementsByTagName","insertBefore","firstChild","window","onload"],"mappings":"AAAA,QAASA,OACP,GAAIC,SAAU,mBACd,IAAIC,MAAOC,SAASC,cAAc,IAClCF,MAAKG,UAAYJ,OACb,IAAIK,MAAOH,SAASI,qBAAqB,QAAQ,EAC/CD,MAAKE,aAAaN,KAAMI,KAAKG,YAGpCC,OAAOC,OAASX"}

View File

@ -0,0 +1,17 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<%= javascript_include_tag "application" %>
<%= yield_content :head %>
</head>
<body class="<%= page_classes %>">
<div id="main" role="main">
<%= yield %>
</div>
</body>
</html>

View File

@ -0,0 +1 @@
activate :asset_host, host: "http://assets1.example.com"

View File

@ -44,3 +44,12 @@
<a href="https://github.com/angular/angular.js">Angular.js</a>
<script>(function(a,b,c,d){})(window,document,'script','//www.example.com/script.js');</script>
<script>
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') +
'.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>

Some files were not shown because too many files have changed in this diff Show More