I'm included content.+
diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 5d126348..00000000 --- a/.editorconfig +++ /dev/null @@ -1,13 +0,0 @@ -# editorconfig.org -root = true - -[*] -indent_style = space -indent_size = 2 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.md] -trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore index aabe272b..535aec06 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,3 @@ -.byebug_history -npm-debug.log -manifest.yaml /.bundle .DS_Store coverage @@ -13,7 +10,6 @@ Gemfile.lock docs .rbenv-* .ruby-version -.ruby-gemset .*.swp build doc @@ -24,4 +20,4 @@ Makefile .idea *.sublime-workspace /bin -middleman-core/fixtures/compass-sprites-app/source/images/icon-s0de2218f58.png +middleman-core/fixtures/compass-sprites-app/source/images/icon-s0de2218f58.png \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..4f5e8fa4 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "middleman-core/lib/middleman-more/templates/smacss"] + path = middleman-core/lib/middleman-more/templates/smacss + url = git@github.com:nsteiner/middleman-smacss.git diff --git a/.rubocop.yml b/.rubocop.yml index c92b709f..836f048b 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -10,15 +10,11 @@ AllCops: - '**/tmp/**/*' - '**/bin/**/*' - 'middleman-core/lib/middleman-core/step_definitions/**/*' + - 'middleman-core/lib/vendored-middleman-deps/**/*' - '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 + DisplayCopNames: true LineLength: Enabled: false MethodLength: @@ -51,21 +47,7 @@ FormatString: Enabled: false CaseIndentation: IndentWhenRelativeTo: end -TrivialAccessors: - Enabled: false -SingleLineBlockParams: - Enabled: false Metrics/AbcSize: Enabled: false Metrics/PerceivedComplexity: Enabled: false -Style/ParallelAssignment: - Enabled: false -Style/BlockDelimiters: - Enabled: false -Style/MultilineBlockChain: - Enabled: false -Style/SpecialGlobalVars: - Enabled: false -Style/FrozenStringLiteralComment: - Enabled: false diff --git a/.travis.yml b/.travis.yml index ac5a7f06..7bc8a3be 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,23 +1,22 @@ language: ruby -sudo: false -cache: bundler -before_script: - - bundle update +bundler_args: --without development rvm: - ruby-head - - 2.3.1 - - 2.2.4 + - 2.2 + - 2.1 + - 2.0 + - 1.9.3 os: - linux # - osx +cache: bundler +sudo: false matrix: fast_finish: true allow_failures: - rvm: ruby-head -env: - global: - - TEST=true - - CODECLIMATE_REPO_TOKEN=81787f7b1c3bfa937edadcafbc94f807bf5af5c1142c7b793f2d9969a271de1f +env: TEST=true +before_install: git submodule update --init --recursive script: bundle exec rake test notifications: - slack: middleman:JW9OvXmn1m3XrSERe8866nBR + slack: middleman:JW9OvXmn1m3XrSERe8866nBR \ No newline at end of file diff --git a/.yardopts b/.yardopts index 8a5eba70..40867ad0 100644 --- a/.yardopts +++ b/.yardopts @@ -1,11 +1,10 @@ middleman-*/lib/**/*.rb --exclude middleman-core/lib/vendored-middleman-deps/ --exclude middleman-core/lib/middleman-core/step_definitions ---exclude middleman-cli/lib/middleman-cli/templates/default/ ---exclude middleman-cli/lib/middleman-cli/templates/html5/ ---exclude middleman-cli/lib/middleman-cli/templates/mobile/ ---exclude middleman-cli/lib/middleman-cli/templates/shared/ ---exclude middleman-cli/lib/middleman-cli/templates/extension/ +--exclude middleman-core/lib/middleman-core/templates/default/ +--exclude middleman-core/lib/middleman-core/templates/html5/ +--exclude middleman-core/lib/middleman-core/templates/mobile/ +--exclude middleman-core/lib/middleman-core/templates/shared/ +--exclude middleman-core/lib/middleman-core/templates/extension/ --no-private ---hide-void-return ---markup=markdown \ No newline at end of file +--hide-void-return \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 148aa2e2..9db919f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,161 +1,549 @@ master === -# 4.1.13 +3.4.1 +=== -* Change how config options are passed to Thor. Removes new Thor warnings from #2017 +* Adapt to upstream hooks API change, fixing `after_render` hook bugs. (#1658) +* Add a bunch of requires to help Windows users. +* Refator Data Loader to prevent middleman from crashing due to invalid data file. (#1633) +* Add `before_server` hook. -# 4.1.12 +3.4.0 +=== -* Fix broken `ignore { |p| true }` form. +* Fix webrick restarts on Ruby 2.2 +* Empower link_to in a i18n context. +* Add retina files support on automatic_image_sizes +* Fix woff/woff2 confusion in asset hashing. +* Support `relative: false` on `stylesheet_link_tag` and `javascript_include_tag` +* New host detection in preview server. Provides better externally accessible host/ip information for connecting from mobile devices and virtual machines. -# 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 -* Fix `external_pipeline` first runs running out of sequence. - -# 4.0.0.rc.2 - -* Rather than applying layouts to all files which are not .txt, .css, .js, .json: the new behavior is to only default layouts to active for .html -* Switch from Ruby Sass to SassC. -* `relative_assets` extension overrides local `relative: false` option to stylesheet/javascript tag helpers. -* Add `before_server`-hook to the preview server which is run before the Webrick server is started -* Add `-d` to `middleman server` to make it run as daemon -* Trigger "Possible File Change" events on files which share an output or template type with a changed file. Allows LiveReload to update on partial changes. -* Added `import_file SOURCE, TARGET` and `import_path SOURCE_FOLDER` to copy resources from outside the project in. Does NOT do file change watching. Perfect for `bower_components`. - -# 4.0.0.rc.1 - -* Removed ability to use JSON as frontmatter. Still allowed in data/ folder. -* Added YAML data postscript. Like frontmatter, but reversed. Attach content after the key/value data as a `:postscript` key to the data structure (if Hash). - -# 4.0.0.beta.2 - -* Fixed regression causing exceptions to be silently thrown away outside of `--verbose` mode in the dev server. -* Pull in `--ssl` option from stable. -* Replace `hooks` gem with custom callback solution. - -# 4.0.0.beta.1 - -* 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_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. -* New FileWatcher API. -* Remove the `partials_dir` setting. Partials should live next to content, or be addressed with absolute paths. -* Partials must be named with a leading underscore. `_my_snippet.html.erb`, not `my_snippet.html.erb`. -* Removed the `proxy` and `ignore` options for the `page` command in `config.rb`. Use the `proxy` and `ignore` commands instead of passing these options to `page`. -* The `page` command in `config.rb` can now be used to add data to the page via the `data` argument. It is accessed the same way as frontmatter data, via `current_resource.data`. -* Add support for `environments` with the `-e` CLI flag. Loads additional config from `environments/envname.rb`. Removed `development?` helper in favor of `environment?(:development)`. Added `server?` helper to differentiate between build and server mode. -* Removed `with_layout`. Use loops of `page` instead. -* Removed Queryable Sitemap API -* Removed `css_compressor` setting, use `activate :minify_css, :compressor =>` instead. -* Removed `js_compressor` setting, use `activate :minify_javascript, :compressor =>` instead. -* Removed ability to server folders of content statically (non-Middleman projects). -* Prevent local templates being loaded when $HOME is not set -* Removed "Implied Extension feature" -* Remove 'upgrade' and 'install' CLI commands. -* Gemfile may be in a parent directory of your Middleman project root (where 'config.rb' is). -* All dependencies for your Middleman project must be expressed in `Gemfile` - Bundler is no longer optional. -* Asciidoc information now available with the `asciidoc` local, which is a normal hash. -* Remove `page` template local. Use `current_resource` instead. -* Dropped support for providing a block to `page` & `proxy`. -* Dropped support for instance variables inside templates. -* Moved all rendering into `TemplateRenderer` and `FileRenderer` -* Placed all template evaluation inside the `TemplateContext` class -* Remove deprecated `request` instance -* Remove old module-style extension support -* Placed all `config.rb` evaluation inside the `ConfigContext` class +3.3.12 +=== * The preview server can now serve over HTTPS using the `--https` flag. It will use an automatic self-signed cert which can be overridden using `--ssl_certificate` and `--ssl_private_key`. These settings can also be set in `config.rb` +* The preview server URL will use the local hostname rather than '0.0.0.0'. It will also print out a URL based on the host's public IP in case that's useful. +* The `--host` flag and `config.rb` setting have been removed - the preview server will always bind to all interfaces. + +3.3.11 +=== +* Add `srcset` option to `image_tag`. Also enables them in Markdown. +* Add jruby to the list of envs requiring tzinfo-data. +* Don't lookup resource for path if the path is absolute. Fixes #1195 +* Make preview host and port configurable in config.rb and also expose those variables to extensions which are curious. Closes #1477 +* Append assets hash to .woff2 files +* Rack support has been broken since v3.3.9, fix that. #1501 + +3.3.10 +=== +* Fixes #1469, missing `cattr_accessor` in Redcarpet support. +* Fix slim >= 3.0.0 deprecation warning + +3.3.9 +=== +* Moved main `Application` from requiring to autoloading to work around some double-loading issues in Docker. + +3.3.8 +=== +* Define a mime type for sourcemaps. #1451 +* Asset hashing for image references in srcset +* Import patch to bugfix from Padrino Helpers #1401 +* Better URI encoding and decoding #1406 +* Update version of i18n + +3.3.7 +=== +* Update new project template Gemfile to use HTTPS by default. #1372 + +3.3.6 +=== + +* Use full paths instead of relative for `listen` gem. Fixes #1374 +* Add force option to "middleman init". #1369 +* Configuration addition for compass 1 compatibility. +* Catch File read exceptions in frontmatter. +* Remove duplicate attr_accessor. Closes #1352 +* Update sass dependency to >= 3.4.0. +* Update compass dependency to >= 1.0.0, < 2.0.0 +* Accept pandoc-style YAML frontmatter. #1350 +* Add webp to image type lists. + +3.3.5 +=== + +* Update Padrino to ~> 0.12.3 (removed breadcrumb helper) +* Update compass-import-once to 1.0.5 +* Fix issue with Slim partials. #1327 + +3.3.4 +=== + +* Fix `automatic_alt_tags` error. #1341 +* `partial` now looks for i18n suffixed filenames. #1333 +* Allow excluding paths from `gzip`. #1268 +* Let LiveReload work on 404 pages. +* Update `listen` dependency. + +3.3.3 +=== + +* Fix thread-safety issue #501 which could cause excepts when livereloading. +* Update to support Hooks 0.4.x dep. +* Update to support Padrino 0.12.2+ dep. +* Fix `after_render` manipulation of content. #1278 +* Fix combo of compass-import-once and sass-globs. middleman/middleman-sprockets#56 + +3.3.0-3.3.2 +=== + +* Update Padrino to 0.12.1. Introduces BREAKING CHANGE for Haml. Helpers which take blocks used to require `-` instead of `=` to work correctly. Now, all helpers which output content should use `=`. See: http://www.padrinorb.com/blog/upgrading-padrino-from-0-11-x-to-0-12-0-guide +* Update Haml to 4.x +* Disable Webrick reverse DNS lookup, vastly improving performance when accessing from a VM. +* Ignore `node_modules` in FileWatcher +* Add `tzinfo-data` for Windows users. +* Prefer loading layouts from `layouts_dir` +* Add `before_build` hook. +* Depend on Erubis and remove support for specifying another ERb engine. +* Removed the ability to set the `sass_cache_path`. +* Improved /__middleman/ meta pages. For example, sitemap view now calls out ignored resources, prints data/options better, and shows which special locals are available on a page. +* Bump Uglifier to 2.5.x + +3.2.2 +=== + +* Specify the full path to the NEWLINE constant +* Refactor some internals which were dependent on certain order of operations +* Updated i18n dep +* Updated Uglifier dep + +3.2.1 +=== + +* Allow path to be passed to page_classes. #1120 +* Parallelize gzip extension using four threads. #1116 +* Fix locale issue when using gzip extension +* Better handle UTF-8 filenames +* Update Padrino to 0.11.4 and Tilt to 1.4.1 + +3.2.0 +=== + +* Dropped support for Ruby 1.8 +* Dropped empty "middleman-more" gem +* Support the AsciiDoc format +* `page_classes` now prefixes class names starting with numbers with an alpha character. "x" by default. +* AREL-style sitemap query language no longer mutates on filter +* Logging can now be forwarded to a file +* Syntax errors in config.rb no longer hang the server +* Fixed memory leak when adding blocks to resources. #1020 +* Support HEAD requests in the server + +3.1.6 +=== + +* Magic sitemap-aware links and image references now work when your markdown engine is Kramdown (the default for Middleman). +* Having the build directory be a symlink no longer causes the --clean (default) option to wipe out your build. +* Fix handling paths and URLs with spaces in them. #961 +* Loosen up Kramdown dependency to allow for using version 1.2. +* Loosen up Listen dependency so it works with sass betas. +* Look for assets using url_for before falling back to the "images" directory. #1017 +* Do not cache generated redirect index file. #1019 +* Make an effort to handle spaces in filenames in a way that url_for can handle. #961 +* Fix localization via filename extension. #1015 + +3.1.5 +=== + +* Escape filenames in regexes. Fixes #942. +* Create automated alt tag addition, based on image name. +* Add listener latency option. (Aliased to -l) +* Add support/tests for Redcarpet 3.0.0 features + - :underline + - :highlight + - :disable_indented_code_blocks +* Fix support for + - :link_attributes + - :filter_html + +3.1.4 +=== + +* Support kramdown 1.1 +* Support redcarpet's :no_links & :no_images. #951 + +3.1.3 +=== + +* Fixed typo in rack extensions block +* Add support for nojekyll dotfile + +3.1.2 +=== + +* Locales regex was broken, selecting .yml files from data folder. +* Fix for implied extensions getting a layout. (Mentioned in #901)git pu +* Added `redirect` command for generating meta refreshes + +3.1.1 +=== + +* Check if set is redefining a param at the class level. Fixes #939 +* Correctly escape `content_tag` when using a block. Fixes #941 + +3.1.0 Highlights +=== + +* Autoload support (moving away from middleman-more) +* New Configuration System +* New v4 Extension API +* `/__middleman' inspector +* Added Ruby 2.0, dropped Ruby 1.9.2 +* Fully tested on JRuby 1.9 +* Build defaults to --clean + +3.1.0.rc.4 +=== + +* Blocks with different templating languages than their layout now work as expected. #860 +* Ruby 1.8 users will need to add the following to their Gemfiles: + platforms :mri_18 do + gem "ruby18_source_location" + end +* The `endpoint` method allows the building of Rack-based files or arbitrary content. + +3.1.0.rc.2 +=== + +* `layouts_dir` is now configurable +* Custom template classes can now override the file used for creating the project Gemfile. +* Add an "empty" template that produces the minimum necessary structure for a Middleman project. +* Fix ignoring layouts from the sitemap when the source directory has been set to something other than 'source'. #896 +* Track test coverage with simplecov +* i18n only autodetects languages in the `locales` root +* Frontmatter cache fixes solve performance regressions found in 3.1.x +* Vendor padrino-* to avoid dep hell +* `middleman-more` gem returns, but it's empty for backwards compat +* Prefer internal files.exists? over ruby's slow File.exists? + +3.1.0.rc.1 +=== + +* Move more into core, autoloaded if gems are available. +* DataStore may now be accessed like a hash with #[] and #has_key?. #880 +* The i18n extension now supports providing localized templates as separate files, like index.es.html.haml. #816, #823 +* The list of regular expressions for which files are ignored by the file watcher are now configurable. +* Revert to Thor 0.15.x +* Revert to padrino-helpers 0.10.x (dependency hell) +* Drop i18n dep to match activesupport at 0.6.1 + +3.1.0.beta.2 +=== + +* Extension template uses new class-based Extension +* Fix missing children in some sitemap traversal operations. #837 +* Add respond_to? to DataStore. #872 +* Allow discovery of prerelease gems. #873 +* Include middleman-livereload in default Gemfile +* Update Rack dependency to 1.5.x +* Update to Listen 1.0.x +* Update to padrino-helpers 0.11.x +* Update uglifier to 2.0.x +* Convert all of middleman-more to new class-based Extensions + +3.1.0.beta.1 +=== + +* Support Slim 2.0 ::Slim::Embedded +* "middleman build" will clean out old files from the build directory by default now, without needing to pass "--clean". Pass "--no-clean" to disable. #862 +* Allow frontmatter to be side-loaded from a neighboring file with a .frontmatter extension: #855 +* Allow frontmatter "renderer_options" key to overwrite renderer options on a per-file basis. #859 +* A custom :partials_dir may be configured, and partials will be looked up from it. #854 +* The sprockets environment is now available before config.rb is run, so you can mess with it. +* Added a "t" helper that delegates to I18n.t, just like Rails. #853. +* I18n will fall back to the default locale if a translation in the current locale is not found. You can disable this behavior by passing `:no_fallbacks => true` when activating `:i18n`. More settings documented at https://github.com/svenfuchs/i18n/wiki/Fallbacks . #853 +* Switched default Markdown engine to Kramdown. #852 +* Overhaul content-type handling, and add a `:content_type` parameter for `page`, `proxy`, and frontmatter that allows for overriding the default content type. #851 +* Fixes for upcoming Sass versions. +* Fix markdown filters in Haml 4 so that they don't throw errors when generating links/images and so they use our magic image_tag/link_to methods. #662 +* Fix a number of bugs with i18n. Add a `:lang` option that can be used with `page` or `proxy` to set the I18n.locale of a page. #845 +* Directory names in the data folder are treated as part of the data key. #836 +* Properly reload the server when files change in "lib" or "helpers". #835 +* Replace Rainpress CSS minifier with the one built into Sass. +* Changed 'default' and 'html5' templates to use 'current_page.data.title' instead of 'data.page.title'. #825 +* Include file extension in template cache. #798 +* Support for Ruby 2.0.0. +* "middleman console" will give you a console where you can mess around inside your middleman context. #775 +* Add to Compass import paths instead of resetting them. #707 +* There are now metadata pages in the preview server at "/__middleman/" that show information about the sitemap and site configuration. #374 and #776 +* The sitemap is now queryable with an ARel-like API. #650 +* Reorganize SMACSS template. #591 +* No longer bundle native file watchers - add an appropriate gem (rb-fsevent for OS X, rb-inotify for Linux, wdm for windows) to your Gemfile. +* `activate :asset_host, :host => hostname` can be used to configure `:asset_host`. +* Path matchers (for things like ignore and page) correctly work with string matchers. #689 +* Configuration has been moved to Middleman::Configuration::ConfigurationManager. This is backwards-compatible, but offers a nicer way of getting and setting configuration for extensions, including documenting those settings and their defaults. #620. + +3.0.13 +=== + +* Require Tilt 1.3.6 (older versions have errant .csv template type) +* Unregister Tilt HTML handler +* Fix dynamic multi-byte utf-8 files rebuilding. #806 +* Force locale to english for number_to_human_size in the gzip extension. #804 +* Don't use the logger from a trap context. Ruby 2.0.0 support. #801. +* Serve extensionless files or dotfiles with text/plain MIME type + +3.0.12 +=== + +* Update to listen 0.7.x. No longer depend on rb-inotify. *nix users should add to Gemfile. +* Support Haml 4 +* :debug_assets can no longer be turned on in the build environment. +* Helpers now work with JS/CSS files with .erb processing. +* Provide an informative exception when link_to is used improperly. +* Force .svgz files to be treated as binary. +* Add a url_for method that performs the link_to magic URL generation without a link. Make form_for use url_for. #739 +* Fix issues when combining relative assets and cache buster. +* Support the .yaml extension for data files. +* Handle non-english default languages in i18n. Fixes #584. #771 +* Allow frontmatter to be parsed on templates outside the project root +* Improve detection of binary files. #763 +* Add before_render and after_render hooks that can be used by extensions to modify templates before they're rendered or modify the rendered output before it's returned. #761 & #774 +* Tightened up dependencies +* Print the command for running middleman in verbose mode with quotes so Bundler doesn't swallow the verbose flag. #750 + +3.0.11 +==== + +* Mitigate major perf regression caused by the Middleman::Util#binary? method + +3.0.10 +==== + +* Avoid looking in binary files for frontmatter. #728 +* Allow nested i18n files. #725 +* Better adapt to Rack interface. #709 +* Add --force-polling flag. #730, #644 + +3.0.9 +==== + +* Lock Rack to 1.4.1 until BodyProxy bug is resolved. #709 +* Safely de-register Tilt extensions which are missing gems. #713 + +3.0.8 +==== + +* Directly send binary files in preview and copy them in build, avoiding reading large binary files into memory for rendering. #643 #699 +* Make link_to helper ignore QueryString values when looking up Sitemap resources +* Directly copy binary files during build, and stream them during preview, to avoid reading them into memory +* Make sure all paths in Sitemap are using Pathname + +3.0.7 +==== + +* Turn html5 boilerplate into a layout +* Fix errors when templates have empty YAML +* Show the hostname when initializing MM +* Fix issues when using Redcarpet inside Slim +* Make automatic_image_sizes avoid SVGs + +3.0.6 +==== +* Make Sitemap more thread-safe. +* Asset-hash fixes in conjunction with Sprockets. +* Proxy improvements. +* Handle directories with a tilde (~) in their path. +* Print better error message which port is already in use. +* Terminal signal improvements, shutsdown correctly when Terminal closed. +* Bundled Normalize.css updated to 2.0.1 +* Fixed Encoding extension activation +* Reload i18n on file changes (#616) + +3.0.5 +==== +* Require newer version of listen. +* Handful of sitemap speed improvements. +* Fix previewing of directories with periods in their name. +* Add CLI ability to skip gemfile and bundler init. +* Fix asset_hash when used in conjunction with Rack middleware. +* Fix LiveReload extension issues. + +3.0.3-3.0.4 +==== +* Add reload_paths to server CLI to add additional paths to reload MM on change. +* Re-organize app reloading code, don't need to restart listen every time. + +3.0.2 +==== +* Logger has no such method .warning. Closes #582 + +3.0.1 +==== +* HTML5 Boilerplate version 4.0.0 +* Use wdm for Windows +* Fix buggy color renaming in built-in CSS minifier. #576 +* Fix Sass/Scss filter in Slim templates +* Added SMACSS template +* Give file metadata (such as frontmatter) precedence over path meta. #552 +* Add `sass_assets_paths` option for arbitrary sass partial locations. +* Don't catch CoffeeScript errors when in build mode. +* Extract load_paths so they aren't locked into the binary +* Add middleman/rack for better config.ru support +* Use centralized Logger and add benchmark methods + +3.0.0 +==== +* Improve asset methods and link_to by making them more clever and aware of options such as relative_assets and http_prefix +* Refer to --verbose, instead of --debug in CLI error message (#505) +* Cleanup listener setup and teardown +* Update to Padrino 0.10.7 and Thor 0.15 (#495) +* Build output correctly shows update and identical, instead of create for all. +* automatic_directory_matcher (#491) + +3.0.0.rc.2 +==== +* Doing a build now shows identical files (#475) +* asset_hash, minify_javascript, and minify_css can now accept regexes, globs, + and procs (#489, #480) +* The `link_to` helper can now accept a sitemap Resource as a URL (#474) +* The preview server now correctly listens for changes (#487, #464) +* HTMLs are now served with a 'utf-8' charset instead of 'utf8' (#478) +* UTF-8 is now the new default encoding for data and templates (#486, #483) +* New :encoding setting that allows users to change default encoding +* You may now use the `use` method with a block when adding Rack middleware +* Middleman now depends on Listen 0.4.5+ and ActiveSupport 3.2.6+ +* Attempt to avoid issues with RVM's default Bundler (#466) +* Fix issue where Middleman won't start with Compass 0.12.2.rc.1 (#469) + +3.0.0.rc.1 +==== +* Split into 3 gems (middleman-core, middleman-more and middleman which simply includes both) +* Rewritten to work directly with Rack (Sinatra apps can still be mounted) +* Sitemap maintains own state +* New Extension Registration API +* Remove old 1.x mm- binaries and messaging +* New default layout functionality: https://github.com/middleman/middleman/issues/165 +* Enable chained templates outside of sprockets (file.html.markdown.erb) +* Sitemap object representing the known world +* FileWatcher proxies file change events +* Unified callback solution +* Removed Slim from base install. Will need to be installed and required by the user (in - config.rb) +* Activate mobile html5boilerplate template +* Update to Redcarpet for Markdown (breaks Haml :markdown filter) +* Return correct exit codes (0 for success, 1 for failure) from CLI +* Yard code docs: http://rubydoc.info/github/middleman/middleman +* config.rb and extensions can add command-line commands +* Nested layouts using `wrap_layout` helper +* Support for placekitten.com +* Added MM_ROOT environmental variable +* activating extensions can now take an options hash +* Don't re-minify files with ".min" in their name +* Serve purely static folders directly (without source/ and config.rb) +* Set ignored files and disable directory_indexes from YAML frontmatter +* Automatically load helper modules in helpers/ directory +* Add pid for cleanup +* Use guard/listen for file watching +* Merge full i18n support +* Implied file extensions (style.scss => style.css) +* Padrino 0.10.6 +* `middleman init` generates a `Gemfile` by default. +* Errors stop the build and print a stacktrace rather than silently getting printed into files. +* `with_layout` works with globs or regexes. +* Setting `directory_index` from `page` with a glob or regex now works. +* `:gzip` extension for pre-gzipping files for better compression with no server CPU cost. +* `:asset_hash` extension that generates unique-by-content filenames for assets and rewrites references to use those filenames, so you can set far-future expires on your assets. +* Removed the `--relative` CLI option. +* Properly output Compass-generated sprited images. +* Switch built-in CSS compressor to Rainpress. +* Automatically load helper modules from `helpers/`, like Rails. +* `ignore` and `page` both work with file globs or regexes. +* `layout`, `ignore`, and `directory_index` can be set from front matter. +* JavaScript and CSS are minified no matter where they are in the site, including in inline code blocks. +* Files with just a template extension get output with the correct exension (foo.erb => foo.html) +* `link_to` is smart about source paths, and can produce relative URLs with the `:relative` option or the sitewide `:relative_links` setting. +* Include vendored assets in sprockets path. +* Finally support Compass in Sprockets! Thanks to @xdite and @petebrowne +* Moved Sprockets into an extension +* Support loading Less @imports + +2.0.14 +==== +* Minor fix for i18n + +2.0.13.2 +==== +* Update Windows eventmachine dep + +2.0.13.1 +==== +* build --clean shouldn't remove dotfiles + +2.0.13 +==== +* middleman build --clean keeps the build directory clean of leftover files +* Padrino 0.10.5 and Rack 1.3.5 + +2.0.12 +==== +* Sinatra 1.3.1 and Padrino 0.10.4 + +2.0.11 +===== +* Lock Padrino and Sinatra versions (for now) + +2.0.9 +===== +* Added --glob option to build which only builds matching files +* Allow data/ files to be in JSON format as well +* Enabled Liquid {% include %} tag +* RubyInstaller-specific gem +* Allow access to data/ in config.rb +* Add mobile html5boilerplate template + +2.0.8 +===== +* Support accessing variables and data objects in ERb Sprockets files (library.js.coffee.erb) +* Make :markdown_engine support simple symbol names (:maruku instead of ::Tilt::MarkukuTemplate) +* Update Padrino deps to 0.10.2 +* Include therubyracer on *nix +* Enable frontmatter for Liquid templates + +2.0.7 +===== +* Updated HTML5 Boilerplate to v2 +* Make Rails 3.1 javascript gems available to Sprockets + +2.0.6 +===== +* Pulled out livereload feature into its own extension, still installed by default. + +2.0.5 +===== +* Vendored Padrino 0.10.0 + +2.0.4 +===== +* Pulled out undocumented remote data feature into its own extension + +2.0.3 +===== +* Pulled out undocumented Blog feature into its own extension + +2.0.2 +===== +* Fixed Sprockets circular error +* Added auto-requiring extensions + +2.0.0 +===== +* Guard-powered auto-reloading of config.rb +* Guard LiveReload +* Sprockets JS +* Refactored Dynamically Reloadable Core +* Combine views/ and public/ into a single source/ folder. +* Support YAML front-matter +* Added callback to run code after Compass is configured +* Added support for a compass.config file which is passed directly to Compass +* Blog-aware Feature (and project template) +* Thor-based, unified `middleman` binary +* :directory_indexes feature diff --git a/.github/CONTRIBUTING.md b/CONTRIBUTING.md similarity index 100% rename from .github/CONTRIBUTING.md rename to CONTRIBUTING.md diff --git a/Gemfile b/Gemfile index db4043a0..67063cfe 100644 --- a/Gemfile +++ b/Gemfile @@ -5,48 +5,36 @@ gem 'rake', '~> 10.3', require: false gem 'yard', '~> 0.8', require: false # Test tools -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' +gem 'pry', '~> 0.10', group: :development +gem 'aruba', '~> 0.10.0' +gem 'rspec', '~> 3.0' +gem 'cucumber', '~> 2.0' # Optional middleman dependencies, included for tests -gem 'haml', '>= 4.0.5', require: false -gem 'sassc', '~> 1.8', require: false -gem 'coffee-script', '~> 2.2', require: false -gem 'kramdown', '~> 1.2', require: false +gem 'less', '2.3', require: false gem 'slim', '>= 2.0', require: false gem 'liquid', '>= 2.6', require: false gem 'stylus', '>= 1.0', require: false -gem 'sinatra', '>= 2.0.0.beta2', require: false -gem 'redcarpet', '>= 3.1', require: false +gem 'sinatra', '>= 1.4', require: false +gem 'redcarpet', '>= 3.1', require: false unless RUBY_ENGINE == 'jruby' +gem 'asciidoctor', '~> 0.1', require: false # Dns server to test preview server gem 'rubydns', '~> 1.0.1', require: false # To test javascript -gem 'poltergeist', '~> 1.8', require: false -gem 'phantomjs', '~> 2.1.1.0', require: false +gem 'poltergeist', '~> 1.6.0', require: false # For less, note there is no compatible JS runtime for windows -gem 'therubyrhino', '>= 2.0', platforms: :jruby gem 'therubyracer', '>= 0.12', platforms: :ruby +gem 'therubyrhino', '>= 2.0', platforms: :jruby # Code Quality gem 'rubocop', '~> 0.24', require: false gem 'simplecov', '~> 0.10', require: false gem 'coveralls', '~> 0.8', require: false -gem 'codeclimate-test-reporter', '~> 0.3', require: false, group: :test # Middleman itself -gem 'middleman-cli', path: 'middleman-cli' gem 'middleman-core', path: 'middleman-core' - -# gem 'middleman-compass', github: 'middleman/middleman-compass', require: false -# gem 'middleman-sprockets', github: 'middleman/middleman-sprockets', require: false +gem 'middleman', path: 'middleman' +gem 'middleman-sprockets', git: 'https://github.com/middleman/middleman-sprockets', branch: 'v3-stable-real' diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md deleted file mode 100644 index 6d2dc0e0..00000000 --- a/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,9 +0,0 @@ -## Expected behavior and actual behavior - -## Steps to reproduce the problem (from a clean middleman installation) - -## Additional information - -- Ruby version: -- Middleman version: -- OS version: diff --git a/LICENSE.md b/LICENSE.md index 41ba676e..9b818889 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,4 +1,4 @@ -Copyright (c) 2010-2014 Thomas Reynolds +Copyright (c) 2010-2015 Thomas Reynolds Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -17,4 +17,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index df4497f7..1e179096 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [](https://gitter.im/middleman/middleman?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -**Middleman** is a static site generator using all the shortcuts and tools in modern web development. Check out [middlemanapp.com](http://middlemanapp.com/) for detailed tutorials, including a [getting started guide](http://middlemanapp.com/basics/getting-started/). You can also follow [@middlemanapp](https://twitter.com/middlemanapp) for updates. +**Middleman** is a static site generator using all the shortcuts and tools in modern web development. Check out [middlemanapp.com](http://middlemanapp.com/) for detailed tutorials, including a [getting started guide](https://middlemanapp.com/basics/install/). You can also follow [@middlemanapp](https://twitter.com/middlemanapp) for updates. ## Why Middleman? @@ -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/rails/sprockets) +* Multiple asset management solutions, including [Sprockets](https://github.com/sstephenson/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? @@ -19,7 +19,7 @@ These days, many websites are built with an API in mind. Rather than package the ## Installation -Middleman is built on Ruby and uses the RubyGems package manager for installation. These are usually pre-installed on Mac OS X and Linux. Windows users can install both using [RubyInstaller]. For windows [RubyInstaller-Devkit] is also required. +Middleman is built on Ruby and uses the [RubyGems package manager] (https://rubygems.org/pages/download) for installation. These are usually pre-installed on Mac OS X and Linux. Windows users can install both using [RubyInstaller]. ``` gem install middleman @@ -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://plasso.co/s/4dXbHBorC3) +Help support the Middleman team [with a donation](https://plasso.co/s/4dXbHBorC3). ## Versioning @@ -104,7 +104,7 @@ introduced with new major versions. As a result of this policy, you can (and should) specify a dependency on this gem using the [Pessimistic Version Constraint][pvc] with two digits of precision. For example: - spec.add_dependency 'middleman-core', '~> 4.0' + spec.add_dependency 'middleman-core', '~> 3.0' [semver]: http://semver.org/ [pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint @@ -121,6 +121,5 @@ 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/ [rubydoc]: http://rubydoc.info/github/middleman/middleman [LICENSE]: https://github.com/middleman/middleman/blob/master/LICENSE.md diff --git a/Rakefile b/Rakefile index 508c3a1d..89546ff3 100644 --- a/Rakefile +++ b/Rakefile @@ -1,17 +1,17 @@ require 'rake' -require File.expand_path('../middleman-core/lib/middleman-core/version.rb', __FILE__) - -ROOT = File.expand_path(File.dirname(__FILE__)) -GEM_NAME = 'middleman'.freeze - -middleman_gems = %w(middleman-core middleman-cli middleman) -GEM_PATHS = middleman_gems.freeze +require 'middleman-core/version' def sh_rake(command) sh "#{Gem.ruby} -S rake #{command}", verbose: true end +def within_each_gem(&block) + %w(middleman-core middleman).each do |dir| + Dir.chdir(dir) { block.call } + end +end + desc 'Displays the current version' task :version do puts "Current version: #{Middleman::VERSION}" @@ -28,32 +28,23 @@ end desc 'Release all middleman gems' task publish: :push do puts 'Pushing to rubygems...' - GEM_PATHS.each do |dir| - Dir.chdir(dir) { sh_rake('release') } - end + within_each_gem { sh_rake('release') } end desc 'Generate documentation for all middleman gems' task :doc do - GEM_PATHS.each do |g| - Dir.chdir(File.join(ROOT, g).to_s) { sh "#{Gem.ruby} -S rake yard" } - end + within_each_gem { sh_rake('yard') } end desc 'Run tests for all middleman gems' task :test do Rake::Task['rubocop'].invoke - - GEM_PATHS.each do |g| - Dir.chdir(File.join(ROOT, g).to_s) { sh "#{Gem.ruby} -S rake test" } - end + within_each_gem { sh_rake('test') } end desc 'Run specs for all middleman gems' task :spec do - GEM_PATHS.each do |g| - Dir.chdir(File.join(ROOT, g).to_s) { sh "#{Gem.ruby} -S rake spec" } - end + within_each_gem { sh_rake('spec') } end require 'rubocop/rake_task' diff --git a/gem_rake_helper.rb b/gem_rake_helper.rb index ea46e6a7..4e5bd75b 100644 --- a/gem_rake_helper.rb +++ b/gem_rake_helper.rb @@ -20,14 +20,7 @@ Cucumber::Rake::Task.new do |t| exempt_tags << '--tags ~@encoding' unless Object.const_defined?(:Encoding) exempt_tags << '--tags ~@nowindows' if Gem.win_platform? exempt_tags << '--tags ~@travishatesme' if ENV['TRAVIS'] == 'true' - t.cucumber_opts = "--require features --color #{exempt_tags.join(' ')} --strict" # --format #{ENV['CUCUMBER_FORMAT'] || 'Fivemat'}" -end - -Cucumber::Rake::Task.new(:cucumber_wip) do |t| - exempt_tags = ['--tags @wip'] - exempt_tags << '--tags ~@encoding' unless Object.const_defined?(:Encoding) - exempt_tags << '--tags ~@nowindows' if Gem.win_platform? - t.cucumber_opts = "--require features --color #{exempt_tags.join(' ')} --strict" # --format #{ENV['CUCUMBER_FORMAT'] || 'Fivemat'}" + t.cucumber_opts = "--require features --color #{exempt_tags.join(' ')} --strict"# --format #{ENV['CUCUMBER_FORMAT'] || 'Fivemat'}" end require 'rspec/core/rake_task' @@ -37,8 +30,12 @@ RSpec::Core::RakeTask.new do |spec| spec.rspec_opts = ['--color', '--format documentation'] end +test_tasks = [] +test_tasks << :spec if Dir.exists? 'spec' +test_tasks << :cucumber if Dir.exists? 'features' + desc 'Run tests, both RSpec and Cucumber' -task test: [:spec, :cucumber] +task test: test_tasks YARD::Rake::YardocTask.new diff --git a/middleman-cli/.simplecov b/middleman-cli/.simplecov deleted file mode 100644 index 1e7f68e2..00000000 --- a/middleman-cli/.simplecov +++ /dev/null @@ -1,7 +0,0 @@ -SimpleCov.start do - add_filter '/fixtures/' - add_filter '/features/' - add_filter '/spec/' - add_filter '/step_definitions/' - add_filter '/lib/vendored-middleman-deps/' -end \ No newline at end of file diff --git a/middleman-cli/.yardopts b/middleman-cli/.yardopts deleted file mode 100644 index b816052e..00000000 --- a/middleman-cli/.yardopts +++ /dev/null @@ -1,9 +0,0 @@ -lib/**/*.rb ---exclude lib/middleman-cli/templates/default/ ---exclude lib/middleman-cli/templates/html5/ ---exclude lib/middleman-cli/templates/mobile/ ---exclude lib/middleman-cli/templates/shared/ ---exclude lib/middleman-cli/templates/extension/ ---no-private ---hide-void-return ---markup=markdown \ No newline at end of file diff --git a/middleman-cli/Rakefile b/middleman-cli/Rakefile deleted file mode 100644 index db0d1cb8..00000000 --- a/middleman-cli/Rakefile +++ /dev/null @@ -1,4 +0,0 @@ -# coding:utf-8 -RAKE_ROOT = __FILE__.freeze -GEM_NAME = 'middleman-cli'.freeze -require File.expand_path(File.dirname(__FILE__) + '/../gem_rake_helper') diff --git a/middleman-cli/bin/middleman b/middleman-cli/bin/middleman deleted file mode 100755 index 8b381a08..00000000 --- a/middleman-cli/bin/middleman +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env ruby - -require 'middleman-core/profiling' -if ARGV.include? '--profile' - Middleman::Profiling.profiler = Middleman::Profiling::RubyProfProfiler.new -end -# 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 -Dir.chdir(ENV["MM_ROOT"]) if ENV["MM_ROOT"] - -# Default command is server -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) diff --git a/middleman-cli/features/cli_init.feature b/middleman-cli/features/cli_init.feature deleted file mode 100644 index 96595422..00000000 --- a/middleman-cli/features/cli_init.feature +++ /dev/null @@ -1,93 +0,0 @@ -Feature: Middleman CLI - - Scenario: Create a new project - When I run `middleman init MY_PROJECT` interactively - And I type "y" - And I type "y" - And I type "y" - And I type "y" - Then the exit status should be 0 - When I cd to "MY_PROJECT" - Then the following files should exist: - | Gemfile | - | .gitignore | - | config.rb | - | source/index.html.erb | - | source/layouts/layout.erb | - | source/javascripts/all.js | - | source/stylesheets/site.css.scss | - | source/stylesheets/_normalize.scss | - - Scenario: Create a new project in the current directory - Given a directory named "MY_PROJECT" - When I cd to "MY_PROJECT" - And I run `middleman init` interactively - And I type "y" - And I type "y" - And I type "y" - And I type "y" - Then the exit status should be 0 - And the following files should exist: - | Gemfile | - | config.rb | - | source/index.html.erb | - - Scenario: Create a new project (alias i) - When I run `middleman i MY_PROJECT` interactively - And I type "y" - And I type "y" - And I type "y" - And I type "y" - Then a directory named "MY_PROJECT" should exist - - Scenario: Create a new project (alias new) - When I run `middleman new MY_PROJECT` interactively - And I type "y" - And I type "y" - And I type "y" - And I type "y" - Then a directory named "MY_PROJECT" should exist - - Scenario: Create a new project (alias n) - When I run `middleman n MY_PROJECT` interactively - And I type "y" - And I type "y" - And I type "y" - And I type "y" - Then a directory named "MY_PROJECT" should exist - - Scenario: Create a new project using Middleman directory - When I run `middleman init MY_PROJECT -T blog` - Then a directory named "MY_PROJECT" should exist - When I cd to "MY_PROJECT" - 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" - And I type "y" - And I type "y" - And I type "y" - Then a directory named "MY_PROJECT" should exist - - Scenario: Create a new project using github(user/repository#branch) - When I run `middleman init MY_PROJECT -T middleman/middleman-templates-default#master` interactively - And I type "y" - And I type "y" - And I type "y" - And I type "y" - Then a directory named "MY_PROJECT" should exist - And the output should contain "-b master" - - Scenario: Create a new project using full path(://) - When I run `middleman init MY_PROJECT -T https://github.com/middleman/middleman-templates-default.git` interactively - And I type "y" - And I type "y" - And I type "y" - And I type "y" - Then a directory named "MY_PROJECT" should exist diff --git a/middleman-cli/features/support/env.rb b/middleman-cli/features/support/env.rb deleted file mode 100644 index 8044deab..00000000 --- a/middleman-cli/features/support/env.rb +++ /dev/null @@ -1,19 +0,0 @@ -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') diff --git a/middleman-cli/lib/middleman-cli.rb b/middleman-cli/lib/middleman-cli.rb deleted file mode 100644 index e17137e7..00000000 --- a/middleman-cli/lib/middleman-cli.rb +++ /dev/null @@ -1,23 +0,0 @@ -# rubocop:disable FileName - -# Setup our load paths -libdir = File.expand_path(File.dirname(__FILE__)) -$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir) - -# Require Thor since that's what the whole CLI is built around -require 'thor' - -# CLI Module -module Middleman::Cli - # The base task from which everything else extends - class Base < ::Thor - desc 'version', 'Show version' - def version - say "Middleman #{Middleman::VERSION}" - end - - def self.exit_on_failure? - true - end - end -end diff --git a/middleman-cli/lib/middleman-cli/build.rb b/middleman-cli/lib/middleman-cli/build.rb deleted file mode 100644 index 9e521dde..00000000 --- a/middleman-cli/lib/middleman-cli/build.rb +++ /dev/null @@ -1,140 +0,0 @@ -require 'middleman-core/application' - -# CLI Module -module Middleman::Cli - # The CLI Build class - class Build < Thor::Group - include Thor::Actions - - check_unknown_options! - - class_option :environment, - aliases: '-e', - 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', - default: nil, - desc: 'Build a subset of the project' - class_option :verbose, - type: :boolean, - default: false, - desc: 'Print debug messages' - class_option :instrument, - type: :boolean, - default: false, - desc: 'Print instrument messages' - class_option :profile, - type: :boolean, - default: false, - desc: 'Generate profiling report for the build' - - Middleman::Cli.import_config(self) - - # Core build Thor command - # @return [void] - def build - unless ENV['MM_ROOT'] - raise Thor::Error, 'Error: Could not find a Middleman project config, perhaps you are in the wrong folder?' - end - - require 'middleman-core' - require 'middleman-core/logger' - require 'middleman-core/builder' - require 'fileutils' - - verbose = options['verbose'] ? 0 : 1 - instrument = options['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 - - ::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 - - exit(1) - end - end - end - - protected - - # Handles incoming events from the builder. - # @param [Symbol] event_type The type of event. - # @param [String] contents The event contents. - # @param [String] extra The extra information. - # @return [void] - def on_event(event_type, target, extra=nil) - case event_type - when :error - say_status :error, target, :red - shell.say extra, :red if options['verbose'] - when :deleted - say_status :remove, target, :green - when :created - say_status :create, target, :green - when :identical - say_status :identical, target, :blue - when :updated - say_status :updated, target, :yellow - else - say_status event_type, extra, :blue - end - end - - # Find empty directories in the build folder and remove them. - # @return [Boolean] - def clean_directories! - all_build_files = File.join(@app.config[:build_dir], '**', '*') - - empty_directories = Dir[all_build_files].select do |d| - File.directory?(d) - end - - empty_directories.each do |d| - remove_file d, force: true if Pathname(d).children.empty? - end - end - - # Add to CLI - Base.register(self, 'build', 'build [options]', 'Builds the static site for deployment') - - # Map "b" to "build" - Base.map('b' => 'build') - end -end diff --git a/middleman-cli/lib/middleman-cli/config.rb b/middleman-cli/lib/middleman-cli/config.rb deleted file mode 100644 index add8730a..00000000 --- a/middleman-cli/lib/middleman-cli/config.rb +++ /dev/null @@ -1,41 +0,0 @@ -# CLI Module -module Middleman::Cli - # The CLI Config class - class Config < Thor::Group - include Thor::Actions - - check_unknown_options! - - class_option :environment, - aliases: '-e', - default: ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development', - desc: 'The environment Middleman will run under' - def console - require 'json' - require 'middleman-core' - require 'middleman-core/logger' - - opts = { - environment: options['environment'] - } - - # Don't output info messages - ::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 - - puts JSON.pretty_generate(app.config.to_h) - - app.shutdown! - end - - # Add to CLI - Base.register(self, 'config', 'config [options]', 'Output a Middleman configuration in JSON format') - end -end diff --git a/middleman-cli/lib/middleman-cli/console.rb b/middleman-cli/lib/middleman-cli/console.rb deleted file mode 100644 index 4e267539..00000000 --- a/middleman-cli/lib/middleman-cli/console.rb +++ /dev/null @@ -1,51 +0,0 @@ -# CLI Module -module Middleman::Cli - # The CLI Console class - class Console < Thor::Group - include Thor::Actions - - check_unknown_options! - - class_option :environment, - aliases: '-e', - default: ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development', - desc: 'The environment Middleman will run under' - class_option :verbose, - type: :boolean, - default: false, - desc: 'Print debug messages' - def console - require 'middleman-core' - require 'irb' - - opts = { - environment: options['environment'], - debug: options['verbose'] - } - - @app = ::Middleman::Application.new do - config[:environment] = opts[:environment].to_sym if opts[:environment] - - ::Middleman::Logger.singleton(opts[:debug] ? 0 : 1, opts[:instrumenting] || false) - end - - self.class.interact_with @app - end - - # Start an interactive console in the context of the provided object. - # @param [Object] context - # @return [void] - def self.interact_with(context) - IRB.setup nil - IRB.conf[:MAIN_CONTEXT] = IRB::Irb.new.context - require 'irb/ext/multi-irb' - IRB.irb nil, context - end - - # Add to CLI - Base.register(self, 'console', 'console [options]', 'Start an interactive console in the context of your Middleman application') - - # Map "c" to "console" - Base.map('c' => 'console') - end -end diff --git a/middleman-cli/lib/middleman-cli/extension.rb b/middleman-cli/lib/middleman-cli/extension.rb deleted file mode 100644 index 69e073fb..00000000 --- a/middleman-cli/lib/middleman-cli/extension.rb +++ /dev/null @@ -1,42 +0,0 @@ -# CLI Module -module Middleman::Cli - # A thor task for creating new projects - class Extension < Thor::Group - include Thor::Actions - - check_unknown_options! - - # Required path for the new project to be generated - argument :name, type: :string - - # Template files are relative to this file - # @return [String] - def self.source_root - File.join(File.dirname(__FILE__), 'templates') - end - - class_option 'skip-git', - type: :boolean, - default: false, - desc: 'Skip Git ignores and keeps' - - # Output a .gitignore file - class_option :git, type: :boolean, default: true - - # The extension task - # @param [String] name - def extension - copy_file 'extension/gitignore', File.join(name, '.gitignore') unless options[:'skip-git'] - 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/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 - - # Add to CLI - Base.register(self, 'extension', 'extension [options]', 'Create a new Middleman extension') - end -end diff --git a/middleman-cli/lib/middleman-cli/init.rb b/middleman-cli/lib/middleman-cli/init.rb deleted file mode 100644 index e8e5770c..00000000 --- a/middleman-cli/lib/middleman-cli/init.rb +++ /dev/null @@ -1,129 +0,0 @@ -# CLI Module -module Middleman::Cli - # A thor task for creating new projects - class Init < Thor::Group - include Thor::Actions - - GIT_CMD = 'git'.freeze - - check_unknown_options! - - argument :target, type: :string, default: '.' - - class_option 'template', - aliases: '-T', - default: 'middleman/middleman-templates-default', - desc: 'Use a project template' - - # Do not run bundle install - class_option 'skip-bundle', - type: :boolean, - aliases: '-B', - default: false, - desc: 'Skip bundle install' - - # The init task - def init - 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' - - api = 'https://directory.middlemanapp.com/api' - uri = ::URI.parse("#{api}/#{options[:template]}.json") - - begin - data = ::JSON.parse(uri.read) - data['links']['github'] - data['links']['github'].split('#') - rescue ::OpenURI::HTTPError - say "Template `#{options[:template]}` not found in Middleman Directory." - say 'Did you mean to use a full `user/repo` path?' - exit 1 - end - else - repo_name, repo_branch = options[:template].split('#') - [repository_path(repo_name), repo_branch] - end - - dir = Dir.mktmpdir - - begin - branch_cmd = repo_branch ? "-b #{repo_branch} " : '' - - git_path = "#{branch_cmd}#{repo_path}" - run("#{GIT_CMD} clone --depth 1 #{branch_cmd}#{repo_path} #{dir}") - - unless $?.success? - say "Git clone command failed. Make sure git repository exists: #{git_path}", :red - exit 1 - end - - inside(target) do - thorfile = File.join(dir, 'Thorfile') - - if File.exist?(thorfile) - ::Thor::Util.load_thorfile(thorfile) - - invoke 'middleman:generator' - else - source_paths << dir - directory dir, '.', exclude_pattern: /\.git\/|\.gitignore$/ - end - - run('bundle install') unless ENV['TEST'] || options[:'skip-bundle'] - end - ensure - FileUtils.remove_entry(dir) if File.directory?(dir) - end - end - - 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 : "https://github.com/#{repo}.git" - end - - # Add to CLI - Base.register(self, 'init', 'init TARGET [options]', 'Create new project at TARGET') - - # Map "i", "new" and "n" to "init" - Base.map( - 'i' => 'init', - 'new' => 'init', - 'n' => 'init' - ) - end -end diff --git a/middleman-cli/lib/middleman-cli/server.rb b/middleman-cli/lib/middleman-cli/server.rb deleted file mode 100644 index 85e75a9f..00000000 --- a/middleman-cli/lib/middleman-cli/server.rb +++ /dev/null @@ -1,62 +0,0 @@ -# CLI Module -module Middleman::Cli - # Server thor task - class Server < Thor::Group - check_unknown_options! - - class_option :environment, - aliases: '-e' - class_option :port, - aliases: '-p' - class_option :server_name, - aliases: '-s' - class_option :bind_address, - aliases: '-b' - class_option :verbose, - type: :boolean, - default: false, - desc: 'Print debug messages' - class_option :instrument, - type: :boolean, - default: false, - desc: 'Print instrument messages' - class_option :profile, - type: :boolean, - default: false, - desc: 'Generate profiling report for server startup' - 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' - require 'middleman-core/preview_server' - - unless ENV['MM_ROOT'] - puts '== Could not find a Middleman project config.rb' - exit - end - - params = { - debug: options['verbose'], - instrumenting: options['instrument'], - reload_paths: options['reload_paths'], - daemon: options['daemon'] - } - - puts '== The Middleman is loading' - ::Middleman::PreviewServer.start(params, options) - end - - # Add to CLI - Base.register(self, 'server', 'server [options]', 'Start the preview server') - - # Map "s" to "server" - Base.map('s' => 'server') - end -end diff --git a/middleman-cli/lib/middleman-cli/templates/extension/lib/lib.rb b/middleman-cli/lib/middleman-cli/templates/extension/lib/lib.rb deleted file mode 100644 index 48038a71..00000000 --- a/middleman-cli/lib/middleman-cli/templates/extension/lib/lib.rb +++ /dev/null @@ -1,6 +0,0 @@ -require "middleman-core" - -Middleman::Extensions.register :<%= name %> do - require "my-extension/extension" - MyExtension -end diff --git a/middleman-cli/lib/middleman-core/cli.rb b/middleman-cli/lib/middleman-core/cli.rb deleted file mode 100644 index 19f65d52..00000000 --- a/middleman-cli/lib/middleman-core/cli.rb +++ /dev/null @@ -1,2 +0,0 @@ -# Backwards compat -require 'middleman-cli' diff --git a/middleman-cli/middleman-cli.gemspec b/middleman-cli/middleman-cli.gemspec deleted file mode 100644 index e9447a9c..00000000 --- a/middleman-cli/middleman-cli.gemspec +++ /dev/null @@ -1,24 +0,0 @@ -# -*- encoding: utf-8 -*- -$LOAD_PATH.push File.expand_path('../lib', __FILE__) -require File.expand_path('../../middleman-core/lib/middleman-core/version', __FILE__) - -Gem::Specification.new do |s| - s.name = 'middleman-cli' - s.version = Middleman::VERSION - s.platform = Gem::Platform::RUBY - s.license = 'MIT' - s.authors = ['Thomas Reynolds', 'Ben Hollis'] - s.email = ['me@tdreyno.com', 'ben@benhollis.net'] - s.homepage = 'http://middlemanapp.com' - s.summary = 'Hand-crafted frontend development' - s.description = 'A static site generator. Provides dozens of templating languages (Haml, Sass, Compass, Slim, CoffeeScript, and more). Makes minification, compression, cache busting, Yaml data (and more) an easy part of your development cycle.' - - s.files = `git ls-files -z`.split("\0") - s.test_files = `git ls-files -z -- {fixtures,features}/*`.split("\0") - s.executable = 'middleman' - s.require_path = 'lib' - s.required_ruby_version = '>= 2.2.0' - - # CLI - s.add_dependency('thor', ['>= 0.17.0', '< 2.0']) -end diff --git a/middleman-cli/spec/middleman/.gitkeep b/middleman-cli/spec/middleman/.gitkeep deleted file mode 100644 index 45adbb22..00000000 --- a/middleman-cli/spec/middleman/.gitkeep +++ /dev/null @@ -1 +0,0 @@ -.gitkeep \ No newline at end of file diff --git a/middleman-core/.rspec b/middleman-core/.rspec deleted file mode 100644 index 4e1e0d2f..00000000 --- a/middleman-core/.rspec +++ /dev/null @@ -1 +0,0 @@ ---color diff --git a/middleman-core/.yardopts b/middleman-core/.yardopts index ee16b7ac..b6b437b9 100644 --- a/middleman-core/.yardopts +++ b/middleman-core/.yardopts @@ -1,6 +1,10 @@ lib/**/*.rb --exclude lib/vendored-middleman-deps/ --exclude lib/middleman-core/step_definitions +--exclude lib/middleman-core/templates/default/ +--exclude lib/middleman-core/templates/html5/ +--exclude lib/middleman-core/templates/mobile/ +--exclude lib/middleman-core/templates/shared/ +--exclude lib/middleman-core/templates/extension/ --no-private ---hide-void-return ---markup=markdown \ No newline at end of file +--hide-void-return \ No newline at end of file diff --git a/middleman-core/Rakefile b/middleman-core/Rakefile index 198f09ee..a093ee44 100644 --- a/middleman-core/Rakefile +++ b/middleman-core/Rakefile @@ -1,4 +1 @@ -# coding:utf-8 -RAKE_ROOT = __FILE__.freeze -GEM_NAME = ENV['NAME'] || 'middleman-core' -require File.expand_path(File.dirname(__FILE__) + '/../gem_rake_helper') +require_relative '../gem_rake_helper' diff --git a/middleman-core/bin/middleman b/middleman-core/bin/middleman new file mode 100755 index 00000000..d17dbd1b --- /dev/null +++ b/middleman-core/bin/middleman @@ -0,0 +1,18 @@ +#!/usr/bin/env ruby + +require 'middleman-core/profiling' +if ARGV.include? '--profile' + Middleman::Profiling.profiler = Middleman::Profiling::RubyProfProfiler.new +end +Middleman::Profiling.start + +require "middleman-core/load_paths" +Middleman.setup_load_paths + +require "middleman-core/cli" + +# Change directory to the root +Dir.chdir(ENV["MM_ROOT"]) if ENV["MM_ROOT"] + +# Start the CLI +Middleman::Cli::Base.start diff --git a/middleman-core/features/3rd_party_cli.feature b/middleman-core/features/3rd_party_cli.feature new file mode 100644 index 00000000..71e6a009 --- /dev/null +++ b/middleman-core/features/3rd_party_cli.feature @@ -0,0 +1,15 @@ +Feature: Allow config.rb and extensions to add CLI commands + + Scenario: Command autoloaded from tasks/ directory + Given an empty app + And a file named "tasks/hello_task.rb" with: + """ + class Hello < Thor + desc "hello", "Say hello" + def hello + puts "Hello World" + end + end + """ + When I run `middleman hello` + Then the output should contain "Hello World" \ No newline at end of file diff --git a/middleman-core/features/asciidoc.feature b/middleman-core/features/asciidoc.feature new file mode 100644 index 00000000..14bca69e --- /dev/null +++ b/middleman-core/features/asciidoc.feature @@ -0,0 +1,155 @@ +Feature: AsciiDoc Support + In order to test included AsciiDoc support + + Scenario: Rendering html + Given the Server is running at "asciidoc-app" + When I go to "/hello.html" + Then I should see: + """ +
Hello, AsciiDoc! + Middleman, I am in you.
+Hello, AsciiDoc! + Middleman, I am in you.
+Hello, AsciiDoc!
+Hello, AsciiDoc!
+Hello, AsciiDoc!
+Hello, AsciiDoc!
+I'm included content.+
puts "Is this mic on?"
+ Paragraph 1
" + Scenario: Invalid YAML + Given a fixture app "basic-data-app" + And the default aruba exit timeout is 30 seconds + And a file named "data/test.yml" with: + """ + 'ASDSFDa: + -asdf asdf + """ + When I run `middleman build` + Then the output should contain: + """ + failed due to an error: + """ + + Scenario: Invalid JSON + Given a fixture app "basic-data-app" + And the default aruba exit timeout is 30 seconds + And a file named "data/test.json" with: + """ + 'ASDSFDa: + -asdf asdf + """ + When I run `middleman build` + Then the output should contain: + """ + failed due to an error: + """ diff --git a/middleman-core/features/default-layout.feature b/middleman-core/features/default-layout.feature deleted file mode 100644 index 82fbeeff..00000000 --- a/middleman-core/features/default-layout.feature +++ /dev/null @@ -1,90 +0,0 @@ -Feature: Describe which files get layouts - - Background: - Given an empty app - And a file named "config.rb" with: - """ - page "/about.html", layout: :layout2 - """ - And a file named "source/layouts/layout.erb" with: - """ - In Layout - <%= yield %> - """ - And a file named "source/layouts/layout2.erb" with: - """ -paragraph
" - - - Scenario: Markdown filter in Slim uses our link_to and image_tag helpers (with Kramdown) - Given a fixture app "markdown-in-slim-app" - And a file named "config.rb" with: - """ - set :markdown_engine, :kramdown - activate :directory_indexes - """ - And a file named "source/link_and_image.html.slim" with: - """ - markdown: - [A link](/link_target.html) - - {: srcset="image_2x.jpg 2x"} - """ - 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 "/images/image_2x.jpg 2x" - Then I should see 'src="/images/blank.gif"' diff --git a/middleman-core/features/markdown_redcarpet.feature b/middleman-core/features/markdown_redcarpet.feature index c0f744ac..7eec709b 100644 --- a/middleman-core/features/markdown_redcarpet.feature +++ b/middleman-core/features/markdown_redcarpet.feature @@ -1,3 +1,4 @@ +@nojava Feature: Markdown (Redcarpet) support In order to test included Redcarpet support @@ -6,14 +7,14 @@ Feature: Markdown (Redcarpet) support And a file named "config.rb" with: """ set :markdown_engine, :redcarpet - set :markdown, no_intra_emphasis: true, - tables: true, - fenced_code_blocks: true, - autolink: true, - strikethrough: true, - space_after_headers: true, - superscript: true, - lax_spacing: true + set :markdown, :no_intra_emphasis => true, + :tables => true, + :fenced_code_blocks => true, + :autolink => true, + :strikethrough => true, + :space_after_headers => true, + :superscript => true, + :lax_spacing => true """ Given the Server is running at "markdown-app" @@ -41,9 +42,9 @@ Feature: Markdown (Redcarpet) support And a file named "config.rb" with: """ set :markdown_engine, :redcarpet - set :markdown, underline: true, - highlight: true, - disable_indented_code_blocks: true + set :markdown, :underline => true, + :highlight => true, + :disable_indented_code_blocks => true """ Given the Server is running at "markdown-app" When I go to "/underline.html" @@ -58,7 +59,7 @@ Feature: Markdown (Redcarpet) support And a file named "config.rb" with: """ set :markdown_engine, :redcarpet - set :markdown, smartypants: true + set :markdown, :smartypants => true """ Given the Server is running at "markdown-app" When I go to "/smarty_pants.html" @@ -69,13 +70,13 @@ Feature: Markdown (Redcarpet) support And a file named "config.rb" with: """ set :markdown_engine, :redcarpet - set :markdown, filter_html: true, - no_images: true, - no_links: true, - with_toc_data: true, - hard_wrap: true, - safe_links_only: true, - prettify: true + set :markdown, :filter_html => true, + :no_images => true, + :no_links => true, + :with_toc_data => true, + :hard_wrap => true, + :safe_links_only => true, + :prettify => true """ Given the Server is running at "markdown-app" @@ -102,7 +103,7 @@ Feature: Markdown (Redcarpet) support And a file named "config.rb" with: """ set :markdown_engine, :redcarpet - set :markdown, link_attributes: { target: "_blank" } + set :markdown, :link_attributes => { :target => "_blank" } """ And a file named "source/link.html.markdown" with: """ @@ -117,8 +118,8 @@ Feature: Markdown (Redcarpet) support And a file named "config.rb" with: """ set :markdown_engine, :redcarpet - set :markdown, xhtml: true, - hard_wrap: true + set :markdown, :xhtml => true, + :hard_wrap => true """ Given the Server is running at "markdown-app" When I go to "/hard_wrap.html" @@ -129,7 +130,7 @@ Feature: Markdown (Redcarpet) support And a file named "config.rb" with: """ set :markdown_engine, :redcarpet - set :markdown, smartypants: true + set :markdown, :smartypants => true """ Given the Server is running at "markdown-frontmatter-options-app" When I go to "/smarty_pants-default.html" diff --git a/middleman-core/features/markdown_redcarpet_in_haml.feature b/middleman-core/features/markdown_redcarpet_in_haml.feature index c8adfd73..a0f10160 100644 --- a/middleman-core/features/markdown_redcarpet_in_haml.feature +++ b/middleman-core/features/markdown_redcarpet_in_haml.feature @@ -1,3 +1,4 @@ +@nojava Feature: Markdown support in Haml In order to test support of the Haml markdown filter diff --git a/middleman-core/features/markdown_redcarpet_in_slim.feature b/middleman-core/features/markdown_redcarpet_in_slim.feature deleted file mode 100644 index 250c6857..00000000 --- a/middleman-core/features/markdown_redcarpet_in_slim.feature +++ /dev/null @@ -1,41 +0,0 @@ -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" - Then I should see "paragraph
" - - - 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) - -  - """ - 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"' diff --git a/middleman-core/features/minify_css.feature b/middleman-core/features/minify_css.feature index cbf03fe3..29c3e8c6 100644 --- a/middleman-core/features/minify_css.feature +++ b/middleman-core/features/minify_css.feature @@ -5,19 +5,16 @@ Feature: Minify CSS Given a fixture app "minify-css-app" And a file named "config.rb" with: """ - config[:sass_source_maps] = false """ And the Server is running at "minify-css-app" When I go to "/stylesheets/site.css" - Then I should see "7" lines + Then I should see "50" lines And I should see "only screen and (device-width" - + Scenario: Rendering external css with the feature enabled Given a fixture app "minify-css-app" And a file named "config.rb" with: """ - config[:sass_source_maps] = false - activate :minify_css """ And the Server is running at "minify-css-app" @@ -28,13 +25,11 @@ Feature: Minify CSS Then I should see "1" lines When I go to "/stylesheets/report.css" Then I should see "p{border:1px solid #ff6600}" - + Scenario: Rendering external css in a proxied resource Given a fixture app "minify-css-app" And a file named "config.rb" with: """ - config[:sass_source_maps] = false - activate :minify_css proxy '/css-proxy', '/stylesheets/site.css', ignore: true """ @@ -47,25 +42,24 @@ Feature: Minify CSS Given a fixture app "passthrough-app" And a file named "config.rb" with: """ - config[:sass_source_maps] = false - module ::PassThrough def self.compress(data) data end end - activate :minify_css, compressor: ::PassThrough + activate :minify_css + + set :css_compressor, ::PassThrough """ And the Server is running at "passthrough-app" When I go to "/stylesheets/site.css" - Then I should see "5" lines + Then I should see "46" lines Scenario: Rendering inline css with the feature disabled Given a fixture app "minify-css-app" And a file named "config.rb" with: """ - config[:sass_source_maps] = false """ And the Server is running at "minify-css-app" When I go to "/inline-css.html" @@ -78,22 +72,22 @@ Feature: Minify CSS } """ - + Scenario: Rendering inline css with a passthrough minifier Given a fixture app "passthrough-app" And a file named "config.rb" with: """ - config[:sass_source_maps] = false - module ::PassThrough def self.compress(data) data end end - activate :minify_css, inline: true, compressor: ::PassThrough + activate :minify_css, :inline => true - page "/inline-css.html", layout: false + set :css_compressor, ::PassThrough + + page "/inline-css.html", :layout => false """ And the Server is running at "passthrough-app" When I go to "/inline-css.html" @@ -110,17 +104,15 @@ Feature: Minify CSS Given a fixture app "passthrough-app" And a file named "config.rb" with: """ - config[:sass_source_maps] = false - module ::HelloCompressor def self.compress(data) "Hello" end end - activate :minify_css, inline: true, compressor: ::HelloCompressor + activate :minify_css, :inline => true, :compressor => ::HelloCompressor - page "/inline-css.html", layout: false + page "/inline-css.html", :layout => false """ And the Server is running at "passthrough-app" When I go to "/inline-css.html" @@ -130,14 +122,12 @@ Feature: Minify CSS Hello """ - + Scenario: Rendering inline css with the feature enabled Given a fixture app "minify-css-app" And a file named "config.rb" with: """ - config[:sass_source_maps] = false - - activate :minify_css, inline: true + activate :minify_css, :inline => true """ And the Server is running at "minify-css-app" When I go to "/inline-css.html" @@ -152,9 +142,7 @@ Feature: Minify CSS Given a fixture app "minify-css-app" And a file named "config.rb" with: """ - config[:sass_source_maps] = false - - activate :minify_css, inline: true + activate :minify_css, :inline => true """ And the Server is running at "minify-css-app" When I go to "/inline-css.php" @@ -171,9 +159,7 @@ Feature: Minify CSS Given a fixture app "minify-css-app" And a file named "config.rb" with: """ - config[:sass_source_maps] = false - - activate :minify_css, inline: true + activate :minify_css, :inline => true proxy '/inline-css-proxy', '/inline-css.html', ignore: true """ And the Server is running at "minify-css-app" @@ -190,8 +176,6 @@ Feature: Minify CSS Given a fixture app "minify-css-app" And a file named "config.rb" with: """ - config[:sass_source_maps] = false - mime_type('.xcss', 'text/x-css') activate :minify_css, content_types: ['text/x-css'], inline: true, diff --git a/middleman-core/features/minify_javascript.feature b/middleman-core/features/minify_javascript.feature index 262d977a..a8235368 100644 --- a/middleman-core/features/minify_javascript.feature +++ b/middleman-core/features/minify_javascript.feature @@ -38,7 +38,7 @@ Feature: Minify Javascript I'm a jQuery {{template}}. """ - + Scenario: Rendering inline js with a passthrough minifier Given a fixture app "passthrough-app" And a file named "config.rb" with: @@ -49,9 +49,11 @@ Feature: Minify Javascript end end - activate :minify_javascript, inline: true, compressor: ::PassThrough + activate :minify_javascript, :inline => true - page "/inline-js.html", layout: false + set :js_compressor, ::PassThrough + + page "/inline-js.html", :layout => false """ And the Server is running at "passthrough-app" When I go to "/inline-js.html" @@ -96,9 +98,9 @@ Feature: Minify Javascript end end - activate :minify_javascript, inline: true, compressor: ::HelloCompressor + activate :minify_javascript, :inline => true, :compressor => ::HelloCompressor - page "/inline-js.html", layout: false + page "/inline-js.html", :layout => false """ And the Server is running at "passthrough-app" When I go to "/inline-js.html" @@ -119,12 +121,12 @@ Feature: Minify Javascript I'm a jQuery {{template}}. """ - + Scenario: Rendering inline js with the feature enabled Given a fixture app "minify-js-app" And a file named "config.rb" with: """ - activate :minify_javascript, inline: true + activate :minify_javascript, :inline => true """ And the Server is running at "minify-js-app" When I go to "/inline-js.html" @@ -150,7 +152,7 @@ Feature: Minify Javascript Given a fixture app "minify-js-app" And a file named "config.rb" with: """ - activate :minify_javascript, inline: true + activate :minify_javascript, :inline => true """ And the Server is running at "minify-js-app" When I go to "/inline-js.php" @@ -175,7 +177,7 @@ Feature: Minify Javascript Given a fixture app "minify-js-app" And a file named "config.rb" with: """ - activate :minify_javascript, inline: true + activate :minify_javascript, :inline => true proxy '/inline-js-proxy', '/inline-js.html', ignore: true """ And the Server is running at "minify-js-app" @@ -193,7 +195,7 @@ Feature: Minify Javascript Then I should see "1" lines When I go to "/more-js/other.js" Then I should see "1" lines - + Scenario: Rendering external js in a proxied resource Given a fixture app "minify-js-app" And a file named "config.rb" with: @@ -214,12 +216,12 @@ Feature: Minify Javascript Given a fixture app "minify-js-app" And a file named "config.rb" with: """ - activate :minify_javascript, inline: true + activate :minify_javascript, :inline => true """ And the Server is running at "minify-js-app" When I go to "/inline-coffeescript.html" Then I should see "3" lines - + Scenario: Rendering external js (coffeescript) with the feature enabled Given a fixture app "minify-js-app" And a file named "config.rb" with: @@ -229,7 +231,7 @@ Feature: Minify Javascript And the Server is running at "minify-js-app" When I go to "/javascripts/coffee_test.js" Then I should see "1" lines - + Scenario: Rendering inline js (coffeescript) with a passthrough minifier Given a fixture app "passthrough-app" And a file named "config.rb" with: @@ -240,14 +242,16 @@ Feature: Minify Javascript end end - activate :minify_javascript, inline: true, compressor: ::PassThrough + activate :minify_javascript, :inline => true - page "/inline-coffeescript.html", layout: false + set :js_compressor, ::PassThrough + + page "/inline-coffeescript.html", :layout => false """ And the Server is running at "passthrough-app" When I go to "/inline-coffeescript.html" Then I should see "13" lines - + Scenario: Rendering external js (coffeescript) with a passthrough minifier Given a fixture app "passthrough-app" And a file named "config.rb" with: @@ -258,9 +262,11 @@ Feature: Minify Javascript end end - activate :minify_javascript, compressor: ::PassThrough + activate :minify_javascript + + set :js_compressor, ::PassThrough """ And the Server is running at "passthrough-app" When I go to "/javascripts/coffee_test.js" Then I should see "11" lines - + \ No newline at end of file diff --git a/middleman-core/features/more-implied_extensions.feature b/middleman-core/features/more-implied_extensions.feature new file mode 100644 index 00000000..10ee5b20 --- /dev/null +++ b/middleman-core/features/more-implied_extensions.feature @@ -0,0 +1,44 @@ +Feature: More default extensions + + Scenario: Default extensions preview + Given the Server is running at "more-implied-extensions-app" + When I go to "/test.html" + Then I should see "Hello" + When I go to "/test2.html" + Then I should see "World" + When I go to "/test3.html" + Then I should see "Howdy" + When I go to "/test4.html" + Then I should see "HELLO" + When I go to "/javascripts/app.js" + Then I should see "derp" + Then I should not see "I am in the layout" + When I go to "/stylesheets/style.css" + Then I should see "section" + Then I should not see "I am in the layout" + When I go to "/stylesheets/style2.css" + Then I should see "section" + Then I should not see "I am in the layout" + + Scenario: Default extensions build + Given a fixture app "more-implied-extensions-app" + And a successfully built app at "more-implied-extensions-app" + When I cd to "build" + Then the following files should exist: + | test.html | + | test2.html | + | test3.html | + | test4.html | + | javascripts/app.js | + | stylesheets/style.css | + | stylesheets/style2.css | + And the file "test.html" should contain "Hello" + And the file "test2.html" should contain "World" + And the file "test3.html" should contain "Howdy" + And the file "test4.html" should contain "HELLO" + And the file "javascripts/app.js" should contain "derp" + And the file "javascripts/app.js" should not contain "I am in the layout" + And the file "stylesheets/style.css" should contain "section" + And the file "stylesheets/style.css" should not contain "I am in the layout" + And the file "stylesheets/style2.css" should contain "section" + And the file "stylesheets/style2.css" should not contain "I am in the layout" diff --git a/middleman-core/features/more-instance_vars.feature b/middleman-core/features/more-instance_vars.feature new file mode 100644 index 00000000..87fc3b0d --- /dev/null +++ b/middleman-core/features/more-instance_vars.feature @@ -0,0 +1,18 @@ +Feature: Instance Vars + In order to share data with layouts and partials via instance variables + + Scenario: Setting an instance var in a template should be visible in its layout + Given the Server is running at "more-instance-vars-app" + When I go to "/instance-var-set.html" + Then I should see "Var is 100" + + Scenario: Setting an instance var in a template should be visible in a partial + Given the Server is running at "more-instance-vars-app" + When I go to "/instance-var-set.html" + Then I should see "My var is here!" + + Scenario: Setting an instance var in one file should not be visible in another + Given the Server is running at "more-instance-vars-app" + When I go to "/instance-var-set.html" + When I go to "/no-instance-var.html" + Then I should see "No var..." diff --git a/middleman-core/features/mount_rack.feature b/middleman-core/features/mount_rack.feature index dcb83146..b2dbe5a0 100644 --- a/middleman-core/features/mount_rack.feature +++ b/middleman-core/features/mount_rack.feature @@ -47,9 +47,11 @@ Feature: Support Rack apps mounted using map run MySinatra end - endpoint "sinatra/index2.html", path: "/sinatra/" + configure :build do + endpoint "sinatra/index2.html", :path => "/sinatra/" + end - endpoint "dedoo.html", path: "/sinatra/derp.html" + endpoint "dedoo.html", :path => "/sinatra/derp.html" endpoint "hello.html" do "world" diff --git a/middleman-core/features/move_files.feature b/middleman-core/features/move_files.feature deleted file mode 100644 index a6b1e975..00000000 --- a/middleman-core/features/move_files.feature +++ /dev/null @@ -1,44 +0,0 @@ -Feature: Move files - - Scenario: Move one path to another - Given a fixture app "large-build-app" - And a file named "config.rb" with: - """ - move_file "/static.html", "/static2.html" - """ - And the Server is running at "large-build-app" - When I go to "/static.html" - Then I should see 'Not Found' - When I go to "/static2.html" - Then I should see 'Static, no code!' - - Scenario: Move one path to another with directory indexes - Given a fixture app "large-build-app" - And a file named "config.rb" with: - """ - activate :directory_indexes - move_file "/static.html", "/static2.html" - """ - And the Server is running at "large-build-app" - When I go to "/static.html" - Then I should see 'Not Found' - When I go to "/static/index.html" - Then I should see 'Not Found' - When I go to "/static2.html" - Then I should see 'Static, no code!' - - Scenario: Move one path to another with directory indexes (using dest path) - Given a fixture app "large-build-app" - And a file named "config.rb" with: - """ - activate :directory_indexes - move_file "/static/index.html", "/static2.html" - """ - And the Server is running at "large-build-app" - When I go to "/static.html" - Then I should see 'Not Found' - When I go to "/static/index.html" - Then I should see 'Not Found' - When I go to "/static2.html" - Then I should see 'Static, no code!' - diff --git a/middleman-core/features/multiple-sources.feature b/middleman-core/features/multiple-sources.feature deleted file mode 100644 index 4f23474a..00000000 --- a/middleman-core/features/multiple-sources.feature +++ /dev/null @@ -1,35 +0,0 @@ -Feature: Allow multiple sources to be setup. - - Scenario: Three source directories. - Given the Server is running at "multiple-sources-app" - When I go to "/index.html" - Then I should see "Default Source" - - When I go to "/index1.html" - Then I should see "Source 1" - - When I go to "/index2.html" - Then I should see "Source 2" - - When I go to "/override-in-two.html" - Then I should see "Overridden 2" - - When I go to "/override-in-one.html" - Then I should see "Opposite 2" - - Scenario: Three data directories. - Given the Server is running at "multiple-data-sources-app" - When I go to "/index.html" - Then I should see "Default: Data Default" - Then I should see "Data 1: Data 1" - Then I should see "Data 2: Data 2" - Then I should see "Override in Two: Overridden 2" - Then I should see "Override in One: Opposite 2" - - Scenario: Set source with destination_dir - Given the Server is running at "multiple-sources-with-duplicate-file-names-app" - When I go to "/index.html" - Then I should see "Default Source" - - When I go to "/source2/index.html" - Then I should see "Second Source" diff --git a/middleman-core/features/nested_layouts.feature b/middleman-core/features/nested_layouts.feature index f51831fb..d70a7e23 100644 --- a/middleman-core/features/nested_layouts.feature +++ b/middleman-core/features/nested_layouts.feature @@ -5,37 +5,37 @@ Feature: Allow nesting of layouts When I go to "/index.html" Then I should see: """ - Master Erb + MasterThe Article Content
""" - + 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 "New Article Title
The Article Content
" - + Then I should see "New Article Title
The Article Content
" + 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 Haml + MasterThe Article Content
""" @@ -43,16 +43,13 @@ 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 "Page #1" - And I should see "I am Inner" - And I should see "I am Outer" - And I should see "Master Erb" + And I should see "Inner" When I go to "/data-two.html" Then I should see "Page Number Two" - And I should not see "I am Inner" + And I should not see "Inner" When I go to "/data-one.html" Then I should see "Page Number One" - And I should see "I am Inner" + And I should see "Inner" When I go to "/data-two.html" Then I should see "Page Number Two" - And I should not see "I am Inner" + And I should not see "Inner" diff --git a/middleman-core/features/page-id.feature b/middleman-core/features/page-id.feature deleted file mode 100644 index 74d08cb5..00000000 --- a/middleman-core/features/page-id.feature +++ /dev/null @@ -1,72 +0,0 @@ -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: Hi' - And I should see 'URL4: Sym' - And I should see 'URL5: Imp' - And I should see 'URL6: Foldern' - And I should see 'URL7: Feed' - - 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: Hi' - And I should see 'URL4: Sym' - And I should see 'URL8: Imp' - And I should see 'URL9: Foldern' - And I should see 'URL10: Feed' - - 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" diff --git a/middleman-core/features/paginate.feature b/middleman-core/features/paginate.feature deleted file mode 100644 index 9338e019..00000000 --- a/middleman-core/features/paginate.feature +++ /dev/null @@ -1,204 +0,0 @@ -Feature: Pagination - Scenario: Basic configuration - Given a fixture app "paginate-app" - And a file named "config.rb" with: - """ - articles = resources.select { |r| - matcher = ::Middleman::Util::UriTemplates.uri_template('blog/2011-{remaining}') - ::Middleman::Util::UriTemplates.extract_params(matcher, ::Middleman::Util.normalize_path(r.url)) - } - - articles.sort { |a, b| - b.data.date <=> a.data.date - }.per_page(5) do |items, num, meta, is_last| - page_path = num == 1 ? '/2011/index.html' : "/2011/page/#{num}.html" - - prev_page = case num - when 1 - nil - when 2 - '/2011/index.html' - when 3 - "/2011/page/#{num-1}.html" - end - - next_page = is_last ? nil : "/2011/page/#{num+1}.html" - - proxy page_path, "/archive/2011/index.html", locals: { - items: items, - pagination: meta, - prev_page: prev_page, - next_page: next_page - } - end - - def get_tags(resource) - if resource.data.tags.is_a? String - resource.data.tags.split(',').map(&:strip) - else - resource.data.tags - end - end - - def group_lookup(resource, sum) - results = Array(get_tags(resource)).map(&:to_s).map(&:to_sym) - - results.each do |k| - sum[k] ||= [] - sum[k] << resource - end - end - - tags = articles - .select { |resource| resource.data.tags } - .each_with_object({}, &method(:group_lookup)) - - tags.each do |k, articles_in_tag| - articles_in_tag.sort { |a, b| - b.data.date <=> a.data.date - }.per_page(2).each do |items, num, meta, is_last| - page_path = num == 1 ? "/tags/#{k}.html" : "/tags/#{k}/page/#{num}.html" - - prev_page = case num - when 1 - nil - when 2 - "/tags/#{k}.html" - when 3 - "/tags/#{k}/page/#{num-1}.html" - end - - next_page = is_last ? nil : "/tags/#{k}/page/#{num+1}.html" - - proxy page_path, "/archive/2011/index.html", locals: { - items: items, - pagination: meta, - prev_page: prev_page, - next_page: next_page - } - end - end - """ - And the Server is running - When I go to "/2011/index.html" - Then I should see "Paginate: true" - Then I should see "Article Count: 5" - Then I should see "Page Num: 1" - Then I should see "Num Pages: 2" - Then I should see "Per Page: 5" - Then I should see "Page Start: 1" - Then I should see "Page End: 5" - Then I should see "Next Page: '/2011/page/2.html'" - Then I should see "Prev Page: ''" - Then I should not see "/blog/2011-01-01-test-article.html" - Then I should not see "/blog/2011-01-02-test-article.html" - Then I should see "/blog/2011-01-03-test-article.html" - Then I should see "/blog/2011-01-04-test-article.html" - Then I should see "/blog/2011-01-05-test-article.html" - Then I should see "/blog/2011-02-01-test-article.html" - Then I should see "/blog/2011-02-02-test-article.html" - - When I go to "/2011/page/2.html" - Then I should see "Article Count: 2" - Then I should see "Page Num: 2" - Then I should see "Page Start: 6" - Then I should see "Page End: 7" - Then I should see "Next Page: ''" - Then I should see "Prev Page: '/2011/'" - Then I should see "/2011-01-01-test-article.html" - Then I should see "/2011-01-02-test-article.html" - Then I should not see "/2011-01-03-test-article.html" - Then I should not see "/2011-01-04-test-article.html" - Then I should not see "/2011-01-05-test-article.html" - Then I should not see "/2011-02-01-test-article.html" - Then I should not see "/2011-02-02-test-article.html" - - When I go to "/tags/bar.html" - Then I should see "Paginate: true" - Then I should see "Article Count: 2" - Then I should see "Page Num: 1" - Then I should see "Num Pages: 3" - Then I should see "Per Page: 2" - Then I should see "Page Start: 1" - Then I should see "Page End: 2" - Then I should see "Next Page: '/tags/bar/page/2.html'" - Then I should see "Prev Page: ''" - Then I should see "/2011-02-02-test-article.html" - Then I should see "/2011-02-01-test-article.html" - Then I should not see "/2011-02-05-test-article.html" - Then I should not see "/2011-01-04-test-article.html" - Then I should not see "/2011-01-03-test-article.html" - - Scenario: Custom pager method - Given a fixture app "paginate-app" - And a file named "config.rb" with: - """ - def items_per_page(all_items) - [ - all_items.shift(2), - all_items - ] - end - - articles = resources.select { |r| - matcher = ::Middleman::Util::UriTemplates.uri_template('blog/2011-{remaining}') - ::Middleman::Util::UriTemplates.extract_params(matcher, ::Middleman::Util.normalize_path(r.url)) - } - - articles.sort { |a, b| - b.data.date <=> a.data.date - }.per_page(method(:items_per_page).to_proc).each do |items, num, meta, is_last| - page_path = num == 1 ? '/2011/index.html' : "/2011/page/#{num}.html" - - prev_page = case num - when 1 - nil - when 2 - '/2011/index.html' - when 3 - "/2011/page/#{num-1}.html" - end - - next_page = is_last ? nil : "/2011/page/#{num+1}.html" - - proxy page_path, "/archive/2011/index.html", locals: { - items: items, - pagination: meta, - prev_page: prev_page, - next_page: next_page - } - end - """ - And the Server is running - When I go to "/2011/index.html" - Then I should see "Paginate: true" - Then I should see "Article Count: 2" - Then I should see "Page Num: 1" - Then I should see "Num Pages: 2" - Then I should see "Per Page: 2" - Then I should see "Page Start: 1" - Then I should see "Page End: 2" - Then I should see "Next Page: '/2011/page/2.html'" - Then I should see "Prev Page: ''" - Then I should not see "/blog/2011-01-01-test-article.html" - Then I should not see "/blog/2011-01-02-test-article.html" - Then I should not see "/blog/2011-01-03-test-article.html" - Then I should not see "/blog/2011-01-04-test-article.html" - Then I should not see "/blog/2011-01-05-test-article.html" - Then I should see "/blog/2011-02-01-test-article.html" - Then I should see "/blog/2011-02-02-test-article.html" - - When I go to "/2011/page/2.html" - Then I should see "Article Count: 5" - Then I should see "Page Num: 2" - Then I should see "Page Start: 3" - Then I should see "Page End: 7" - Then I should see "Next Page: ''" - Then I should see "Prev Page: '/2011/'" - Then I should see "/2011-01-01-test-article.html" - Then I should see "/2011-01-02-test-article.html" - Then I should see "/2011-01-03-test-article.html" - Then I should see "/2011-01-04-test-article.html" - Then I should see "/2011-01-05-test-article.html" - Then I should not see "/2011-02-01-test-article.html" - Then I should not see "/2011-02-02-test-article.html" diff --git a/middleman-core/features/partials.feature b/middleman-core/features/partials.feature index 8a0154c2..965215a9 100644 --- a/middleman-core/features/partials.feature +++ b/middleman-core/features/partials.feature @@ -5,30 +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 + Scenario: Finds shared partials without _ prefix Given the Server is running at "partials-app" - When I go to "/index_missing.html" - Then I should see "Error: Could not locate partial" - + When I go to "/using_snippet.html" + Then I should see "Snippet" + 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" @@ -38,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" @@ -55,10 +55,3 @@ 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" diff --git a/middleman-core/features/partials_dir.feature b/middleman-core/features/partials_dir.feature new file mode 100644 index 00000000..8648c8e2 --- /dev/null +++ b/middleman-core/features/partials_dir.feature @@ -0,0 +1,30 @@ +Feature: Partials dir + Scenario: Find partials in a custom partials dir + Given a fixture app "partials-dir-app" + And a file named "config.rb" with: + """ + set :partials_dir, 'partials' + """ + And the Server is running + When I go to "/index.html" + Then I should see "contents of the partial" + + Scenario: Find partials in a nested custom partials dir + Given a fixture app "partials-dir-app" + And a file named "config.rb" with: + """ + set :partials_dir, 'nested/partials' + """ + And the Server is running + When I go to "/index.html" + Then I should see "contents of the nested partial" + + Scenario: Find partials in the default partials dir + Given a fixture app "default-partials-dir-app" + And a file named "config.rb" with: + """ + """ + And the Server is running + When I go to "/index.html" + Then I should see "contents of the partial" + diff --git a/middleman-core/features/proxy_pages.feature b/middleman-core/features/proxy_pages.feature index 4a22727c..522f1eb8 100644 --- a/middleman-core/features/proxy_pages.feature +++ b/middleman-core/features/proxy_pages.feature @@ -15,6 +15,8 @@ Feature: Proxy Pages (using proxy rather than page) | fake2/two.html | | fake3/one.html | | fake3/two.html | + | fake4/one.html | + | fake4/two.html | | target_ignore.html | | target_ignore2.html | | target_ignore3.html | @@ -33,6 +35,8 @@ Feature: Proxy Pages (using proxy rather than page) Then I should see "I am real" When I go to "/fake3.html" 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 "proxy-pages-app" @@ -45,6 +49,9 @@ Feature: Proxy Pages (using proxy rather than page) When I go to "/fake3/one.html" Then I should see "I am real: one" + When I go to "/fake4/one.html" + Then I should see "I am real: one" + Scenario: Preview proxy with variable two Given the Server is running at "proxy-pages-app" When I go to "/fake/two.html" @@ -55,6 +62,9 @@ Feature: Proxy Pages (using proxy rather than page) When I go to "/fake3/two.html" Then I should see "I am real: two" + + When I go to "/fake4/two.html" + Then I should see "I am real: two" Scenario: Build proxy with variable one Given a successfully built app at "proxy-pages-app" diff --git a/middleman-core/features/queryable.feature b/middleman-core/features/queryable.feature new file mode 100644 index 00000000..1382db3f --- /dev/null +++ b/middleman-core/features/queryable.feature @@ -0,0 +1,35 @@ +Feature: Queryable Selector + Scenario: Basic Selector Tests + Then should initialize with an attribute and an operator + Then should raise an exception if the operator is not supported + Scenario: Using offset and limit + Given the Server is running at "queryable-app" + Then should limit the documents to the number specified + Then should offset the documents by the number specified + Then should support offset and limit at the same time + Then should not freak out about an offset higher than the document count + Scenario: Using where queries with an equal operator + Given the Server is running at "queryable-app" + Then should return the right documents + Then should be chainable + Then should not be confused by attributes not present in all documents + Scenario: Using where queries with a complex operator + Given the Server is running at "queryable-app" + Then with a gt operator should return the right documents + Then with a gte operator should return the right documents + Then with an in operator should return the right documents + Then with an lt operator should return the right documents + Then with an lte operator should return the right documents + Then with an include operator include should return the right documents + Then with mixed operators should return the right documents + Then using multiple constrains in one where should return the right documents + Scenario: Sorting documents + Given the Server is running at "queryable-app" + Then should support ordering by attribute ascending + Then should support ordering by attribute descending + Then should order by attribute ascending by default + Then should exclude documents that do not own the attribute + Scenario: Passing queries around + Given a simple 'where' query + When I chain a where clause onto that query + Then the original query should remain unchanged diff --git a/middleman-core/features/redirects.feature b/middleman-core/features/redirects.feature index c1549128..f01e9aac 100644 --- a/middleman-core/features/redirects.feature +++ b/middleman-core/features/redirects.feature @@ -4,7 +4,7 @@ Feature: Meta redirects Given a fixture app "large-build-app" And a file named "config.rb" with: """ - redirect "hello.html", to: "world.html" + redirect "hello.html", :to => "world.html" """ And the Server is running at "large-build-app" When I go to "/hello.html" @@ -15,7 +15,7 @@ Feature: Meta redirects Given a fixture app "large-build-app" And a file named "config.rb" with: """ - redirect "hello.html", to: "http://example.com" + redirect "hello.html", :to => "http://example.com" """ And the Server is running at "large-build-app" When I go to "/hello.html" @@ -27,7 +27,7 @@ Feature: Meta redirects """ ready do r = sitemap.find_resource_by_path("static.html") - redirect "hello.html", to: r + redirect "hello.html", :to => r end """ And the Server is running at "large-build-app" @@ -39,8 +39,8 @@ Feature: Meta redirects And a file named "config.rb" with: """ activate :directory_indexes - redirect "hello.html", to: "link_test.html" - redirect "hello2.html", to: "services/index.html" + redirect "hello.html", :to => "link_test.html" + redirect "hello2.html", :to => "services/index.html" """ And the Server is running at "large-build-app" When I go to "/hello/index.html" @@ -52,7 +52,7 @@ Feature: Meta redirects Given a fixture app "large-build-app" And a file named "config.rb" with: """ - redirect "hello.html", to: "world.html" do |from, to| + redirect "hello.html", :to => "world.html" do |from, to| "#{from} to #{to}" end """ diff --git a/middleman-core/features/relative_assets.feature b/middleman-core/features/relative_assets.feature index ba131396..e0c6b16f 100644 --- a/middleman-core/features/relative_assets.feature +++ b/middleman-core/features/relative_assets.feature @@ -6,7 +6,7 @@ Feature: Relative Assets And the Server is running at "relative-assets-app" When I go to "/stylesheets/relative_assets.css" Then I should not see "url('../" - And I should see '/images/blank.gif")' + And I should see "/images/blank.gif')" Scenario: Building css with the feature disabled Given a fixture app "relative-assets-app" @@ -15,7 +15,7 @@ Feature: Relative Assets """ Given a successfully built app at "relative-assets-app" When I cd to "build" - Then the file "stylesheets/relative_assets.css" should contain 'url("/images/blank.gif")' + Then the file "stylesheets/relative_assets.css" should contain "url('/images/blank.gif')" Scenario: Rendering html with the feature disabled Given "relative_assets" feature is "disabled" @@ -33,19 +33,7 @@ Feature: Relative Assets Given "relative_assets" feature is "enabled" 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 "/javascripts/application.js" - Then I should not see "../" - When I go to "/stylesheets/fonts.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' - 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' + Then I should see "url('../images/blank.gif" Scenario: Building css with the feature enabled Given a fixture app "relative-assets-app" @@ -55,8 +43,7 @@ Feature: Relative Assets """ Given a successfully built app at "relative-assets-app" When I cd to "build" - Then the file "stylesheets/relative_assets.css" should contain 'url("../images/blank.gif")' - Then the file "javascripts/application.js" should not contain "../" + Then the file "stylesheets/relative_assets.css" should contain "url('../images/blank.gif')" Scenario: Relative css reference with directory indexes Given a fixture app "relative-assets-app" @@ -69,30 +56,60 @@ Feature: Relative Assets When I cd to "build" Then the file "relative_image/index.html" should contain "../stylesheets/relative_assets.css" - Scenario: Rendering html with the feature enabled (overrides relative option on helpers) + Scenario: Rendering html with the feature enabled Given "relative_assets" feature is "enabled" And the Server is running at "relative-assets-app" When I go to "/relative_image.html" Then I should see '"stylesheets/relative_assets.css"' Then I should see '"javascripts/app.js"' When I go to "/relative_image_absolute_css.html" - Then I should see '"stylesheets/relative_assets.css"' - Then I should see '"javascripts/app.js"' + Then I should see '"/stylesheets/relative_assets.css"' + Then I should see '"/javascripts/app.js"' Then I should not see "/images/blank.gif" And I should see "images/blank.gif" + Scenario: Rendering css with a custom images_dir + Given "relative_assets" feature is "enabled" + And "images_dir" is set to "img" + And the Server is running at "relative-assets-app" + When I go to "/stylesheets/relative_assets.css" + Then I should see "url('../img/blank.gif')" + + Scenario: Building css with a custom images_dir + Given a fixture app "relative-assets-app" + And a file named "config.rb" with: + """ + set :images_dir, "img" + activate :relative_assets + """ + Given a successfully built app at "relative-assets-app" + When I cd to "build" + Then the file "stylesheets/relative_assets.css" should contain "url('../img/blank.gif')" + + Scenario: Rendering html with a custom images_dir + Given "relative_assets" feature is "enabled" + And "images_dir" is set to "img" + And the Server is running at "relative-assets-app" + When I go to "/relative_image.html" + Then I should not see "/images/blank.gif" + Then I should not see "/img/blank.gif" + And I should see "img/blank.gif" + Scenario: Rendering scss with the feature enabled Given "relative_assets" feature is "enabled" And the Server is running at "fonts-app" When I go to "/stylesheets/fonts.css" - Then I should see: - """ - url("../fonts/StMarie-Thin.otf" - """ - And I should see: - """ - url("../fonts/blank/blank.otf" - """ + Then I should see "url('../fonts/StMarie-Thin.otf" + And I should see "url('../fonts/blank/blank.otf" + + Scenario: Rendering scss with the feature enabled and a custom fonts_dir + Given "relative_assets" feature is "enabled" + And "fonts_dir" is set to "otf" + And the Server is running at "fonts-app" + When I go to "/stylesheets/fonts.css" + Then I should not see "url('../fonts/StMarie-Thin.otf" + And I should see "url('../otf/StMarie-Thin.otf" + And I should see "url('../otf/blank/blank.otf" Scenario: Building scss with the feature enabled Given a fixture app "fonts-app" @@ -102,14 +119,21 @@ Feature: Relative Assets """ Given a successfully built app at "fonts-app" When I cd to "build" - Then the file "stylesheets/fonts.css" should contain: + Then the file "stylesheets/fonts.css" should contain "url('../fonts/StMarie-Thin.otf')" + And the file "stylesheets/fonts.css" should contain "url('../fonts/blank/blank.otf')" + + Scenario: Building scss with the feature enabled and a custom fonts_dir + Given a fixture app "fonts-app" + And a file named "config.rb" with: """ - url("../fonts/StMarie-Thin.otf") - """ - And the file "stylesheets/fonts.css" should contain: - """ - url("../fonts/blank/blank.otf") + set :fonts_dir, "otf" + activate :relative_assets """ + Given a successfully built app at "fonts-app" + When I cd to "build" + Then the file "stylesheets/fonts.css" should not contain "url('../fonts/StMarie-Thin.otf')" + And the file "stylesheets/fonts.css" should contain "url('../otf/StMarie-Thin.otf')" + And the file "stylesheets/fonts.css" should contain "url('../otf/blank/blank.otf')" Scenario: Relative assets via image_tag Given a fixture app "relative-assets-app" @@ -120,7 +144,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 '