Compare commits
1 commit
Author | SHA1 | Date | |
---|---|---|---|
|
8909d9cbbf |
999 changed files with 39329 additions and 37664 deletions
|
@ -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
|
|
6
.gitignore
vendored
6
.gitignore
vendored
|
@ -1,6 +1,3 @@
|
||||||
.byebug_history
|
|
||||||
npm-debug.log
|
|
||||||
manifest.yaml
|
|
||||||
/.bundle
|
/.bundle
|
||||||
.DS_Store
|
.DS_Store
|
||||||
coverage
|
coverage
|
||||||
|
@ -13,7 +10,6 @@ Gemfile.lock
|
||||||
docs
|
docs
|
||||||
.rbenv-*
|
.rbenv-*
|
||||||
.ruby-version
|
.ruby-version
|
||||||
.ruby-gemset
|
|
||||||
.*.swp
|
.*.swp
|
||||||
build
|
build
|
||||||
doc
|
doc
|
||||||
|
@ -24,4 +20,4 @@ Makefile
|
||||||
.idea
|
.idea
|
||||||
*.sublime-workspace
|
*.sublime-workspace
|
||||||
/bin
|
/bin
|
||||||
middleman-core/fixtures/compass-sprites-app/source/images/icon-s0de2218f58.png
|
middleman-core/fixtures/compass-sprites-app/source/images/icon-s0de2218f58.png
|
79
.rubocop.yml
79
.rubocop.yml
|
@ -1,24 +1,19 @@
|
||||||
AllCops:
|
AllCops:
|
||||||
Include:
|
Includes:
|
||||||
- '**/Rakefile'
|
- Rakefile
|
||||||
- '**/Gemfile'
|
- Gemfile
|
||||||
- '**/config.ru'
|
- config.ru
|
||||||
- '**/gem_rake_helper.rb'
|
- gem_rake_helper.rb
|
||||||
Exclude:
|
Excludes:
|
||||||
- 'script/**/*'
|
- script/**
|
||||||
- 'vendor/**/*'
|
- vendor/**
|
||||||
- '**/tmp/**/*'
|
- bin/**
|
||||||
- '**/bin/**/*'
|
- middleman-core/lib/vendored-middleman-deps/**
|
||||||
- 'middleman-core/lib/middleman-core/step_definitions/**/*'
|
- middleman-core/bin/**
|
||||||
- 'middleman-core/fixtures/**/*'
|
- middleman-core/fixtures/**
|
||||||
- 'middleman-core/features/**/*'
|
- middleman-core/features/**
|
||||||
- 'middleman-core/spec/**/*'
|
- middleman-core/spec/**
|
||||||
- 'middleman-cli/lib/middleman-cli/templates/**/*'
|
- middleman-templates/lib/middleman-templates/**
|
||||||
- 'middleman-cli/fixtures/**/*'
|
|
||||||
- 'middleman-cli/features/**/*'
|
|
||||||
- 'middleman-cli/spec/**/*'
|
|
||||||
DoubleNegation:
|
|
||||||
Enabled: false
|
|
||||||
LineLength:
|
LineLength:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
MethodLength:
|
MethodLength:
|
||||||
|
@ -27,45 +22,7 @@ ClassLength:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
Documentation:
|
Documentation:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
Encoding:
|
||||||
|
Enabled: false
|
||||||
HashSyntax:
|
HashSyntax:
|
||||||
EnforcedStyle: ruby19
|
EnforcedStyle: ruby19
|
||||||
SpaceAroundEqualsInParameterDefault:
|
|
||||||
EnforcedStyle: no_space
|
|
||||||
PerlBackrefs:
|
|
||||||
Enabled: false
|
|
||||||
ClassAndModuleChildren:
|
|
||||||
Enabled: false
|
|
||||||
AssignmentInCondition:
|
|
||||||
Enabled: false
|
|
||||||
CyclomaticComplexity:
|
|
||||||
Enabled: false
|
|
||||||
HandleExceptions:
|
|
||||||
Enabled: false
|
|
||||||
EndAlignment:
|
|
||||||
AlignWith: variable
|
|
||||||
SignalException:
|
|
||||||
Enabled: false
|
|
||||||
RegexpLiteral:
|
|
||||||
Enabled: false
|
|
||||||
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
|
|
31
.travis.yml
31
.travis.yml
|
@ -1,23 +1,30 @@
|
||||||
language: ruby
|
language: ruby
|
||||||
sudo: false
|
|
||||||
cache: bundler
|
cache: bundler
|
||||||
before_script:
|
env: TEST=true
|
||||||
- bundle update
|
bundler_args: --without development
|
||||||
|
before_install: git submodule update --init --recursive
|
||||||
rvm:
|
rvm:
|
||||||
- ruby-head
|
- ruby-head
|
||||||
- 2.3.1
|
- ruby
|
||||||
- 2.2.4
|
- jruby-head
|
||||||
os:
|
- jruby
|
||||||
- linux
|
- jruby-19mode
|
||||||
# - osx
|
- 2.1.1
|
||||||
|
- 2.1.0
|
||||||
|
- 2.0.0
|
||||||
|
- 1.9.3
|
||||||
|
- rbx-2
|
||||||
matrix:
|
matrix:
|
||||||
fast_finish: true
|
fast_finish: true
|
||||||
allow_failures:
|
allow_failures:
|
||||||
- rvm: ruby-head
|
- rvm: ruby-head
|
||||||
env:
|
- rvm: ruby
|
||||||
global:
|
- rvm: jruby-head
|
||||||
- TEST=true
|
- rvm: jruby
|
||||||
- CODECLIMATE_REPO_TOKEN=81787f7b1c3bfa937edadcafbc94f807bf5af5c1142c7b793f2d9969a271de1f
|
- rvm: jruby-19mode
|
||||||
|
- rvm: rbx-2
|
||||||
|
env: TEST=true
|
||||||
|
before_install: git submodule update --init --recursive
|
||||||
script: bundle exec rake test
|
script: bundle exec rake test
|
||||||
notifications:
|
notifications:
|
||||||
slack: middleman:JW9OvXmn1m3XrSERe8866nBR
|
slack: middleman:JW9OvXmn1m3XrSERe8866nBR
|
||||||
|
|
|
@ -7,5 +7,4 @@ middleman-*/lib/**/*.rb
|
||||||
--exclude middleman-cli/lib/middleman-cli/templates/shared/
|
--exclude middleman-cli/lib/middleman-cli/templates/shared/
|
||||||
--exclude middleman-cli/lib/middleman-cli/templates/extension/
|
--exclude middleman-cli/lib/middleman-cli/templates/extension/
|
||||||
--no-private
|
--no-private
|
||||||
--hide-void-return
|
--hide-void-return
|
||||||
--markup=markdown
|
|
599
CHANGELOG.md
599
CHANGELOG.md
|
@ -1,148 +1,6 @@
|
||||||
master
|
master
|
||||||
===
|
===
|
||||||
|
|
||||||
# 4.1.13
|
|
||||||
|
|
||||||
* Change how config options are passed to Thor. Removes new Thor warnings from #2017
|
|
||||||
|
|
||||||
# 4.1.12
|
|
||||||
|
|
||||||
* Fix broken `ignore { |p| true }` form.
|
|
||||||
|
|
||||||
# 4.1.11
|
|
||||||
|
|
||||||
* Upgrade to Rack 2.
|
|
||||||
|
|
||||||
# 4.1.10
|
|
||||||
|
|
||||||
* Fix unicode issues in URL deeplinks.
|
|
||||||
* Add prefix option to asset_hash (#1949)
|
|
||||||
|
|
||||||
# 4.1.9
|
|
||||||
|
|
||||||
* Fix `--watcher-*` CLI flags.
|
|
||||||
* Allow spaces in paths to work with `link_to`. Fixes #1914
|
|
||||||
* Add support for dotenv
|
|
||||||
* Fix asset_url with asset_hash (#1919)
|
|
||||||
* Allow partial lookups without a current_resource (#1912)
|
|
||||||
|
|
||||||
# 4.1.8
|
|
||||||
|
|
||||||
* Expose `development?` and `production?` helpers to template context.
|
|
||||||
* require the `try` core extension (#1911)
|
|
||||||
* Fix contract for Sitemap::Store.register_resource_list_manipulator (#1907)
|
|
||||||
* Loosen contract on Resource#source_file to Maybe[String] (#1906)
|
|
||||||
* Let collection loops access ConfigContext for helpers. #1879
|
|
||||||
* Use https:// to clone templates (#1901)
|
|
||||||
* Allow numbers to be unique page_ids (#1886)
|
|
||||||
* Prevent infinite loop when encountering files where base filename is a possible templating engine
|
|
||||||
|
|
||||||
# 4.1.7
|
|
||||||
|
|
||||||
* Upgrade fastimage to 2.0
|
|
||||||
* Fix shutdown of external_pipeline commands when config.rb is changed. #1877
|
|
||||||
* Allow calls to `app.` to work as collections after initial config parse. #1876
|
|
||||||
|
|
||||||
|
|
||||||
# 4.1.5-4.1.6
|
|
||||||
|
|
||||||
* Fix file recursion when looking for possible asset dependencies. Major preview server performance improvement.
|
|
||||||
|
|
||||||
# 4.1.4
|
|
||||||
|
|
||||||
* Unify default extensions for all URL processing extensions. #1855
|
|
||||||
* Fix URL regex for `content: ` context of CSS. #1853
|
|
||||||
* Make sure CLI config over-rides `config.rb` order.
|
|
||||||
* Fix relative assets in some contexts. #1842
|
|
||||||
|
|
||||||
# 4.1.3
|
|
||||||
|
|
||||||
* Expose all top-level config options to CLI (flags now match config. latency -> watcher_latency, etc).
|
|
||||||
* Fix directory indexes with `.htm` and `.xhtml` files. #1821
|
|
||||||
|
|
||||||
# 4.1.2
|
|
||||||
|
|
||||||
* Add `page_id` concept. Using the `id` key in frontmatter, proxy or page will set an ID on a resource which can be referenced by `url_for` and `link_to`.
|
|
||||||
* Allow looking for `Gemfile` when setting up a project to fail gracefully.
|
|
||||||
* Send correct exit code when external_pipeline fails during build.
|
|
||||||
* Fix error when customizing `layouts_dir`. #1028
|
|
||||||
* Fix collections (commands in loops) not being processed by `page` command. #1226
|
|
||||||
* Correctly asset_hash sourcemap references.
|
|
||||||
|
|
||||||
# 4.1.1
|
|
||||||
|
|
||||||
* Fix bad code that made `/__middleman/` break.
|
|
||||||
|
|
||||||
# 4.1.0
|
|
||||||
|
|
||||||
* Add rewrite_ignore option to asset_hash, asset_host, cache_buster & relative_assets. This proc let's you opt-out of the extension behavior on a per-path basis.
|
|
||||||
* gzip extension now compresses svgs by default
|
|
||||||
* Fix the `encoding` option.
|
|
||||||
* Fix relative paths on `image_tag` helper.
|
|
||||||
* Correctly exit with error code on failed `init`
|
|
||||||
* Fixed `asset_hash` when path has query string or #hashes
|
|
||||||
* Fix new extension template
|
|
||||||
* Don't parse frontmatter on ignored files.
|
|
||||||
* Fix displaying frontmatter on `/__middleman/sitemap`
|
|
||||||
* Add `skip_build_clean` config which when set to a block, will avoid removing non-generated paths from build, like .git #1716
|
|
||||||
* Minor performance improvements
|
|
||||||
* DRY-up config.rb-specific commands like `ignore` or `path`.
|
|
||||||
* Fix automatic images with absolute (or images dir missing) paths in markdown. Fixes #1755
|
|
||||||
* Fix asset_host in combination with Google Analytics snippet. #1751
|
|
||||||
* Show an error message when git CLI is not available. #1765
|
|
||||||
* Correctly show file names of GZIP'ed assets. #1364
|
|
||||||
* Build file output is now parallel-ized! Use `middleman build --no-parallel` to disable.
|
|
||||||
* Make template file extensions that get layouts by default configurable via `config[:extensions_with_layout]`
|
|
||||||
* Remove `=` from inline url matcher. This means paths in HTML attributes MUST be quoted. Fixes #1780
|
|
||||||
|
|
||||||
# 4.0.0
|
|
||||||
|
|
||||||
* Add `:locales` and `:data` source types to the list of files which trigger a live-reload.
|
|
||||||
* Rename i18n `lang` and `langs` to `locale` and `locales`.
|
|
||||||
* Avoid matching URLs across new lines. #1689
|
|
||||||
* Load Middleman Directory when doing `init` over SSL
|
|
||||||
* 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).
|
* Removed ability to server folders of content statically (non-Middleman projects).
|
||||||
* Prevent local templates being loaded when $HOME is not set
|
* Prevent local templates being loaded when $HOME is not set
|
||||||
* Removed "Implied Extension feature"
|
* Removed "Implied Extension feature"
|
||||||
|
@ -158,4 +16,459 @@ master
|
||||||
* Remove deprecated `request` instance
|
* Remove deprecated `request` instance
|
||||||
* Remove old module-style extension support
|
* Remove old module-style extension support
|
||||||
* Placed all `config.rb` evaluation inside the `ConfigContext` class
|
* Placed all `config.rb` evaluation inside the `ConfigContext` class
|
||||||
* 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`
|
* Add :format and :keep_original options to :asset_hash
|
||||||
|
|
||||||
|
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
|
||||||
|
|
|
@ -29,9 +29,6 @@ Ideally, a bug report should include a pull request with failing specs.
|
||||||
[gist]: https://gist.github.com/
|
[gist]: https://gist.github.com/
|
||||||
|
|
||||||
## Submitting a Pull Request
|
## Submitting a Pull Request
|
||||||
|
|
||||||
**WE DO NOT ACCEPT NEW FEATURES FOR THE V3 BRANCH ANYMORE**
|
|
||||||
|
|
||||||
1. [Fork the repository.][fork]
|
1. [Fork the repository.][fork]
|
||||||
2. Create a topic [branch]. `git checkout -b local_topic_branch`
|
2. Create a topic [branch]. `git checkout -b local_topic_branch`
|
||||||
3. Add specs for your unimplemented feature or bug fix.
|
3. Add specs for your unimplemented feature or bug fix.
|
66
Gemfile
66
Gemfile
|
@ -1,52 +1,42 @@
|
||||||
source 'https://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
# Build and doc tools
|
# Build and doc tools
|
||||||
gem 'rake', '~> 10.3', require: false
|
gem 'rake', '~> 10.0.3', require: false
|
||||||
gem 'yard', '~> 0.8', require: false
|
gem 'yard', '~> 0.8.0', require: false
|
||||||
|
|
||||||
# Test tools
|
# Test tools
|
||||||
gem 'byebug'
|
gem 'cucumber', '~> 1.3.1'
|
||||||
gem 'aruba', '~> 0.7.4', require: false
|
gem 'fivemat', '~> 1.2.1'
|
||||||
gem 'rspec', '~> 3.0', require: false
|
gem 'aruba', '~> 0.5.1'
|
||||||
gem 'cucumber', '~> 2.0', require: false
|
gem 'rspec', '~> 2.12'
|
||||||
gem 'addressable', '~> 2.4.0', require: false
|
gem 'simplecov'
|
||||||
|
|
||||||
# Pry tools
|
|
||||||
gem 'pry'
|
|
||||||
gem 'pry-stack_explorer'
|
|
||||||
gem 'pry-rescue'
|
|
||||||
|
|
||||||
# Optional middleman dependencies, included for tests
|
# Optional middleman dependencies, included for tests
|
||||||
gem 'haml', '>= 4.0.5', require: false
|
gem 'haml', '~> 4.0.0', require: false # Make sure to use Haml 4 for tests
|
||||||
gem 'sassc', '~> 1.8', require: false
|
gem 'sinatra', require: false
|
||||||
gem 'coffee-script', '~> 2.2', require: false
|
gem 'slim', require: false
|
||||||
gem 'kramdown', '~> 1.2', require: false
|
gem 'liquid', require: false
|
||||||
gem 'slim', '>= 2.0', require: false
|
gem 'less', '~> 2.3.0', require: false
|
||||||
gem 'liquid', '>= 2.6', require: false
|
gem 'stylus', require: false
|
||||||
gem 'stylus', '>= 1.0', require: false
|
|
||||||
gem 'sinatra', '>= 2.0.0.beta2', require: false
|
|
||||||
gem 'redcarpet', '>= 3.1', require: false
|
|
||||||
|
|
||||||
# Dns server to test preview server
|
platforms :ruby do
|
||||||
gem 'rubydns', '~> 1.0.1', require: false
|
gem 'therubyracer'
|
||||||
|
gem 'redcarpet', '~> 3.1'
|
||||||
|
gem 'pry', require: false, group: :development
|
||||||
|
end
|
||||||
|
|
||||||
# To test javascript
|
platforms :jruby do
|
||||||
gem 'poltergeist', '~> 1.8', require: false
|
gem 'therubyrhino'
|
||||||
gem 'phantomjs', '~> 2.1.1.0', require: false
|
end
|
||||||
|
|
||||||
# For less, note there is no compatible JS runtime for windows
|
|
||||||
gem 'therubyrhino', '>= 2.0', platforms: :jruby
|
|
||||||
gem 'therubyracer', '>= 0.12', platforms: :ruby
|
|
||||||
|
|
||||||
# Code Quality
|
# Code Quality
|
||||||
gem 'rubocop', '~> 0.24', require: false
|
gem 'cane', platforms: [:mri_19, :mri_20], require: false
|
||||||
gem 'simplecov', '~> 0.10', require: false
|
gem 'coveralls', require: false
|
||||||
gem 'coveralls', '~> 0.8', require: false
|
gem 'rubocop', require: false, group: :development
|
||||||
gem 'codeclimate-test-reporter', '~> 0.3', require: false, group: :test
|
|
||||||
|
|
||||||
# Middleman itself
|
# Middleman itself
|
||||||
gem 'middleman-cli', path: 'middleman-cli'
|
|
||||||
gem 'middleman-core', path: 'middleman-core'
|
gem 'middleman-core', path: 'middleman-core'
|
||||||
|
gem 'middleman-cli', path: 'middleman-cli'
|
||||||
# gem 'middleman-compass', github: 'middleman/middleman-compass', require: false
|
gem 'middleman-templates', path: 'middleman-templates'
|
||||||
# gem 'middleman-sprockets', github: 'middleman/middleman-sprockets', require: false
|
gem 'middleman-sprockets', github: 'middleman/middleman-sprockets', require: false
|
||||||
|
gem 'middleman', path: 'middleman'
|
||||||
|
|
|
@ -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:
|
|
40
README.md
40
README.md
|
@ -1,7 +1,5 @@
|
||||||
# Middleman - Makes developing websites simple
|
# Middleman - Makes developing websites simple
|
||||||
|
|
||||||
[![Gitter](https://badges.gitter.im/Join Chat.svg)](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](http://middlemanapp.com/basics/getting-started/). You can also follow [@middlemanapp](https://twitter.com/middlemanapp) for updates.
|
||||||
|
|
||||||
## Why Middleman?
|
## Why Middleman?
|
||||||
|
@ -10,7 +8,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
|
* [Sass](http://sass-lang.com/) for DRY stylesheets
|
||||||
* [CoffeeScript](http://coffeescript.org/) for safer and less verbose javascript
|
* [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
|
* [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?
|
**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 +17,7 @@ These days, many websites are built with an API in mind. Rather than package the
|
||||||
|
|
||||||
## Installation
|
## 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 for installation. These are usually pre-installed on Mac OS X and Linux. Windows users can install both using [RubyInstaller].
|
||||||
|
|
||||||
```
|
```
|
||||||
gem install middleman
|
gem install middleman
|
||||||
|
@ -64,13 +62,11 @@ Additionally, up-to-date generated code documentation is available on [RubyDoc].
|
||||||
|
|
||||||
## Build & Dependency Status
|
## Build & Dependency Status
|
||||||
|
|
||||||
[![Gem Version](http://img.shields.io/gem/v/middleman.svg?style=flat)][gem]
|
[![Gem Version](http://img.shields.io/gem/v/middleman.svg)][gem]
|
||||||
[![License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)][license]
|
[![Build Status](http://img.shields.io/travis/middleman/middleman.svg)][travis]
|
||||||
[![Dependency Status](http://img.shields.io/gemnasium/middleman/middleman.svg?style=flat)][gemnasium]
|
[![Code Coverage](http://img.shields.io/coveralls/middleman/middleman.svg)][coveralls]
|
||||||
[![Build Status](http://img.shields.io/travis/middleman/middleman.svg?style=flat)][travis]
|
[![Dependency Status](http://img.shields.io/gemnasium/middleman/middleman.svg)][gemnasium]
|
||||||
[![Code Coverage](http://img.shields.io/coveralls/middleman/middleman.svg?style=flat)][coveralls]
|
[![Code Quality](http://img.shields.io/codeclimate/github/middleman/middleman.svg)][codeclimate]
|
||||||
[![Code Quality](http://img.shields.io/codeclimate/github/middleman/middleman.svg?style=flat)][codeclimate]
|
|
||||||
[![Gittip](http://img.shields.io/gittip/middleman.svg?style=flat)][gittip]
|
|
||||||
|
|
||||||
## Community
|
## Community
|
||||||
|
|
||||||
|
@ -91,27 +87,11 @@ The best way to get quick responses to your issues and swift fixes to your bugs
|
||||||
|
|
||||||
## Donate
|
## Donate
|
||||||
|
|
||||||
[Click here to lend your support to Middleman](https://plasso.co/s/4dXbHBorC3)
|
[Click here to lend your support to Middleman](https://spacebox.io/s/4dXbHBorC3)
|
||||||
|
|
||||||
## Versioning
|
|
||||||
|
|
||||||
This library aims to adhere to [Semantic Versioning 2.0.0][semver]. Violations
|
|
||||||
of this scheme should be reported as bugs. Specifically, if a minor or patch
|
|
||||||
version is released that breaks backward compatibility, that version should be
|
|
||||||
immediately yanked and/or a new version should be immediately released that
|
|
||||||
restores compatibility. Breaking changes to the public API will only be
|
|
||||||
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'
|
|
||||||
|
|
||||||
[semver]: http://semver.org/
|
|
||||||
[pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Copyright (c) 2010-2015 Thomas Reynolds. MIT Licensed, see [LICENSE] for details.
|
Copyright (c) 2010-2014 Thomas Reynolds. MIT Licensed, see [LICENSE] for details.
|
||||||
|
|
||||||
[middleman]: http://middlemanapp.com
|
[middleman]: http://middlemanapp.com
|
||||||
[gem]: https://rubygems.org/gems/middleman
|
[gem]: https://rubygems.org/gems/middleman
|
||||||
|
@ -119,8 +99,6 @@ Copyright (c) 2010-2015 Thomas Reynolds. MIT Licensed, see [LICENSE] for details
|
||||||
[coveralls]: https://coveralls.io/r/middleman/middleman
|
[coveralls]: https://coveralls.io/r/middleman/middleman
|
||||||
[gemnasium]: https://gemnasium.com/middleman/middleman
|
[gemnasium]: https://gemnasium.com/middleman/middleman
|
||||||
[codeclimate]: https://codeclimate.com/github/middleman/middleman
|
[codeclimate]: https://codeclimate.com/github/middleman/middleman
|
||||||
[gittip]: https://www.gittip.com/middleman/
|
|
||||||
[rubyinstaller]: http://rubyinstaller.org/
|
[rubyinstaller]: http://rubyinstaller.org/
|
||||||
[RubyInstaller-Devkit]: http://rubyinstaller.org/add-ons/devkit/
|
|
||||||
[rubydoc]: http://rubydoc.info/github/middleman/middleman
|
[rubydoc]: http://rubydoc.info/github/middleman/middleman
|
||||||
[LICENSE]: https://github.com/middleman/middleman/blob/master/LICENSE.md
|
[LICENSE]: https://github.com/middleman/middleman/blob/master/LICENSE.md
|
||||||
|
|
88
Rakefile
88
Rakefile
|
@ -1,66 +1,118 @@
|
||||||
|
require 'rubygems' unless defined?(Gem)
|
||||||
|
# require 'fileutils' unless defined?(FileUtils)
|
||||||
require 'rake'
|
require 'rake'
|
||||||
|
|
||||||
require File.expand_path('../middleman-core/lib/middleman-core/version.rb', __FILE__)
|
require File.expand_path('../middleman-core/lib/middleman-core/version.rb', __FILE__)
|
||||||
|
|
||||||
ROOT = File.expand_path(File.dirname(__FILE__))
|
ROOT = File.expand_path(File.dirname(__FILE__))
|
||||||
GEM_NAME = 'middleman'.freeze
|
GEM_NAME = 'middleman'
|
||||||
|
|
||||||
middleman_gems = %w(middleman-core middleman-cli middleman)
|
middleman_gems = %w(middleman-core middleman-templates middleman-cli middleman)
|
||||||
GEM_PATHS = middleman_gems.freeze
|
GEM_PATHS = middleman_gems.freeze
|
||||||
|
|
||||||
def sh_rake(command)
|
def sh_rake(command)
|
||||||
sh "#{Gem.ruby} -S rake #{command}", verbose: true
|
sh "#{Gem.ruby} -S rake #{command}", :verbose => true
|
||||||
|
end
|
||||||
|
|
||||||
|
def say(text, color=:magenta)
|
||||||
|
n = { :bold => 1, :red => 31, :green => 32, :yellow => 33, :blue => 34, :magenta => 35 }.fetch(color, 0)
|
||||||
|
puts "\e[%dm%s\e[0m" % [n, text]
|
||||||
|
end
|
||||||
|
|
||||||
|
desc "Run 'install' for all projects"
|
||||||
|
task :install do
|
||||||
|
GEM_PATHS.each do |dir|
|
||||||
|
Dir.chdir(dir) { sh_rake(:install) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'Clean pkg and other stuff'
|
||||||
|
task :clean do
|
||||||
|
GEM_PATHS.each do |g|
|
||||||
|
%w[tmp pkg coverage].each { |dir| sh 'rm -rf %s' % File.join(g, dir) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'Clean pkg and other stuff'
|
||||||
|
task :uninstall do
|
||||||
|
sh 'gem search --no-version middleman | grep middleman | xargs gem uninstall -a'
|
||||||
end
|
end
|
||||||
|
|
||||||
desc 'Displays the current version'
|
desc 'Displays the current version'
|
||||||
task :version do
|
task :version do
|
||||||
puts "Current version: #{Middleman::VERSION}"
|
say "Current version: #{Middleman::VERSION}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
desc 'Bumps the version number based on given version'
|
||||||
|
task :bump, [:version] do |t, args|
|
||||||
|
raise 'Please specify version=x.x.x !' unless args.version
|
||||||
|
version_path = File.dirname(__FILE__) + '/middleman-core/lib/middleman-core/version.rb'
|
||||||
|
version_text = File.read(version_path).sub(/VERSION = '[\d\.\w]+'/, "VERSION = '#{args.version}'")
|
||||||
|
say "Updating Middleman to version #{args.version}"
|
||||||
|
File.open(version_path, 'w') { |f| f.write version_text }
|
||||||
|
sh 'git commit -a -m "Bumped version to %s"' % args.version
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'Executes a fresh install removing all middleman version and then reinstall all gems'
|
||||||
|
task :fresh => [:uninstall, :install, :clean]
|
||||||
|
|
||||||
desc 'Pushes repository to GitHub'
|
desc 'Pushes repository to GitHub'
|
||||||
task :push do
|
task :push do
|
||||||
puts 'Pushing to github...'
|
say 'Pushing to github...'
|
||||||
sh "git tag v#{Middleman::VERSION}"
|
sh "git tag v#{Middleman::VERSION}"
|
||||||
sh 'git push'
|
sh 'git push origin master'
|
||||||
sh "git push origin v#{Middleman::VERSION}"
|
sh "git push origin v#{Middleman::VERSION}"
|
||||||
end
|
end
|
||||||
|
|
||||||
desc 'Release all middleman gems'
|
desc 'Release all middleman gems'
|
||||||
task publish: :push do
|
task :publish => :push do
|
||||||
puts 'Pushing to rubygems...'
|
say 'Pushing to rubygems...'
|
||||||
GEM_PATHS.each do |dir|
|
GEM_PATHS.each do |dir|
|
||||||
Dir.chdir(dir) { sh_rake('release') }
|
Dir.chdir(dir) { sh_rake('release') }
|
||||||
end
|
end
|
||||||
|
Rake::Task['clean'].invoke
|
||||||
end
|
end
|
||||||
|
|
||||||
desc 'Generate documentation for all middleman gems'
|
desc 'Generate documentation for all middleman gems'
|
||||||
task :doc do
|
task :doc do
|
||||||
GEM_PATHS.each do |g|
|
GEM_PATHS.each do |g|
|
||||||
Dir.chdir(File.join(ROOT, g).to_s) { sh "#{Gem.ruby} -S rake yard" }
|
Dir.chdir("#{File.join(ROOT, g)}") { sh "#{Gem.ruby} -S rake yard" }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
desc 'Run tests for all middleman gems'
|
desc 'Run tests for all middleman gems'
|
||||||
task :test do
|
task :test do
|
||||||
Rake::Task['rubocop'].invoke
|
|
||||||
|
|
||||||
GEM_PATHS.each do |g|
|
GEM_PATHS.each do |g|
|
||||||
Dir.chdir(File.join(ROOT, g).to_s) { sh "#{Gem.ruby} -S rake test" }
|
Dir.chdir("#{File.join(ROOT, g)}") { sh "#{Gem.ruby} -S rake test" }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
desc 'Run specs for all middleman gems'
|
desc 'Run specs for all middleman gems'
|
||||||
task :spec do
|
task :spec do
|
||||||
GEM_PATHS.each do |g|
|
GEM_PATHS.each do |g|
|
||||||
Dir.chdir(File.join(ROOT, g).to_s) { sh "#{Gem.ruby} -S rake spec" }
|
Dir.chdir("#{File.join(ROOT, g)}") { sh "#{Gem.ruby} -S rake spec" }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
require 'rubocop/rake_task'
|
begin
|
||||||
desc 'Run RuboCop to check code consistency'
|
require 'cane/rake_task'
|
||||||
RuboCop::RakeTask.new(:rubocop) do |task|
|
desc 'Run cane to check quality metrics'
|
||||||
task.fail_on_error = false
|
Cane::RakeTask.new(:quality) do |cane|
|
||||||
|
cane.no_style = true
|
||||||
|
cane.no_doc = true
|
||||||
|
cane.abc_glob = 'middleman*/lib/middleman*/**/*.rb'
|
||||||
|
end
|
||||||
|
rescue LoadError
|
||||||
|
end
|
||||||
|
|
||||||
|
begin
|
||||||
|
require 'rubocop/rake_task'
|
||||||
|
desc 'Run RuboCop to check code consistency'
|
||||||
|
Rubocop::RakeTask.new(:rubocop) do |task|
|
||||||
|
task.fail_on_error = false
|
||||||
|
end
|
||||||
|
rescue LoadError
|
||||||
end
|
end
|
||||||
|
|
||||||
desc 'Run tests for all middleman gems'
|
desc 'Run tests for all middleman gems'
|
||||||
task default: :test
|
task :default => :test
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
require 'rubygems' unless defined?(Gem)
|
||||||
require 'rake'
|
require 'rake'
|
||||||
require 'yard'
|
require 'yard'
|
||||||
|
|
||||||
|
@ -18,28 +19,27 @@ Cucumber::Rake::Task.new do |t|
|
||||||
exempt_tags = ['--tags ~@wip']
|
exempt_tags = ['--tags ~@wip']
|
||||||
exempt_tags << '--tags ~@nojava' if RUBY_PLATFORM == 'java'
|
exempt_tags << '--tags ~@nojava' if RUBY_PLATFORM == 'java'
|
||||||
exempt_tags << '--tags ~@encoding' unless Object.const_defined?(:Encoding)
|
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'
|
exempt_tags << '--tags ~@travishatesme' if ENV['TRAVIS'] == 'true'
|
||||||
t.cucumber_opts = "--require features --color #{exempt_tags.join(' ')} --strict" # --format #{ENV['CUCUMBER_FORMAT'] || 'Fivemat'}"
|
t.cucumber_opts = "--color #{exempt_tags.join(" ")} --strict --format #{ENV['CUCUMBER_FORMAT'] || 'Fivemat'}"
|
||||||
end
|
end
|
||||||
|
|
||||||
Cucumber::Rake::Task.new(:cucumber_wip) do |t|
|
Cucumber::Rake::Task.new(:cucumber_wip) do |t|
|
||||||
exempt_tags = ['--tags @wip']
|
exempt_tags = ['--tags @wip']
|
||||||
|
exempt_tags << '--tags ~@nojava' if RUBY_PLATFORM == 'java'
|
||||||
exempt_tags << '--tags ~@encoding' unless Object.const_defined?(:Encoding)
|
exempt_tags << '--tags ~@encoding' unless Object.const_defined?(:Encoding)
|
||||||
exempt_tags << '--tags ~@nowindows' if Gem.win_platform?
|
t.cucumber_opts = "--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
|
end
|
||||||
|
|
||||||
require 'rspec/core/rake_task'
|
require 'rspec/core/rake_task'
|
||||||
desc 'Run RSpec'
|
desc 'Run RSpec'
|
||||||
RSpec::Core::RakeTask.new do |spec|
|
RSpec::Core::RakeTask.new do |spec|
|
||||||
spec.pattern = 'spec/**/*_spec.rb'
|
spec.pattern = 'spec/**/*_spec.rb'
|
||||||
spec.rspec_opts = ['--color', '--format documentation']
|
spec.rspec_opts = ['--color', '--format nested']
|
||||||
end
|
end
|
||||||
|
|
||||||
desc 'Run tests, both RSpec and Cucumber'
|
desc 'Run tests, both RSpec and Cucumber'
|
||||||
task test: [:spec, :cucumber]
|
task :test => [:spec, :cucumber]
|
||||||
|
|
||||||
YARD::Rake::YardocTask.new
|
YARD::Rake::YardocTask.new
|
||||||
|
|
||||||
task default: :test
|
task :default => :test
|
||||||
|
|
|
@ -5,5 +5,4 @@ lib/**/*.rb
|
||||||
--exclude lib/middleman-cli/templates/shared/
|
--exclude lib/middleman-cli/templates/shared/
|
||||||
--exclude lib/middleman-cli/templates/extension/
|
--exclude lib/middleman-cli/templates/extension/
|
||||||
--no-private
|
--no-private
|
||||||
--hide-void-return
|
--hide-void-return
|
||||||
--markup=markdown
|
|
|
@ -1,4 +1,4 @@
|
||||||
# coding:utf-8
|
# coding:utf-8
|
||||||
RAKE_ROOT = __FILE__.freeze
|
RAKE_ROOT = __FILE__
|
||||||
GEM_NAME = 'middleman-cli'.freeze
|
GEM_NAME = 'middleman-cli'
|
||||||
require File.expand_path(File.dirname(__FILE__) + '/../gem_rake_helper')
|
require File.expand_path(File.dirname(__FILE__) + '/../gem_rake_helper')
|
||||||
|
|
|
@ -4,67 +4,15 @@ require 'middleman-core/profiling'
|
||||||
if ARGV.include? '--profile'
|
if ARGV.include? '--profile'
|
||||||
Middleman::Profiling.profiler = Middleman::Profiling::RubyProfProfiler.new
|
Middleman::Profiling.profiler = Middleman::Profiling::RubyProfProfiler.new
|
||||||
end
|
end
|
||||||
# Middleman::Profiling.start
|
Middleman::Profiling.start
|
||||||
|
|
||||||
require "middleman-core/load_paths"
|
require "middleman-core/load_paths"
|
||||||
Middleman.setup_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"
|
require "middleman-cli"
|
||||||
|
|
||||||
# Change directory to the root
|
# Change directory to the root
|
||||||
Dir.chdir(ENV["MM_ROOT"]) if ENV["MM_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
|
# Start the CLI
|
||||||
Middleman::Cli::Base.start(ARGV)
|
Middleman::Cli::Base.start
|
||||||
|
|
|
@ -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
|
|
|
@ -1,17 +0,0 @@
|
||||||
Feature: Run preview server before hook
|
|
||||||
|
|
||||||
Scenario: When run
|
|
||||||
Given a fixture app "preview-server-hook-app"
|
|
||||||
And the default aruba timeout is 30 seconds
|
|
||||||
When I run `middleman server --server-name localhost --bind-address 127.0.0.1` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
### END ###
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
/// 127.0.0.1:4567 ///
|
|
||||||
/// 4567 ///
|
|
||||||
/// localhost ///
|
|
||||||
/// http://localhost:4567 ///
|
|
||||||
"""
|
|
|
@ -1,536 +0,0 @@
|
||||||
Feature: Run the preview server
|
|
||||||
|
|
||||||
As a software developer
|
|
||||||
I want to start the preview server
|
|
||||||
In order to view my changes immediately in the browser
|
|
||||||
|
|
||||||
Background:
|
|
||||||
Given a fixture app "preview-server-app"
|
|
||||||
And the default aruba timeout is 30 seconds
|
|
||||||
|
|
||||||
Scenario: Start the server with defaults
|
|
||||||
When I run `middleman server` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "http://
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "http://
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with defaults in verbose mode
|
|
||||||
When I run `middleman server --verbose` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to ":::4567", "0.0.0.0:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "http://
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "http://
|
|
||||||
"""
|
|
||||||
|
|
||||||
@wip
|
|
||||||
Scenario: Start the server with defaults in verbose mode, when a local mdns server resolves the local hostname
|
|
||||||
Given I start a mdns server for the local hostname
|
|
||||||
When I run `middleman server --verbose` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to ":::4567", "0.0.0.0:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "http://
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "http://
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with bind address 127.0.0.1
|
|
||||||
Given I have a local hosts file with:
|
|
||||||
"""
|
|
||||||
# <ip-address> <hostname.domain.org> <hostname>
|
|
||||||
127.0.0.1 localhost.localdomain localhost
|
|
||||||
"""
|
|
||||||
When I run `middleman server --verbose --bind-address 127.0.0.1` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to "127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "http://127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "http://127.0.0.1:4567/__middleman"
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with bind address 127.0.0.1 configured via config.rb
|
|
||||||
Given I have a local hosts file with:
|
|
||||||
"""
|
|
||||||
# <ip-address> <hostname.domain.org> <hostname>
|
|
||||||
127.0.0.1 localhost.localdomain localhost
|
|
||||||
"""
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
set :bind_address, '127.0.0.1'
|
|
||||||
"""
|
|
||||||
When I run `middleman server --verbose` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to "127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "http://127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "http://127.0.0.1:4567/__middleman"
|
|
||||||
"""
|
|
||||||
|
|
||||||
@wip
|
|
||||||
Scenario: Start the server with bind address 127.0.0.5
|
|
||||||
|
|
||||||
This will have no hostname attached because the hosts file, the DNS server
|
|
||||||
and the MDNS-server do not know anything about 127.0.0.5
|
|
||||||
|
|
||||||
When I run `middleman server --verbose --bind-address 127.0.0.5` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to "127.0.0.5:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "http://127.0.0.5:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "http://127.0.0.5:4567/__middleman"
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with bind address ::1
|
|
||||||
Given a file named ".hosts" with:
|
|
||||||
"""
|
|
||||||
# <ip-address> <hostname.domain.org> <hostname>
|
|
||||||
::1 localhost.localdomain localhost
|
|
||||||
"""
|
|
||||||
When I run `middleman server --verbose --bind-address ::1` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to "::1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "http://[::1]:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "http://[::1]:4567/__middleman"
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with bind address 0.0.0.0
|
|
||||||
When I run `middleman server --verbose --bind-address 0.0.0.0` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to "0.0.0.0:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "http://
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "http://
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with bind address ::
|
|
||||||
When I run `middleman server --verbose --bind-address ::` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to ":::4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "http://
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "http://
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with server name "localhost"
|
|
||||||
Given I have a local hosts file with:
|
|
||||||
"""
|
|
||||||
# <ip-address> <hostname.domain.org> <hostname>
|
|
||||||
127.0.0.1 localhost.localdomain localhost
|
|
||||||
"""
|
|
||||||
When I run `middleman server --verbose --server-name localhost` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to "127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "http://localhost:4567", "http://127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "http://localhost:4567/__middleman", "http://127.0.0.1:4567/__middleman"
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with server name "localhost" configured via config.rb
|
|
||||||
Given I have a local hosts file with:
|
|
||||||
"""
|
|
||||||
# <ip-address> <hostname.domain.org> <hostname>
|
|
||||||
127.0.0.1 localhost.localdomain localhost
|
|
||||||
"""
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
set :server_name, 'localhost'
|
|
||||||
"""
|
|
||||||
When I run `middleman server --verbose` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to "127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "http://localhost:4567", "http://127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "http://localhost:4567/__middleman", "http://127.0.0.1:4567/__middleman"
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with server name "localhost" and bind address "127.0.0.1"
|
|
||||||
Given I have a local hosts file with:
|
|
||||||
"""
|
|
||||||
# <ip-address> <hostname.domain.org> <hostname>
|
|
||||||
127.0.0.1 localhost.localdomain localhost
|
|
||||||
"""
|
|
||||||
When I run `middleman server --verbose --server-name localhost --bind-address 127.0.0.1` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to "127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "http://localhost:4567", "http://127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "http://localhost:4567/__middleman", "http://127.0.0.1:4567/__middleman"
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with server name "127.0.0.1"
|
|
||||||
When I run `middleman server --verbose --server-name 127.0.0.1` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to "127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "http://127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "http://127.0.0.1:4567/__middleman"
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with server name "::1"
|
|
||||||
When I run `middleman server --verbose --server-name ::1` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to "::1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "http://[::1]:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "http://[::1]:4567/__middleman"
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with https
|
|
||||||
When I run `middleman server --verbose --https` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to ":::4567", "0.0.0.0:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "https://
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "https://
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with port 65432
|
|
||||||
When I run `middleman server --verbose --port 65432` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to ":::65432", "0.0.0.0:65432"
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with port 65432 configured via config.rb
|
|
||||||
Given a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
set :port, 65432
|
|
||||||
"""
|
|
||||||
When I run `middleman server --verbose` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to ":::65432", "0.0.0.0:65432"
|
|
||||||
"""
|
|
||||||
|
|
||||||
@wip
|
|
||||||
Scenario: Start the server when port is blocked by other middleman instance
|
|
||||||
Given `middleman server` is running in background
|
|
||||||
When I run `middleman server --verbose` interactively
|
|
||||||
And I stop all commands if the output of the last command contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman uses a different port
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with bind address 1.1.1.1
|
|
||||||
|
|
||||||
This should fail, because "1.1.1.1" is not an interface available on this computer.
|
|
||||||
|
|
||||||
Given a file named ".hosts" with:
|
|
||||||
"""
|
|
||||||
1.1.1.1 www.example.com www
|
|
||||||
"""
|
|
||||||
When I run `middleman server --verbose --bind-address 1.1.1.1` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Running Middleman failed:
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
Bind address "1.1.1.1" is not available on your system
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with server name www.example.com and bind address 0.0.0.0
|
|
||||||
|
|
||||||
This should fail, because the user can just use `--server-name`. It does
|
|
||||||
not make sense for `middleman` to only listen on `0.0.0.0` (IPv4 all
|
|
||||||
interfaces), but not on `::` (IPv6 all interfaces). There are other tools
|
|
||||||
like `iptables` (Linux-only) or better some `kernel`-configurations to make
|
|
||||||
this possible.
|
|
||||||
|
|
||||||
When I run `middleman server --verbose --server-name www.example.com --bind-address 0.0.0.0` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Running Middleman failed:
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
Undefined combination of options "--server-name" and "--bind-address".
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with server name "www.example.com" and bind address "127.0.0.1"
|
|
||||||
|
|
||||||
This should fail because the server name does not resolve to the ip address.
|
|
||||||
|
|
||||||
Given a file named ".hosts" with:
|
|
||||||
"""
|
|
||||||
1.1.1.1 www.example.com www
|
|
||||||
"""
|
|
||||||
When I run `middleman server --verbose --server-name www.example.com --bind-address 127.0.0.1` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Running Middleman failed:
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
Server name "www.example.com" does not resolve to bind address "127.0.0.1". Please fix that and try again.
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with server name "garbage.example.com"
|
|
||||||
When I run `middleman server --verbose --server-name garbage.example.com` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Running Middleman failed:
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
Server name "garbage.example.com" does not resolve to an ip address. Please fix that and try again.
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Start the server with server name "www.example.com" and the network name server is used to resolve the server name
|
|
||||||
Given I have a local hosts file with:
|
|
||||||
"""
|
|
||||||
# empty
|
|
||||||
"""
|
|
||||||
And I start a mdns server with:
|
|
||||||
"""
|
|
||||||
# empty
|
|
||||||
"""
|
|
||||||
And I start a dns server with:
|
|
||||||
"""
|
|
||||||
www.example.com: 127.0.0.1
|
|
||||||
"""
|
|
||||||
When I run `middleman server --verbose --server-name www.example.com` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to "127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "http://www.example.com:4567", "http://127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "http://www.example.com:4567/__middleman", "http://127.0.0.1:4567/__middleman"
|
|
||||||
"""
|
|
||||||
|
|
||||||
@ruby-2.1
|
|
||||||
@wip
|
|
||||||
Scenario: Start the server with server name "host.local" and the link local name server is used to resolve the server name
|
|
||||||
|
|
||||||
To make the mdns resolver resolve a name, it needs to end with ".local".
|
|
||||||
Otherwise the resolver returns [].
|
|
||||||
|
|
||||||
Given I have a local hosts file with:
|
|
||||||
"""
|
|
||||||
# empty
|
|
||||||
"""
|
|
||||||
And I start a mdns server with:
|
|
||||||
"""
|
|
||||||
host.local: 127.0.0.1
|
|
||||||
"""
|
|
||||||
When I run `middleman server --verbose --server-name host.local` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to "127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "http://host.local:4567", "http://127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "http://host.local:4567/__middleman", "http://127.0.0.1:4567/__middleman"
|
|
||||||
"""
|
|
||||||
|
|
||||||
@ruby-2.1
|
|
||||||
@wip
|
|
||||||
Scenario: Start the server with server name "host" and the link local name server is used to resolve the server name
|
|
||||||
|
|
||||||
To make the mdns resolver resolve a name, it needs to end with ".local". If
|
|
||||||
a plain hostname is given `middleman` appends ".local" automatically.
|
|
||||||
|
|
||||||
Given I have a local hosts file with:
|
|
||||||
"""
|
|
||||||
# empty
|
|
||||||
"""
|
|
||||||
And I start a mdns server with:
|
|
||||||
"""
|
|
||||||
host.local: 127.0.0.1
|
|
||||||
"""
|
|
||||||
When I run `middleman server --verbose --server-name host` interactively
|
|
||||||
And I stop middleman if the output contains:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration
|
|
||||||
"""
|
|
||||||
Then the output should contain:
|
|
||||||
"""
|
|
||||||
The Middleman preview server is bound to "127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
View your site at "http://host.local:4567", "http://127.0.0.1:4567"
|
|
||||||
"""
|
|
||||||
And the output should contain:
|
|
||||||
"""
|
|
||||||
Inspect your site configuration at "http://host.local:4567/__middleman", "http://127.0.0.1:4567/__middleman"
|
|
||||||
"""
|
|
|
@ -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')
|
|
|
@ -1,33 +0,0 @@
|
||||||
#!/usr/bin/env ruby
|
|
||||||
|
|
||||||
require 'rubydns'
|
|
||||||
require 'psych'
|
|
||||||
|
|
||||||
db_file = ARGV[0]
|
|
||||||
port = ARGV[1] || 5300
|
|
||||||
|
|
||||||
db = if File.file? db_file
|
|
||||||
$stderr.puts 'Found dns db'
|
|
||||||
Psych.load_file(db_file)
|
|
||||||
else
|
|
||||||
$stderr.puts 'Found no dns db. Use default db.'
|
|
||||||
|
|
||||||
{
|
|
||||||
/www\.example\.org/ => '1.1.1.1'
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
interfaces = [
|
|
||||||
[:udp, "127.0.0.1", port],
|
|
||||||
[:tcp, "127.0.0.1", port]
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
# Start the RubyDNS server
|
|
||||||
RubyDNS::run_server(listen: interfaces) do
|
|
||||||
db.each do |matcher, result|
|
|
||||||
match(matcher, Resolv::DNS::Resource::IN::A) do |transaction|
|
|
||||||
transaction.respond!(result)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1 +0,0 @@
|
||||||
<h1>Welcome</h1>
|
|
|
@ -1,9 +0,0 @@
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>My Sample Site</title>
|
|
||||||
<!-- Comment in layout -->
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<%= yield %>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1 +0,0 @@
|
||||||
I am real
|
|
|
@ -1,5 +0,0 @@
|
||||||
---
|
|
||||||
layout: false
|
|
||||||
---
|
|
||||||
|
|
||||||
I am real: <%= @num %>
|
|
|
@ -1 +0,0 @@
|
||||||
<h1>Ignore me!</h1>
|
|
|
@ -1 +0,0 @@
|
||||||
<h1>Ignore me! 2</h1>
|
|
|
@ -1 +0,0 @@
|
||||||
<h1>Ignore me! 3</h1>
|
|
|
@ -1 +0,0 @@
|
||||||
Static, no code!
|
|
|
@ -1,19 +0,0 @@
|
||||||
set :layout, false
|
|
||||||
|
|
||||||
class MyFeature < Middleman::Extension
|
|
||||||
def initialize(app, options_hash = {}, &block)
|
|
||||||
super
|
|
||||||
|
|
||||||
app.before_server do |server_information|
|
|
||||||
puts "/// #{server_information.listeners.first} ///"
|
|
||||||
puts "/// #{server_information.port} ///"
|
|
||||||
puts "/// #{server_information.server_name} ///"
|
|
||||||
puts "/// #{server_information.site_addresses.first} ///"
|
|
||||||
puts "/// ### END ### ///"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
::Middleman::Extensions.register(:my_feature, MyFeature)
|
|
||||||
|
|
||||||
activate :my_feature
|
|
|
@ -1,9 +0,0 @@
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>preview-server-hook-app</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>preview-server-hook-app</h1>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,23 +1,96 @@
|
||||||
# rubocop:disable FileName
|
|
||||||
|
|
||||||
# Setup our load paths
|
# Setup our load paths
|
||||||
libdir = File.expand_path(File.dirname(__FILE__))
|
libdir = File.expand_path(File.dirname(__FILE__))
|
||||||
$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
|
$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
|
||||||
|
|
||||||
# Require Thor since that's what the whole CLI is built around
|
# Require Thor since that's what the whole CLI is built around
|
||||||
require 'thor'
|
require 'thor'
|
||||||
|
require 'thor/group'
|
||||||
|
|
||||||
# CLI Module
|
# CLI Module
|
||||||
module Middleman::Cli
|
module Middleman
|
||||||
# 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?
|
module Cli
|
||||||
true
|
|
||||||
|
# The base task from which everything else extends
|
||||||
|
class Base < Thor
|
||||||
|
class << self
|
||||||
|
def start(*args)
|
||||||
|
# Change flag to a module
|
||||||
|
ARGV.unshift('help') if ARGV.delete('--help')
|
||||||
|
|
||||||
|
# Default command is server
|
||||||
|
if ARGV[0] != 'help' && (ARGV.length < 1 || ARGV.first.include?('-'))
|
||||||
|
ARGV.unshift('server')
|
||||||
|
end
|
||||||
|
|
||||||
|
super
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'version', 'Show version'
|
||||||
|
def version
|
||||||
|
say "Middleman #{Middleman::VERSION}"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Override the Thor help method to find help for subtasks
|
||||||
|
# @param [Symbol, String, nil] meth
|
||||||
|
# @param [Boolean] subcommand
|
||||||
|
# @return [void]
|
||||||
|
def help(meth = nil, subcommand = false)
|
||||||
|
if meth && !self.respond_to?(meth)
|
||||||
|
klass, task = Thor::Util.find_class_and_task_by_namespace("#{meth}:#{meth}")
|
||||||
|
klass.start(['-h', task].compact, :shell => self.shell)
|
||||||
|
else
|
||||||
|
list = []
|
||||||
|
Thor::Util.thor_classes_in(Middleman::Cli).each do |thor_class|
|
||||||
|
list += thor_class.printable_tasks(false)
|
||||||
|
end
|
||||||
|
list.sort!{ |a,b| a[0] <=> b[0] }
|
||||||
|
|
||||||
|
shell.say 'Tasks:'
|
||||||
|
shell.print_table(list, :ident => 2, :truncate => true)
|
||||||
|
shell.say %(\nSee 'middleman help <command>' for more information on specific command.)
|
||||||
|
shell.say
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Intercept missing methods and search subtasks for them
|
||||||
|
# @param [Symbol] meth
|
||||||
|
def method_missing(meth, *args)
|
||||||
|
meth = meth.to_s
|
||||||
|
|
||||||
|
if self.class.map.has_key?(meth)
|
||||||
|
meth = self.class.map[meth]
|
||||||
|
end
|
||||||
|
|
||||||
|
klass, task = Thor::Util.find_class_and_task_by_namespace("#{meth}:#{meth}")
|
||||||
|
|
||||||
|
if klass.nil?
|
||||||
|
tasks_dir = File.join(Dir.pwd, 'tasks')
|
||||||
|
|
||||||
|
if File.exists?(tasks_dir)
|
||||||
|
Dir[File.join(tasks_dir, '**/*_task.rb')].each { |f| require f }
|
||||||
|
klass, task = Thor::Util.find_class_and_task_by_namespace("#{meth}:#{meth}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if klass.nil?
|
||||||
|
raise Thor::Error.new "There's no '#{meth}' command for Middleman. Try 'middleman help' for a list of commands."
|
||||||
|
else
|
||||||
|
args.unshift(task) if task
|
||||||
|
klass.start(args, :shell => self.shell)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Require the Middleman version
|
||||||
|
require 'middleman-core/version'
|
||||||
|
|
||||||
|
# Include the core CLI items
|
||||||
|
require 'middleman-cli/init'
|
||||||
|
require 'middleman-cli/extension'
|
||||||
|
require 'middleman-cli/server'
|
||||||
|
require 'middleman-cli/build'
|
||||||
|
require 'middleman-cli/console'
|
||||||
|
|
|
@ -1,140 +1,301 @@
|
||||||
require 'middleman-core/application'
|
require 'fileutils'
|
||||||
|
require 'set'
|
||||||
|
|
||||||
# CLI Module
|
# CLI Module
|
||||||
module Middleman::Cli
|
module Middleman::Cli
|
||||||
|
# Alias "b" to "build"
|
||||||
|
Base.map({ 'b' => 'build' })
|
||||||
|
|
||||||
# The CLI Build class
|
# The CLI Build class
|
||||||
class Build < Thor::Group
|
class Build < Thor
|
||||||
include Thor::Actions
|
include Thor::Actions
|
||||||
|
|
||||||
|
attr_reader :debugging
|
||||||
|
attr_accessor :had_errors
|
||||||
|
|
||||||
check_unknown_options!
|
check_unknown_options!
|
||||||
|
|
||||||
class_option :environment,
|
namespace :build
|
||||||
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)
|
desc 'build [options]', 'Builds the static site for deployment'
|
||||||
|
method_option :clean,
|
||||||
|
:type => :boolean,
|
||||||
|
:default => true,
|
||||||
|
:desc => 'Remove orphaned files from build (--no-clean to disable)'
|
||||||
|
method_option :glob,
|
||||||
|
:type => :string,
|
||||||
|
:aliases => '-g',
|
||||||
|
:default => nil,
|
||||||
|
:desc => 'Build a subset of the project'
|
||||||
|
method_option :verbose,
|
||||||
|
:type => :boolean,
|
||||||
|
:default => false,
|
||||||
|
:desc => 'Print debug messages'
|
||||||
|
method_option :instrument,
|
||||||
|
:type => :string,
|
||||||
|
:default => false,
|
||||||
|
:desc => 'Print instrument messages'
|
||||||
|
method_option :profile,
|
||||||
|
:type => :boolean,
|
||||||
|
:default => false,
|
||||||
|
:desc => 'Generate profiling report for the build'
|
||||||
|
|
||||||
# Core build Thor command
|
# Core build Thor command
|
||||||
# @return [void]
|
# @return [void]
|
||||||
def build
|
def build
|
||||||
unless ENV['MM_ROOT']
|
if !ENV['MM_ROOT']
|
||||||
raise Thor::Error, 'Error: Could not find a Middleman project config, perhaps you are in the wrong folder?'
|
raise Thor::Error, 'Error: Could not find a Middleman project config, perhaps you are in the wrong folder?'
|
||||||
end
|
end
|
||||||
|
|
||||||
require 'middleman-core'
|
require 'middleman-core'
|
||||||
require 'middleman-core/logger'
|
require 'middleman-core/logger'
|
||||||
require 'middleman-core/builder'
|
|
||||||
require 'fileutils'
|
|
||||||
|
|
||||||
verbose = options['verbose'] ? 0 : 1
|
require 'rack'
|
||||||
instrument = options['instrument']
|
require 'rack/mock'
|
||||||
|
|
||||||
builder = nil
|
require 'find'
|
||||||
cli_options = options
|
|
||||||
|
|
||||||
::Middleman::Logger.singleton(verbose, instrument)
|
@debugging = Middleman::Cli::Base.respond_to?(:debugging) && Middleman::Cli::Base.debugging
|
||||||
|
self.had_errors = false
|
||||||
|
|
||||||
::Middleman::Util.instrument 'builder.setup' do
|
self.class.shared_instance(options['verbose'], options['instrument'])
|
||||||
@app = ::Middleman::Application.new do
|
|
||||||
config[:mode] = :build
|
opts = {}
|
||||||
config[:show_exceptions] = false
|
opts[:glob] = options['glob'] if options.has_key?('glob')
|
||||||
config[:cli_options] = cli_options.each_with_object({}) do |(k, v), sum|
|
opts[:clean] = options['clean']
|
||||||
sum[k] = v
|
|
||||||
end
|
self.class.shared_instance.run_hook :before_build, self
|
||||||
|
|
||||||
|
action BuildAction.new(self, opts)
|
||||||
|
|
||||||
|
self.class.shared_instance.run_hook :after_build, self
|
||||||
|
self.class.shared_instance.config_context.execute_after_build_callbacks(self)
|
||||||
|
|
||||||
|
if self.had_errors && !self.debugging
|
||||||
|
msg = 'There were errors during this build'
|
||||||
|
unless options['verbose']
|
||||||
|
msg << ', re-run with `middleman build --verbose` to see the full exception.'
|
||||||
end
|
end
|
||||||
|
self.shell.say msg, :red
|
||||||
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
|
end
|
||||||
|
|
||||||
::Middleman::Util.instrument 'builder.run' do
|
exit(1) if self.had_errors
|
||||||
if builder.run!
|
end
|
||||||
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)
|
# Static methods
|
||||||
|
class << self
|
||||||
|
def exit_on_failure?
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
# Middleman::Application singleton
|
||||||
|
#
|
||||||
|
# @return [Middleman::Application]
|
||||||
|
def shared_instance(verbose=false, instrument=false)
|
||||||
|
@_shared_instance ||= ::Middleman::Application.server.inst do
|
||||||
|
config[:environment] = :build
|
||||||
|
::Middleman::Logger.singleton(verbose ? 0 : 1, instrument)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
# A Thor Action, modular code, which does the majority of the work.
|
||||||
|
class BuildAction < ::Thor::Actions::EmptyDirectory
|
||||||
|
attr_reader :source
|
||||||
|
attr_reader :logger
|
||||||
|
|
||||||
# Handles incoming events from the builder.
|
# Setup the action
|
||||||
# @param [Symbol] event_type The type of event.
|
#
|
||||||
# @param [String] contents The event contents.
|
# @param [Middleman::Cli::Build] base
|
||||||
# @param [String] extra The extra information.
|
# @param [Hash] config
|
||||||
|
def initialize(base, config={})
|
||||||
|
@app = base.class.shared_instance
|
||||||
|
@source_dir = Pathname(@app.source_dir)
|
||||||
|
@build_dir = Pathname(@app.config[:build_dir])
|
||||||
|
@to_clean = Set.new
|
||||||
|
|
||||||
|
@logger = @app.logger
|
||||||
|
@rack = ::Rack::MockRequest.new(@app.class.to_rack_app)
|
||||||
|
|
||||||
|
super(base, @build_dir, config)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Execute the action
|
||||||
# @return [void]
|
# @return [void]
|
||||||
def on_event(event_type, target, extra=nil)
|
def invoke!
|
||||||
case event_type
|
queue_current_paths if should_clean?
|
||||||
when :error
|
execute!
|
||||||
say_status :error, target, :red
|
clean! if should_clean?
|
||||||
shell.say extra, :red if options['verbose']
|
end
|
||||||
when :deleted
|
|
||||||
say_status :remove, target, :green
|
protected
|
||||||
when :created
|
|
||||||
say_status :create, target, :green
|
# Remove files which were not built in this cycle
|
||||||
when :identical
|
# @return [void]
|
||||||
say_status :identical, target, :blue
|
def clean!
|
||||||
when :updated
|
@to_clean.each do |f|
|
||||||
say_status :updated, target, :yellow
|
base.remove_file f, :force => true
|
||||||
else
|
end
|
||||||
say_status event_type, extra, :blue
|
|
||||||
|
Dir[@build_dir.join('**', '*')].select {|d| File.directory?(d) }.each do |d|
|
||||||
|
base.remove_file d, :force => true if directory_empty? d
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Find empty directories in the build folder and remove them.
|
# Whether we should clean the build
|
||||||
# @return [Boolean]
|
# @return [Boolean]
|
||||||
def clean_directories!
|
def should_clean?
|
||||||
all_build_files = File.join(@app.config[:build_dir], '**', '*')
|
@config[:clean]
|
||||||
|
end
|
||||||
|
|
||||||
empty_directories = Dir[all_build_files].select do |d|
|
# Whether the given directory is empty
|
||||||
File.directory?(d)
|
# @param [String, Pathname] directory
|
||||||
|
# @return [Boolean]
|
||||||
|
def directory_empty?(directory)
|
||||||
|
Pathname(directory).children.empty?
|
||||||
|
end
|
||||||
|
|
||||||
|
# Get a list of all the file paths in the destination folder and save them
|
||||||
|
# for comparison against the files we build in this cycle
|
||||||
|
# @return [void]
|
||||||
|
def queue_current_paths
|
||||||
|
return unless File.exist?(@build_dir)
|
||||||
|
|
||||||
|
paths = ::Middleman::Util.all_files_under(@build_dir).map(&:realpath).select(&:file?)
|
||||||
|
|
||||||
|
@to_clean += paths.select do |path|
|
||||||
|
path.to_s !~ /\/\./ || path.to_s =~ /\.(htaccess|htpasswd)/
|
||||||
end
|
end
|
||||||
|
|
||||||
empty_directories.each do |d|
|
if RUBY_PLATFORM =~ /darwin/
|
||||||
remove_file d, force: true if Pathname(d).children.empty?
|
# handle UTF-8-MAC filename on MacOS
|
||||||
|
@to_clean = @to_clean.map { |path| path.to_s.encode('UTF-8', 'UTF-8-MAC') }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Add to CLI
|
# Actually build the app
|
||||||
Base.register(self, 'build', 'build [options]', 'Builds the static site for deployment')
|
# @return [void]
|
||||||
|
def execute!
|
||||||
|
# Sort order, images, fonts, js/css and finally everything else.
|
||||||
|
sort_order = %w(.png .jpeg .jpg .gif .bmp .svg .svgz .ico .woff .otf .ttf .eot .js .css)
|
||||||
|
|
||||||
# Map "b" to "build"
|
# Pre-request CSS to give Compass a chance to build sprites
|
||||||
Base.map('b' => 'build')
|
logger.debug '== Prerendering CSS'
|
||||||
|
|
||||||
|
@app.sitemap.resources.select do |resource|
|
||||||
|
resource.ext == '.css'
|
||||||
|
end.each(&method(:build_resource))
|
||||||
|
|
||||||
|
logger.debug '== Checking for Compass sprites'
|
||||||
|
|
||||||
|
# Double-check for compass sprites
|
||||||
|
@app.files.find_new_files((@source_dir + @app.config[:images_dir]).relative_path_from(@app.root_path))
|
||||||
|
@app.sitemap.ensure_resource_list_updated!
|
||||||
|
|
||||||
|
# Sort paths to be built by the above order. This is primarily so Compass can
|
||||||
|
# find files in the build folder when it needs to generate sprites for the
|
||||||
|
# css files
|
||||||
|
|
||||||
|
logger.debug '== Building files'
|
||||||
|
|
||||||
|
resources = @app.sitemap.resources.sort_by do |r|
|
||||||
|
sort_order.index(r.ext) || 100
|
||||||
|
end
|
||||||
|
|
||||||
|
if @build_dir.expand_path.relative_path_from(@source_dir).to_s =~ /\A[.\/]+\Z/
|
||||||
|
raise ":build_dir (#{@build_dir}) cannot be a parent of :source_dir (#{@source_dir})"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Loop over all the paths and build them.
|
||||||
|
resources.reject do |resource|
|
||||||
|
resource.ext == '.css'
|
||||||
|
end.each(&method(:build_resource))
|
||||||
|
|
||||||
|
::Middleman::Profiling.report('build')
|
||||||
|
end
|
||||||
|
|
||||||
|
def build_resource(resource)
|
||||||
|
return if @config[:glob] && !File.fnmatch(@config[:glob], resource.destination_path)
|
||||||
|
|
||||||
|
output_path = render_to_file(resource)
|
||||||
|
|
||||||
|
if should_clean? && output_path.exist?
|
||||||
|
if RUBY_PLATFORM =~ /darwin/
|
||||||
|
# handle UTF-8-MAC filename on MacOS
|
||||||
|
|
||||||
|
@to_clean.delete(output_path.realpath.to_s.encode('UTF-8', 'UTF-8-MAC'))
|
||||||
|
else
|
||||||
|
@to_clean.delete(output_path.realpath)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Render a resource to a file.
|
||||||
|
#
|
||||||
|
# @param [Middleman::Sitemap::Resource] resource
|
||||||
|
# @return [Pathname] The full path of the file that was written
|
||||||
|
def render_to_file(resource)
|
||||||
|
output_file = @build_dir + resource.destination_path.gsub('%20', ' ')
|
||||||
|
|
||||||
|
if resource.binary?
|
||||||
|
if !output_file.exist?
|
||||||
|
base.say_status :create, output_file, :green
|
||||||
|
elsif FileUtils.compare_file(resource.source_file, output_file)
|
||||||
|
base.say_status :identical, output_file, :blue
|
||||||
|
return output_file
|
||||||
|
else
|
||||||
|
base.say_status :update, output_file, :yellow
|
||||||
|
end
|
||||||
|
|
||||||
|
output_file.dirname.mkpath
|
||||||
|
FileUtils.cp(resource.source_file, output_file)
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
response = @rack.get(URI.escape(resource.request_path))
|
||||||
|
|
||||||
|
if response.status == 200
|
||||||
|
base.create_file(output_file, binary_encode(response.body))
|
||||||
|
else
|
||||||
|
handle_error(output_file, response.body)
|
||||||
|
end
|
||||||
|
rescue => e
|
||||||
|
handle_error(output_file, "#{e}\n#{e.backtrace.join("\n")}", e)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
output_file
|
||||||
|
end
|
||||||
|
|
||||||
|
def handle_error(file_name, response, e=Thor::Error.new(response))
|
||||||
|
base.had_errors = true
|
||||||
|
|
||||||
|
base.say_status :error, file_name, :red
|
||||||
|
if base.debugging
|
||||||
|
raise e
|
||||||
|
exit(1)
|
||||||
|
elsif base.options['verbose']
|
||||||
|
base.shell.say response, :red
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def binary_encode(string)
|
||||||
|
if string.respond_to?(:force_encoding)
|
||||||
|
string.force_encoding('ascii-8bit')
|
||||||
|
end
|
||||||
|
string
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Quiet down create file
|
||||||
|
class ::Thor::Actions::CreateFile
|
||||||
|
def on_conflict_behavior(&block)
|
||||||
|
if identical?
|
||||||
|
say_status :identical, :blue
|
||||||
|
else
|
||||||
|
say_status :update, :yellow
|
||||||
|
block.call unless pretend?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -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
|
|
|
@ -1,51 +1,48 @@
|
||||||
# CLI Module
|
# CLI Module
|
||||||
module Middleman::Cli
|
module Middleman::Cli
|
||||||
|
# Alias "c" to "console"
|
||||||
|
Base.map({ 'c' => 'console' })
|
||||||
|
|
||||||
# The CLI Console class
|
# The CLI Console class
|
||||||
class Console < Thor::Group
|
class Console < Thor
|
||||||
include Thor::Actions
|
include Thor::Actions
|
||||||
|
|
||||||
check_unknown_options!
|
check_unknown_options!
|
||||||
|
|
||||||
class_option :environment,
|
namespace :console
|
||||||
aliases: '-e',
|
|
||||||
default: ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development',
|
desc 'console [options]', 'Start an interactive console in the context of your Middleman application'
|
||||||
desc: 'The environment Middleman will run under'
|
method_option :environment,
|
||||||
class_option :verbose,
|
:aliases => '-e',
|
||||||
type: :boolean,
|
:default => ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development',
|
||||||
default: false,
|
:desc => 'The environment Middleman will run under'
|
||||||
desc: 'Print debug messages'
|
method_option :verbose,
|
||||||
|
:type => :boolean,
|
||||||
|
:default => false,
|
||||||
|
:desc => 'Print debug messages'
|
||||||
def console
|
def console
|
||||||
require 'middleman-core'
|
require 'middleman-core'
|
||||||
require 'irb'
|
require 'irb'
|
||||||
|
|
||||||
opts = {
|
opts = {
|
||||||
environment: options['environment'],
|
:environment => options['environment'],
|
||||||
debug: options['verbose']
|
:debug => options['verbose']
|
||||||
}
|
}
|
||||||
|
|
||||||
@app = ::Middleman::Application.new do
|
@app =::Middleman::Application.server.inst do
|
||||||
config[:environment] = opts[:environment].to_sym if opts[:environment]
|
if opts[:environment]
|
||||||
|
config[:environment] = opts[:environment].to_sym
|
||||||
|
end
|
||||||
|
|
||||||
::Middleman::Logger.singleton(opts[:debug] ? 0 : 1, opts[:instrumenting] || false)
|
::Middleman::Logger.singleton(opts[:debug] ? 0 : 1, opts[:instrumenting] || false)
|
||||||
end
|
end
|
||||||
|
|
||||||
self.class.interact_with @app
|
# TODO: get file watcher / reload! working in console
|
||||||
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.setup nil
|
||||||
IRB.conf[:MAIN_CONTEXT] = IRB::Irb.new.context
|
IRB.conf[:MAIN_CONTEXT] = IRB::Irb.new.context
|
||||||
require 'irb/ext/multi-irb'
|
require 'irb/ext/multi-irb'
|
||||||
IRB.irb nil, context
|
IRB.irb nil, @app
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,13 +1,16 @@
|
||||||
# CLI Module
|
# CLI Module
|
||||||
module Middleman::Cli
|
module Middleman::Cli
|
||||||
|
|
||||||
# A thor task for creating new projects
|
# A thor task for creating new projects
|
||||||
class Extension < Thor::Group
|
class Extension < Thor
|
||||||
include Thor::Actions
|
include Thor::Actions
|
||||||
|
|
||||||
check_unknown_options!
|
check_unknown_options!
|
||||||
|
|
||||||
|
namespace :extension
|
||||||
|
|
||||||
# Required path for the new project to be generated
|
# Required path for the new project to be generated
|
||||||
argument :name, type: :string
|
argument :name, :type => :string
|
||||||
|
|
||||||
# Template files are relative to this file
|
# Template files are relative to this file
|
||||||
# @return [String]
|
# @return [String]
|
||||||
|
@ -15,13 +18,11 @@ module Middleman::Cli
|
||||||
File.join(File.dirname(__FILE__), 'templates')
|
File.join(File.dirname(__FILE__), 'templates')
|
||||||
end
|
end
|
||||||
|
|
||||||
class_option 'skip-git',
|
desc 'extension [options]', 'Create Middleman extension scaffold NAME'
|
||||||
type: :boolean,
|
method_option 'skip-git',
|
||||||
default: false,
|
:type => :boolean,
|
||||||
desc: 'Skip Git ignores and keeps'
|
:default => false,
|
||||||
|
:desc => 'Skip Git ignores and keeps'
|
||||||
# Output a .gitignore file
|
|
||||||
class_option :git, type: :boolean, default: true
|
|
||||||
|
|
||||||
# The extension task
|
# The extension task
|
||||||
# @param [String] name
|
# @param [String] name
|
||||||
|
@ -30,13 +31,14 @@ module Middleman::Cli
|
||||||
template 'extension/Rakefile', File.join(name, 'Rakefile')
|
template 'extension/Rakefile', File.join(name, 'Rakefile')
|
||||||
template 'extension/gemspec', File.join(name, "#{name}.gemspec")
|
template 'extension/gemspec', File.join(name, "#{name}.gemspec")
|
||||||
template 'extension/Gemfile', File.join(name, 'Gemfile')
|
template 'extension/Gemfile', File.join(name, 'Gemfile')
|
||||||
|
template 'extension/lib/middleman_extension.rb', File.join(name, 'lib', 'middleman_extension.rb')
|
||||||
template 'extension/lib/lib.rb', File.join(name, 'lib', "#{name}.rb")
|
template 'extension/lib/lib.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')
|
template 'extension/features/support/env.rb', File.join(name, 'features', 'support', 'env.rb')
|
||||||
empty_directory File.join(name, 'fixtures')
|
empty_directory File.join(name, 'fixtures')
|
||||||
end
|
end
|
||||||
|
|
||||||
# Add to CLI
|
# Output a .gitignore file
|
||||||
Base.register(self, 'extension', 'extension [options]', 'Create a new Middleman extension')
|
class_option :git, :type => :boolean, :default => true
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,129 +1,63 @@
|
||||||
|
require 'middleman-templates'
|
||||||
|
|
||||||
# CLI Module
|
# CLI Module
|
||||||
module Middleman::Cli
|
module Middleman::Cli
|
||||||
|
|
||||||
# A thor task for creating new projects
|
# A thor task for creating new projects
|
||||||
class Init < Thor::Group
|
class Init < Thor
|
||||||
include Thor::Actions
|
|
||||||
|
|
||||||
GIT_CMD = 'git'.freeze
|
|
||||||
|
|
||||||
check_unknown_options!
|
check_unknown_options!
|
||||||
|
|
||||||
argument :target, type: :string, default: '.'
|
namespace :init
|
||||||
|
|
||||||
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'
|
|
||||||
|
|
||||||
|
desc 'init NAME [options]', 'Create new project NAME'
|
||||||
|
available_templates = ::Middleman::Templates.registered.keys.join(', ')
|
||||||
|
method_option 'template',
|
||||||
|
:aliases => '-T',
|
||||||
|
:default => 'default',
|
||||||
|
:desc => "Use a project template: #{available_templates}"
|
||||||
|
method_option 'css_dir',
|
||||||
|
# :default => "stylesheets",
|
||||||
|
:desc => 'The path to the css files'
|
||||||
|
method_option 'js_dir',
|
||||||
|
# :default => "javascripts",
|
||||||
|
:desc => 'The path to the javascript files'
|
||||||
|
method_option 'images_dir',
|
||||||
|
# :default => "images",
|
||||||
|
:desc => 'The path to the image files'
|
||||||
|
method_option 'rack',
|
||||||
|
:type => :boolean,
|
||||||
|
:default => false,
|
||||||
|
:desc => 'Include a config.ru file'
|
||||||
|
method_option 'skip-bundle',
|
||||||
|
:type => :boolean,
|
||||||
|
:aliases => '-B',
|
||||||
|
:default => false,
|
||||||
|
:desc => "Don't run bundle install"
|
||||||
|
method_option 'skip-git',
|
||||||
|
:type => :boolean,
|
||||||
|
:default => false,
|
||||||
|
:desc => 'Skip Git ignores and keeps'
|
||||||
# The init task
|
# The init task
|
||||||
def init
|
# @param [String] name
|
||||||
require 'fileutils'
|
def init(name = '.')
|
||||||
require 'tmpdir'
|
key = options[:template].to_sym
|
||||||
|
unless ::Middleman::Templates.registered.has_key?(key)
|
||||||
unless git_present?
|
raise Thor::Error.new "Unknown project template '#{key}'"
|
||||||
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
|
end
|
||||||
|
|
||||||
repo_path, repo_branch = if shortname?(options[:template])
|
thor_group = ::Middleman::Templates.registered[key]
|
||||||
require 'open-uri'
|
thor_group.new([name], options).invoke_all
|
||||||
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
|
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
|
||||||
|
|
||||||
|
def self.exit_on_failure?
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
# Map "i", "new" and "n" to "init"
|
||||||
|
Base.map({
|
||||||
|
'i' => 'init',
|
||||||
|
'new' => 'init',
|
||||||
|
'n' => 'init'
|
||||||
|
})
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,62 +1,87 @@
|
||||||
# CLI Module
|
# CLI Module
|
||||||
module Middleman::Cli
|
module Middleman::Cli
|
||||||
|
|
||||||
# Server thor task
|
# Server thor task
|
||||||
class Server < Thor::Group
|
class Server < Thor
|
||||||
check_unknown_options!
|
check_unknown_options!
|
||||||
|
|
||||||
class_option :environment,
|
namespace :server
|
||||||
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)
|
desc 'server [options]', 'Start the preview server'
|
||||||
|
method_option :environment,
|
||||||
|
:aliases => '-e',
|
||||||
|
:default => ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development',
|
||||||
|
:desc => 'The environment Middleman will run under'
|
||||||
|
method_option :host,
|
||||||
|
:type => :string,
|
||||||
|
:aliases => '-h',
|
||||||
|
:default => '0.0.0.0',
|
||||||
|
:desc => 'Bind to HOST address'
|
||||||
|
method_option :port,
|
||||||
|
:aliases => '-p',
|
||||||
|
:default => '4567',
|
||||||
|
:desc => 'The port Middleman will listen on'
|
||||||
|
method_option :verbose,
|
||||||
|
:type => :boolean,
|
||||||
|
:default => false,
|
||||||
|
:desc => 'Print debug messages'
|
||||||
|
method_option :instrument,
|
||||||
|
:type => :string,
|
||||||
|
:default => false,
|
||||||
|
:desc => 'Print instrument messages'
|
||||||
|
method_option :disable_watcher,
|
||||||
|
:type => :boolean,
|
||||||
|
:default => false,
|
||||||
|
:desc => 'Disable the file change and delete watcher process'
|
||||||
|
method_option :profile,
|
||||||
|
:type => :boolean,
|
||||||
|
:default => false,
|
||||||
|
:desc => 'Generate profiling report for server startup'
|
||||||
|
method_option :reload_paths,
|
||||||
|
:type => :string,
|
||||||
|
:default => false,
|
||||||
|
:desc => 'Additional paths to auto-reload when files change'
|
||||||
|
method_option :force_polling,
|
||||||
|
:type => :boolean,
|
||||||
|
:default => false,
|
||||||
|
:desc => 'Force file watcher into polling mode'
|
||||||
|
method_option :latency,
|
||||||
|
:type => :numeric,
|
||||||
|
:aliases => '-l',
|
||||||
|
:default => 0.25,
|
||||||
|
:desc => 'Set file watcher latency, in seconds'
|
||||||
|
|
||||||
# Start the server
|
# Start the server
|
||||||
def server
|
def server
|
||||||
require 'middleman-core'
|
require 'middleman-core'
|
||||||
require 'middleman-core/preview_server'
|
require 'middleman-core/preview_server'
|
||||||
|
|
||||||
unless ENV['MM_ROOT']
|
if !ENV['MM_ROOT']
|
||||||
puts '== Could not find a Middleman project config.rb'
|
puts '== Could not find a Middleman project config.rb'
|
||||||
exit
|
exit
|
||||||
end
|
end
|
||||||
|
|
||||||
params = {
|
params = {
|
||||||
debug: options['verbose'],
|
:port => options['port'],
|
||||||
instrumenting: options['instrument'],
|
:host => options['host'],
|
||||||
reload_paths: options['reload_paths'],
|
:environment => options['environment'],
|
||||||
daemon: options['daemon']
|
:debug => options['verbose'],
|
||||||
|
:instrumenting => options['instrument'],
|
||||||
|
:disable_watcher => options['disable_watcher'],
|
||||||
|
:reload_paths => options['reload_paths'],
|
||||||
|
:force_polling => options['force_polling'],
|
||||||
|
:latency => options['latency']
|
||||||
}
|
}
|
||||||
|
|
||||||
puts '== The Middleman is loading'
|
puts '== The Middleman is loading'
|
||||||
::Middleman::PreviewServer.start(params, options)
|
::Middleman::PreviewServer.start(params)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Add to CLI
|
|
||||||
Base.register(self, 'server', 'server [options]', 'Start the preview server')
|
|
||||||
|
|
||||||
# Map "s" to "server"
|
|
||||||
Base.map('s' => 'server')
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.exit_on_failure?
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
# Map "s" to "server"
|
||||||
|
Base.map({ 's' => 'server' })
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# If you do not have OpenSSL installed, update
|
# If you have OpenSSL installed, we recommend updating
|
||||||
# the following line to use "http://" instead
|
# the following line to use "https"
|
||||||
source 'https://rubygems.org'
|
source 'http://rubygems.org'
|
||||||
|
|
||||||
# Specify your gem's dependencies in <%= name %>.gemspec
|
# Specify your gem's dependencies in <%= name %>.gemspec
|
||||||
gemspec
|
gemspec
|
||||||
|
@ -13,6 +13,7 @@ end
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
gem 'cucumber'
|
gem 'cucumber'
|
||||||
|
gem 'fivemat'
|
||||||
gem 'aruba'
|
gem 'aruba'
|
||||||
gem 'rspec'
|
gem 'rspec'
|
||||||
end
|
end
|
|
@ -4,11 +4,11 @@ Bundler::GemHelper.install_tasks
|
||||||
require 'cucumber/rake/task'
|
require 'cucumber/rake/task'
|
||||||
|
|
||||||
Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
|
Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
|
||||||
t.cucumber_opts = '--color --tags ~@wip --strict'
|
t.cucumber_opts = "--color --tags ~@wip --strict --format #{ENV['CUCUMBER_FORMAT'] || 'Fivemat'}"
|
||||||
end
|
end
|
||||||
|
|
||||||
require 'rake/clean'
|
require 'rake/clean'
|
||||||
|
|
||||||
task test: ['cucumber']
|
task :test => ['cucumber']
|
||||||
|
|
||||||
task default: :test
|
task :default => :test
|
|
@ -1,6 +1,39 @@
|
||||||
require "middleman-core"
|
# Require core library
|
||||||
|
require 'middleman-core'
|
||||||
|
|
||||||
|
# Extension namespace
|
||||||
|
class MyExtension < ::Middleman::Extension
|
||||||
|
option :my_option, 'default', 'An example option'
|
||||||
|
|
||||||
|
def initialize(app, options_hash={}, &block)
|
||||||
|
# Call super to build options from the options_hash
|
||||||
|
super
|
||||||
|
|
||||||
|
# Require libraries only when activated
|
||||||
|
# require 'necessary/library'
|
||||||
|
|
||||||
|
# set up your extension
|
||||||
|
# puts options.my_option
|
||||||
|
end
|
||||||
|
|
||||||
|
def after_configuration
|
||||||
|
# Do something
|
||||||
|
end
|
||||||
|
|
||||||
|
# A Sitemap Manipulator
|
||||||
|
# def manipulate_resource_list(resources)
|
||||||
|
# end
|
||||||
|
|
||||||
|
# module do
|
||||||
|
# def a_helper
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
|
||||||
Middleman::Extensions.register :<%= name %> do
|
|
||||||
require "my-extension/extension"
|
|
||||||
MyExtension
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Register extensions which can be activated
|
||||||
|
# Make sure we have the version of Middleman we expect
|
||||||
|
# Name param may be omited, it will default to underscored
|
||||||
|
# version of class name
|
||||||
|
|
||||||
|
# MyExtension.register(:my_extension)
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
# Require core library
|
|
||||||
require 'middleman-core'
|
|
||||||
|
|
||||||
# Extension namespace
|
|
||||||
class MyExtension < ::Middleman::Extension
|
|
||||||
option :my_option, 'default', 'An example option'
|
|
||||||
|
|
||||||
def initialize(app, options_hash={}, &block)
|
|
||||||
# Call super to build options from the options_hash
|
|
||||||
super
|
|
||||||
|
|
||||||
# Require libraries only when activated
|
|
||||||
# require 'necessary/library'
|
|
||||||
|
|
||||||
# set up your extension
|
|
||||||
# puts options.my_option
|
|
||||||
end
|
|
||||||
|
|
||||||
def after_configuration
|
|
||||||
# Do something
|
|
||||||
end
|
|
||||||
|
|
||||||
# A Sitemap Manipulator
|
|
||||||
# def manipulate_resource_list(resources)
|
|
||||||
# end
|
|
||||||
|
|
||||||
# helpers do
|
|
||||||
# def a_helper
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
end
|
|
|
@ -0,0 +1 @@
|
||||||
|
require '<%= name %>'
|
|
@ -1,2 +0,0 @@
|
||||||
# Backwards compat
|
|
||||||
require 'middleman-cli'
|
|
|
@ -17,7 +17,7 @@ Gem::Specification.new do |s|
|
||||||
s.test_files = `git ls-files -z -- {fixtures,features}/*`.split("\0")
|
s.test_files = `git ls-files -z -- {fixtures,features}/*`.split("\0")
|
||||||
s.executable = 'middleman'
|
s.executable = 'middleman'
|
||||||
s.require_path = 'lib'
|
s.require_path = 'lib'
|
||||||
s.required_ruby_version = '>= 2.2.0'
|
s.required_ruby_version = '>= 1.9.3'
|
||||||
|
|
||||||
# CLI
|
# CLI
|
||||||
s.add_dependency('thor', ['>= 0.17.0', '< 2.0'])
|
s.add_dependency('thor', ['>= 0.17.0', '< 2.0'])
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
--color
|
|
|
@ -2,5 +2,4 @@ lib/**/*.rb
|
||||||
--exclude lib/vendored-middleman-deps/
|
--exclude lib/vendored-middleman-deps/
|
||||||
--exclude lib/middleman-core/step_definitions
|
--exclude lib/middleman-core/step_definitions
|
||||||
--no-private
|
--no-private
|
||||||
--hide-void-return
|
--hide-void-return
|
||||||
--markup=markdown
|
|
|
@ -1,4 +1,5 @@
|
||||||
# coding:utf-8
|
# coding:utf-8
|
||||||
RAKE_ROOT = __FILE__.freeze
|
RAKE_ROOT = __FILE__
|
||||||
GEM_NAME = ENV['NAME'] || 'middleman-core'
|
GEM_NAME = ENV['NAME'] || 'middleman-core'
|
||||||
|
require 'rubygems'
|
||||||
require File.expand_path(File.dirname(__FILE__) + '/../gem_rake_helper')
|
require File.expand_path(File.dirname(__FILE__) + '/../gem_rake_helper')
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
default: --require features --tags ~@wip
|
|
||||||
wip: --require features --tags @wip
|
|
15
middleman-core/features/3rd_party_cli.feature
Normal file
15
middleman-core/features/3rd_party_cli.feature
Normal file
|
@ -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"
|
|
@ -1,5 +1,5 @@
|
||||||
Feature: Assets get file hashes appended to them and references to them are updated
|
Feature: Assets get a file hash appended to their and references to them are updated
|
||||||
Scenario: Hashed-asset files are produced, and HTML, CSS, JSON and JavaScript gets rewritten to reference the new files
|
Scenario: Hashed-asset files are produced, and HTML, CSS, and JavaScript gets rewritten to reference the new files
|
||||||
Given a successfully built app at "asset-hash-app"
|
Given a successfully built app at "asset-hash-app"
|
||||||
When I cd to "build"
|
When I cd to "build"
|
||||||
Then the following files should exist:
|
Then the following files should exist:
|
||||||
|
@ -8,16 +8,12 @@ Feature: Assets get file hashes appended to them and references to them are upda
|
||||||
| favicon.ico |
|
| favicon.ico |
|
||||||
| images/100px-1242c368.png |
|
| images/100px-1242c368.png |
|
||||||
| images/100px-5fd6fb90.jpg |
|
| images/100px-5fd6fb90.jpg |
|
||||||
| images/200px-c11eb203.jpg |
|
|
||||||
| images/300px-59adce76.jpg |
|
|
||||||
| images/100px-5fd6fb90.gif |
|
| images/100px-5fd6fb90.gif |
|
||||||
| javascripts/application-1d8d5276.js |
|
| javascripts/application-1d8d5276.js |
|
||||||
| stylesheets/site-8bc55985.css |
|
| stylesheets/site-50eaa978.css |
|
||||||
| index.html |
|
| index.html |
|
||||||
| subdir/index.html |
|
| subdir/index.html |
|
||||||
| other/index.html |
|
| other/index.html |
|
||||||
| api.json |
|
|
||||||
| subdir/api.json |
|
|
||||||
And the following files should not exist:
|
And the following files should not exist:
|
||||||
| images/100px.png |
|
| images/100px.png |
|
||||||
| images/100px.jpg |
|
| images/100px.jpg |
|
||||||
|
@ -26,150 +22,106 @@ Feature: Assets get file hashes appended to them and references to them are upda
|
||||||
| stylesheets/site.css |
|
| stylesheets/site.css |
|
||||||
|
|
||||||
And the file "javascripts/application-1d8d5276.js" should contain "img.src = '/images/100px-5fd6fb90.jpg'"
|
And the file "javascripts/application-1d8d5276.js" should contain "img.src = '/images/100px-5fd6fb90.jpg'"
|
||||||
And the file "stylesheets/site-8bc55985.css" should contain:
|
And the file "stylesheets/site-50eaa978.css" should contain "background-image: url('../images/100px-5fd6fb90.jpg')"
|
||||||
"""
|
|
||||||
background-image: url("../images/100px-5fd6fb90.jpg")
|
|
||||||
"""
|
|
||||||
And the file "index.html" should contain 'href="apple-touch-icon.png"'
|
And the file "index.html" should contain 'href="apple-touch-icon.png"'
|
||||||
And the file "index.html" should contain 'href="stylesheets/site-8bc55985.css"'
|
And the file "index.html" should contain 'href="stylesheets/site-50eaa978.css"'
|
||||||
And the file "index.html" should contain 'src="javascripts/application-1d8d5276.js"'
|
And the file "index.html" should contain 'src="javascripts/application-1d8d5276.js"'
|
||||||
And the file "index.html" should contain 'src="images/100px-5fd6fb90.jpg"'
|
And the file "index.html" should contain 'src="images/100px-5fd6fb90.jpg"'
|
||||||
And the file "subdir/index.html" should contain 'href="../stylesheets/site-8bc55985.css"'
|
And the file "subdir/index.html" should contain 'href="../stylesheets/site-50eaa978.css"'
|
||||||
And the file "index.html" should contain 'srcset="images/100px-5fd6fb90.jpg 1x, images/200px-c11eb203.jpg 2x, images/300px-59adce76.jpg 3x"'
|
|
||||||
And the file "index.html" should contain 'src="images/100px-5fd6fb90.gif"'
|
|
||||||
And the file "index.html" should contain 'src="images/100px-1242c368.png"'
|
|
||||||
And the file "subdir/index.html" should contain 'src="../javascripts/application-1d8d5276.js"'
|
And the file "subdir/index.html" should contain 'src="../javascripts/application-1d8d5276.js"'
|
||||||
And the file "subdir/index.html" should contain 'src="../images/100px-5fd6fb90.jpg"'
|
And the file "subdir/index.html" should contain 'src="../images/100px-5fd6fb90.jpg"'
|
||||||
And the file "other/index.html" should contain 'href="../stylesheets/site-8bc55985.css"'
|
And the file "other/index.html" should contain 'href="../stylesheets/site-50eaa978.css"'
|
||||||
And the file "other/index.html" should contain 'src="../javascripts/application-1d8d5276.js"'
|
And the file "other/index.html" should contain 'src="../javascripts/application-1d8d5276.js"'
|
||||||
And the file "other/index.html" should contain 'src="../images/100px-5fd6fb90.jpg"'
|
And the file "other/index.html" should contain 'src="../images/100px-5fd6fb90.jpg"'
|
||||||
And the file "api.json" should contain 'images/100px-5fd6fb90.gif'
|
|
||||||
And the file "api.json" should contain 'images/100px-5fd6fb90.jpg'
|
|
||||||
And the file "api.json" should contain 'images/100px-1242c368.png'
|
|
||||||
And the file "subdir/api.json" should contain 'images/100px-5fd6fb90.gif'
|
|
||||||
And the file "subdir/api.json" should contain 'images/100px-5fd6fb90.jpg'
|
|
||||||
And the file "subdir/api.json" should contain 'images/100px-1242c368.png'
|
|
||||||
|
|
||||||
Scenario: Hashed fonts assets work with woff and woff2 extension
|
Scenario: Keep Originals
|
||||||
Given a successfully built app at "asset-hash-app"
|
Given a fixture app "asset-hash-app"
|
||||||
|
And a file named "config.rb" with:
|
||||||
|
"""
|
||||||
|
activate :asset_hash, :keep_original => true
|
||||||
|
"""
|
||||||
|
And a successfully built app at "asset-hash-app"
|
||||||
When I cd to "build"
|
When I cd to "build"
|
||||||
Then the following files should exist:
|
Then the following files should exist:
|
||||||
| fonts/fontawesome-webfont-56ce13e7.woff |
|
| images/100px-1242c368.png |
|
||||||
| fonts/fontawesome-webfont-10752316.woff2 |
|
| images/100px-5fd6fb90.jpg |
|
||||||
And the file "stylesheets/uses_fonts-88aa3e2b.css" should contain "src: url('../fonts/fontawesome-webfont-10752316.woff2')"
|
| images/100px-5fd6fb90.gif |
|
||||||
And the file "stylesheets/uses_fonts-88aa3e2b.css" should contain "url('../fonts/fontawesome-webfont-56ce13e7.woff')"
|
| javascripts/application-1d8d5276.js |
|
||||||
|
| stylesheets/site-171eb3c0.css |
|
||||||
|
| images/100px.png |
|
||||||
|
| images/100px.jpg |
|
||||||
|
| images/100px.gif |
|
||||||
|
| javascripts/application.js |
|
||||||
|
| stylesheets/site.css |
|
||||||
|
|
||||||
|
Scenario: Custom format
|
||||||
|
Given a fixture app "asset-hash-app"
|
||||||
|
And a file named "config.rb" with:
|
||||||
|
"""
|
||||||
|
activate :asset_hash, :format => ':basename-.-:digest.:ext'
|
||||||
|
activate :directory_indexes
|
||||||
|
"""
|
||||||
|
And a successfully built app at "asset-hash-app"
|
||||||
|
When I cd to "build"
|
||||||
|
Then the following files should exist:
|
||||||
|
| images/100px-.-1242c368.png |
|
||||||
|
| images/100px-.-5fd6fb90.jpg |
|
||||||
|
| images/100px-.-5fd6fb90.gif |
|
||||||
|
| javascripts/application-.-1d8d5276.js |
|
||||||
|
| stylesheets/site-.-171eb3c0.css |
|
||||||
|
And the following files should not exist:
|
||||||
|
| images/100px.png |
|
||||||
|
| images/100px.jpg |
|
||||||
|
| images/100px.gif |
|
||||||
|
| javascripts/application.js |
|
||||||
|
| stylesheets/site.css |
|
||||||
|
|
||||||
|
And the file "javascripts/application-.-1d8d5276.js" should contain "img.src = '/images/100px-.-5fd6fb90.jpg'"
|
||||||
|
And the file "stylesheets/site-.-171eb3c0.css" should contain "background-image: url('/images/100px-.-5fd6fb90.jpg')"
|
||||||
|
And the file "index.html" should contain 'href="/stylesheets/site-.-171eb3c0.css"'
|
||||||
|
And the file "index.html" should contain 'src="/javascripts/application-.-1d8d5276.js"'
|
||||||
|
And the file "index.html" should contain 'src="/images/100px-.-5fd6fb90.jpg"'
|
||||||
|
And the file "subdir/index.html" should contain 'href="/stylesheets/site-.-171eb3c0.css"'
|
||||||
|
And the file "subdir/index.html" should contain 'src="/javascripts/application-.-1d8d5276.js"'
|
||||||
|
And the file "subdir/index.html" should contain 'src="/images/100px-.-5fd6fb90.jpg"'
|
||||||
|
And the file "other/index.html" should contain 'href="/stylesheets/site-.-171eb3c0.css"'
|
||||||
|
And the file "other/index.html" should contain 'src="/javascripts/application-.-1d8d5276.js"'
|
||||||
|
And the file "other/index.html" should contain 'src="/images/100px-.-5fd6fb90.jpg"'
|
||||||
|
|
||||||
Scenario: Hashed assets work in preview server
|
Scenario: Hashed assets work in preview server
|
||||||
Given the Server is running at "asset-hash-app"
|
Given the Server is running at "asset-hash-app"
|
||||||
When I go to "/"
|
When I go to "/"
|
||||||
Then I should see 'href="apple-touch-icon.png"'
|
Then I should see 'href="apple-touch-icon.png"'
|
||||||
And I should see 'href="stylesheets/site-d1a750ca.css"'
|
And I should see 'href="stylesheets/site-50eaa978.css"'
|
||||||
And I should see 'href="stylesheets/fragment-99b76247.css"'
|
|
||||||
And I should see 'src="javascripts/application-1d8d5276.js"'
|
And I should see 'src="javascripts/application-1d8d5276.js"'
|
||||||
And I should see 'src="images/100px-5fd6fb90.jpg"'
|
And I should see 'src="images/100px-5fd6fb90.jpg"'
|
||||||
And I should see 'srcset="images/100px-5fd6fb90.jpg 1x, images/200px-c11eb203.jpg 2x, images/300px-59adce76.jpg 3x"'
|
|
||||||
And I should see 'src="images/100px-5fd6fb90.jpg?test"'
|
|
||||||
And I should see 'src="images/100px-5fd6fb90.jpg?#test"'
|
|
||||||
And I should see 'src="images/100px-5fd6fb90.jpg#test"'
|
|
||||||
When I go to "/subdir/"
|
When I go to "/subdir/"
|
||||||
Then I should see 'href="../stylesheets/site-d1a750ca.css"'
|
Then I should see 'href="../stylesheets/site-50eaa978.css"'
|
||||||
And I should see 'src="../javascripts/application-1d8d5276.js"'
|
And I should see 'src="../javascripts/application-1d8d5276.js"'
|
||||||
And I should see 'src="../images/100px-5fd6fb90.jpg"'
|
And I should see 'src="../images/100px-5fd6fb90.jpg"'
|
||||||
When I go to "/other/"
|
When I go to "/other/"
|
||||||
Then I should see 'href="../stylesheets/site-d1a750ca.css"'
|
Then I should see 'href="../stylesheets/site-50eaa978.css"'
|
||||||
And I should see 'src="../javascripts/application-1d8d5276.js"'
|
And I should see 'src="../javascripts/application-1d8d5276.js"'
|
||||||
And I should see 'src="../images/100px-5fd6fb90.jpg"'
|
And I should see 'src="../images/100px-5fd6fb90.jpg"'
|
||||||
And I should see 'src="../images/100px-5fd6fb90.jpg?test"'
|
|
||||||
And I should see 'src="../images/100px-5fd6fb90.jpg?#test"'
|
|
||||||
And I should see 'src="../images/100px-5fd6fb90.jpg#test"'
|
|
||||||
When I go to "/javascripts/application-1d8d5276.js"
|
When I go to "/javascripts/application-1d8d5276.js"
|
||||||
Then I should see "img.src = '/images/100px-5fd6fb90.jpg'"
|
Then I should see "img.src = '/images/100px-5fd6fb90.jpg'"
|
||||||
When I go to "/stylesheets/site-d1a750ca.css"
|
When I go to "/stylesheets/site-50eaa978.css"
|
||||||
Then I should see 'background-image: url("../images/100px-5fd6fb90.jpg");'
|
Then I should see "background-image: url('../images/100px-5fd6fb90.jpg')"
|
||||||
When I go to "/api.json"
|
|
||||||
Then I should see 'images/100px-5fd6fb90.gif'
|
|
||||||
And I should see 'images/100px-5fd6fb90.jpg'
|
|
||||||
And I should see 'images/100px-1242c368.png'
|
|
||||||
When I go to "/subdir/api.json"
|
|
||||||
Then I should see 'images/100px-5fd6fb90.gif'
|
|
||||||
And I should see 'images/100px-5fd6fb90.jpg'
|
|
||||||
And I should see 'images/100px-1242c368.png'
|
|
||||||
When I go to "/stylesheets/fragment-99b76247.css"
|
|
||||||
And I should see 'url("../images/100px-5fd6fb90.jpg");'
|
|
||||||
And I should see 'url("../images/100px-5fd6fb90.jpg?test");'
|
|
||||||
And I should see 'url("../images/100px-5fd6fb90.jpg?#test");'
|
|
||||||
And I should see 'url("../images/100px-5fd6fb90.jpg#test");'
|
|
||||||
|
|
||||||
Scenario: Hashed assets work with Slim
|
Scenario: Enabling an asset host still produces hashed files and references
|
||||||
Given the Server is running at "asset-hash-app"
|
|
||||||
When I go to "/slim.html"
|
|
||||||
And I should see 'src="images/300px-59adce76.jpg"'
|
|
||||||
And I should see 'src="images/100px-5fd6fb90.jpg"'
|
|
||||||
And I should see 'srcset="images/100px-5fd6fb90.jpg 1x, images/200px-c11eb203.jpg 2x, images/300px-59adce76.jpg 3x"'
|
|
||||||
|
|
||||||
Scenario: Enabling an asset host still produces hashed files and references (hash first)
|
|
||||||
Given a fixture app "asset-hash-host-app"
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
set :sass_source_maps, false
|
|
||||||
activate :asset_hash
|
|
||||||
activate :directory_indexes
|
|
||||||
activate :asset_host, host: 'http://middlemanapp.com'
|
|
||||||
"""
|
|
||||||
Given the Server is running at "asset-hash-host-app"
|
Given the Server is running at "asset-hash-host-app"
|
||||||
When I go to "/"
|
When I go to "/"
|
||||||
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"'
|
Then I should see 'href="http://middlemanapp.com/stylesheets/site-54baaf3a.css"'
|
||||||
Then I should see 'href="http://middlemanapp.com/stylesheets/fragment-2902933e.css"'
|
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
|
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
|
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
|
|
||||||
When I go to "/subdir/"
|
When I go to "/subdir/"
|
||||||
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"'
|
Then I should see 'href="http://middlemanapp.com/stylesheets/site-54baaf3a.css"'
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
||||||
When I go to "/other/"
|
When I go to "/other/"
|
||||||
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"'
|
Then I should see 'href="http://middlemanapp.com/stylesheets/site-54baaf3a.css"'
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
|
# Asset helpers don't appear to work from Compass right now
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
|
# When I go to "/stylesheets/site-e5a31a3e.css"
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
|
# Then I should see "background-image: url('http://middlemanapp.com/images/100px-5fd6fb90.jpg')"
|
||||||
When I go to "/stylesheets/fragment-2902933e.css"
|
|
||||||
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg");'
|
|
||||||
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?test");'
|
|
||||||
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test");'
|
|
||||||
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg#test");'
|
|
||||||
|
|
||||||
Scenario: Enabling an asset host still produces hashed files and references (host first)
|
|
||||||
Given a fixture app "asset-hash-host-app"
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
set :sass_source_maps, false
|
|
||||||
activate :asset_host, host: 'http://middlemanapp.com'
|
|
||||||
activate :directory_indexes
|
|
||||||
activate :asset_hash
|
|
||||||
"""
|
|
||||||
Given the Server is running at "asset-hash-host-app"
|
|
||||||
When I go to "/"
|
|
||||||
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"'
|
|
||||||
Then I should see 'href="http://middlemanapp.com/stylesheets/fragment-2902933e.css"'
|
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
|
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
|
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
|
|
||||||
When I go to "/subdir/"
|
|
||||||
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"'
|
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
|
||||||
When I go to "/other/"
|
|
||||||
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"'
|
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
|
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
|
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
|
|
||||||
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
|
|
||||||
When I go to "/stylesheets/fragment-2902933e.css"
|
|
||||||
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg")'
|
|
||||||
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?test")'
|
|
||||||
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test")'
|
|
||||||
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg#test")'
|
|
||||||
|
|
||||||
Scenario: The asset hash should change when a SASS partial changes
|
Scenario: The asset hash should change when a SASS partial changes
|
||||||
Given the Server is running at "asset-hash-app"
|
Given the Server is running at "asset-hash-app"
|
||||||
|
@ -179,14 +131,14 @@ Feature: Assets get file hashes appended to them and references to them are upda
|
||||||
font-size: 14px
|
font-size: 14px
|
||||||
"""
|
"""
|
||||||
When I go to "/partials/"
|
When I go to "/partials/"
|
||||||
Then I should see 'href="../stylesheets/uses_partials-4d4e34e6.css'
|
Then I should see 'href="../stylesheets/uses_partials-423a00f7.css'
|
||||||
And the file "source/stylesheets/_partial.sass" has the contents
|
And the file "source/stylesheets/_partial.sass" has the contents
|
||||||
"""
|
"""
|
||||||
body
|
body
|
||||||
font-size: 18px !important
|
font-size: 18px !important
|
||||||
"""
|
"""
|
||||||
When I go to "/partials/"
|
When I go to "/partials/"
|
||||||
Then I should see 'href="../stylesheets/uses_partials-ec347271.css'
|
Then I should see 'href="../stylesheets/uses_partials-e8c3d4eb.css'
|
||||||
|
|
||||||
Scenario: The asset hash should change when a Rack-based filter changes
|
Scenario: The asset hash should change when a Rack-based filter changes
|
||||||
Given a fixture app "asset-hash-app"
|
Given a fixture app "asset-hash-app"
|
||||||
|
@ -196,25 +148,22 @@ Feature: Assets get file hashes appended to them and references to them are upda
|
||||||
activate :relative_assets
|
activate :relative_assets
|
||||||
activate :directory_indexes
|
activate :directory_indexes
|
||||||
require 'lib/middleware.rb'
|
require 'lib/middleware.rb'
|
||||||
use ::Middleware
|
use Middleware
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "asset-hash-app"
|
Given the Server is running at "asset-hash-app"
|
||||||
When I go to "/"
|
When I go to "/"
|
||||||
Then I should see 'href="stylesheets/site-5ad7def0.css'
|
Then I should see 'href="stylesheets/site-5770af52.css'
|
||||||
When I go to "stylesheets/site-5ad7def0.css"
|
When I go to "stylesheets/site-5770af52.css"
|
||||||
Then I should see 'background-image: url("../images/100px-5fd6fb90.jpg")'
|
Then I should see 'background-image'
|
||||||
Then I should see 'Added by Rack filter'
|
Then I should see 'Added by Rack filter'
|
||||||
|
When I go to "stylesheets/site-50eaa978.css"
|
||||||
|
Then I should see 'Not Found'
|
||||||
|
|
||||||
Scenario: Hashed-asset files are not produced for ignored paths
|
Scenario: Hashed-asset files are not produced for ignored paths
|
||||||
Given a fixture app "asset-hash-app"
|
Given a fixture app "asset-hash-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
is_stylesheet = proc { |path| path.start_with? 'stylesheets' }
|
activate :asset_hash, :ignore => [%r(javascripts/*), 'images/*']
|
||||||
activate :asset_hash, ignore: [
|
|
||||||
%r(javascripts/*),
|
|
||||||
'images/*',
|
|
||||||
is_stylesheet
|
|
||||||
]
|
|
||||||
activate :relative_assets
|
activate :relative_assets
|
||||||
activate :directory_indexes
|
activate :directory_indexes
|
||||||
"""
|
"""
|
||||||
|
@ -228,97 +177,27 @@ Feature: Assets get file hashes appended to them and references to them are upda
|
||||||
| images/100px.jpg |
|
| images/100px.jpg |
|
||||||
| images/100px.gif |
|
| images/100px.gif |
|
||||||
| javascripts/application.js |
|
| javascripts/application.js |
|
||||||
| stylesheets/site.css |
|
| stylesheets/site-50eaa978.css |
|
||||||
| index.html |
|
| index.html |
|
||||||
| subdir/index.html |
|
| subdir/index.html |
|
||||||
| other/index.html |
|
| other/index.html |
|
||||||
| api.json |
|
|
||||||
| subdir/api.json |
|
|
||||||
And the following files should not exist:
|
And the following files should not exist:
|
||||||
| images/100px-1242c368.png |
|
| images/100px-1242c368.png |
|
||||||
| images/100px-5fd6fb90.jpg |
|
| images/100px-5fd6fb90.jpg |
|
||||||
| images/100px-5fd6fb90.gif |
|
| images/100px-5fd6fb90.gif |
|
||||||
| javascripts/application-1d8d5276.js |
|
| javascripts/application-1d8d5276.js |
|
||||||
| stylesheets/site-7474cadd.css |
|
|
||||||
|
|
||||||
Scenario: Hashed-asset files are not replaced for rewrite ignored paths
|
|
||||||
Given a fixture app "asset-hash-app"
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
is_stylesheet = proc { |path| path.start_with? '/stylesheets' }
|
|
||||||
activate :asset_hash, rewrite_ignore: [
|
|
||||||
%r(javascripts/*),
|
|
||||||
'/subdir/*',
|
|
||||||
is_stylesheet
|
|
||||||
]
|
|
||||||
activate :relative_assets
|
|
||||||
activate :directory_indexes
|
|
||||||
"""
|
|
||||||
And a successfully built app at "asset-hash-app"
|
|
||||||
When I cd to "build"
|
|
||||||
Then the following files should exist:
|
|
||||||
| index.html |
|
|
||||||
| subdir/index.html |
|
|
||||||
| images/100px-5fd6fb90.jpg |
|
|
||||||
| javascripts/application-1d8d5276.js |
|
|
||||||
| stylesheets/site-8bc55985.css |
|
|
||||||
And the following files should not exist:
|
|
||||||
| images/100px.jpg |
|
|
||||||
| javascripts/application.js |
|
|
||||||
| stylesheets/site.css |
|
| stylesheets/site.css |
|
||||||
And the file "javascripts/application-1d8d5276.js" should contain "img.src = '/images/100px.jpg'"
|
|
||||||
And the file "stylesheets/site-8bc55985.css" should contain:
|
|
||||||
"""
|
|
||||||
background-image: url("../images/100px.jpg")
|
|
||||||
"""
|
|
||||||
And the file "index.html" should contain 'href="stylesheets/site-8bc55985.css"'
|
|
||||||
And the file "index.html" should contain 'src="javascripts/application-1d8d5276.js"'
|
|
||||||
And the file "index.html" should contain 'src="images/100px-5fd6fb90.jpg"'
|
|
||||||
And the file "subdir/index.html" should contain:
|
|
||||||
"""
|
|
||||||
<h2>Image url3:</h2>
|
|
||||||
<p><img src="../images/100px.jpg"></p>
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Already minified files should still be hashed
|
# @wip Currently broken, we should move all asset-host functionality out of Compass and into something more similar to asset_hash with Rack-based rewrites
|
||||||
Given a successfully built app at "asset-hash-minified-app"
|
# Scenario: Enabling an asset host and referencing assets in CSS with URL fragments are rewritten correctly
|
||||||
When I cd to "build"
|
# Given a successfully built app at "asset-hash-host-app"
|
||||||
Then the following files should exist:
|
# When I cd to "build"
|
||||||
| javascripts/jquery.min-276c87ff.js |
|
|
||||||
| stylesheets/test-7de2ad06.css |
|
|
||||||
And the following files should not exist:
|
|
||||||
| javascripts/jquery.min.js |
|
|
||||||
And the file "stylesheets/test-7de2ad06.css" should contain:
|
|
||||||
"""
|
|
||||||
.no-bug{background-image:url(/images/100px-5fd6fb90.jpg)}
|
|
||||||
.bug{content:"";background-image:url(/images/100px-5fd6fb90.jpg)}
|
|
||||||
.no-bug{content:""; background-image:url(/images/100px-5fd6fb90.jpg)}
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Source map paths include the hash
|
# Then the following files should exist:
|
||||||
Given a successfully built app at "asset-hash-source-map"
|
# | images/100px-5fd6fb90.jpg |
|
||||||
When I cd to "build"
|
# | stylesheets/fragment-c058ecb2.css |
|
||||||
Then the following files should exist:
|
# And the following files should not exist:
|
||||||
| index.html |
|
# | images/100px.jpg |
|
||||||
| javascripts/application-4553338c.js |
|
|
||||||
| javascripts/application.js-22cc2b5f.map |
|
|
||||||
| index.html |
|
|
||||||
And the following files should not exist:
|
|
||||||
| javascripts/application.js |
|
|
||||||
| javascripts/application.js.map |
|
|
||||||
|
|
||||||
And the file "javascripts/application-4553338c.js" should contain "//# sourceMappingURL=application.js-22cc2b5f.map"
|
# And the file "stylesheets/fragment-c058ecb2.css" should contain "http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"
|
||||||
|
# And the file "stylesheets/fragment-c058ecb2.css" should not contain "http://middlemanapp.com/images/100px.jpg#test"
|
||||||
Scenario: Hashes can contain a prefix
|
|
||||||
Given a successfully built app at "asset-hash-prefix"
|
|
||||||
When I cd to "build"
|
|
||||||
Then the following files should exist:
|
|
||||||
| index.html |
|
|
||||||
| javascripts/application-myprefix-4553338c.js |
|
|
||||||
| javascripts/application.js-myprefix-22cc2b5f.map |
|
|
||||||
| index.html |
|
|
||||||
And the following files should not exist:
|
|
||||||
| javascripts/application.js |
|
|
||||||
| javascripts/application.js.map |
|
|
||||||
|
|
||||||
And the file "javascripts/application-myprefix-4553338c.js" should contain "//# sourceMappingURL=application.js-myprefix-22cc2b5f.map"
|
|
||||||
|
|
|
@ -1,55 +1,56 @@
|
||||||
Feature: Alternate between multiple asset hosts
|
Feature: Alternate between multiple asset hosts
|
||||||
|
In order to speed up page loading
|
||||||
|
|
||||||
|
Scenario: Set single host globally
|
||||||
|
Given a fixture app "asset-host-app"
|
||||||
|
And a file named "config.rb" with:
|
||||||
|
"""
|
||||||
|
activate :asset_host
|
||||||
|
set :asset_host, "http://assets1.example.com"
|
||||||
|
"""
|
||||||
|
And the Server is running
|
||||||
|
When I go to "/asset_host.html"
|
||||||
|
Then I should see "http://assets1"
|
||||||
|
When I go to "/stylesheets/asset_host.css"
|
||||||
|
Then I should see "http://assets1"
|
||||||
|
|
||||||
|
Scenario: Set proc host globally
|
||||||
|
Given a fixture app "asset-host-app"
|
||||||
|
And a file named "config.rb" with:
|
||||||
|
"""
|
||||||
|
activate :asset_host
|
||||||
|
set :asset_host do |asset|
|
||||||
|
"http://assets%d.example.com" % (asset.hash % 4)
|
||||||
|
end
|
||||||
|
"""
|
||||||
|
And the Server is running
|
||||||
|
When I go to "/asset_host.html"
|
||||||
|
Then I should see "http://assets"
|
||||||
|
When I go to "/stylesheets/asset_host.css"
|
||||||
|
Then I should see "http://assets"
|
||||||
|
|
||||||
Scenario: Set single host with inline-option
|
Scenario: Set single host with inline-option
|
||||||
Given a fixture app "asset-host-app"
|
Given a fixture app "asset-host-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :asset_host, host: "http://assets1.example.com"
|
activate :asset_host, :host => "http://assets1.example.com"
|
||||||
"""
|
"""
|
||||||
And the Server is running
|
And the Server is running
|
||||||
When I go to "/asset_host.html"
|
When I go to "/asset_host.html"
|
||||||
Then I should see "'.google-analytics.com/ga.js'"
|
Then I should see "http://assets1"
|
||||||
Then I should see 'src="https://code.jquery.com/jquery-2.1.3.min.js"'
|
|
||||||
Then I should see content matching %r{http://assets1.example.com/}
|
|
||||||
Then I should not see content matching %r{http://assets1.example.com//}
|
|
||||||
Then I should see content matching %r{<a href="https://github.com/angular/angular.js">Angular.js</a>}
|
|
||||||
Then I should see content matching %r{'//www.example.com/script.js'}
|
|
||||||
When I go to "/stylesheets/asset_host.css"
|
When I go to "/stylesheets/asset_host.css"
|
||||||
Then I should see content matching %r{http://assets1.example.com/}
|
Then I should see "http://assets1"
|
||||||
Then I should not see content matching %r{http://assets1.example.com//}
|
|
||||||
When I go to "/javascripts/asset_host.js"
|
|
||||||
Then I should not see content matching %r{http://assets1.example.com/}
|
|
||||||
|
|
||||||
Scenario: Set proc host with inline-option
|
Scenario: Set proc host with inline-option
|
||||||
Given a fixture app "asset-host-app"
|
Given a fixture app "asset-host-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :asset_host, host: Proc.new { |asset|
|
activate :asset_host, :host => Proc.new { |asset|
|
||||||
hash = Digest::MD5.digest(asset).bytes.map!(&:ord).reduce(&:+)
|
"http://assets%d.example.com" % (asset.hash % 4)
|
||||||
"http://assets%d.example.com" % (hash % 4)
|
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
And the Server is running
|
And the Server is running
|
||||||
When I go to "/asset_host.html"
|
When I go to "/asset_host.html"
|
||||||
Then I should see 'src="https://code.jquery.com/jquery-2.1.3.min.js"'
|
Then I should see "http://assets"
|
||||||
Then I should see content matching %r{http://assets1.example.com/}
|
|
||||||
Then I should not see content matching %r{http://assets1.example.com//}
|
|
||||||
Then I should see content matching %r{<a href="https://github.com/angular/angular.js">Angular.js</a>}
|
|
||||||
Then I should see content matching %r{'//www.example.com/script.js'}
|
|
||||||
When I go to "/stylesheets/asset_host.css"
|
When I go to "/stylesheets/asset_host.css"
|
||||||
Then I should see content matching %r{http://assets1.example.com/}
|
Then I should see "http://assets"
|
||||||
Then I should not see content matching %r{http://assets1.example.com//}
|
|
||||||
|
|
||||||
Scenario: Hosts are not rewritten for rewrite ignored paths
|
|
||||||
Given a fixture app "asset-host-app"
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
activate :asset_host, host: "http://assets1.example.com", rewrite_ignore: [
|
|
||||||
'/stylesheets/asset_host.css',
|
|
||||||
]
|
|
||||||
"""
|
|
||||||
And the Server is running
|
|
||||||
When I go to "/asset_host.html"
|
|
||||||
Then I should see content matching %r{http://assets1.example.com/}
|
|
||||||
When I go to "/stylesheets/asset_host.css"
|
|
||||||
Then I should not see content matching %r{http://assets1.example.com/}
|
|
|
@ -1,8 +0,0 @@
|
||||||
Feature: Automatically detect and insert image dimensions into tags
|
|
||||||
In order to speed up development and appease YSlow
|
|
||||||
|
|
||||||
Scenario: Rendering an image with the feature enabled
|
|
||||||
Given "automatic_alt_tags" feature is "enabled"
|
|
||||||
And the Server is running at "automatic-alt-tags-app"
|
|
||||||
When I go to "/auto-image-sizes.html"
|
|
||||||
Then I should see 'alt="Blank"'
|
|
|
@ -2,28 +2,15 @@ Feature: Automatically detect and insert image dimensions into tags
|
||||||
In order to speed up development and appease YSlow
|
In order to speed up development and appease YSlow
|
||||||
|
|
||||||
Scenario: Rendering an image with the feature disabled
|
Scenario: Rendering an image with the feature disabled
|
||||||
Given a fixture app "automatic-image-size-app"
|
Given "automatic_image_sizes" feature is "disabled"
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
"""
|
|
||||||
And the Server is running at "automatic-image-size-app"
|
And the Server is running at "automatic-image-size-app"
|
||||||
When I go to "/auto-image-sizes.html"
|
When I go to "/auto-image-sizes.html"
|
||||||
Then I should not see "width="
|
Then I should not see "width="
|
||||||
And I should not see "height="
|
And I should not see "height="
|
||||||
When I go to "/markdown-sizes.html"
|
|
||||||
Then I should not see "width="
|
|
||||||
And I should not see "height="
|
|
||||||
|
|
||||||
Scenario: Rendering an image with the feature enabled
|
Scenario: Rendering an image with the feature enabled
|
||||||
Given a fixture app "automatic-image-size-app"
|
Given "automatic_image_sizes" feature is "enabled"
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
activate :automatic_image_sizes
|
|
||||||
"""
|
|
||||||
And the Server is running at "automatic-image-size-app"
|
And the Server is running at "automatic-image-size-app"
|
||||||
When I go to "/auto-image-sizes.html"
|
When I go to "/auto-image-sizes.html"
|
||||||
Then I should see 'width="1"'
|
Then I should see "width="
|
||||||
And I should see 'height="1"'
|
And I should see "height="
|
||||||
When I go to "/markdown-sizes.html"
|
|
||||||
Then I should see 'width="1"'
|
|
||||||
And I should see 'height="1"'
|
|
|
@ -9,6 +9,7 @@ Feature: Builder
|
||||||
| static.html |
|
| static.html |
|
||||||
| services/index.html |
|
| services/index.html |
|
||||||
| stylesheets/static.css |
|
| stylesheets/static.css |
|
||||||
|
| spaces in file.html |
|
||||||
| images/blank.gif |
|
| images/blank.gif |
|
||||||
| images/Read me (example).txt |
|
| images/Read me (example).txt |
|
||||||
| images/Child folder/regular_file(example).txt |
|
| images/Child folder/regular_file(example).txt |
|
||||||
|
@ -20,13 +21,14 @@ Feature: Builder
|
||||||
| layout |
|
| layout |
|
||||||
| layouts/custom |
|
| layouts/custom |
|
||||||
| layouts/content_for |
|
| layouts/content_for |
|
||||||
|
|
||||||
And the file "index.html" should contain "Comment in layout"
|
And the file "index.html" should contain "Comment in layout"
|
||||||
And the file "index.html" should contain "<h1>Welcome</h1>"
|
And the file "index.html" should contain "<h1>Welcome</h1>"
|
||||||
And the file "static.html" should contain "Static, no code!"
|
And the file "static.html" should contain "Static, no code!"
|
||||||
And the file "services/index.html" should contain "Services"
|
And the file "services/index.html" should contain "Services"
|
||||||
And the file "stylesheets/static.css" should contain "body"
|
And the file "stylesheets/static.css" should contain "body"
|
||||||
|
And the file "spaces in file.html" should contain "spaces"
|
||||||
|
|
||||||
Scenario: Build glob
|
Scenario: Build glob
|
||||||
Given a successfully built app at "glob-app" with flags "--glob '*.css'"
|
Given a successfully built app at "glob-app" with flags "--glob '*.css'"
|
||||||
When I cd to "build"
|
When I cd to "build"
|
||||||
|
@ -34,28 +36,16 @@ Feature: Builder
|
||||||
| index.html |
|
| index.html |
|
||||||
Then the following files should exist:
|
Then the following files should exist:
|
||||||
| stylesheets/site.css |
|
| stylesheets/site.css |
|
||||||
|
|
||||||
Scenario: Build with errors
|
Scenario: Build with errors
|
||||||
Given a built app at "build-with-errors-app"
|
Given a built app at "build-with-errors-app"
|
||||||
Then the exit status should be 1
|
Then the exit status should be 1
|
||||||
|
|
||||||
Scenario: Build empty errors
|
Scenario: Build empty errors
|
||||||
Given a built app at "empty-app"
|
Given a built app at "empty-app"
|
||||||
Then the exit status should be 1
|
Then the exit status should be 1
|
||||||
|
|
||||||
Scenario: Build external_pipeline errors
|
|
||||||
Given a built app at "external-pipeline-error"
|
|
||||||
Then the exit status should be 1
|
|
||||||
|
|
||||||
Scenario: Build alias (b)
|
Scenario: Build alias (b)
|
||||||
Given a fixture app "large-build-app"
|
Given a fixture app "large-build-app"
|
||||||
When I run `middleman b`
|
When I run `middleman b`
|
||||||
Then was successfully built
|
Then was successfully built
|
||||||
|
|
||||||
Scenario: Builded text file(ex: html, css, xml, txt)'s permission is 0644
|
|
||||||
Given a successfully built app at "large-build-app"
|
|
||||||
When I cd to "build"
|
|
||||||
Then the mode of filesystem object "index.html" should match "0644"
|
|
||||||
And the mode of filesystem object "stylesheets/static.css" should match "0644"
|
|
||||||
And the mode of filesystem object "feed.xml" should match "0644"
|
|
||||||
And the mode of filesystem object ".htaccess" should match "0644"
|
|
|
@ -5,7 +5,7 @@ Feature: Generate mtime-based query string for busting browser caches
|
||||||
Given "cache_buster" feature is "disabled"
|
Given "cache_buster" feature is "disabled"
|
||||||
And the Server is running at "cache-buster-app"
|
And the Server is running at "cache-buster-app"
|
||||||
When I go to "/stylesheets/relative_assets.css"
|
When I go to "/stylesheets/relative_assets.css"
|
||||||
Then I should see 'blank.gif"'
|
Then I should see "blank.gif'"
|
||||||
|
|
||||||
Scenario: Rendering html with the feature disabled
|
Scenario: Rendering html with the feature disabled
|
||||||
Given "cache_buster" feature is "disabled"
|
Given "cache_buster" feature is "disabled"
|
||||||
|
@ -39,18 +39,4 @@ Feature: Generate mtime-based query string for busting browser caches
|
||||||
And the Server is running at "cache-buster-app"
|
And the Server is running at "cache-buster-app"
|
||||||
When I go to "/cache-buster.html"
|
When I go to "/cache-buster.html"
|
||||||
Then I should see "site.css?"
|
Then I should see "site.css?"
|
||||||
Then I should see "blank.gif?"
|
Then I should see "blank.gif?"
|
||||||
|
|
||||||
Scenario: URLs are not rewritten for rewrite ignored paths
|
|
||||||
Given a fixture app "cache-buster-app"
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
activate :cache_buster, rewrite_ignore: [
|
|
||||||
'/cache-buster.html',
|
|
||||||
]
|
|
||||||
"""
|
|
||||||
And the Server is running at "cache-buster-app"
|
|
||||||
When I go to "/cache-buster.html"
|
|
||||||
Then I should see 'site.css"'
|
|
||||||
Then I should see 'empty-with-include.js"'
|
|
||||||
Then I should see 'blank.gif"'
|
|
|
@ -7,103 +7,13 @@ Feature: Templates should be chainable
|
||||||
Then I should see "Title</h1>"
|
Then I should see "Title</h1>"
|
||||||
And I should see "Subtitle</h2>"
|
And I should see "Subtitle</h2>"
|
||||||
And I should see "Sup</h3>"
|
And I should see "Sup</h3>"
|
||||||
|
|
||||||
Scenario: Build chained template
|
Scenario: Build chained template
|
||||||
Given a successfully built app at "chained-app"
|
Given a successfully built app at "chained-app"
|
||||||
When I cd to "build"
|
When I cd to "build"
|
||||||
Then the following files should exist:
|
Then the following files should exist:
|
||||||
| index.html |
|
| index.html |
|
||||||
| test.erb.combobreaker |
|
|
||||||
And the file "index.html" should contain "Title</h1>"
|
And the file "index.html" should contain "Title</h1>"
|
||||||
And the file "index.html" should contain "Subtitle</h2>"
|
And the file "index.html" should contain "Subtitle</h2>"
|
||||||
And the file "index.html" should contain "Sup</h3>"
|
And the file "index.html" should contain "Sup</h3>"
|
||||||
And the file "test.erb.combobreaker" should contain "Title</h1>"
|
|
||||||
And the file "test.erb.combobreaker" should contain "Subtitle</h2>"
|
|
||||||
And the file "test.erb.combobreaker" should contain "Sup</h3>"
|
|
||||||
|
|
||||||
Scenario: Partials are parsed by multiple template engines: Outer template has .erb and inner .md.erb
|
|
||||||
Given a fixture app "partial-chained_templates-app"
|
|
||||||
And a template named "my_template.html.erb" with:
|
|
||||||
"""
|
|
||||||
<h1>My Template</h1>
|
|
||||||
|
|
||||||
<%= partial 'my_partial' %>
|
|
||||||
"""
|
|
||||||
And a template named "my_partial.html.md.erb" with:
|
|
||||||
"""
|
|
||||||
## My Partial
|
|
||||||
|
|
||||||
<%= 'hello world' %>
|
|
||||||
"""
|
|
||||||
And the Server is running
|
|
||||||
When I go to "/my_template.html"
|
|
||||||
Then I should see:
|
|
||||||
"""
|
|
||||||
<h1>My Template</h1>
|
|
||||||
"""
|
|
||||||
Then I should see:
|
|
||||||
"""
|
|
||||||
<h2 id="my-partial">My Partial</h2>
|
|
||||||
"""
|
|
||||||
Then I should see:
|
|
||||||
"""
|
|
||||||
<p>hello world</p>
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Partials are parsed by multiple template engines: Outer template has .md.erb and inner .md.erb
|
|
||||||
Given a fixture app "partial-chained_templates-app"
|
|
||||||
And a template named "my_template.html.md.erb" with:
|
|
||||||
"""
|
|
||||||
# My Template
|
|
||||||
|
|
||||||
<%= partial 'my_partial' %>
|
|
||||||
"""
|
|
||||||
And a template named "my_partial.html.md.erb" with:
|
|
||||||
"""
|
|
||||||
## My Partial
|
|
||||||
|
|
||||||
<%= 'hello world' %>
|
|
||||||
"""
|
|
||||||
And the Server is running
|
|
||||||
When I go to "/my_template.html"
|
|
||||||
Then I should see:
|
|
||||||
"""
|
|
||||||
<h1 id="my-template">My Template</h1>
|
|
||||||
"""
|
|
||||||
Then I should see:
|
|
||||||
"""
|
|
||||||
<h2 id="my-partial">My Partial</h2>
|
|
||||||
"""
|
|
||||||
Then I should see:
|
|
||||||
"""
|
|
||||||
<p>hello world</p>
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Partials are parsed by multiple template engines: Outer template has .md.erb, and inner .erb
|
|
||||||
Given a fixture app "partial-chained_templates-app"
|
|
||||||
And a template named "my_template.html.md.erb" with:
|
|
||||||
"""
|
|
||||||
# My Template
|
|
||||||
|
|
||||||
<%= partial 'my_partial' %>
|
|
||||||
"""
|
|
||||||
And a template named "my_partial.html.erb" with:
|
|
||||||
"""
|
|
||||||
<h2>My Partial</h2>
|
|
||||||
|
|
||||||
<%= 'hello world' %>
|
|
||||||
"""
|
|
||||||
And the Server is running
|
|
||||||
When I go to "/my_template.html"
|
|
||||||
Then I should see:
|
|
||||||
"""
|
|
||||||
<h1 id="my-template">My Template</h1>
|
|
||||||
"""
|
|
||||||
Then I should see:
|
|
||||||
"""
|
|
||||||
<h2>My Partial</h2>
|
|
||||||
"""
|
|
||||||
Then I should see:
|
|
||||||
"""
|
|
||||||
<p>hello world</p>
|
|
||||||
"""
|
|
|
@ -16,22 +16,6 @@ Feature: Build Clean
|
||||||
| build/should_be_ignored3.html |
|
| build/should_be_ignored3.html |
|
||||||
And the file "build/index.html" should contain "Comment in layout"
|
And the file "build/index.html" should contain "Comment in layout"
|
||||||
|
|
||||||
Scenario: Clean build has a whitelist
|
|
||||||
Given a fixture app "clean-app"
|
|
||||||
When a file named "build/.test" with:
|
|
||||||
"""
|
|
||||||
Hello
|
|
||||||
"""
|
|
||||||
When a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
set :skip_build_clean do |path|
|
|
||||||
path =~ /\.test/
|
|
||||||
end
|
|
||||||
"""
|
|
||||||
Given a built app at "clean-app"
|
|
||||||
Then the following files should exist:
|
|
||||||
| build/.test |
|
|
||||||
|
|
||||||
Scenario: Clean build an app with newly ignored files and a nested output directory
|
Scenario: Clean build an app with newly ignored files and a nested output directory
|
||||||
Given a fixture app "clean-nested-app"
|
Given a fixture app "clean-nested-app"
|
||||||
When a file named "config.rb" with:
|
When a file named "config.rb" with:
|
||||||
|
@ -58,21 +42,3 @@ Feature: Build Clean
|
||||||
Then the following files should not exist:
|
Then the following files should not exist:
|
||||||
| sub/dir/about.html |
|
| sub/dir/about.html |
|
||||||
| sub/dir/nested/nested.html |
|
| sub/dir/nested/nested.html |
|
||||||
|
|
||||||
Scenario: Build and clean an app under a hidden directory
|
|
||||||
Given a fixture app "clean-app"
|
|
||||||
And app "clean-app" is using config "hidden-dir-before"
|
|
||||||
And a built app at "clean-app"
|
|
||||||
Then the following files should exist:
|
|
||||||
| .build/index.html |
|
|
||||||
| .build/should_be_ignored.html |
|
|
||||||
| .build/should_be_ignored2.html |
|
|
||||||
| .build/should_be_ignored3.html |
|
|
||||||
Given app "clean-app" is using config "hidden-dir-after"
|
|
||||||
And a built app at "clean-app"
|
|
||||||
Then the following files should exist:
|
|
||||||
| .build/index.html |
|
|
||||||
And the following files should not exist:
|
|
||||||
| .build/should_be_ignored.html |
|
|
||||||
| .build/should_be_ignored2.html |
|
|
||||||
| .build/should_be_ignored3.html |
|
|
||||||
|
|
|
@ -9,6 +9,6 @@ Feature: Middleman New Extension CLI
|
||||||
| Rakefile |
|
| Rakefile |
|
||||||
| my-extension-library.gemspec |
|
| my-extension-library.gemspec |
|
||||||
| features/support/env.rb |
|
| features/support/env.rb |
|
||||||
| lib/my-extension-library/extension.rb |
|
| lib/middleman_extension.rb |
|
||||||
| lib/my-extension-library.rb |
|
| lib/my-extension-library.rb |
|
||||||
| .gitignore |
|
| .gitignore |
|
100
middleman-core/features/cli_init.feature
Normal file
100
middleman-core/features/cli_init.feature
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
Feature: Middleman CLI
|
||||||
|
|
||||||
|
Scenario: Create a new project
|
||||||
|
Given I run `middleman init MY_PROJECT`
|
||||||
|
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/images/background.png |
|
||||||
|
| source/images/middleman.png |
|
||||||
|
| source/layouts/layout.erb |
|
||||||
|
| source/javascripts/all.js |
|
||||||
|
| source/stylesheets/all.css |
|
||||||
|
| source/stylesheets/normalize.css |
|
||||||
|
|
||||||
|
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`
|
||||||
|
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`
|
||||||
|
Then a directory named "MY_PROJECT" should exist
|
||||||
|
|
||||||
|
Scenario: Create a new project (alias new)
|
||||||
|
When I run `middleman new MY_PROJECT`
|
||||||
|
Then a directory named "MY_PROJECT" should exist
|
||||||
|
|
||||||
|
Scenario: Create a new project (alias n)
|
||||||
|
When I run `middleman n MY_PROJECT`
|
||||||
|
Then a directory named "MY_PROJECT" should exist
|
||||||
|
|
||||||
|
Scenario: Create a new project with Rack
|
||||||
|
When I run `middleman init MY_PROJECT --rack`
|
||||||
|
Then a directory named "MY_PROJECT" should exist
|
||||||
|
When I cd to "MY_PROJECT"
|
||||||
|
Then the following files should exist:
|
||||||
|
| config.rb |
|
||||||
|
| config.ru |
|
||||||
|
| Gemfile |
|
||||||
|
|
||||||
|
Scenario: Create a new HTML5 project
|
||||||
|
When I run `middleman init MY_PROJECT --template=html5`
|
||||||
|
Then a directory named "MY_PROJECT" should exist
|
||||||
|
When I cd to "MY_PROJECT"
|
||||||
|
Then the following files should exist:
|
||||||
|
| config.rb |
|
||||||
|
| Gemfile |
|
||||||
|
Then the following files should not exist:
|
||||||
|
| config.ru |
|
||||||
|
And the file "config.rb" should contain "set :js_dir, 'js'"
|
||||||
|
Then a directory named "source" should exist
|
||||||
|
When I cd to "source"
|
||||||
|
Then the following files should exist:
|
||||||
|
| index.html.erb |
|
||||||
|
| layouts/layout.erb |
|
||||||
|
| humans.txt |
|
||||||
|
| js/main.js |
|
||||||
|
|
||||||
|
Scenario: Create a new HTML5 project with Rack
|
||||||
|
When I run `middleman init MY_PROJECT --rack --template=html5`
|
||||||
|
Then a directory named "MY_PROJECT" should exist
|
||||||
|
When I cd to "MY_PROJECT"
|
||||||
|
Then the following files should exist:
|
||||||
|
| config.rb |
|
||||||
|
| config.ru |
|
||||||
|
| Gemfile |
|
||||||
|
|
||||||
|
Scenario: Create a new Mobile HTML5 project
|
||||||
|
When I run `middleman init MY_PROJECT --template=mobile`
|
||||||
|
Then a directory named "MY_PROJECT" should exist
|
||||||
|
When I cd to "MY_PROJECT"
|
||||||
|
Then the following files should exist:
|
||||||
|
| config.rb |
|
||||||
|
| Gemfile |
|
||||||
|
Then the following files should not exist:
|
||||||
|
| config.ru |
|
||||||
|
Then a directory named "source" should exist
|
||||||
|
When I cd to "source"
|
||||||
|
Then the following files should exist:
|
||||||
|
| index.html |
|
||||||
|
| humans.txt |
|
||||||
|
| js/libs/respond.min.js |
|
||||||
|
|
||||||
|
Scenario: Create a new Mobile HTML5 project with Rack
|
||||||
|
When I run `middleman init MY_PROJECT --rack --template=mobile`
|
||||||
|
Then a directory named "MY_PROJECT" should exist
|
||||||
|
When I cd to "MY_PROJECT"
|
||||||
|
Then the following files should exist:
|
||||||
|
| config.rb |
|
||||||
|
| config.ru |
|
||||||
|
| Gemfile |
|
|
@ -1,265 +0,0 @@
|
||||||
Feature: Collections
|
|
||||||
Scenario: Lazy query
|
|
||||||
Given a fixture app "collections-app"
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
articles1 = collection :articles1, resources.select { |r|
|
|
||||||
matcher = ::Middleman::Util::UriTemplates.uri_template('blog1/{year}-{month}-{day}-{title}.html')
|
|
||||||
::Middleman::Util::UriTemplates.extract_params(matcher, ::Middleman::Util.normalize_path(r.url))
|
|
||||||
}
|
|
||||||
|
|
||||||
everything = resources.select do |r|
|
|
||||||
true
|
|
||||||
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 = everything
|
|
||||||
.select { |resource| resource.data.tags }
|
|
||||||
.each_with_object({}, &method(:group_lookup))
|
|
||||||
|
|
||||||
class Wrapper
|
|
||||||
attr_reader :stuff
|
|
||||||
|
|
||||||
def initialize
|
|
||||||
@stuff = Set.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def <<((k, v))
|
|
||||||
@stuff << k
|
|
||||||
self
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
collection :wrapped, tags.reduce(Wrapper.new, :<<)
|
|
||||||
|
|
||||||
set :tags, tags # Expose to templates
|
|
||||||
|
|
||||||
collection :first_tag, tags.keys.sort.first
|
|
||||||
"""
|
|
||||||
And a file named "source/index.html.erb" with:
|
|
||||||
"""
|
|
||||||
<% collection(:articles1).each do |article| %>
|
|
||||||
Article1: <%= article.data.title %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
Tag Count: <%= collection(:wrapped).stuff.length %>
|
|
||||||
|
|
||||||
<% config[:tags].value.each do |k, items| %>
|
|
||||||
Tag: <%= k %> (<%= items.length %>)
|
|
||||||
<% items.each do |article| %>
|
|
||||||
Article (<%= k %>): <%= article.data.title %>
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
First Tag: <%= collection(:first_tag) %>
|
|
||||||
"""
|
|
||||||
Given the Server is running at "collections-app"
|
|
||||||
When I go to "index.html"
|
|
||||||
Then I should see 'Article1: Blog1 Newer Article'
|
|
||||||
And I should see 'Article1: Blog1 Another Article'
|
|
||||||
And I should see 'Tag: foo (4)'
|
|
||||||
And I should see 'Article (foo): Blog1 Newer Article'
|
|
||||||
And I should see 'Article (foo): Blog1 Another Article'
|
|
||||||
And I should see 'Article (foo): Blog2 Newer Article'
|
|
||||||
And I should see 'Article (foo): Blog2 Another Article'
|
|
||||||
And I should see 'Tag: bar (2)'
|
|
||||||
And I should see 'Article (bar): Blog1 Newer Article'
|
|
||||||
And I should see 'Article (bar): Blog2 Newer Article'
|
|
||||||
And I should see 'Tag: 120 (1)'
|
|
||||||
And I should see 'Article (120): Blog1 Another Article'
|
|
||||||
And I should see 'First Tag: 120'
|
|
||||||
And I should see 'Tag Count: 3'
|
|
||||||
|
|
||||||
Scenario: Collected resources update with file changes
|
|
||||||
Given a fixture app "collections-app"
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
collection :articles, resources.select { |r|
|
|
||||||
matcher = ::Middleman::Util::UriTemplates.uri_template('blog2/{year}-{month}-{day}-{title}.html')
|
|
||||||
::Middleman::Util::UriTemplates.extract_params(matcher, ::Middleman::Util.normalize_path(r.url))
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
And a file named "source/index.html.erb" with:
|
|
||||||
"""
|
|
||||||
<% collection(:articles).each do |article| %>
|
|
||||||
Article: <%= article.data.title || article.file_descriptor[:relative_path] %>
|
|
||||||
<% end %>
|
|
||||||
"""
|
|
||||||
Given the Server is running at "collections-app"
|
|
||||||
When I go to "index.html"
|
|
||||||
Then I should not see "Article: index.html.erb"
|
|
||||||
Then I should see 'Article: Blog2 Newer Article'
|
|
||||||
And I should see 'Article: Blog2 Another Article'
|
|
||||||
|
|
||||||
And the file "source/blog2/2011-01-02-another-article.html.markdown" has the contents
|
|
||||||
"""
|
|
||||||
---
|
|
||||||
title: "Blog3 Another Article"
|
|
||||||
date: 2011-01-02
|
|
||||||
tags:
|
|
||||||
- foo
|
|
||||||
---
|
|
||||||
|
|
||||||
Another Article Content
|
|
||||||
|
|
||||||
"""
|
|
||||||
When I go to "index.html"
|
|
||||||
Then I should see "Article: Blog2 Newer Article"
|
|
||||||
And I should not see "Article: Blog2 Another Article"
|
|
||||||
And I should see 'Article: Blog3 Another Article'
|
|
||||||
|
|
||||||
And the file "source/blog2/2011-01-01-new-article.html.markdown" is removed
|
|
||||||
When I go to "index.html"
|
|
||||||
Then I should not see "Article: Blog2 Newer Article"
|
|
||||||
And I should see 'Article: Blog3 Another Article'
|
|
||||||
|
|
||||||
And the file "source/blog2/2014-01-02-yet-another-article.html.markdown" has the contents
|
|
||||||
"""
|
|
||||||
---
|
|
||||||
title: "Blog2 Yet Another Article"
|
|
||||||
date: 2011-01-02
|
|
||||||
tags:
|
|
||||||
- foo
|
|
||||||
---
|
|
||||||
|
|
||||||
Yet Another Article Content
|
|
||||||
"""
|
|
||||||
When I go to "index.html"
|
|
||||||
And I should see 'Article: Blog3 Another Article'
|
|
||||||
And I should see 'Article: Blog2 Yet Another Article'
|
|
||||||
|
|
||||||
Scenario: Work with local helpers
|
|
||||||
Given a fixture app "collections-app"
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
module TestHelper
|
|
||||||
def help_me
|
|
||||||
"ok"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
include TestHelper
|
|
||||||
|
|
||||||
data.articles.each_with_index do |a, i|
|
|
||||||
proxy "/#{i}-#{help_me}.html", a
|
|
||||||
end
|
|
||||||
"""
|
|
||||||
And a file named "data/articles.yaml" with:
|
|
||||||
"""
|
|
||||||
---
|
|
||||||
- "/blog1/2011-01-01-new-article.html"
|
|
||||||
- "/blog2/2011-01-02-another-article.html"
|
|
||||||
"""
|
|
||||||
Given the Server is running at "collections-app"
|
|
||||||
When I go to "0-ok.html"
|
|
||||||
Then I should see 'Newer Article Content'
|
|
||||||
When I go to "1-ok.html"
|
|
||||||
Then I should see 'Another Article Content'
|
|
||||||
|
|
||||||
Scenario: Collected data update with file changes
|
|
||||||
Given a fixture app "collections-app"
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
data.articles.each_with_index do |a, i|
|
|
||||||
proxy "/#{i}.html", a
|
|
||||||
end
|
|
||||||
"""
|
|
||||||
And a file named "data/articles.yaml" with:
|
|
||||||
"""
|
|
||||||
---
|
|
||||||
- "/blog1/2011-01-01-new-article.html"
|
|
||||||
- "/blog2/2011-01-02-another-article.html"
|
|
||||||
"""
|
|
||||||
Given the Server is running at "collections-app"
|
|
||||||
When I go to "0.html"
|
|
||||||
Then I should see 'Newer Article Content'
|
|
||||||
When I go to "1.html"
|
|
||||||
Then I should see 'Another Article Content'
|
|
||||||
When I go to "2.html"
|
|
||||||
Then I should see 'Not Found'
|
|
||||||
|
|
||||||
When the file "data/articles.yaml" has the contents
|
|
||||||
"""
|
|
||||||
---
|
|
||||||
- "/blog1/2011-01-01-new-article.html"
|
|
||||||
"""
|
|
||||||
When I go to "0.html"
|
|
||||||
Then I should see 'Newer Article Content'
|
|
||||||
When I go to "1.html"
|
|
||||||
Then I should see 'Not Found'
|
|
||||||
When I go to "2.html"
|
|
||||||
Then I should see 'Not Found'
|
|
||||||
|
|
||||||
When the file "data/articles.yaml" has the contents
|
|
||||||
"""
|
|
||||||
---
|
|
||||||
- "/blog2/2011-01-02-another-article.html"
|
|
||||||
- "/blog1/2011-01-01-new-article.html"
|
|
||||||
- "/blog2/2011-01-01-new-article.html"
|
|
||||||
"""
|
|
||||||
When I go to "0.html"
|
|
||||||
Then I should see 'Another Article Content'
|
|
||||||
When I go to "1.html"
|
|
||||||
Then I should see 'Newer Article Content'
|
|
||||||
When I go to "2.html"
|
|
||||||
Then I should see 'Again'
|
|
||||||
|
|
||||||
Scenario: Arbitrary live datasets
|
|
||||||
Given a fixture app "collections-app"
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
ignore "/description_template.html"
|
|
||||||
|
|
||||||
live {
|
|
||||||
Dir[File.join(root, "descriptions/*.txt")]
|
|
||||||
}.each do |description_name|
|
|
||||||
base = File.basename(description_name, '.txt')
|
|
||||||
proxy "#{base}.html", "/description_template.html", locals: {
|
|
||||||
contents: File.read(description_name)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
"""
|
|
||||||
And a file named "source/description_template.html.erb" with:
|
|
||||||
"""
|
|
||||||
<%= contents %>
|
|
||||||
"""
|
|
||||||
And a file named "descriptions/test1.txt" with:
|
|
||||||
"""
|
|
||||||
Test1
|
|
||||||
"""
|
|
||||||
Given the Server is running at "collections-app"
|
|
||||||
When I go to "test1.html"
|
|
||||||
Then I should see 'Test1'
|
|
||||||
When I go to "test2.html"
|
|
||||||
Then I should see 'Not Found'
|
|
||||||
|
|
||||||
When the file "descriptions/test2.txt" has the contents
|
|
||||||
"""
|
|
||||||
Test2
|
|
||||||
"""
|
|
||||||
When I go to "test1.html"
|
|
||||||
Then I should see 'Test1'
|
|
||||||
When I go to "test2.html"
|
|
||||||
Then I should see 'Test2'
|
|
||||||
|
|
||||||
When the file "descriptions/test1.txt" is removed
|
|
||||||
When I go to "test1.html"
|
|
||||||
Then I should see 'Not Found'
|
|
||||||
When I go to "test2.html"
|
|
||||||
Then I should see 'Test2'
|
|
6
middleman-core/features/compass-sprites.feature
Normal file
6
middleman-core/features/compass-sprites.feature
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
Feature: Compass sprites should be generated on build and copied
|
||||||
|
Scenario: Building a clean site with sprites
|
||||||
|
Given a successfully built app at "compass-sprites-app"
|
||||||
|
When I cd to "build"
|
||||||
|
Then the following files should exist:
|
||||||
|
| images/icon-s0de2218f58.png |
|
|
@ -1,11 +0,0 @@
|
||||||
Feature: Console
|
|
||||||
|
|
||||||
Scenario: Enter and exit the console
|
|
||||||
Given a fixture app "large-build-app"
|
|
||||||
When I run `middleman console` interactively
|
|
||||||
And I type "puts 'Hello from the console.'"
|
|
||||||
And I type "exit"
|
|
||||||
Then it should pass with:
|
|
||||||
"""
|
|
||||||
Hello from the console.
|
|
||||||
"""
|
|
|
@ -12,15 +12,13 @@ Feature: Setting the right content type for files
|
||||||
Then the content type should be "text/css"
|
Then the content type should be "text/css"
|
||||||
When I go to "/README"
|
When I go to "/README"
|
||||||
Then the content type should be "text/plain"
|
Then the content type should be "text/plain"
|
||||||
When I go to "/index.php"
|
|
||||||
Then the content type should be "text/php"
|
|
||||||
|
|
||||||
Scenario: Content type can be set explicitly via page or proxy or frontmatter
|
Scenario: Content type can be set explicitly via page or proxy or frontmatter
|
||||||
Given a fixture app "content-type-app"
|
Given a fixture app "content-type-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
page "README", content_type: 'text/awesome'
|
page "README", :content_type => 'text/awesome'
|
||||||
proxy "bar", "index.html", content_type: 'text/custom'
|
proxy "bar", "index.html", :content_type => 'text/custom'
|
||||||
proxy "foo", "README" # auto-delegate to target content type
|
proxy "foo", "README" # auto-delegate to target content type
|
||||||
"""
|
"""
|
||||||
And the Server is running at "content-type-app"
|
And the Server is running at "content-type-app"
|
||||||
|
@ -33,7 +31,6 @@ Feature: Setting the right content type for files
|
||||||
When I go to "/override.html"
|
When I go to "/override.html"
|
||||||
Then the content type should be "text/neato"
|
Then the content type should be "text/neato"
|
||||||
|
|
||||||
@preserve_mime_types
|
|
||||||
Scenario: Content types can be overridden with mime_type
|
Scenario: Content types can be overridden with mime_type
|
||||||
Given a fixture app "content-type-app"
|
Given a fixture app "content-type-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
|
|
|
@ -1,38 +1,26 @@
|
||||||
Feature: Custom layouts
|
Feature: Custom layouts
|
||||||
In order easily switch between relative and absolute paths
|
In order easily switch between relative and absolute paths
|
||||||
|
|
||||||
Scenario: Using custom :layout attribute
|
Scenario: Using custom :layout attribute
|
||||||
Given a fixture app "custom-layout-app2"
|
Given page "/custom-layout.html" has layout "custom"
|
||||||
And a file named "config.rb" with:
|
And the Server is running at "custom-layout-app2"
|
||||||
"""
|
When I go to "/custom-layout.html"
|
||||||
page '/custom-layout.html', layout: :custom
|
Then I should see "Custom Layout"
|
||||||
"""
|
|
||||||
|
Scenario: Using with_layout block
|
||||||
|
Given "/custom-layout.html" with_layout block has layout "custom"
|
||||||
And the Server is running at "custom-layout-app2"
|
And the Server is running at "custom-layout-app2"
|
||||||
When I go to "/custom-layout.html"
|
When I go to "/custom-layout.html"
|
||||||
Then I should see "Custom Layout"
|
Then I should see "Custom Layout"
|
||||||
|
|
||||||
Scenario: Using custom :layout attribute with proxy
|
Scenario: Using with_layout block with globs
|
||||||
Given a fixture app "custom-layout-app2"
|
Given "/custom-*" with_layout block has layout "custom"
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
page '/test/*', layout: :custom
|
|
||||||
proxy "/test/me.html", "/custom-layout.html"
|
|
||||||
live { %w(you) }.each do |who|
|
|
||||||
proxy "/test/#{who}.html", "/custom-layout.html"
|
|
||||||
end
|
|
||||||
"""
|
|
||||||
And the Server is running at "custom-layout-app2"
|
And the Server is running at "custom-layout-app2"
|
||||||
When I go to "/test/me.html"
|
When I go to "/custom-layout.html"
|
||||||
Then I should see "Custom Layout"
|
Then I should see "Custom Layout"
|
||||||
When I go to "/test/you.html"
|
|
||||||
Then I should see "Custom Layout"
|
|
||||||
|
|
||||||
Scenario: Using custom :layout attribute with folders
|
Scenario: Using custom :layout attribute with folders
|
||||||
Given a fixture app "custom-layout-app2"
|
Given page "/custom-layout-dir/" has layout "custom"
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
page '/custom-layout-dir/', layout: :custom
|
|
||||||
"""
|
|
||||||
And the Server is running at "custom-layout-app2"
|
And the Server is running at "custom-layout-app2"
|
||||||
When I go to "/custom-layout-dir"
|
When I go to "/custom-layout-dir"
|
||||||
Then I should see "Custom Layout"
|
Then I should see "Custom Layout"
|
||||||
|
@ -40,13 +28,9 @@ Feature: Custom layouts
|
||||||
Then I should see "Custom Layout"
|
Then I should see "Custom Layout"
|
||||||
When I go to "/custom-layout-dir/index.html"
|
When I go to "/custom-layout-dir/index.html"
|
||||||
Then I should see "Custom Layout"
|
Then I should see "Custom Layout"
|
||||||
|
|
||||||
Scenario: Using custom :layout attribute with folders
|
Scenario: Using custom :layout attribute with folders
|
||||||
Given a fixture app "custom-layout-app2"
|
Given page "/custom-layout-dir" has layout "custom"
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
page '/custom-layout-dir', layout: :custom
|
|
||||||
"""
|
|
||||||
And the Server is running at "custom-layout-app2"
|
And the Server is running at "custom-layout-app2"
|
||||||
When I go to "/custom-layout-dir"
|
When I go to "/custom-layout-dir"
|
||||||
Then I should see "Custom Layout"
|
Then I should see "Custom Layout"
|
||||||
|
@ -54,13 +38,9 @@ Feature: Custom layouts
|
||||||
Then I should see "Custom Layout"
|
Then I should see "Custom Layout"
|
||||||
When I go to "/custom-layout-dir/index.html"
|
When I go to "/custom-layout-dir/index.html"
|
||||||
Then I should see "Custom Layout"
|
Then I should see "Custom Layout"
|
||||||
|
|
||||||
Scenario: Using custom :layout attribute with folders
|
Scenario: Using custom :layout attribute with folders
|
||||||
Given a fixture app "custom-layout-app2"
|
Given page "/custom-layout-dir/index.html" has layout "custom"
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
page '/custom-layout-dir/index.html', layout: :custom
|
|
||||||
"""
|
|
||||||
And the Server is running at "custom-layout-app2"
|
And the Server is running at "custom-layout-app2"
|
||||||
When I go to "/custom-layout-dir"
|
When I go to "/custom-layout-dir"
|
||||||
Then I should see "Custom Layout"
|
Then I should see "Custom Layout"
|
||||||
|
@ -68,7 +48,7 @@ Feature: Custom layouts
|
||||||
Then I should see "Custom Layout"
|
Then I should see "Custom Layout"
|
||||||
When I go to "/custom-layout-dir/index.html"
|
When I go to "/custom-layout-dir/index.html"
|
||||||
Then I should see "Custom Layout"
|
Then I should see "Custom Layout"
|
||||||
|
|
||||||
Scenario: Setting layout inside a matching page block
|
Scenario: Setting layout inside a matching page block
|
||||||
Given the Server is running at "page-helper-layout-block-app"
|
Given the Server is running at "page-helper-layout-block-app"
|
||||||
When I go to "/index.html"
|
When I go to "/index.html"
|
||||||
|
@ -81,4 +61,4 @@ Feature: Custom layouts
|
||||||
When I go to "/path/index.html"
|
When I go to "/path/index.html"
|
||||||
Then I should see "Alt"
|
Then I should see "Alt"
|
||||||
And I should see "Monde"
|
And I should see "Monde"
|
||||||
And I should not see "Hello"
|
And I should not see "Hello"
|
|
@ -51,10 +51,3 @@ Feature: Local Data API
|
||||||
Then I should see "title1:Hello"
|
Then I should see "title1:Hello"
|
||||||
Then I should see "title2:More"
|
Then I should see "title2:More"
|
||||||
Then I should see "title3:Stuff"
|
Then I should see "title3:Stuff"
|
||||||
|
|
||||||
Scenario: Using data postscript
|
|
||||||
Given the Server is running at "nested-data-app"
|
|
||||||
When I go to "/extracontent.html"
|
|
||||||
Then I should see "<h1>With Content</h1>"
|
|
||||||
Then I should see '<h2 id="header-2">Header 2</h2>'
|
|
||||||
Then I should see "<p>Paragraph 1</p>"
|
|
||||||
|
|
|
@ -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:
|
|
||||||
"""
|
|
||||||
<root>
|
|
||||||
<title>Second Layout</title>
|
|
||||||
<%= yield %>
|
|
||||||
</root>
|
|
||||||
"""
|
|
||||||
And a file named "source/index.html.erb" with:
|
|
||||||
"""
|
|
||||||
In Index
|
|
||||||
"""
|
|
||||||
And a file named "source/about.html.erb" with:
|
|
||||||
"""
|
|
||||||
In About
|
|
||||||
"""
|
|
||||||
And a file named "source/style.css.scss" with:
|
|
||||||
"""
|
|
||||||
html { border: 1; }
|
|
||||||
"""
|
|
||||||
And a file named "source/style2.scss" with:
|
|
||||||
"""
|
|
||||||
html { border: 2; }
|
|
||||||
"""
|
|
||||||
And a file named "source/data.json" with:
|
|
||||||
"""
|
|
||||||
{ "hello": "world" }
|
|
||||||
"""
|
|
||||||
And a file named "source/script.js" with:
|
|
||||||
"""
|
|
||||||
helloWorld();
|
|
||||||
"""
|
|
||||||
And a file named "source/test.xml.erb" with:
|
|
||||||
"""
|
|
||||||
---
|
|
||||||
layout: layout2
|
|
||||||
---
|
|
||||||
|
|
||||||
<test>Hi</test>
|
|
||||||
"""
|
|
||||||
And the Server is running at "empty_app"
|
|
||||||
|
|
||||||
Scenario: Normal Template
|
|
||||||
When I go to "/index.html"
|
|
||||||
Then I should see "In Index"
|
|
||||||
And I should see "In Layout"
|
|
||||||
|
|
||||||
Scenario: Normal Template with override
|
|
||||||
When I go to "/about.html"
|
|
||||||
Then I should see "In About"
|
|
||||||
And I should see "Second Layout"
|
|
||||||
And I should not see "In Layout"
|
|
||||||
|
|
||||||
Scenario: Sass
|
|
||||||
When I go to "/style.css"
|
|
||||||
Then I should see "border: 1"
|
|
||||||
And I should not see "In Layout"
|
|
||||||
|
|
||||||
Scenario: Sass with extension
|
|
||||||
When I go to "/style2"
|
|
||||||
Then I should see "border: 2"
|
|
||||||
And I should not see "In Layout"
|
|
||||||
|
|
||||||
Scenario: JSON
|
|
||||||
When I go to "/data.json"
|
|
||||||
Then I should see "hello"
|
|
||||||
And I should not see "In Layout"
|
|
||||||
|
|
||||||
Scenario: JS
|
|
||||||
When I go to "/script.js"
|
|
||||||
Then I should see "helloWorld()"
|
|
||||||
And I should not see "In Layout"
|
|
||||||
|
|
||||||
Scenario: XML
|
|
||||||
When I go to "/test.xml"
|
|
||||||
Then I should see "<test>Hi</test>"
|
|
||||||
And I should see "<title>Second Layout</title>"
|
|
||||||
|
|
|
@ -9,7 +9,6 @@ Feature: Directory Index
|
||||||
| a_folder/needs_index/index.html |
|
| a_folder/needs_index/index.html |
|
||||||
| leave_me_alone.html |
|
| leave_me_alone.html |
|
||||||
| wildcard_leave_me_alone.html |
|
| wildcard_leave_me_alone.html |
|
||||||
| regex_leave_me_alone2.html |
|
|
||||||
| evil spaces/index.html |
|
| evil spaces/index.html |
|
||||||
| regular/index.html |
|
| regular/index.html |
|
||||||
| .htaccess |
|
| .htaccess |
|
||||||
|
@ -22,28 +21,28 @@ Feature: Directory Index
|
||||||
| a_folder/needs_index.html |
|
| a_folder/needs_index.html |
|
||||||
| leave_me_alone/index.html |
|
| leave_me_alone/index.html |
|
||||||
| wildcard_leave_me_alone/index.html |
|
| wildcard_leave_me_alone/index.html |
|
||||||
| regex_leave_me_alone2/index.html |
|
|
||||||
And the file "needs_index/index.html" should contain "Indexable"
|
And the file "needs_index/index.html" should contain "Indexable"
|
||||||
And the file "a_folder/needs_index/index.html" should contain "Indexable"
|
And the file "a_folder/needs_index/index.html" should contain "Indexable"
|
||||||
And the file "leave_me_alone.html" should contain "Stay away"
|
And the file "leave_me_alone.html" should contain "Stay away"
|
||||||
And the file "regular/index.html" should contain "Regular"
|
And the file "regular/index.html" should contain "Regular"
|
||||||
And the file "evil spaces/index.html" should contain "Filled with Evil Spaces"
|
And the file "evil spaces/index.html" should contain "Spaces"
|
||||||
|
|
||||||
|
|
||||||
Scenario: Preview normal file
|
Scenario: Preview normal file
|
||||||
Given the Server is running at "indexable-app"
|
Given the Server is running at "indexable-app"
|
||||||
When I go to "/needs_index/"
|
When I go to "/needs_index/"
|
||||||
Then I should see "Indexable"
|
Then I should see "Indexable"
|
||||||
|
|
||||||
Scenario: Preview normal file with spaces in filename
|
Scenario: Preview normal file with spaces in filename
|
||||||
Given the Server is running at "indexable-app"
|
Given the Server is running at "indexable-app"
|
||||||
When I go to "/evil spaces/"
|
When I go to "/evil%20spaces/"
|
||||||
Then I should see "Filled with Evil Spaces"
|
Then I should see "Spaces"
|
||||||
|
|
||||||
Scenario: Preview normal file subdirectory
|
Scenario: Preview normal file subdirectory
|
||||||
Given the Server is running at "indexable-app"
|
Given the Server is running at "indexable-app"
|
||||||
When I go to "/a_folder/needs_index/"
|
When I go to "/a_folder/needs_index/"
|
||||||
Then I should see "Indexable"
|
Then I should see "Indexable"
|
||||||
|
|
||||||
Scenario: Preview ignored file
|
Scenario: Preview ignored file
|
||||||
Given the Server is running at "indexable-app"
|
Given the Server is running at "indexable-app"
|
||||||
When I go to "/leave_me_alone/"
|
When I go to "/leave_me_alone/"
|
||||||
|
@ -70,13 +69,14 @@ Feature: Directory Index
|
||||||
And the Server is running at "indexable-app"
|
And the Server is running at "indexable-app"
|
||||||
When I go to "/link_to/"
|
When I go to "/link_to/"
|
||||||
Then I should see 'link_to: <a href="/needs_index/">Needs Index</a>'
|
Then I should see 'link_to: <a href="/needs_index/">Needs Index</a>'
|
||||||
Then I should see 'explicit_link_to: <a href="/needs_index/">Explicit</a>'
|
Then I should see 'explicit_link_to: <a href="/needs_index/index.html">Explicit</a>'
|
||||||
Then I should see 'unknown_link_to: <a href="/unknown.html">Unknown</a>'
|
Then I should see 'unknown_link_to: <a href="/unknown.html">Unknown</a>'
|
||||||
Then I should see 'relative_link_to: <a href="/needs_index/">Relative</a>'
|
Then I should see 'relative_link_to: <a href="/needs_index/">Relative</a>'
|
||||||
Then I should see 'link_to_with_spaces: <a href="/evil%20spaces/">Spaces</a>'
|
Then I should see 'link_to_with_spaces: <a href="/evil%20spaces/">Spaces</a>'
|
||||||
When I go to "/link_to/sub/"
|
When I go to "/link_to/sub/"
|
||||||
Then I should see 'link_to: <a href="/needs_index/">Needs Index</a>'
|
Then I should see 'link_to: <a href="/needs_index/">Needs Index</a>'
|
||||||
Then I should see 'explicit_link_to: <a href="/needs_index/">Explicit</a>'
|
Then I should see 'explicit_link_to: <a href="/needs_index/index.html">Explicit</a>'
|
||||||
Then I should see 'unknown_link_to: <a href="/unknown.html">Unknown</a>'
|
Then I should see 'unknown_link_to: <a href="/unknown.html">Unknown</a>'
|
||||||
Then I should see 'relative_link_to: <a href="/needs_index/">Relative</a>'
|
Then I should see 'relative_link_to: <a href="/needs_index/">Relative</a>'
|
||||||
Then I should see 'link_to_with_spaces: <a href="/evil%20spaces/">Spaces</a>'
|
Then I should see 'link_to_with_spaces: <a href="/evil%20spaces/">Spaces</a>'
|
||||||
|
|
||||||
|
|
|
@ -31,8 +31,7 @@ Feature: Dynamic Pages
|
||||||
| should_be_ignored6.html |
|
| should_be_ignored6.html |
|
||||||
| should_be_ignored7.html |
|
| should_be_ignored7.html |
|
||||||
| should_be_ignored8.html |
|
| should_be_ignored8.html |
|
||||||
| should_be_ignored9.html |
|
|
||||||
|
|
||||||
Scenario: Preview basic proxy
|
Scenario: Preview basic proxy
|
||||||
Given the Server is running at "dynamic-pages-app"
|
Given the Server is running at "dynamic-pages-app"
|
||||||
When I go to "/fake.html"
|
When I go to "/fake.html"
|
||||||
|
@ -43,46 +42,46 @@ Feature: Dynamic Pages
|
||||||
Then I should see "I am real"
|
Then I should see "I am real"
|
||||||
When I go to "/fake4.html"
|
When I go to "/fake4.html"
|
||||||
Then I should see "I am real"
|
Then I should see "I am real"
|
||||||
|
|
||||||
Scenario: Preview proxy with variable one
|
Scenario: Preview proxy with variable one
|
||||||
Given the Server is running at "dynamic-pages-app"
|
Given the Server is running at "dynamic-pages-app"
|
||||||
When I go to "/fake/one.html"
|
When I go to "/fake/one.html"
|
||||||
Then I should see "I am real: one"
|
Then I should see "I am real: one"
|
||||||
Then I should see "Global: I am one glob"
|
Then I should see "Global: I am one glob"
|
||||||
Then I should see "All: I am all glob"
|
Then I should see "All: I am all glob"
|
||||||
|
|
||||||
When I go to "/fake2/one.html"
|
When I go to "/fake2/one.html"
|
||||||
Then I should see "I am real: one"
|
Then I should see "I am real: one"
|
||||||
Then I should see "Global: I am two glob"
|
Then I should see "Global: I am two glob"
|
||||||
Then I should see "All: I am all glob"
|
Then I should see "All: I am all glob"
|
||||||
|
|
||||||
When I go to "/fake3/one.html"
|
When I go to "/fake3/one.html"
|
||||||
Then I should see "I am real: one"
|
Then I should see "I am real: one"
|
||||||
Then I should see "Global: I am three glob"
|
Then I should see "Global: I am three glob"
|
||||||
Then I should see "All: I am all glob"
|
Then I should see "All: I am all glob"
|
||||||
|
|
||||||
When I go to "/fake4/one.html"
|
When I go to "/fake4/one.html"
|
||||||
Then I should see "I am real: one"
|
Then I should see "I am real: one"
|
||||||
Then I should see "Global: I am four glob"
|
Then I should see "Global: I am four glob"
|
||||||
Then I should see "All: I am all glob"
|
Then I should see "All: I am all glob"
|
||||||
|
|
||||||
Scenario: Preview proxy with variable two
|
Scenario: Preview proxy with variable two
|
||||||
Given the Server is running at "dynamic-pages-app"
|
Given the Server is running at "dynamic-pages-app"
|
||||||
When I go to "/fake/two.html"
|
When I go to "/fake/two.html"
|
||||||
Then I should see "I am real: two"
|
Then I should see "I am real: two"
|
||||||
Then I should see "Global: I am one glob"
|
Then I should see "Global: I am one glob"
|
||||||
Then I should see "All: I am all glob"
|
Then I should see "All: I am all glob"
|
||||||
|
|
||||||
When I go to "/fake2/two.html"
|
When I go to "/fake2/two.html"
|
||||||
Then I should see "I am real: two"
|
Then I should see "I am real: two"
|
||||||
Then I should see "Global: I am two glob"
|
Then I should see "Global: I am two glob"
|
||||||
Then I should see "All: I am all glob"
|
Then I should see "All: I am all glob"
|
||||||
|
|
||||||
When I go to "/fake3/two.html"
|
When I go to "/fake3/two.html"
|
||||||
Then I should see "I am real: two"
|
Then I should see "I am real: two"
|
||||||
Then I should see "Global: I am three glob"
|
Then I should see "Global: I am three glob"
|
||||||
Then I should see "All: I am all glob"
|
Then I should see "All: I am all glob"
|
||||||
|
|
||||||
When I go to "/fake4/two.html"
|
When I go to "/fake4/two.html"
|
||||||
Then I should see "I am real: two"
|
Then I should see "I am real: two"
|
||||||
Then I should see "Global: I am four glob"
|
Then I should see "Global: I am four glob"
|
||||||
|
@ -102,7 +101,7 @@ Feature: Dynamic Pages
|
||||||
Then the file "fake3/one.html" should contain "I am real: one"
|
Then the file "fake3/one.html" should contain "I am real: one"
|
||||||
Then the file "fake3/one.html" should contain "Global: I am three glob"
|
Then the file "fake3/one.html" should contain "Global: I am three glob"
|
||||||
Then the file "fake3/one.html" should contain "All: I am all glob"
|
Then the file "fake3/one.html" should contain "All: I am all glob"
|
||||||
|
|
||||||
Scenario: Target ignore
|
Scenario: Target ignore
|
||||||
Given the Server is running at "dynamic-pages-app"
|
Given the Server is running at "dynamic-pages-app"
|
||||||
When I go to "/target_ignore.html"
|
When I go to "/target_ignore.html"
|
||||||
|
@ -113,7 +112,7 @@ Feature: Dynamic Pages
|
||||||
Then I should see "Ignore me! 7"
|
Then I should see "Ignore me! 7"
|
||||||
When I go to "/target_ignore4.html"
|
When I go to "/target_ignore4.html"
|
||||||
Then I should see "Ignore me! 8"
|
Then I should see "Ignore me! 8"
|
||||||
|
|
||||||
Scenario: Preview ignored paths
|
Scenario: Preview ignored paths
|
||||||
Given the Server is running at "dynamic-pages-app"
|
Given the Server is running at "dynamic-pages-app"
|
||||||
When I go to "/should_be_ignored.html"
|
When I go to "/should_be_ignored.html"
|
||||||
|
@ -131,6 +130,4 @@ Feature: Dynamic Pages
|
||||||
When I go to "/should_be_ignored7.html"
|
When I go to "/should_be_ignored7.html"
|
||||||
Then I should see "File Not Found"
|
Then I should see "File Not Found"
|
||||||
When I go to "/should_be_ignored8.html"
|
When I go to "/should_be_ignored8.html"
|
||||||
Then I should see "File Not Found"
|
Then I should see "File Not Found"
|
||||||
When I go to "/should_be_ignored9.html"
|
|
||||||
Then I should see "File Not Found"
|
|
|
@ -1,28 +0,0 @@
|
||||||
# encoding: iso-8859-1
|
|
||||||
Feature: encoding option
|
|
||||||
|
|
||||||
Scenario: No encoding set
|
|
||||||
Given a fixture app "clean-app"
|
|
||||||
Given the Server is running at "clean-app"
|
|
||||||
|
|
||||||
When I go to "/index.html"
|
|
||||||
Then the "Content-Type" header should contain "text/html"
|
|
||||||
Then the "Content-Type" header should contain "charset=utf-8"
|
|
||||||
|
|
||||||
@wip
|
|
||||||
Scenario: Custom encoding set
|
|
||||||
Given a fixture app "i-8859-1-app"
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
set :encoding, "ISO-8859-1"
|
|
||||||
|
|
||||||
::Rack::Mime::MIME_TYPES['.html'] = 'text/html; charset=iso-8859-1'
|
|
||||||
::Rack::Mime::MIME_TYPES['.htm'] = 'text/html; charset=iso-8859-1'
|
|
||||||
::Rack::Mime::MIME_TYPES['.map'] = 'application/json; charset=iso-8859-1'
|
|
||||||
"""
|
|
||||||
Given the Server is running at "i-8859-1-app"
|
|
||||||
|
|
||||||
When I go to "/index.html"
|
|
||||||
Then the "Content-Type" header should contain "text/html"
|
|
||||||
Then the "Content-Type" header should contain "charset=iso-8859-1"
|
|
||||||
Then I should see "äöü"
|
|
|
@ -1,10 +0,0 @@
|
||||||
Feature: Extension author could use some hooks
|
|
||||||
|
|
||||||
Scenario: When build
|
|
||||||
Given a fixture app "extension-api-deprecations-app"
|
|
||||||
When I run `middleman build`
|
|
||||||
Then the exit status should be 0
|
|
||||||
And the output should contain "`set :layout` is deprecated"
|
|
||||||
And the file "build/index.html" should contain "In Index"
|
|
||||||
And the file "build/index.html" should not contain "In Layout"
|
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
Feature: Extension author could use some hooks
|
|
||||||
|
|
||||||
Scenario: When build
|
|
||||||
Given a fixture app "extension-hooks-app"
|
|
||||||
When I run `middleman build`
|
|
||||||
Then the exit status should be 0
|
|
||||||
And the output should contain "/// after_configuration ///"
|
|
||||||
And the output should contain "/// ready ///"
|
|
||||||
And the output should contain "/// before_build ///"
|
|
||||||
And the output should contain "/// before ///"
|
|
||||||
And the output should contain "/// before_render ///"
|
|
||||||
And the output should contain "/// after_render ///"
|
|
||||||
And the output should contain "/// after_build ///"
|
|
15
middleman-core/features/fonts.feature
Normal file
15
middleman-core/features/fonts.feature
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
Feature: Web Fonts
|
||||||
|
|
||||||
|
Scenario: Checking built folder for content
|
||||||
|
Given a successfully built app at "fonts-app"
|
||||||
|
When I cd to "build"
|
||||||
|
Then the following files should exist:
|
||||||
|
| stylesheets/fonts.css |
|
||||||
|
And the file "stylesheets/fonts.css" should contain "/fonts/StMarie-Thin.otf"
|
||||||
|
And the file "stylesheets/fonts.css" should contain "/fonts/blank/blank.otf"
|
||||||
|
|
||||||
|
Scenario: Rendering scss
|
||||||
|
Given the Server is running at "fonts-app"
|
||||||
|
When I go to "/stylesheets/fonts.css"
|
||||||
|
Then I should see "/fonts/StMarie-Thin.otf"
|
||||||
|
And I should see "/fonts/blank/blank.otf"
|
|
@ -22,7 +22,7 @@ Feature: Neighboring YAML Front Matter
|
||||||
Then I should not see "---"
|
Then I should not see "---"
|
||||||
When I go to "/raw-front-matter.php.frontmatter"
|
When I go to "/raw-front-matter.php.frontmatter"
|
||||||
Then I should see "File Not Found"
|
Then I should see "File Not Found"
|
||||||
|
|
||||||
Scenario: YAML not on first line, with encoding
|
Scenario: YAML not on first line, with encoding
|
||||||
Given the Server is running at "frontmatter-neighbor-app"
|
Given the Server is running at "frontmatter-neighbor-app"
|
||||||
When I go to "/front-matter-encoding.html"
|
When I go to "/front-matter-encoding.html"
|
||||||
|
@ -30,12 +30,23 @@ Feature: Neighboring YAML Front Matter
|
||||||
Then I should not see "---"
|
Then I should not see "---"
|
||||||
When I go to "/front-matter-encoding.html.erb.frontmatter"
|
When I go to "/front-matter-encoding.html.erb.frontmatter"
|
||||||
Then I should see "File Not Found"
|
Then I should see "File Not Found"
|
||||||
|
|
||||||
|
Scenario: Rendering html (json)
|
||||||
|
Given the Server is running at "frontmatter-neighbor-app"
|
||||||
|
When I go to "/json-front-matter.html.erb.frontmatter"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/json-front-matter-2.php"
|
||||||
|
Then I should see "<h1>This is the title</h1>"
|
||||||
|
Then I should see "<?php"
|
||||||
|
Then I should not see ";;;"
|
||||||
|
When I go to "/json-front-matter-2.php.erb.frontmatter"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
|
||||||
Scenario: A template changes frontmatter during preview
|
Scenario: A template changes frontmatter during preview
|
||||||
Given the Server is running at "frontmatter-neighbor-app"
|
Given the Server is running at "frontmatter-neighbor-app"
|
||||||
And the file "source/front-matter-change.html.erb" has the contents
|
And the file "source/front-matter-change.html.erb" has the contents
|
||||||
"""
|
"""
|
||||||
FileA <%= current_page.data.title %>
|
<%= current_page.data.title %>
|
||||||
"""
|
"""
|
||||||
And the file "source/front-matter-change.html.erb.frontmatter" has the contents
|
And the file "source/front-matter-change.html.erb.frontmatter" has the contents
|
||||||
"""
|
"""
|
||||||
|
@ -43,8 +54,6 @@ Feature: Neighboring YAML Front Matter
|
||||||
title: Hello World
|
title: Hello World
|
||||||
layout: false
|
layout: false
|
||||||
---
|
---
|
||||||
|
|
||||||
FileB
|
|
||||||
"""
|
"""
|
||||||
When I go to "/front-matter-change.html"
|
When I go to "/front-matter-change.html"
|
||||||
Then I should see "Hello World"
|
Then I should see "Hello World"
|
||||||
|
@ -54,8 +63,6 @@ Feature: Neighboring YAML Front Matter
|
||||||
title: Hola Mundo
|
title: Hola Mundo
|
||||||
layout: false
|
layout: false
|
||||||
---
|
---
|
||||||
|
|
||||||
FileC
|
|
||||||
"""
|
"""
|
||||||
When I go to "/front-matter-change.html"
|
When I go to "/front-matter-change.html"
|
||||||
Then I should see "Hola Mundo"
|
Then I should see "Hola Mundo"
|
||||||
|
@ -129,23 +136,3 @@ Feature: Neighboring YAML Front Matter
|
||||||
Then I should see "Layout in use: Override"
|
Then I should see "Layout in use: Override"
|
||||||
When I go to "/page_mentioned.html.erb.frontmatter"
|
When I go to "/page_mentioned.html.erb.frontmatter"
|
||||||
Then I should see "File Not Found"
|
Then I should see "File Not Found"
|
||||||
|
|
||||||
# Scenario: Neighbor frontmatter for destination of proxy resources
|
|
||||||
# Given the Server is running at "frontmatter-settings-neighbor-app"
|
|
||||||
# And the file "source/proxied_with_frontmatter.html.frontmatter" has the contents
|
|
||||||
# """
|
|
||||||
# ---
|
|
||||||
# title: Proxied title
|
|
||||||
# ---
|
|
||||||
# """
|
|
||||||
# And the file "source/ignored.html.erb" has the contents
|
|
||||||
# """
|
|
||||||
# ---
|
|
||||||
# ignored: true
|
|
||||||
# ---
|
|
||||||
|
|
||||||
# <%= current_resource.data.inspect %>
|
|
||||||
# <%= current_resource.data.title %>
|
|
||||||
# """
|
|
||||||
# When I go to "/proxied_with_frontmatter.html"
|
|
||||||
# Then I should see "Proxied title"
|
|
||||||
|
|
|
@ -18,33 +18,39 @@ Feature: YAML Front Matter
|
||||||
Then I should see "<?php"
|
Then I should see "<?php"
|
||||||
Then I should not see "---"
|
Then I should not see "---"
|
||||||
|
|
||||||
Scenario: Rendering markdown (template-less) (yaml)
|
|
||||||
Given the Server is running at "frontmatter-app"
|
|
||||||
When I go to "/front-matter-pandoc.html"
|
|
||||||
Then I should see ">This is a document</h1>"
|
|
||||||
Then I should see "<p>To be or not to be</p>"
|
|
||||||
Then I should see "The meaning of life is 42"
|
|
||||||
Then I should not see "..."
|
|
||||||
Then I should not see "layout: false"
|
|
||||||
Then I should not see "title: Pandoc likes trailing dots..."
|
|
||||||
|
|
||||||
Scenario: Rendering Haml (yaml)
|
|
||||||
Given the Server is running at "frontmatter-app"
|
|
||||||
When I go to "/front-matter-haml.html"
|
|
||||||
Then I should see "<h1>This is the title</h1>"
|
|
||||||
Then I should not see "---"
|
|
||||||
|
|
||||||
Scenario: YAML not on first line, no encoding
|
Scenario: YAML not on first line, no encoding
|
||||||
Given the Server is running at "frontmatter-app"
|
Given the Server is running at "frontmatter-app"
|
||||||
When I go to "/front-matter-line-2.html"
|
When I go to "/front-matter-line-2.html"
|
||||||
Then I should see "<h1></h1>"
|
Then I should see "<h1></h1>"
|
||||||
Then I should see "---"
|
Then I should see "---"
|
||||||
|
|
||||||
Scenario: YAML not on first line, with encoding
|
Scenario: YAML not on first line, with encoding
|
||||||
Given the Server is running at "frontmatter-app"
|
Given the Server is running at "frontmatter-app"
|
||||||
When I go to "/front-matter-encoding.html"
|
When I go to "/front-matter-encoding.html"
|
||||||
Then I should see "<h1>This is the title</h1>"
|
Then I should see "<h1>This is the title</h1>"
|
||||||
Then I should not see "---"
|
Then I should not see "---"
|
||||||
|
|
||||||
|
Scenario: Rendering html (json)
|
||||||
|
Given the Server is running at "frontmatter-app"
|
||||||
|
When I go to "/json-front-matter.html"
|
||||||
|
Then I should see "<h1>This is the title</h1>"
|
||||||
|
Then I should not see ";;;"
|
||||||
|
When I go to "/json-front-matter-2.php"
|
||||||
|
Then I should see "<h1>This is the title</h1>"
|
||||||
|
Then I should see "<?php"
|
||||||
|
Then I should not see ";;;"
|
||||||
|
|
||||||
|
Scenario: JSON not on first line, no encoding
|
||||||
|
Given the Server is running at "frontmatter-app"
|
||||||
|
When I go to "/json-front-matter-line-2.html"
|
||||||
|
Then I should see "<h1></h1>"
|
||||||
|
Then I should see ";;;"
|
||||||
|
|
||||||
|
Scenario: JSON not on first line, with encoding
|
||||||
|
Given the Server is running at "frontmatter-app"
|
||||||
|
When I go to "/json-front-matter-encoding.html"
|
||||||
|
Then I should see "<h1>This is the title</h1>"
|
||||||
|
Then I should not see ";;;"
|
||||||
|
|
||||||
Scenario: A template changes frontmatter during preview
|
Scenario: A template changes frontmatter during preview
|
||||||
Given the Server is running at "frontmatter-app"
|
Given the Server is running at "frontmatter-app"
|
||||||
|
|
|
@ -3,13 +3,14 @@ Feature: GZIP assets during build
|
||||||
Scenario: Built assets should be gzipped
|
Scenario: Built assets should be gzipped
|
||||||
Given a successfully built app at "gzip-app"
|
Given a successfully built app at "gzip-app"
|
||||||
Then the following files should exist:
|
Then the following files should exist:
|
||||||
| build/index.html |
|
| build/javascripts/test.js.gz |
|
||||||
|
| build/stylesheets/test.css.gz |
|
||||||
| build/index.html.gz |
|
| build/index.html.gz |
|
||||||
| build/javascripts/test.js |
|
| build/javascripts/test.js |
|
||||||
| build/javascripts/test.js.gz |
|
|
||||||
| build/stylesheets/test.css |
|
| build/stylesheets/test.css |
|
||||||
| build/stylesheets/test.css.gz |
|
| build/index.html |
|
||||||
And the file "build/javascripts/test.js.gz" should be gzipped
|
When I run `file build/javascripts/test.js.gz`
|
||||||
|
Then the output should contain "gzip"
|
||||||
|
|
||||||
Scenario: Preview server doesn't change
|
Scenario: Preview server doesn't change
|
||||||
Given the Server is running at "gzip-app"
|
Given the Server is running at "gzip-app"
|
||||||
|
@ -17,35 +18,4 @@ Feature: GZIP assets during build
|
||||||
Then I should see "test_function"
|
Then I should see "test_function"
|
||||||
When I go to "/stylesheets/test.css"
|
When I go to "/stylesheets/test.css"
|
||||||
Then I should see "test_selector"
|
Then I should see "test_selector"
|
||||||
|
|
||||||
Scenario: Only specified extensions should be gzipped
|
|
||||||
Given a fixture app "gzip-app"
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
activate :gzip, exts: %w(.htm .html .js .xhtml)
|
|
||||||
"""
|
|
||||||
And a successfully built app at "gzip-app"
|
|
||||||
Then the following files should exist:
|
|
||||||
| build/index.html |
|
|
||||||
| build/index.html.gz |
|
|
||||||
| build/javascripts/test.js |
|
|
||||||
| build/javascripts/test.js.gz |
|
|
||||||
| build/stylesheets/test.css |
|
|
||||||
And the following files should not exist:
|
|
||||||
| build/stylesheets/test.css.gz |
|
|
||||||
|
|
||||||
Scenario: Gzipped files are not produced for ignored paths
|
|
||||||
Given a fixture app "gzip-app"
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
activate :gzip, ignore: ['index.html', %r(javascripts/.*)]
|
|
||||||
"""
|
|
||||||
And a successfully built app at "gzip-app"
|
|
||||||
Then the following files should exist:
|
|
||||||
| build/index.html |
|
|
||||||
| build/javascripts/test.js |
|
|
||||||
| build/stylesheets/test.css |
|
|
||||||
| build/stylesheets/test.css.gz |
|
|
||||||
And the following files should not exist:
|
|
||||||
| build/index.html.gz |
|
|
||||||
| build/javascripts/test.js.gz |
|
|
|
@ -6,11 +6,6 @@ Feature: Built-in auto_javascript_include_tag view helper
|
||||||
When I go to "/auto-js.html"
|
When I go to "/auto-js.html"
|
||||||
Then I should see "javascripts/auto-js.js"
|
Then I should see "javascripts/auto-js.js"
|
||||||
|
|
||||||
Scenario: Viewing the root path (directory index)
|
|
||||||
Given the Server is running at "auto-js-directory-index-app"
|
|
||||||
When I go to "/auto-js/index.html"
|
|
||||||
Then I should see "javascripts/auto-js.js"
|
|
||||||
|
|
||||||
Scenario: Viewing the root path (build mode)
|
Scenario: Viewing the root path (build mode)
|
||||||
Given a successfully built app at "auto-js-app"
|
Given a successfully built app at "auto-js-app"
|
||||||
When I cd to "build"
|
When I cd to "build"
|
||||||
|
|
|
@ -5,8 +5,8 @@ Feature: content_tag helper
|
||||||
And an empty file named "config.rb"
|
And an empty file named "config.rb"
|
||||||
And a file named "source/index.html.erb" with:
|
And a file named "source/index.html.erb" with:
|
||||||
"""
|
"""
|
||||||
<%= content_tag :div, "<hello>world</hello>", class: 'one' %>
|
<%= content_tag :div, "<hello>world</hello>", :class => 'one' %>
|
||||||
<% content_tag :where, class: 'the hell is' do %>
|
<% content_tag :where, :class => 'the hell is' do %>
|
||||||
<my>damn croissant</my>
|
<my>damn croissant</my>
|
||||||
<% end %>
|
<% end %>
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -5,16 +5,16 @@ Feature: form_tag helper
|
||||||
And an empty file named "config.rb"
|
And an empty file named "config.rb"
|
||||||
And a file named "source/form_tag.html.erb" with:
|
And a file named "source/form_tag.html.erb" with:
|
||||||
"""
|
"""
|
||||||
absolute: <% form_tag "/needs_index.html#absolute", relative: true do %>
|
absolute: <% form_tag "/needs_index.html#absolute", :relative => true do %>
|
||||||
<% end %>
|
<% end %>
|
||||||
relative: <% form_tag "needs_index.html#relative", relative: true do %>
|
relative: <% form_tag "needs_index.html#relative", :relative => true do %>
|
||||||
<% end %>
|
<% end %>
|
||||||
"""
|
"""
|
||||||
And a file named "source/form_tag/sub.html.erb" with:
|
And a file named "source/form_tag/sub.html.erb" with:
|
||||||
"""
|
"""
|
||||||
absolute: <% form_tag "/needs_index.html#absolute", relative: true do %>
|
absolute: <% form_tag "/needs_index.html#absolute", :relative => true do %>
|
||||||
<% end %>
|
<% end %>
|
||||||
relative: <% form_tag "../needs_index.html#relative", relative: true do %>
|
relative: <% form_tag "../needs_index.html#relative", :relative => true do %>
|
||||||
<% end %>
|
<% end %>
|
||||||
"""
|
"""
|
||||||
And the Server is running at "indexable-app"
|
And the Server is running at "indexable-app"
|
||||||
|
|
|
@ -5,24 +5,6 @@ Feature: link_to helper
|
||||||
When I go to "/link_to_erb.html"
|
When I go to "/link_to_erb.html"
|
||||||
Then I should see "erb <s>with html tags</s>"
|
Then I should see "erb <s>with html tags</s>"
|
||||||
|
|
||||||
Scenario: link_to works with absolute URLs (where the relative part matches a local path)
|
|
||||||
Given a fixture app "link-to-app"
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
set :relative_links, true
|
|
||||||
"""
|
|
||||||
And a file named "source/test.html.erb" with:
|
|
||||||
"""
|
|
||||||
Hello
|
|
||||||
"""
|
|
||||||
And a file named "source/link_to_absolute.html.erb" with:
|
|
||||||
"""
|
|
||||||
<%= link_to "test", "http://google.com/test.html" %>
|
|
||||||
"""
|
|
||||||
And the Server is running at "link-to-app"
|
|
||||||
When I go to "/link_to_absolute.html"
|
|
||||||
Then I should see '<a href="http://google.com/test.html">test</a>'
|
|
||||||
|
|
||||||
Scenario: link_to works with blocks (slim)
|
Scenario: link_to works with blocks (slim)
|
||||||
Given the Server is running at "link-to-app"
|
Given the Server is running at "link-to-app"
|
||||||
When I go to "/link_to_slim.html"
|
When I go to "/link_to_slim.html"
|
||||||
|
@ -38,31 +20,21 @@ Feature: link_to helper
|
||||||
And an empty file named "config.rb"
|
And an empty file named "config.rb"
|
||||||
And a file named "source/link_to.html.erb" with:
|
And a file named "source/link_to.html.erb" with:
|
||||||
"""
|
"""
|
||||||
absolute: <%= link_to "Needs Index", "/needs_index.html", relative: true %>
|
absolute: <%= link_to "Needs Index", "/needs_index.html", :relative => true %>
|
||||||
relative: <%= link_to "Relative", "needs_index.html", relative: true %>
|
relative: <%= link_to "Relative", "needs_index.html", :relative => true %>
|
||||||
|
|
||||||
absolute spaces: <%= link_to "Spaces Index", "/evil spaces.html", relative: true %>
|
|
||||||
relative spaces: <%= link_to "Spaces Relative", "evil spaces.html", relative: true %>
|
|
||||||
"""
|
"""
|
||||||
And a file named "source/link_to/sub.html.erb" with:
|
And a file named "source/link_to/sub.html.erb" with:
|
||||||
"""
|
"""
|
||||||
absolute: <%= link_to "Needs Index", "/needs_index.html", relative: true %>
|
absolute: <%= link_to "Needs Index", "/needs_index.html", :relative => true %>
|
||||||
relative: <%= link_to "Relative", "../needs_index.html", relative: true %>
|
relative: <%= link_to "Relative", "../needs_index.html", :relative => true %>
|
||||||
|
|
||||||
absolute spaces: <%= link_to "Spaces Index", "/evil spaces.html", relative: true %>
|
|
||||||
relative spaces: <%= link_to "Spaces Relative", "../evil spaces.html", relative: true %>
|
|
||||||
"""
|
"""
|
||||||
And the Server is running at "indexable-app"
|
And the Server is running at "indexable-app"
|
||||||
When I go to "/link_to.html"
|
When I go to "/link_to.html"
|
||||||
Then I should see 'absolute: <a href="needs_index.html">Needs Index</a>'
|
Then I should see 'absolute: <a href="needs_index.html">Needs Index</a>'
|
||||||
Then I should see 'relative: <a href="needs_index.html">Relative</a>'
|
Then I should see 'relative: <a href="needs_index.html">Relative</a>'
|
||||||
Then I should see 'absolute spaces: <a href="evil%20spaces.html">Spaces Index</a>'
|
|
||||||
Then I should see 'relative spaces: <a href="evil%20spaces.html">Spaces Relative</a>'
|
|
||||||
When I go to "/link_to/sub.html"
|
When I go to "/link_to/sub.html"
|
||||||
Then I should see 'absolute: <a href="../needs_index.html">Needs Index</a>'
|
Then I should see 'absolute: <a href="../needs_index.html">Needs Index</a>'
|
||||||
Then I should see 'relative: <a href="../needs_index.html">Relative</a>'
|
Then I should see 'relative: <a href="../needs_index.html">Relative</a>'
|
||||||
Then I should see 'absolute spaces: <a href="../evil%20spaces.html">Spaces Index</a>'
|
|
||||||
Then I should see 'relative spaces: <a href="../evil%20spaces.html">Spaces Relative</a>'
|
|
||||||
|
|
||||||
Scenario: link_to relative works with strip_index_file
|
Scenario: link_to relative works with strip_index_file
|
||||||
Given a fixture app "indexable-app"
|
Given a fixture app "indexable-app"
|
||||||
|
@ -107,7 +79,7 @@ Feature: link_to helper
|
||||||
And a file named "source/link_to.html.erb" with:
|
And a file named "source/link_to.html.erb" with:
|
||||||
"""
|
"""
|
||||||
absolute: <%= link_to "Needs Index", "/needs_index.html" %>
|
absolute: <%= link_to "Needs Index", "/needs_index.html" %>
|
||||||
relative: <%= link_to "Relative", "needs_index.html", relative: false %>
|
relative: <%= link_to "Relative", "needs_index.html", :relative => false %>
|
||||||
unknown: <%= link_to "Unknown", "foo.html" %>
|
unknown: <%= link_to "Unknown", "foo.html" %>
|
||||||
"""
|
"""
|
||||||
And a file named "source/link_to/sub.html.erb" with:
|
And a file named "source/link_to/sub.html.erb" with:
|
||||||
|
@ -123,18 +95,18 @@ Feature: link_to helper
|
||||||
When I go to "/link_to/sub.html"
|
When I go to "/link_to/sub.html"
|
||||||
Then I should see 'absolute: <a href="../needs_index.html">Needs Index</a>'
|
Then I should see 'absolute: <a href="../needs_index.html">Needs Index</a>'
|
||||||
Then I should see 'relative: <a href="../needs_index.html">Relative</a>'
|
Then I should see 'relative: <a href="../needs_index.html">Relative</a>'
|
||||||
|
|
||||||
Scenario: link_to knows about directory indexes
|
Scenario: link_to knows about directory indexes
|
||||||
Given a fixture app "indexable-app"
|
Given a fixture app "indexable-app"
|
||||||
And a file named "source/link_to.html.erb" with:
|
And a file named "source/link_to.html.erb" with:
|
||||||
"""
|
"""
|
||||||
absolute: <%= link_to "Needs Index", "/needs_index.html", relative: true %>
|
absolute: <%= link_to "Needs Index", "/needs_index.html", :relative => true %>
|
||||||
relative: <%= link_to "Relative", "needs_index.html", relative: true %>
|
relative: <%= link_to "Relative", "needs_index.html", :relative => true %>
|
||||||
"""
|
"""
|
||||||
And a file named "source/link_to/sub.html.erb" with:
|
And a file named "source/link_to/sub.html.erb" with:
|
||||||
"""
|
"""
|
||||||
absolute: <%= link_to "Needs Index", "/needs_index.html", relative: true %>
|
absolute: <%= link_to "Needs Index", "/needs_index.html", :relative => true %>
|
||||||
relative: <%= link_to "Relative", "../needs_index.html", relative: true %>
|
relative: <%= link_to "Relative", "../needs_index.html", :relative => true %>
|
||||||
"""
|
"""
|
||||||
And the Server is running at "indexable-app"
|
And the Server is running at "indexable-app"
|
||||||
When I go to "/link_to/"
|
When I go to "/link_to/"
|
||||||
|
@ -186,8 +158,8 @@ Feature: link_to helper
|
||||||
Given a fixture app "indexable-app"
|
Given a fixture app "indexable-app"
|
||||||
And a file named "source/link_to.html.erb" with:
|
And a file named "source/link_to.html.erb" with:
|
||||||
"""
|
"""
|
||||||
<%= link_to "Needs Index String", "/needs_index.html", query: "foo" %>
|
<%= link_to "Needs Index String", "/needs_index.html", :query => "foo" %>
|
||||||
<%= link_to "Needs Index Hash", "/needs_index.html", query: { foo: :bar } %>
|
<%= link_to "Needs Index Hash", "/needs_index.html", :query => { :foo => :bar } %>
|
||||||
"""
|
"""
|
||||||
And the Server is running at "indexable-app"
|
And the Server is running at "indexable-app"
|
||||||
When I go to "/link_to/"
|
When I go to "/link_to/"
|
||||||
|
|
|
@ -9,9 +9,11 @@ Feature: select_tag helper
|
||||||
"""
|
"""
|
||||||
And the Server is running at "indexable-app"
|
And the Server is running at "indexable-app"
|
||||||
When I go to "/select_tag.html"
|
When I go to "/select_tag.html"
|
||||||
Then I should see '<select name="colors"'
|
Then I should see:
|
||||||
Then I should see '<option value="">Choose a color</option>'
|
"""
|
||||||
Then I should see '<option value="red">red</option>'
|
<select name="colors" include_blank="Choose a color"><option value="">Choose a color</option>
|
||||||
Then I should see '<option value="blue">blue</option>'
|
<option value="red">red</option>
|
||||||
Then I should see '<option value="blorange">blorange</option>'
|
<option value="blue">blue</option>
|
||||||
Then I should see '</select>'
|
<option value="blorange">blorange</option>
|
||||||
|
</select>
|
||||||
|
"""
|
||||||
|
|
|
@ -5,13 +5,13 @@ Feature: url_for helper
|
||||||
And an empty file named "config.rb"
|
And an empty file named "config.rb"
|
||||||
And a file named "source/url_for.html.erb" with:
|
And a file named "source/url_for.html.erb" with:
|
||||||
"""
|
"""
|
||||||
absolute: <%= url_for "/needs_index.html", relative: true %>
|
absolute: <%= url_for "/needs_index.html", :relative => true %>
|
||||||
relative: <%= url_for "needs_index.html", relative: true %>
|
relative: <%= url_for "needs_index.html", :relative => true %>
|
||||||
"""
|
"""
|
||||||
And a file named "source/url_for/sub.html.erb" with:
|
And a file named "source/url_for/sub.html.erb" with:
|
||||||
"""
|
"""
|
||||||
absolute: <%= url_for "/needs_index.html", relative: true %>
|
absolute: <%= url_for "/needs_index.html", :relative => true %>
|
||||||
relative: <%= url_for "../needs_index.html", relative: true %>
|
relative: <%= url_for "../needs_index.html", :relative => true %>
|
||||||
"""
|
"""
|
||||||
And the Server is running at "indexable-app"
|
And the Server is running at "indexable-app"
|
||||||
When I go to "/url_for.html"
|
When I go to "/url_for.html"
|
||||||
|
@ -64,7 +64,7 @@ Feature: url_for helper
|
||||||
And a file named "source/url_for.html.erb" with:
|
And a file named "source/url_for.html.erb" with:
|
||||||
"""
|
"""
|
||||||
absolute: <%= url_for "/needs_index.html" %>
|
absolute: <%= url_for "/needs_index.html" %>
|
||||||
relative: <%= url_for "needs_index.html", relative: false %>
|
relative: <%= url_for "needs_index.html", :relative => false %>
|
||||||
unknown: <%= url_for "foo.html" %>
|
unknown: <%= url_for "foo.html" %>
|
||||||
"""
|
"""
|
||||||
And a file named "source/url_for/sub.html.erb" with:
|
And a file named "source/url_for/sub.html.erb" with:
|
||||||
|
@ -85,13 +85,13 @@ Feature: url_for helper
|
||||||
Given a fixture app "indexable-app"
|
Given a fixture app "indexable-app"
|
||||||
And a file named "source/url_for.html.erb" with:
|
And a file named "source/url_for.html.erb" with:
|
||||||
"""
|
"""
|
||||||
absolute: <%= url_for "/needs_index.html", relative: true %>
|
absolute: <%= url_for "/needs_index.html", :relative => true %>
|
||||||
relative: <%= url_for "needs_index.html", relative: true %>
|
relative: <%= url_for "needs_index.html", :relative => true %>
|
||||||
"""
|
"""
|
||||||
And a file named "source/url_for/sub.html.erb" with:
|
And a file named "source/url_for/sub.html.erb" with:
|
||||||
"""
|
"""
|
||||||
absolute: <%= url_for "/needs_index.html", relative: true %>
|
absolute: <%= url_for "/needs_index.html", :relative => true %>
|
||||||
relative: <%= url_for "../needs_index.html", relative: true %>
|
relative: <%= url_for "../needs_index.html", :relative => true %>
|
||||||
"""
|
"""
|
||||||
And the Server is running at "indexable-app"
|
And the Server is running at "indexable-app"
|
||||||
When I go to "/url_for/"
|
When I go to "/url_for/"
|
||||||
|
@ -143,8 +143,8 @@ Feature: url_for helper
|
||||||
Given a fixture app "indexable-app"
|
Given a fixture app "indexable-app"
|
||||||
And a file named "source/url_for.html.erb" with:
|
And a file named "source/url_for.html.erb" with:
|
||||||
"""
|
"""
|
||||||
Needs Index String <%= url_for "/needs_index.html", query: "foo" %>
|
Needs Index String <%= url_for "/needs_index.html", :query => "foo" %>
|
||||||
Needs Index Hash <%= url_for "/needs_index.html", query: { foo: :bar } %>
|
Needs Index Hash <%= url_for "/needs_index.html", :query => { :foo => :bar } %>
|
||||||
"""
|
"""
|
||||||
And the Server is running at "indexable-app"
|
And the Server is running at "indexable-app"
|
||||||
When I go to "/url_for/"
|
When I go to "/url_for/"
|
||||||
|
|
|
@ -1,209 +0,0 @@
|
||||||
Feature: i18n Paths
|
|
||||||
|
|
||||||
Scenario: link_to is i18n aware
|
|
||||||
Given a fixture app "empty-app"
|
|
||||||
And a file named "data/pages.yml" with:
|
|
||||||
"""
|
|
||||||
- hello.html
|
|
||||||
"""
|
|
||||||
And a file named "locales/en.yml" with:
|
|
||||||
"""
|
|
||||||
---
|
|
||||||
en:
|
|
||||||
msg: Hello
|
|
||||||
home: Home
|
|
||||||
"""
|
|
||||||
And a file named "locales/es.yml" with:
|
|
||||||
"""
|
|
||||||
---
|
|
||||||
es:
|
|
||||||
paths:
|
|
||||||
hello: "hola"
|
|
||||||
msg: Hola
|
|
||||||
home: Casa
|
|
||||||
"""
|
|
||||||
And a file named "source/localizable/index.html.erb" with:
|
|
||||||
"""
|
|
||||||
Page: <%= t(:hom) %>
|
|
||||||
"""
|
|
||||||
And a file named "source/localizable/hello.html.erb" with:
|
|
||||||
"""
|
|
||||||
Page: <%= t(:msg) %>
|
|
||||||
|
|
||||||
<%= link_to "Current Home", "/index.html", class: 'current' %>
|
|
||||||
<%= link_to "Other Home", "/index.html", title: "Other Home", locale: ::I18n.locale == :en ? :es : :en %>
|
|
||||||
<% link_to "/index.html", class: 'current' do %><span>Home: Current Block</span><% end %>
|
|
||||||
<% link_to "/index.html", title: "Other Home", locale: ::I18n.locale == :en ? :es : :en do %><span>Home: Other Block</span><% end %>
|
|
||||||
|
|
||||||
<% data.pages.each_with_index do |p, i| %>
|
|
||||||
<%= link_to "Current #{p}", "/#{p}", class: 'current' %>
|
|
||||||
<%= link_to "Other #{p}", "/#{p}", title: "Other #{p}", locale: ::I18n.locale == :en ? :es : :en %>
|
|
||||||
<% link_to "/#{p}", class: 'current' do %><span>Current Block</span><% end %>
|
|
||||||
<% link_to "/#{p}", title: "Other #{p}", locale: ::I18n.locale == :en ? :es : :en do %><span>Other Block</span><% end %>
|
|
||||||
<% end %>
|
|
||||||
"""
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
set :strip_index_file, false
|
|
||||||
activate :i18n, mount_at_root: :en
|
|
||||||
"""
|
|
||||||
Given the Server is running at "empty-app"
|
|
||||||
When I go to "/hello.html"
|
|
||||||
Then I should see "Page: Hello"
|
|
||||||
Then I should see '<a href="/index.html" class="current">Current Home</a>'
|
|
||||||
Then I should see '<a href="/es/index.html" title="Other Home">Other Home</a>'
|
|
||||||
Then I should see '<a href="/index.html" class="current"><span>Home: Current Block</span></a>'
|
|
||||||
Then I should see '<a href="/es/index.html" title="Other Home"><span>Home: Other Block</span></a>'
|
|
||||||
Then I should see '<a href="/hello.html" class="current">Current hello.html</a>'
|
|
||||||
Then I should see '<a href="/es/hola.html" title="Other hello.html">Other hello.html</a>'
|
|
||||||
Then I should see '<a href="/hello.html" class="current"><span>Current Block</span></a>'
|
|
||||||
Then I should see '<a href="/es/hola.html" title="Other hello.html"><span>Other Block</span></a>'
|
|
||||||
When I go to "/es/hola.html"
|
|
||||||
Then I should see "Page: Hola"
|
|
||||||
Then I should see '<a href="/es/index.html" class="current">Current Home</a>'
|
|
||||||
Then I should see '<a href="/index.html" title="Other Home">Other Home</a>'
|
|
||||||
Then I should see '<a href="/es/index.html" class="current"><span>Home: Current Block</span></a>'
|
|
||||||
Then I should see '<a href="/index.html" title="Other Home"><span>Home: Other Block</span></a>'
|
|
||||||
Then I should see '<a href="/es/hola.html" class="current">Current hello.html</a>'
|
|
||||||
Then I should see '<a href="/hello.html" title="Other hello.html">Other hello.html</a>'
|
|
||||||
Then I should see '<a href="/es/hola.html" class="current"><span>Current Block</span></a>'
|
|
||||||
Then I should see '<a href="/hello.html" title="Other hello.html"><span>Other Block</span></a>'
|
|
||||||
|
|
||||||
Scenario: link_to is i18n aware and supports relative_links
|
|
||||||
Given a fixture app "empty-app"
|
|
||||||
And a file named "locales/en.yml" with:
|
|
||||||
"""
|
|
||||||
---
|
|
||||||
en:
|
|
||||||
msg: Hello
|
|
||||||
home: Home
|
|
||||||
"""
|
|
||||||
And a file named "locales/es.yml" with:
|
|
||||||
"""
|
|
||||||
---
|
|
||||||
es:
|
|
||||||
paths:
|
|
||||||
hello: "hola"
|
|
||||||
msg: Hola
|
|
||||||
home: Casa
|
|
||||||
"""
|
|
||||||
And a file named "source/assets/css/main.css.scss" with:
|
|
||||||
"""
|
|
||||||
$color: red;
|
|
||||||
body { background: $color; }
|
|
||||||
"""
|
|
||||||
And a file named "source/localizable/index.html.erb" with:
|
|
||||||
"""
|
|
||||||
Page: <%= t(:home) %>
|
|
||||||
<%= stylesheet_link_tag :main %>
|
|
||||||
"""
|
|
||||||
And a file named "source/localizable/hello.html.erb" with:
|
|
||||||
"""
|
|
||||||
Page: <%= t(:msg) %>
|
|
||||||
|
|
||||||
<%= link_to "Current Home", "/index.html", class: 'current' %>
|
|
||||||
<%= link_to "Other Home", "/index.html", title: "Other Home", locale: ::I18n.locale == :en ? :es : :en %>
|
|
||||||
<% link_to "/index.html", class: 'current' do %><span>Home: Current Block</span><% end %>
|
|
||||||
<% link_to "/index.html", title: "Other Home", locale: ::I18n.locale == :en ? :es : :en do %><span>Home: Other Block</span><% end %>
|
|
||||||
|
|
||||||
<%= link_to "Current hello.html", "/hello.html", class: 'current' %>
|
|
||||||
<%= link_to "Other hello.html", "/hello.html", title: "Other hello.html", locale: ::I18n.locale == :en ? :es : :en %>
|
|
||||||
<% link_to "/hello.html", class: 'current' do %><span>Current Block</span><% end %>
|
|
||||||
<% link_to "/hello.html", title: "Other hello.html", locale: ::I18n.locale == :en ? :es : :en do %><span>Other Block</span><% end %>
|
|
||||||
"""
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
set :css_dir, 'assets/css'
|
|
||||||
set :relative_links, true
|
|
||||||
set :strip_index_file, false
|
|
||||||
activate :i18n, mount_at_root: :en
|
|
||||||
activate :relative_assets
|
|
||||||
"""
|
|
||||||
Given the Server is running at "empty-app"
|
|
||||||
When I go to "/index.html"
|
|
||||||
Then I should see "assets/css/main.css"
|
|
||||||
When I go to "/hello.html"
|
|
||||||
Then I should see "Page: Hello"
|
|
||||||
Then I should see '<a href="index.html" class="current">Current Home</a>'
|
|
||||||
Then I should see '<a href="es/index.html" title="Other Home">Other Home</a>'
|
|
||||||
Then I should see '<a href="index.html" class="current"><span>Home: Current Block</span></a>'
|
|
||||||
Then I should see '<a href="es/index.html" title="Other Home"><span>Home: Other Block</span></a>'
|
|
||||||
Then I should see '<a href="hello.html" class="current">Current hello.html</a>'
|
|
||||||
Then I should see '<a href="es/hola.html" title="Other hello.html">Other hello.html</a>'
|
|
||||||
Then I should see '<a href="hello.html" class="current"><span>Current Block</span></a>'
|
|
||||||
Then I should see '<a href="es/hola.html" title="Other hello.html"><span>Other Block</span></a>'
|
|
||||||
When I go to "/es/hola.html"
|
|
||||||
Then I should see "Page: Hola"
|
|
||||||
Then I should see '<a href="index.html" class="current">Current Home</a>'
|
|
||||||
Then I should see '<a href="../index.html" title="Other Home">Other Home</a>'
|
|
||||||
Then I should see '<a href="index.html" class="current"><span>Home: Current Block</span></a>'
|
|
||||||
Then I should see '<a href="../index.html" title="Other Home"><span>Home: Other Block</span></a>'
|
|
||||||
Then I should see '<a href="hola.html" class="current">Current hello.html</a>'
|
|
||||||
Then I should see '<a href="../hello.html" title="Other hello.html">Other hello.html</a>'
|
|
||||||
Then I should see '<a href="hola.html" class="current"><span>Current Block</span></a>'
|
|
||||||
Then I should see '<a href="../hello.html" title="Other hello.html"><span>Other Block</span></a>'
|
|
||||||
|
|
||||||
Scenario: url_for is i18n aware
|
|
||||||
Given a fixture app "empty-app"
|
|
||||||
And a file named "data/pages.yml" with:
|
|
||||||
"""
|
|
||||||
- hello.html
|
|
||||||
- article.html
|
|
||||||
"""
|
|
||||||
And a file named "locales/en.yml" with:
|
|
||||||
"""
|
|
||||||
---
|
|
||||||
en:
|
|
||||||
msg: Hello
|
|
||||||
"""
|
|
||||||
And a file named "locales/es.yml" with:
|
|
||||||
"""
|
|
||||||
---
|
|
||||||
es:
|
|
||||||
paths:
|
|
||||||
hello: "hola"
|
|
||||||
msg: Hola
|
|
||||||
"""
|
|
||||||
And a file named "source/localizable/hello.html.erb" with:
|
|
||||||
"""
|
|
||||||
Page: <%= t(:msg) %>
|
|
||||||
<% data.pages.each_with_index do |p, i| %>
|
|
||||||
Current: <%= url_for "/#{p}" %>
|
|
||||||
Other: <%= url_for "/#{p}", locale: ::I18n.locale == :en ? :es : :en %>
|
|
||||||
<% end %>
|
|
||||||
"""
|
|
||||||
And a file named "source/localizable/article.html.erb" with:
|
|
||||||
"""
|
|
||||||
Page Lang: Default
|
|
||||||
|
|
||||||
Current: <%= url_for "/article.html" %>
|
|
||||||
Other: <%= url_for "/article.html", locale: ::I18n.locale == :en ? :es : :en %>
|
|
||||||
"""
|
|
||||||
And a file named "source/localizable/article.es.html.erb" with:
|
|
||||||
"""
|
|
||||||
Page Lang: Spanish
|
|
||||||
|
|
||||||
Current: <%= url_for "/article.html" %>
|
|
||||||
Other: <%= url_for "/article.html", locale: :en %>
|
|
||||||
"""
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
activate :i18n, mount_at_root: :en
|
|
||||||
"""
|
|
||||||
Given the Server is running at "empty-app"
|
|
||||||
When I go to "/hello.html"
|
|
||||||
Then I should see "Page: Hello"
|
|
||||||
Then I should see 'Current: /hello.html'
|
|
||||||
Then I should see 'Other: /es/hola.html'
|
|
||||||
When I go to "/es/hola.html"
|
|
||||||
Then I should see "Page: Hola"
|
|
||||||
Then I should see 'Current: /es/hola.html'
|
|
||||||
Then I should see 'Other: /hello.html'
|
|
||||||
When I go to "/article.html"
|
|
||||||
Then I should see "Page Lang: Default"
|
|
||||||
Then I should see 'Current: /article.html'
|
|
||||||
Then I should see 'Other: /es/article.html'
|
|
||||||
When I go to "/es/article.html"
|
|
||||||
Then I should see "Page Lang: Spanish"
|
|
||||||
Then I should see 'Current: /es/article.html'
|
|
||||||
Then I should see 'Other: /article.html'
|
|
|
@ -1,39 +0,0 @@
|
||||||
Feature: i18n merging path trees
|
|
||||||
|
|
||||||
Scenario: Mixing localized and non-localized sources and merging the path trees (see issue #1709)
|
|
||||||
Given a fixture app "i18n-test-app"
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
activate :i18n, mount_at_root: :en, langs: [:en, :es]
|
|
||||||
"""
|
|
||||||
Given the Server is running at "i18n-mixed-sources"
|
|
||||||
|
|
||||||
When I go to "/"
|
|
||||||
Then I should see "Current locale: en"
|
|
||||||
Then I should see "path: is-localized Home"
|
|
||||||
When I go to "/es"
|
|
||||||
Then I should see "Current locale: es"
|
|
||||||
Then I should see "path: is-localized Home"
|
|
||||||
|
|
||||||
When I go to "/a/"
|
|
||||||
Then I should see "Current locale: en"
|
|
||||||
Then I should see "path: is-localized Home # a/index.html.erb"
|
|
||||||
When I go to "/es/a/"
|
|
||||||
Then I should see "Current locale: es"
|
|
||||||
Then I should see "path: is-localized Home # a/index.html.erb"
|
|
||||||
|
|
||||||
When I go to "/b/"
|
|
||||||
Then I should see "Current locale: en"
|
|
||||||
Then I should see "path: is-localized Home # b/index.html.erb"
|
|
||||||
|
|
||||||
When I go to "/a/sub.html"
|
|
||||||
Then I should see "Current locale: en"
|
|
||||||
Then I should see "path: is-localized Home # a/index.html.erb # a/sub.html.erb"
|
|
||||||
|
|
||||||
When I go to "/b/sub.html"
|
|
||||||
Then I should see "Current locale: en"
|
|
||||||
Then I should see "path: is-localized Home # b/index.html.erb # b/sub.html.erb"
|
|
||||||
|
|
||||||
When I go to "/es/b/sub.html"
|
|
||||||
Then I should see "Current locale: es"
|
|
||||||
Then I should see "path: is-localized Home # b/index.html.erb # b/sub.html.erb"
|
|
|
@ -1,23 +0,0 @@
|
||||||
Feature: i18n Partials
|
|
||||||
|
|
||||||
Scenario: Running localize with the default config
|
|
||||||
Given a fixture app "i18n-test-app"
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
activate :i18n
|
|
||||||
"""
|
|
||||||
Given the Server is running at "i18n-test-app"
|
|
||||||
When I go to "/partials/index.html"
|
|
||||||
Then I should see "Country: USA"
|
|
||||||
Then I should see "State: District of Columbia"
|
|
||||||
Then I should see "Greeting: Hello"
|
|
||||||
Then I should see "Site: Locale Site"
|
|
||||||
Then I should see "Flag: stars"
|
|
||||||
Then I should see "President: obama"
|
|
||||||
When I go to "/es/partials/index.html"
|
|
||||||
Then I should see "Country: Mexico"
|
|
||||||
Then I should see "State: Distrito Federal"
|
|
||||||
Then I should see "Greeting: Hola"
|
|
||||||
Then I should see "Site: Locale Site"
|
|
||||||
Then I should see "Flag: bars"
|
|
||||||
Then I should see "President: nieto"
|
|
|
@ -1,13 +1,13 @@
|
||||||
Feature: i18n Builder
|
Feature: i18n v3 Builder
|
||||||
In order to preview localized html
|
In order to preview localized html
|
||||||
|
|
||||||
Scenario: Running localize with the default config
|
Scenario: Running localize with the default config
|
||||||
Given a fixture app "i18n-test-app"
|
Given a fixture app "i18n-v3-test-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n
|
activate :i18n_v3
|
||||||
"""
|
"""
|
||||||
Given a successfully built app at "i18n-test-app"
|
Given a successfully built app at "i18n-v3-test-app"
|
||||||
When I cd to "build"
|
When I cd to "build"
|
||||||
Then the following files should exist:
|
Then the following files should exist:
|
||||||
| index.html |
|
| index.html |
|
||||||
|
@ -46,12 +46,12 @@ Feature: i18n Builder
|
||||||
And the file "password.txt" should contain "hunter2"
|
And the file "password.txt" should contain "hunter2"
|
||||||
|
|
||||||
Scenario: Running localize with the alt path config
|
Scenario: Running localize with the alt path config
|
||||||
Given a fixture app "i18n-test-app"
|
Given a fixture app "i18n-v3-test-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n, path: "/lang_:locale/"
|
activate :i18n_v3, :path => "/lang_:locale/"
|
||||||
"""
|
"""
|
||||||
Given a successfully built app at "i18n-test-app"
|
Given a successfully built app at "i18n-v3-test-app"
|
||||||
When I cd to "build"
|
When I cd to "build"
|
||||||
Then the following files should exist:
|
Then the following files should exist:
|
||||||
| index.html |
|
| index.html |
|
||||||
|
@ -66,12 +66,12 @@ Feature: i18n Builder
|
||||||
And the file "lang_es/hola.html" should contain "Hola World"
|
And the file "lang_es/hola.html" should contain "Hola World"
|
||||||
|
|
||||||
Scenario: Running localize with the alt root config
|
Scenario: Running localize with the alt root config
|
||||||
Given a fixture app "i18n-alt-root-app"
|
Given a fixture app "i18n-v3-alt-root-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n, templates_dir: "lang_data"
|
activate :i18n_v3, :templates_dir => "lang_data"
|
||||||
"""
|
"""
|
||||||
Given a successfully built app at "i18n-alt-root-app"
|
Given a successfully built app at "i18n-v3-alt-root-app"
|
||||||
When I cd to "build"
|
When I cd to "build"
|
||||||
Then the following files should exist:
|
Then the following files should exist:
|
||||||
| index.html |
|
| index.html |
|
||||||
|
@ -86,12 +86,12 @@ Feature: i18n Builder
|
||||||
And the file "es/hola.html" should contain "Hola World"
|
And the file "es/hola.html" should contain "Hola World"
|
||||||
|
|
||||||
Scenario: Running localize with the lang map config
|
Scenario: Running localize with the lang map config
|
||||||
Given a fixture app "i18n-test-app"
|
Given a fixture app "i18n-v3-test-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n, lang_map: { en: :english, es: :spanish }
|
activate :i18n_v3, :lang_map => { :en => :english, :es => :spanish }
|
||||||
"""
|
"""
|
||||||
Given a successfully built app at "i18n-test-app"
|
Given a successfully built app at "i18n-v3-test-app"
|
||||||
When I cd to "build"
|
When I cd to "build"
|
||||||
Then the following files should exist:
|
Then the following files should exist:
|
||||||
| index.html |
|
| index.html |
|
||||||
|
@ -106,12 +106,12 @@ Feature: i18n Builder
|
||||||
And the file "spanish/hola.html" should contain "Hola World"
|
And the file "spanish/hola.html" should contain "Hola World"
|
||||||
|
|
||||||
Scenario: Running localize with the no mount config
|
Scenario: Running localize with the no mount config
|
||||||
Given a fixture app "i18n-test-app"
|
Given a fixture app "i18n-v3-test-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n, mount_at_root: false
|
activate :i18n_v3, :mount_at_root => false
|
||||||
"""
|
"""
|
||||||
Given a successfully built app at "i18n-test-app"
|
Given a successfully built app at "i18n-v3-test-app"
|
||||||
When I cd to "build"
|
When I cd to "build"
|
||||||
Then the following files should exist:
|
Then the following files should exist:
|
||||||
| en/index.html |
|
| en/index.html |
|
||||||
|
@ -127,12 +127,12 @@ Feature: i18n Builder
|
||||||
And the file "es/hola.html" should contain "Hola World"
|
And the file "es/hola.html" should contain "Hola World"
|
||||||
|
|
||||||
Scenario: Running localize with the subset config
|
Scenario: Running localize with the subset config
|
||||||
Given a fixture app "i18n-test-app"
|
Given a fixture app "i18n-v3-test-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n, langs: [:en]
|
activate :i18n_v3, :langs => [:en]
|
||||||
"""
|
"""
|
||||||
Given a successfully built app at "i18n-test-app"
|
Given a successfully built app at "i18n-v3-test-app"
|
||||||
When I cd to "build"
|
When I cd to "build"
|
||||||
Then the following files should exist:
|
Then the following files should exist:
|
||||||
| index.html |
|
| index.html |
|
||||||
|
@ -145,13 +145,13 @@ Feature: i18n Builder
|
||||||
And the file "hello.html" should contain "Hello World"
|
And the file "hello.html" should contain "Hello World"
|
||||||
|
|
||||||
Scenario: Running localize with relative_assets
|
Scenario: Running localize with relative_assets
|
||||||
Given a fixture app "i18n-test-app"
|
Given a fixture app "i18n-v3-test-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n
|
activate :i18n_v3
|
||||||
activate :relative_assets
|
activate :relative_assets
|
||||||
"""
|
"""
|
||||||
Given a successfully built app at "i18n-test-app"
|
Given a successfully built app at "i18n-v3-test-app"
|
||||||
When I cd to "build"
|
When I cd to "build"
|
||||||
Then the following files should exist:
|
Then the following files should exist:
|
||||||
| index.html |
|
| index.html |
|
|
@ -1,7 +1,7 @@
|
||||||
Feature: i18n manually setting locale
|
Feature: i18n v3 manually setting locale
|
||||||
|
|
||||||
Scenario: Setting I18n.locale in a block (see issue #809) or with the :lang option
|
Scenario: Setting I18n.locale in a block (see issue #809) or with the :lang option
|
||||||
Given the Server is running at "i18n-force-locale"
|
Given the Server is running at "i18n-v3-force-locale"
|
||||||
When I go to "/en/index.html"
|
When I go to "/en/index.html"
|
||||||
Then I should see "Hello"
|
Then I should see "Hello"
|
||||||
Then I should see "I18n.locale: en"
|
Then I should see "I18n.locale: en"
|
252
middleman-core/features/i18n_v3_preview.feature
Normal file
252
middleman-core/features/i18n_v3_preview.feature
Normal file
|
@ -0,0 +1,252 @@
|
||||||
|
Feature: i18n v3 Preview
|
||||||
|
In order to preview localized html
|
||||||
|
|
||||||
|
Scenario: Running localize with the default config
|
||||||
|
Given a fixture app "i18n-v3-test-app"
|
||||||
|
And a file named "config.rb" with:
|
||||||
|
"""
|
||||||
|
activate :i18n_v3
|
||||||
|
"""
|
||||||
|
Given the Server is running at "i18n-v3-test-app"
|
||||||
|
When I go to "/"
|
||||||
|
Then I should see "Howdy"
|
||||||
|
When I go to "/hello.html"
|
||||||
|
Then I should see "Hello World"
|
||||||
|
When I go to "/morning.html"
|
||||||
|
Then I should see "Good morning"
|
||||||
|
When I go to "/one.html"
|
||||||
|
Then I should see "Only one"
|
||||||
|
When I go to "/defaults_en/index.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/en/index.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/en/morning.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/defaults_es/index.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/es/index.html"
|
||||||
|
Then I should see "Como Esta?"
|
||||||
|
When I go to "/es/hola.html"
|
||||||
|
Then I should see "Hola World"
|
||||||
|
When I go to "/es/manana.html"
|
||||||
|
Then I should see "Buenos días"
|
||||||
|
When I go to "/es/una.html"
|
||||||
|
Then I should see "Solamente una"
|
||||||
|
|
||||||
|
Scenario: A template changes i18n during preview
|
||||||
|
Given a fixture app "i18n-v3-test-app"
|
||||||
|
And a file named "config.rb" with:
|
||||||
|
"""
|
||||||
|
activate :i18n_v3
|
||||||
|
"""
|
||||||
|
Given the Server is running at "i18n-v3-test-app"
|
||||||
|
And the file "locales/en.yml" has the contents
|
||||||
|
"""
|
||||||
|
---
|
||||||
|
en:
|
||||||
|
greetings: "Howdy"
|
||||||
|
hi: "Hello"
|
||||||
|
"""
|
||||||
|
When I go to "/"
|
||||||
|
Then I should see "Howdy"
|
||||||
|
When I go to "/hello.html"
|
||||||
|
Then I should see "Hello World"
|
||||||
|
When the file "locales/en.yml" has the contents
|
||||||
|
"""
|
||||||
|
---
|
||||||
|
en:
|
||||||
|
greetings: "How You Doin"
|
||||||
|
hi: "Sup"
|
||||||
|
"""
|
||||||
|
When I go to "/"
|
||||||
|
Then I should see "How You Doin"
|
||||||
|
When I go to "/hello.html"
|
||||||
|
Then I should see "Sup World"
|
||||||
|
|
||||||
|
Scenario: Running localize with the alt path config
|
||||||
|
Given a fixture app "i18n-v3-test-app"
|
||||||
|
And a file named "config.rb" with:
|
||||||
|
"""
|
||||||
|
activate :i18n_v3, :path => "/lang_:locale/"
|
||||||
|
"""
|
||||||
|
Given the Server is running at "i18n-v3-test-app"
|
||||||
|
When I go to "/"
|
||||||
|
Then I should see "Howdy"
|
||||||
|
When I go to "/hello.html"
|
||||||
|
Then I should see "Hello World"
|
||||||
|
When I go to "/lang_en/index.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/lang_es/index.html"
|
||||||
|
Then I should see "Como Esta?"
|
||||||
|
When I go to "/lang_es/hola.html"
|
||||||
|
Then I should see "Hola World"
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: Running localize with the alt root config
|
||||||
|
Given a fixture app "i18n-v3-alt-root-app"
|
||||||
|
And a file named "config.rb" with:
|
||||||
|
"""
|
||||||
|
activate :i18n_v3, :templates_dir => "lang_data"
|
||||||
|
"""
|
||||||
|
Given the Server is running at "i18n-v3-alt-root-app"
|
||||||
|
When I go to "/"
|
||||||
|
Then I should see "Howdy"
|
||||||
|
When I go to "/hello.html"
|
||||||
|
Then I should see "Hello World"
|
||||||
|
When I go to "/en/index.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/es/index.html"
|
||||||
|
Then I should see "Como Esta?"
|
||||||
|
When I go to "/es/hola.html"
|
||||||
|
Then I should see "Hola World"
|
||||||
|
|
||||||
|
Scenario: Running localize with the lang map config
|
||||||
|
Given a fixture app "i18n-v3-test-app"
|
||||||
|
And a file named "config.rb" with:
|
||||||
|
"""
|
||||||
|
activate :i18n_v3, :lang_map => { :en => :english, :es => :spanish }
|
||||||
|
"""
|
||||||
|
Given the Server is running at "i18n-v3-test-app"
|
||||||
|
When I go to "/"
|
||||||
|
Then I should see "Howdy"
|
||||||
|
When I go to "/hello.html"
|
||||||
|
Then I should see "Hello World"
|
||||||
|
When I go to "/english/index.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/spanish/index.html"
|
||||||
|
Then I should see "Como Esta?"
|
||||||
|
When I go to "/spanish/hola.html"
|
||||||
|
Then I should see "Hola World"
|
||||||
|
|
||||||
|
Scenario: Running localize with a non-English mount config
|
||||||
|
Given a fixture app "i18n-v3-test-app"
|
||||||
|
And a file named "config.rb" with:
|
||||||
|
"""
|
||||||
|
activate :i18n_v3, :mount_at_root => :es
|
||||||
|
"""
|
||||||
|
Given the Server is running at "i18n-v3-test-app"
|
||||||
|
When I go to "/en/index.html"
|
||||||
|
Then I should see "Howdy"
|
||||||
|
When I go to "/en/hello.html"
|
||||||
|
Then I should see "Hello World"
|
||||||
|
When I go to "/"
|
||||||
|
Then I should see "Como Esta?"
|
||||||
|
When I go to "/hola.html"
|
||||||
|
Then I should see "Hola World"
|
||||||
|
When I go to "/manana.html"
|
||||||
|
Then I should see "Buenos días"
|
||||||
|
When I go to "/hello.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/en/morning.html"
|
||||||
|
Then I should see "Good morning"
|
||||||
|
When I go to "/es/manana.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/es/index.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/es/hola.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
|
||||||
|
Scenario: Running localize with a non-English lang subset
|
||||||
|
Given a fixture app "i18n-v3-test-app"
|
||||||
|
And a file named "config.rb" with:
|
||||||
|
"""
|
||||||
|
activate :i18n_v3, :langs => :es
|
||||||
|
"""
|
||||||
|
Given the Server is running at "i18n-v3-test-app"
|
||||||
|
When I go to "/en/index.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/en/hello.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/"
|
||||||
|
Then I should see "Como Esta?"
|
||||||
|
When I go to "/hola.html"
|
||||||
|
Then I should see "Hola World"
|
||||||
|
When I go to "/hello.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/es/index.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/es/hola.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: Running localize with the no mount config
|
||||||
|
Given a fixture app "i18n-v3-test-app"
|
||||||
|
And a file named "config.rb" with:
|
||||||
|
"""
|
||||||
|
activate :i18n_v3, :mount_at_root => false
|
||||||
|
"""
|
||||||
|
Given the Server is running at "i18n-v3-test-app"
|
||||||
|
When I go to "/en/index.html"
|
||||||
|
Then I should see "Howdy"
|
||||||
|
When I go to "/en/hello.html"
|
||||||
|
Then I should see "Hello World"
|
||||||
|
When I go to "/"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/hello.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/es/index.html"
|
||||||
|
Then I should see "Como Esta?"
|
||||||
|
When I go to "/es/hola.html"
|
||||||
|
Then I should see "Hola World"
|
||||||
|
|
||||||
|
Scenario: Running localize with the subset config
|
||||||
|
Given a fixture app "i18n-v3-test-app"
|
||||||
|
And a file named "config.rb" with:
|
||||||
|
"""
|
||||||
|
activate :i18n_v3, :langs => [:en]
|
||||||
|
"""
|
||||||
|
Given the Server is running at "i18n-v3-test-app"
|
||||||
|
When I go to "/"
|
||||||
|
Then I should see "Howdy"
|
||||||
|
When I go to "/hello.html"
|
||||||
|
Then I should see "Hello World"
|
||||||
|
When I go to "/en/index.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/es/index.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
When I go to "/es/hola.html"
|
||||||
|
Then I should see "File Not Found"
|
||||||
|
|
||||||
|
Scenario: Running localize with relative_assets
|
||||||
|
Given a fixture app "i18n-v3-test-app"
|
||||||
|
And a file named "config.rb" with:
|
||||||
|
"""
|
||||||
|
activate :i18n_v3
|
||||||
|
activate :relative_assets
|
||||||
|
"""
|
||||||
|
Given the Server is running at "i18n-v3-test-app"
|
||||||
|
When I go to "/"
|
||||||
|
Then I should see '"stylesheets/site.css"'
|
||||||
|
When I go to "/hello.html"
|
||||||
|
Then I should see '"stylesheets/site.css"'
|
||||||
|
When I go to "/es/index.html"
|
||||||
|
Then I should see '"../stylesheets/site.css"'
|
||||||
|
When I go to "/es/hola.html"
|
||||||
|
Then I should see '"../stylesheets/site.css"'
|
||||||
|
|
||||||
|
Scenario: Missing translations fall back to the default locale
|
||||||
|
Given a fixture app "i18n-v3-default-app"
|
||||||
|
And a file named "config.rb" with:
|
||||||
|
"""
|
||||||
|
activate :i18n_v3, :mount_at_root => :es
|
||||||
|
"""
|
||||||
|
Given the Server is running at "i18n-v3-default-app"
|
||||||
|
When I go to "/en/"
|
||||||
|
Then I should see "Default locale: es"
|
||||||
|
Then I should see "Current locale: en"
|
||||||
|
Then I should see "Buenos días"
|
||||||
|
Then I should see "Howdy"
|
||||||
|
|
||||||
|
Scenario: Nested i18n yaml
|
||||||
|
Given a fixture app "i18n-v3-nested-app"
|
||||||
|
And a file named "config.rb" with:
|
||||||
|
"""
|
||||||
|
activate :i18n_v3
|
||||||
|
"""
|
||||||
|
Given the Server is running at "i18n-v3-nested-app"
|
||||||
|
When I go to "/"
|
||||||
|
Then I should see "Howdy"
|
||||||
|
Then I should see "More"
|
||||||
|
When I go to "/es/"
|
||||||
|
Then I should see "Como Esta?"
|
||||||
|
Then I should see "Mucho"
|
|
@ -1,13 +1,14 @@
|
||||||
Feature: i18n Preview
|
@wip
|
||||||
|
Feature: i18n v4 Preview
|
||||||
In order to preview localized html
|
In order to preview localized html
|
||||||
|
|
||||||
Scenario: Running localize with the default config
|
Scenario: Running localize with the default config
|
||||||
Given a fixture app "i18n-test-app"
|
Given a fixture app "i18n-v4-test-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n
|
activate :i18n
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "i18n-test-app"
|
Given the Server is running at "i18n-v4-test-app"
|
||||||
When I go to "/"
|
When I go to "/"
|
||||||
Then I should see "Howdy"
|
Then I should see "Howdy"
|
||||||
When I go to "/hello.html"
|
When I go to "/hello.html"
|
||||||
|
@ -34,12 +35,12 @@ Feature: i18n Preview
|
||||||
Then I should see "Solamente una"
|
Then I should see "Solamente una"
|
||||||
|
|
||||||
Scenario: A template changes i18n during preview
|
Scenario: A template changes i18n during preview
|
||||||
Given a fixture app "i18n-test-app"
|
Given a fixture app "i18n-v4-test-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n
|
activate :i18n
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "i18n-test-app"
|
Given the Server is running at "i18n-v4-test-app"
|
||||||
And the file "locales/en.yml" has the contents
|
And the file "locales/en.yml" has the contents
|
||||||
"""
|
"""
|
||||||
---
|
---
|
||||||
|
@ -64,12 +65,12 @@ Feature: i18n Preview
|
||||||
Then I should see "Sup World"
|
Then I should see "Sup World"
|
||||||
|
|
||||||
Scenario: Running localize with the alt path config
|
Scenario: Running localize with the alt path config
|
||||||
Given a fixture app "i18n-test-app"
|
Given a fixture app "i18n-v4-test-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n, path: "/lang_:locale/"
|
activate :i18n, :path => "/lang_:locale/"
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "i18n-test-app"
|
Given the Server is running at "i18n-v4-test-app"
|
||||||
When I go to "/"
|
When I go to "/"
|
||||||
Then I should see "Howdy"
|
Then I should see "Howdy"
|
||||||
When I go to "/hello.html"
|
When I go to "/hello.html"
|
||||||
|
@ -83,12 +84,12 @@ Feature: i18n Preview
|
||||||
|
|
||||||
|
|
||||||
Scenario: Running localize with the alt root config
|
Scenario: Running localize with the alt root config
|
||||||
Given a fixture app "i18n-alt-root-app"
|
Given a fixture app "i18n-v4-alt-root-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n, templates_dir: "lang_data"
|
activate :i18n, :templates_dir => "lang_data"
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "i18n-alt-root-app"
|
Given the Server is running at "i18n-v4-alt-root-app"
|
||||||
When I go to "/"
|
When I go to "/"
|
||||||
Then I should see "Howdy"
|
Then I should see "Howdy"
|
||||||
When I go to "/hello.html"
|
When I go to "/hello.html"
|
||||||
|
@ -101,12 +102,12 @@ Feature: i18n Preview
|
||||||
Then I should see "Hola World"
|
Then I should see "Hola World"
|
||||||
|
|
||||||
Scenario: Running localize with the lang map config
|
Scenario: Running localize with the lang map config
|
||||||
Given a fixture app "i18n-test-app"
|
Given a fixture app "i18n-v4-test-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n, lang_map: { en: :english, es: :spanish }
|
activate :i18n, :lang_map => { :en => :english, :es => :spanish }
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "i18n-test-app"
|
Given the Server is running at "i18n-v4-test-app"
|
||||||
When I go to "/"
|
When I go to "/"
|
||||||
Then I should see "Howdy"
|
Then I should see "Howdy"
|
||||||
When I go to "/hello.html"
|
When I go to "/hello.html"
|
||||||
|
@ -119,12 +120,12 @@ Feature: i18n Preview
|
||||||
Then I should see "Hola World"
|
Then I should see "Hola World"
|
||||||
|
|
||||||
Scenario: Running localize with a non-English mount config
|
Scenario: Running localize with a non-English mount config
|
||||||
Given a fixture app "i18n-test-app"
|
Given a fixture app "i18n-v4-test-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n, mount_at_root: :es
|
activate :i18n, :mount_at_root => :es
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "i18n-test-app"
|
Given the Server is running at "i18n-v4-test-app"
|
||||||
When I go to "/en/index.html"
|
When I go to "/en/index.html"
|
||||||
Then I should see "Howdy"
|
Then I should see "Howdy"
|
||||||
When I go to "/en/hello.html"
|
When I go to "/en/hello.html"
|
||||||
|
@ -147,12 +148,12 @@ Feature: i18n Preview
|
||||||
Then I should see "File Not Found"
|
Then I should see "File Not Found"
|
||||||
|
|
||||||
Scenario: Running localize with a non-English lang subset
|
Scenario: Running localize with a non-English lang subset
|
||||||
Given a fixture app "i18n-test-app"
|
Given a fixture app "i18n-v4-test-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n, langs: :es
|
activate :i18n, :langs => :es
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "i18n-test-app"
|
Given the Server is running at "i18n-v4-test-app"
|
||||||
When I go to "/en/index.html"
|
When I go to "/en/index.html"
|
||||||
Then I should see "File Not Found"
|
Then I should see "File Not Found"
|
||||||
When I go to "/en/hello.html"
|
When I go to "/en/hello.html"
|
||||||
|
@ -170,12 +171,12 @@ Feature: i18n Preview
|
||||||
|
|
||||||
|
|
||||||
Scenario: Running localize with the no mount config
|
Scenario: Running localize with the no mount config
|
||||||
Given a fixture app "i18n-test-app"
|
Given a fixture app "i18n-v4-test-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n, mount_at_root: false
|
activate :i18n, :mount_at_root => false
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "i18n-test-app"
|
Given the Server is running at "i18n-v4-test-app"
|
||||||
When I go to "/en/index.html"
|
When I go to "/en/index.html"
|
||||||
Then I should see "Howdy"
|
Then I should see "Howdy"
|
||||||
When I go to "/en/hello.html"
|
When I go to "/en/hello.html"
|
||||||
|
@ -190,12 +191,12 @@ Feature: i18n Preview
|
||||||
Then I should see "Hola World"
|
Then I should see "Hola World"
|
||||||
|
|
||||||
Scenario: Running localize with the subset config
|
Scenario: Running localize with the subset config
|
||||||
Given a fixture app "i18n-test-app"
|
Given a fixture app "i18n-v4-test-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n, langs: [:en]
|
activate :i18n, :langs => [:en]
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "i18n-test-app"
|
Given the Server is running at "i18n-v4-test-app"
|
||||||
When I go to "/"
|
When I go to "/"
|
||||||
Then I should see "Howdy"
|
Then I should see "Howdy"
|
||||||
When I go to "/hello.html"
|
When I go to "/hello.html"
|
||||||
|
@ -208,13 +209,13 @@ Feature: i18n Preview
|
||||||
Then I should see "File Not Found"
|
Then I should see "File Not Found"
|
||||||
|
|
||||||
Scenario: Running localize with relative_assets
|
Scenario: Running localize with relative_assets
|
||||||
Given a fixture app "i18n-test-app"
|
Given a fixture app "i18n-v4-test-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n
|
activate :i18n
|
||||||
activate :relative_assets
|
activate :relative_assets
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "i18n-test-app"
|
Given the Server is running at "i18n-v4-test-app"
|
||||||
When I go to "/"
|
When I go to "/"
|
||||||
Then I should see '"stylesheets/site.css"'
|
Then I should see '"stylesheets/site.css"'
|
||||||
When I go to "/hello.html"
|
When I go to "/hello.html"
|
||||||
|
@ -225,12 +226,12 @@ Feature: i18n Preview
|
||||||
Then I should see '"../stylesheets/site.css"'
|
Then I should see '"../stylesheets/site.css"'
|
||||||
|
|
||||||
Scenario: Missing translations fall back to the default locale
|
Scenario: Missing translations fall back to the default locale
|
||||||
Given a fixture app "i18n-default-app"
|
Given a fixture app "i18n-v4-default-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n, mount_at_root: :es
|
activate :i18n, :mount_at_root => :es
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "i18n-default-app"
|
Given the Server is running at "i18n-v4-default-app"
|
||||||
When I go to "/en/"
|
When I go to "/en/"
|
||||||
Then I should see "Default locale: es"
|
Then I should see "Default locale: es"
|
||||||
Then I should see "Current locale: en"
|
Then I should see "Current locale: en"
|
||||||
|
@ -238,12 +239,12 @@ Feature: i18n Preview
|
||||||
Then I should see "Howdy"
|
Then I should see "Howdy"
|
||||||
|
|
||||||
Scenario: Nested i18n yaml
|
Scenario: Nested i18n yaml
|
||||||
Given a fixture app "i18n-nested-app"
|
Given a fixture app "i18n-v4-nested-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
activate :i18n
|
activate :i18n
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "i18n-nested-app"
|
Given the Server is running at "i18n-v4-nested-app"
|
||||||
When I go to "/"
|
When I go to "/"
|
||||||
Then I should see "Howdy"
|
Then I should see "Howdy"
|
||||||
Then I should see "More"
|
Then I should see "More"
|
|
@ -12,7 +12,7 @@ Feature: Ignoring paths
|
||||||
And the following files should not exist:
|
And the following files should not exist:
|
||||||
| build/plain.html |
|
| build/plain.html |
|
||||||
| build/about.html |
|
| build/about.html |
|
||||||
|
|
||||||
Scenario: Ignore a single path (server)
|
Scenario: Ignore a single path (server)
|
||||||
Given a fixture app "ignore-app"
|
Given a fixture app "ignore-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
|
@ -28,35 +28,6 @@ Feature: Ignoring paths
|
||||||
When I go to "/about.html"
|
When I go to "/about.html"
|
||||||
Then I should see "File Not Found"
|
Then I should see "File Not Found"
|
||||||
|
|
||||||
Scenario: Ignoring collected values
|
|
||||||
Given a fixture app "ignore-app"
|
|
||||||
And a file named "data/ignores.yaml" with:
|
|
||||||
"""
|
|
||||||
---
|
|
||||||
- "plain"
|
|
||||||
"""
|
|
||||||
And a file named "config.rb" with:
|
|
||||||
"""
|
|
||||||
data.ignores.each do |name|
|
|
||||||
ignore "#{name}.html"
|
|
||||||
end
|
|
||||||
"""
|
|
||||||
And the Server is running
|
|
||||||
When I go to "/plain.html"
|
|
||||||
Then I should see "File Not Found"
|
|
||||||
When I go to "/about.html"
|
|
||||||
Then I should not see "File Not Found"
|
|
||||||
|
|
||||||
When the file "data/ignores.yaml" has the contents
|
|
||||||
"""
|
|
||||||
---
|
|
||||||
- "about"
|
|
||||||
"""
|
|
||||||
When I go to "/plain.html"
|
|
||||||
Then I should not see "File Not Found"
|
|
||||||
When I go to "/about.html"
|
|
||||||
Then I should see "File Not Found"
|
|
||||||
|
|
||||||
Scenario: Ignore a globbed path (build)
|
Scenario: Ignore a globbed path (build)
|
||||||
Given a fixture app "ignore-app"
|
Given a fixture app "ignore-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
|
@ -76,7 +47,7 @@ Feature: Ignoring paths
|
||||||
| build/reports/index.html |
|
| build/reports/index.html |
|
||||||
| build/reports/another.html |
|
| build/reports/another.html |
|
||||||
| build/images/icons/messages.png |
|
| build/images/icons/messages.png |
|
||||||
|
|
||||||
Scenario: Ignore a globbed path (server)
|
Scenario: Ignore a globbed path (server)
|
||||||
Given a fixture app "ignore-app"
|
Given a fixture app "ignore-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
|
@ -122,7 +93,7 @@ Feature: Ignoring paths
|
||||||
| build/reports/index.html |
|
| build/reports/index.html |
|
||||||
| build/reports/another.html |
|
| build/reports/another.html |
|
||||||
| build/images/icons/messages.png |
|
| build/images/icons/messages.png |
|
||||||
|
|
||||||
Scenario: Ignore a regex (server)
|
Scenario: Ignore a regex (server)
|
||||||
Given a fixture app "ignore-app"
|
Given a fixture app "ignore-app"
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
|
@ -147,4 +118,4 @@ Feature: Ignoring paths
|
||||||
When I go to "/reports/another.html"
|
When I go to "/reports/another.html"
|
||||||
Then I should see "File Not Found"
|
Then I should see "File Not Found"
|
||||||
When I go to "/images/icons/messages.png"
|
When I go to "/images/icons/messages.png"
|
||||||
Then I should see "File Not Found"
|
Then I should see "File Not Found"
|
|
@ -1,7 +0,0 @@
|
||||||
Feature: Support srcset property as params for image_tag helper
|
|
||||||
This lets you specify responsive image sizes
|
|
||||||
|
|
||||||
Scenario: Rendering an image with the feature enabled
|
|
||||||
Given the Server is running at "image-srcset-paths-app"
|
|
||||||
When I go to "/image-srcset-paths.html"
|
|
||||||
Then I should see '//example.com/remote-image.jpg 2x, /images/blank_3x.jpg 3x'
|
|
|
@ -1,15 +0,0 @@
|
||||||
Feature: Import files
|
|
||||||
|
|
||||||
Scenario: Move one path to another
|
|
||||||
Given the Server is running at "import-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: Import all of bower
|
|
||||||
Given the Server is running at "import-app"
|
|
||||||
When I go to "/bower_components/jquery/dist/jquery.js"
|
|
||||||
Then I should see 'jQuery'
|
|
||||||
When I go to "/bower_components2/jquery/dist/jquery.js"
|
|
||||||
Then I should see 'jQuery'
|
|
|
@ -1,18 +0,0 @@
|
||||||
Feature: Test a site with javascript included
|
|
||||||
|
|
||||||
As a software developer
|
|
||||||
I want to develop a site using javascript
|
|
||||||
I would like to have a server step rendering javascript correctly in order to test it
|
|
||||||
|
|
||||||
@javascript
|
|
||||||
Scenario: Existing app with javascript
|
|
||||||
Given the Server is running at "javascript-app"
|
|
||||||
When I go to "/index.html"
|
|
||||||
Then I should see:
|
|
||||||
"""
|
|
||||||
Local Hour
|
|
||||||
"""
|
|
||||||
And I should see:
|
|
||||||
"""
|
|
||||||
Local Minutes
|
|
||||||
"""
|
|
|
@ -6,7 +6,7 @@ Feature: Markdown (Kramdown) support
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
set :markdown_engine, :kramdown
|
set :markdown_engine, :kramdown
|
||||||
set :markdown, smartypants: true
|
set :markdown, :smartypants => true
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "markdown-app"
|
Given the Server is running at "markdown-app"
|
||||||
When I go to "/smarty_pants.html"
|
When I go to "/smarty_pants.html"
|
||||||
|
|
|
@ -33,10 +33,9 @@ Feature: Markdown support in Haml (Kramdown)
|
||||||
:markdown
|
:markdown
|
||||||
[A link](/link_target.html)
|
[A link](/link_target.html)
|
||||||
|
|
||||||
![image](blank.gif){: srcset="image_2x.jpg 2x"}
|
![image](blank.gif)
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "markdown-in-haml-app"
|
Given the Server is running at "markdown-in-haml-app"
|
||||||
When I go to "/link_and_image/"
|
When I go to "/link_and_image/"
|
||||||
Then I should see "/link_target/"
|
Then I should see "/link_target/"
|
||||||
Then I should see "/images/image_2x.jpg 2x"
|
|
||||||
Then I should see 'src="/images/blank.gif"'
|
Then I should see 'src="/images/blank.gif"'
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
Feature: Markdown support in Slim (Kramdown)
|
|
||||||
In order to test support of the Slim markdown filter
|
|
||||||
|
|
||||||
Scenario: Markdown filter in Slim works (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/markdown_filter.html.slim" with:
|
|
||||||
"""
|
|
||||||
markdown:
|
|
||||||
# H1
|
|
||||||
|
|
||||||
paragraph
|
|
||||||
"""
|
|
||||||
Given the Server is running at "markdown-in-slim-app"
|
|
||||||
When I go to "/markdown_filter/"
|
|
||||||
Then I should see ">H1</h1>"
|
|
||||||
Then I should see "<p>paragraph</p>"
|
|
||||||
|
|
||||||
|
|
||||||
Scenario: Markdown filter in Slim uses our link_to and image_tag helpers (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)
|
|
||||||
|
|
||||||
![image](blank.gif){: 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"'
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
@nojava
|
||||||
Feature: Markdown (Redcarpet) support
|
Feature: Markdown (Redcarpet) support
|
||||||
In order to test included Redcarpet support
|
In order to test included Redcarpet support
|
||||||
|
|
||||||
|
@ -6,14 +7,14 @@ Feature: Markdown (Redcarpet) support
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
set :markdown_engine, :redcarpet
|
set :markdown_engine, :redcarpet
|
||||||
set :markdown, no_intra_emphasis: true,
|
set :markdown, :no_intra_emphasis => true,
|
||||||
tables: true,
|
:tables => true,
|
||||||
fenced_code_blocks: true,
|
:fenced_code_blocks => true,
|
||||||
autolink: true,
|
:autolink => true,
|
||||||
strikethrough: true,
|
:strikethrough => true,
|
||||||
space_after_headers: true,
|
:space_after_headers => true,
|
||||||
superscript: true,
|
:superscript => true,
|
||||||
lax_spacing: true
|
:lax_spacing => true
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "markdown-app"
|
Given the Server is running at "markdown-app"
|
||||||
|
@ -41,9 +42,9 @@ Feature: Markdown (Redcarpet) support
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
set :markdown_engine, :redcarpet
|
set :markdown_engine, :redcarpet
|
||||||
set :markdown, underline: true,
|
set :markdown, :underline => true,
|
||||||
highlight: true,
|
:highlight => true,
|
||||||
disable_indented_code_blocks: true
|
:disable_indented_code_blocks => true
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "markdown-app"
|
Given the Server is running at "markdown-app"
|
||||||
When I go to "/underline.html"
|
When I go to "/underline.html"
|
||||||
|
@ -58,7 +59,7 @@ Feature: Markdown (Redcarpet) support
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
set :markdown_engine, :redcarpet
|
set :markdown_engine, :redcarpet
|
||||||
set :markdown, smartypants: true
|
set :markdown, :smartypants => true
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "markdown-app"
|
Given the Server is running at "markdown-app"
|
||||||
When I go to "/smarty_pants.html"
|
When I go to "/smarty_pants.html"
|
||||||
|
@ -69,13 +70,13 @@ Feature: Markdown (Redcarpet) support
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
set :markdown_engine, :redcarpet
|
set :markdown_engine, :redcarpet
|
||||||
set :markdown, filter_html: true,
|
set :markdown, :filter_html => true,
|
||||||
no_images: true,
|
:no_images => true,
|
||||||
no_links: true,
|
:no_links => true,
|
||||||
with_toc_data: true,
|
:with_toc_data => true,
|
||||||
hard_wrap: true,
|
:hard_wrap => true,
|
||||||
safe_links_only: true,
|
:safe_links_only => true,
|
||||||
prettify: true
|
:prettify => true
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "markdown-app"
|
Given the Server is running at "markdown-app"
|
||||||
|
@ -102,7 +103,7 @@ Feature: Markdown (Redcarpet) support
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
set :markdown_engine, :redcarpet
|
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:
|
And a file named "source/link.html.markdown" with:
|
||||||
"""
|
"""
|
||||||
|
@ -117,8 +118,8 @@ Feature: Markdown (Redcarpet) support
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
set :markdown_engine, :redcarpet
|
set :markdown_engine, :redcarpet
|
||||||
set :markdown, xhtml: true,
|
set :markdown, :xhtml => true,
|
||||||
hard_wrap: true
|
:hard_wrap => true
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "markdown-app"
|
Given the Server is running at "markdown-app"
|
||||||
When I go to "/hard_wrap.html"
|
When I go to "/hard_wrap.html"
|
||||||
|
@ -129,7 +130,7 @@ Feature: Markdown (Redcarpet) support
|
||||||
And a file named "config.rb" with:
|
And a file named "config.rb" with:
|
||||||
"""
|
"""
|
||||||
set :markdown_engine, :redcarpet
|
set :markdown_engine, :redcarpet
|
||||||
set :markdown, smartypants: true
|
set :markdown, :smartypants => true
|
||||||
"""
|
"""
|
||||||
Given the Server is running at "markdown-frontmatter-options-app"
|
Given the Server is running at "markdown-frontmatter-options-app"
|
||||||
When I go to "/smarty_pants-default.html"
|
When I go to "/smarty_pants-default.html"
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
@nojava
|
||||||
Feature: Markdown support in Haml
|
Feature: Markdown support in Haml
|
||||||
In order to test support of the Haml markdown filter
|
In order to test support of the Haml markdown filter
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue