diff --git a/.rubocop.yml b/.rubocop.yml
index c92b709f..dbd74993 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -67,5 +67,3 @@ Style/MultilineBlockChain:
Enabled: false
Style/SpecialGlobalVars:
Enabled: false
-Style/FrozenStringLiteralComment:
- Enabled: false
diff --git a/.travis.yml b/.travis.yml
index ac5a7f06..e6bc197b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -7,6 +7,8 @@ rvm:
- ruby-head
- 2.3.1
- 2.2.4
+ - 2.1
+ - 2.0
os:
- linux
# - osx
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 148aa2e2..a6494a17 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,18 +1,6 @@
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.
diff --git a/Gemfile b/Gemfile
index db4043a0..f14eb3b1 100644
--- a/Gemfile
+++ b/Gemfile
@@ -9,12 +9,6 @@ gem 'byebug'
gem 'aruba', '~> 0.7.4', require: false
gem 'rspec', '~> 3.0', require: false
gem 'cucumber', '~> 2.0', require: false
-gem 'addressable', '~> 2.4.0', require: false
-
-# Pry tools
-gem 'pry'
-gem 'pry-stack_explorer'
-gem 'pry-rescue'
# Optional middleman dependencies, included for tests
gem 'haml', '>= 4.0.5', require: false
@@ -24,7 +18,7 @@ gem 'kramdown', '~> 1.2', require: false
gem 'slim', '>= 2.0', require: false
gem 'liquid', '>= 2.6', require: false
gem 'stylus', '>= 1.0', require: false
-gem 'sinatra', '>= 2.0.0.beta2', require: false
+gem 'sinatra', '>= 1.4', require: false
gem 'redcarpet', '>= 3.1', require: false
# Dns server to test preview server
@@ -32,7 +26,7 @@ gem 'rubydns', '~> 1.0.1', require: false
# To test javascript
gem 'poltergeist', '~> 1.8', require: false
-gem 'phantomjs', '~> 2.1.1.0', require: false
+gem 'phantomjs', '~> 1.9.8.0', require: false
# For less, note there is no compatible JS runtime for windows
gem 'therubyrhino', '>= 2.0', platforms: :jruby
diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md
deleted file mode 100644
index 6d2dc0e0..00000000
--- a/ISSUE_TEMPLATE.md
+++ /dev/null
@@ -1,9 +0,0 @@
-## Expected behavior and actual behavior
-
-## Steps to reproduce the problem (from a clean middleman installation)
-
-## Additional information
-
-- Ruby version:
-- Middleman version:
-- OS version:
diff --git a/middleman-cli/bin/middleman b/middleman-cli/bin/middleman
index 8b381a08..46fa5889 100755
--- a/middleman-cli/bin/middleman
+++ b/middleman-cli/bin/middleman
@@ -25,10 +25,12 @@ module Middleman::Cli
if setting.default.is_a?(String) || setting.default.is_a?(NilClass)
base.class_option setting.key,
type: :string,
+ default: :undefined,
desc: setting.description
elsif setting.default.is_a?(TrueClass) || setting.default.is_a?(FalseClass)
base.class_option setting.key,
type: :boolean,
+ default: :undefined,
desc: setting.description
end
end
diff --git a/middleman-cli/lib/middleman-cli/build.rb b/middleman-cli/lib/middleman-cli/build.rb
index 9e521dde..df871ce2 100644
--- a/middleman-cli/lib/middleman-cli/build.rb
+++ b/middleman-cli/lib/middleman-cli/build.rb
@@ -29,7 +29,7 @@ module Middleman::Cli
default: false,
desc: 'Print debug messages'
class_option :instrument,
- type: :boolean,
+ type: :string,
default: false,
desc: 'Print instrument messages'
class_option :profile,
@@ -64,7 +64,7 @@ module Middleman::Cli
config[:mode] = :build
config[:show_exceptions] = false
config[:cli_options] = cli_options.each_with_object({}) do |(k, v), sum|
- sum[k] = v
+ sum[k] = v unless v == :undefined
end
end
diff --git a/middleman-cli/lib/middleman-cli/server.rb b/middleman-cli/lib/middleman-cli/server.rb
index 85e75a9f..479f53bd 100644
--- a/middleman-cli/lib/middleman-cli/server.rb
+++ b/middleman-cli/lib/middleman-cli/server.rb
@@ -17,7 +17,7 @@ module Middleman::Cli
default: false,
desc: 'Print debug messages'
class_option :instrument,
- type: :boolean,
+ type: :string,
default: false,
desc: 'Print instrument messages'
class_option :profile,
diff --git a/middleman-cli/middleman-cli.gemspec b/middleman-cli/middleman-cli.gemspec
index e9447a9c..f2719efc 100644
--- a/middleman-cli/middleman-cli.gemspec
+++ b/middleman-cli/middleman-cli.gemspec
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
s.test_files = `git ls-files -z -- {fixtures,features}/*`.split("\0")
s.executable = 'middleman'
s.require_path = 'lib'
- s.required_ruby_version = '>= 2.2.0'
+ s.required_ruby_version = '>= 2.0.0'
# CLI
s.add_dependency('thor', ['>= 0.17.0', '< 2.0'])
diff --git a/middleman-core/features/asset_host.feature b/middleman-core/features/asset_host.feature
index 0433b61b..646f1154 100644
--- a/middleman-core/features/asset_host.feature
+++ b/middleman-core/features/asset_host.feature
@@ -25,8 +25,7 @@ Feature: Alternate between multiple asset hosts
And a file named "config.rb" with:
"""
activate :asset_host, host: Proc.new { |asset|
- hash = Digest::MD5.digest(asset).bytes.map!(&:ord).reduce(&:+)
- "http://assets%d.example.com" % (hash % 4)
+ "http://assets%d.example.com" % (asset.hash % 4)
}
"""
And the Server is running
diff --git a/middleman-core/features/page-id.feature b/middleman-core/features/page-id.feature
index 74d08cb5..63dd6fad 100644
--- a/middleman-core/features/page-id.feature
+++ b/middleman-core/features/page-id.feature
@@ -3,60 +3,14 @@ Feature: Page IDs
Scenario: link_to works with blocks (erb)
Given the Server is running at "page-id-app"
When I go to "/index.html"
- Then I should see "I am: index"
+ Then I should see "I am: index.html"
And I should see "URL1: /fm.html"
And I should see "URL2: /2.html"
And I should see 'URL3: Hi'
And I should see 'URL4: Sym'
- And I should see 'URL5: Imp'
- And I should see 'URL6: Foldern'
- And I should see 'URL7: Feed'
When I go to "/fm.html"
Then I should see "I am: frontmatter"
- When I go to "/implicit.html"
- Then I should see "I am: implicit"
- When I go to "/feed.xml"
- Then I should see "I am: feed.xml"
- When I go to "/folder/foldern.html"
- Then I should see "I am: folder/foldern"
-
- When I go to "/1.html"
- Then I should see "I am: page1"
- When I go to "/2.html"
- Then I should see "I am: page2"
- When I go to "/3.html"
- Then I should see "I am: page3"
-
- When I go to "/overwrites/from-default.html"
- Then I should see "I am: something-else"
-
- When I go to "/overwrites/from-frontmatter.html"
- Then I should see "I am: from_frontmatter"
-
- Scenario: Override page ID derivation with a proc
- Given a fixture app "page-id-app"
- And app "page-id-app" is using config "proc"
- And the Server is running at "page-id-app"
-
- When I go to "/index.html"
- Then I should see "I am: index.html-foo"
- And I should see "URL1: /fm.html"
- And I should see "URL2: /2.html"
- And I should see 'URL3: Hi'
- And I should see 'URL4: Sym'
- And I should see 'URL8: Imp'
- And I should see 'URL9: Foldern'
- And I should see 'URL10: Feed'
-
- When I go to "/fm.html"
- Then I should see "I am: frontmatter"
- When I go to "/implicit.html"
- Then I should see "I am: implicit.html-foo"
- When I go to "/feed.xml"
- Then I should see "I am: feed.xml-foo"
- When I go to "/folder/foldern.html"
- Then I should see "I am: folder/foldern.html-foo"
When I go to "/1.html"
Then I should see "I am: page1"
diff --git a/middleman-core/fixtures/page-id-app/config-proc.rb b/middleman-core/fixtures/page-id-app/config-proc.rb
deleted file mode 100644
index 03070f0e..00000000
--- a/middleman-core/fixtures/page-id-app/config-proc.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-%w(1 2 3).each do |n|
- proxy "/#{n}.html", "/index.html", id: "page#{n}"
-end
-
-page "/overwrites/*", id: :"something-else"
-
-config[:page_id_generator] = ->(path){ path + "-foo" }
diff --git a/middleman-core/fixtures/page-id-app/source/feed.xml.erb b/middleman-core/fixtures/page-id-app/source/feed.xml.erb
deleted file mode 100644
index a27800bd..00000000
--- a/middleman-core/fixtures/page-id-app/source/feed.xml.erb
+++ /dev/null
@@ -1 +0,0 @@
-I am: <%= current_resource.page_id %>
diff --git a/middleman-core/fixtures/page-id-app/source/folder/foldern.html.erb b/middleman-core/fixtures/page-id-app/source/folder/foldern.html.erb
deleted file mode 100644
index a27800bd..00000000
--- a/middleman-core/fixtures/page-id-app/source/folder/foldern.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-I am: <%= current_resource.page_id %>
diff --git a/middleman-core/fixtures/page-id-app/source/implicit.html.erb b/middleman-core/fixtures/page-id-app/source/implicit.html.erb
deleted file mode 100644
index a27800bd..00000000
--- a/middleman-core/fixtures/page-id-app/source/implicit.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-I am: <%= current_resource.page_id %>
diff --git a/middleman-core/fixtures/page-id-app/source/index.html.erb b/middleman-core/fixtures/page-id-app/source/index.html.erb
index 6060bc3f..8f2997b6 100644
--- a/middleman-core/fixtures/page-id-app/source/index.html.erb
+++ b/middleman-core/fixtures/page-id-app/source/index.html.erb
@@ -4,11 +4,3 @@ URL1: <%= url_for "frontmatter" %>
URL2: <%= url_for "page2" %>
URL3: <%= link_to "Hi", "page3" %>
URL4: <%= link_to "Sym", :"something-else" %>
-URL5: <%= link_to "Imp", :implicit %>
-URL6: <%= link_to "Foldern", "folder/foldern" %>
-URL7: <%= link_to "Feed", "feed.xml" %>
-
-<%# If custom proc %>
-URL8: <%= link_to "Imp", "implicit.html-foo" %>
-URL9: <%= link_to "Foldern", "folder/foldern.html-foo" %>
-URL10: <%= link_to "Feed", "feed.xml-foo" %>
diff --git a/middleman-core/lib/middleman-core/application.rb b/middleman-core/lib/middleman-core/application.rb
index 52b31c92..918f65ee 100644
--- a/middleman-core/lib/middleman-core/application.rb
+++ b/middleman-core/lib/middleman-core/application.rb
@@ -203,7 +203,6 @@ module Middleman
define_setting :watcher_disable, false, 'If the Listen watcher should not run'
define_setting :watcher_force_polling, false, 'If the Listen watcher should run in polling mode'
define_setting :watcher_latency, nil, 'The Listen watcher latency'
- define_setting :watcher_wait_for_delay, 0.5, 'The Listen watcher delay between calls when changes exist'
# Delegate convenience methods off to their implementations
def_delegator :"::Middleman::Logger", :singleton, :logger
@@ -345,11 +344,11 @@ module Middleman
# Clean up missing Tilt exts
def prune_tilt_templates!
- ::Tilt.default_mapping.lazy_map.each_key do |key|
+ ::Tilt.mappings.each_key do |key|
begin
::Tilt[".#{key}"]
rescue LoadError, NameError
- ::Tilt.default_mapping.lazy_map.delete(key)
+ ::Tilt.mappings.delete(key)
end
end
end
diff --git a/middleman-core/lib/middleman-core/core_extensions/file_watcher.rb b/middleman-core/lib/middleman-core/core_extensions/file_watcher.rb
index 6fd16ae9..82df8f73 100644
--- a/middleman-core/lib/middleman-core/core_extensions/file_watcher.rb
+++ b/middleman-core/lib/middleman-core/core_extensions/file_watcher.rb
@@ -28,7 +28,10 @@ module Middleman
super
# Setup source collection.
- @sources = ::Middleman::Sources.new(app)
+ @sources = ::Middleman::Sources.new(app,
+ disable_watcher: app.config[:watcher_disable],
+ force_polling: app.config[:watcher_force_polling],
+ latency: app.config[:watcher_latency])
# Add default ignores.
IGNORES.each do |key, value|
@@ -52,13 +55,6 @@ module Middleman
# @return [void]
Contract Any
def after_configuration
- @watcher.update_config(
- disable_watcher: app.config[:watcher_disable],
- force_polling: app.config[:watcher_force_polling],
- latency: app.config[:watcher_latency],
- wait_for_delay: app.config[:watcher_wait_for_delay]
- )
-
if @original_source_dir != app.config[:source]
@watcher.update_path(app.config[:source])
end
diff --git a/middleman-core/lib/middleman-core/extensions/minify_css.rb b/middleman-core/lib/middleman-core/extensions/minify_css.rb
index aca9c60b..2701b8f2 100644
--- a/middleman-core/lib/middleman-core/extensions/minify_css.rb
+++ b/middleman-core/lib/middleman-core/extensions/minify_css.rb
@@ -72,7 +72,7 @@ class Middleman::Extensions::MinifyCss < ::Middleman::Extension
end
if minified
- headers['Content-Length'] = minified.bytesize.to_s
+ headers['Content-Length'] = ::Rack::Utils.bytesize(minified).to_s
response = [minified]
end
diff --git a/middleman-core/lib/middleman-core/extensions/minify_javascript.rb b/middleman-core/lib/middleman-core/extensions/minify_javascript.rb
index 714d0645..22719e83 100644
--- a/middleman-core/lib/middleman-core/extensions/minify_javascript.rb
+++ b/middleman-core/lib/middleman-core/extensions/minify_javascript.rb
@@ -64,7 +64,7 @@ class Middleman::Extensions::MinifyJavascript < ::Middleman::Extension
end
if minified
- headers['Content-Length'] = minified.bytesize.to_s
+ headers['Content-Length'] = ::Rack::Utils.bytesize(minified).to_s
response = [minified]
end
diff --git a/middleman-core/lib/middleman-core/file_renderer.rb b/middleman-core/lib/middleman-core/file_renderer.rb
index 26a38dc7..a3e8b193 100644
--- a/middleman-core/lib/middleman-core/file_renderer.rb
+++ b/middleman-core/lib/middleman-core/file_renderer.rb
@@ -3,8 +3,8 @@ require 'active_support/core_ext/string/output_safety'
require 'active_support/core_ext/module/delegation'
require 'middleman-core/contracts'
-::Tilt.default_mapping.lazy_map.delete('html')
-::Tilt.default_mapping.lazy_map.delete('csv')
+::Tilt.mappings.delete('html') # WTF, Tilt?
+::Tilt.mappings.delete('csv')
module Middleman
class FileRenderer
@@ -123,8 +123,8 @@ module Middleman
# Find all the engines which handle this extension in tilt. Look for
# config variables of that name and merge it
extension_class = ::Middleman::Util.tilt_class(ext)
-
- ::Tilt.default_mapping.extensions_for(extension_class).each do |mapping_ext|
+ ::Tilt.mappings.each do |mapping_ext, engines|
+ next unless engines.include? extension_class
engine_options = @app.config[mapping_ext.to_sym] || {}
options.merge!(engine_options)
end
diff --git a/middleman-core/lib/middleman-core/preview_server.rb b/middleman-core/lib/middleman-core/preview_server.rb
index 1a3d220e..b70e9c99 100644
--- a/middleman-core/lib/middleman-core/preview_server.rb
+++ b/middleman-core/lib/middleman-core/preview_server.rb
@@ -143,7 +143,7 @@ module Middleman
app = ::Middleman::Application.new do
config[:cli_options] = cli_options.each_with_object({}) do |(k, v), sum|
- sum[k] = v
+ sum[k] = v unless v == :undefined
end
ready do
@@ -160,9 +160,6 @@ module Middleman
path: root,
only: match_against
- # Hack around bower_components in root.
- watcher.listener.ignore(/^bower_components/)
-
# Hack around node_modules in root.
watcher.listener.ignore(/^node_modules/)
@@ -207,7 +204,7 @@ module Middleman
end
def possible_from_cli(key, config)
- if @cli_options[key]
+ if @cli_options[key] && @cli_options[key] != :undefined
@cli_options[key]
else
config[key]
diff --git a/middleman-core/lib/middleman-core/rack.rb b/middleman-core/lib/middleman-core/rack.rb
index 640dbad9..293a2e43 100644
--- a/middleman-core/lib/middleman-core/rack.rb
+++ b/middleman-core/lib/middleman-core/rack.rb
@@ -133,15 +133,9 @@ module Middleman
# Immediately send static file
def send_file(resource, env)
- file = ::Rack::File.new nil
- path = resource.file_descriptor[:full_path]
- if !file.respond_to?(:path=)
- request = ::Rack::Request.new(env)
- response = file.serving(request, path)
- else
- file.path = path
- response = file.serving(env)
- end
+ file = ::Rack::File.new nil
+ file.path = resource.file_descriptor[:full_path]
+ response = file.serving(env)
status = response[0]
response[1]['Content-Encoding'] = 'gzip' if %w(.svgz .gz).include?(resource.ext)
# Do not set Content-Type if status is 1xx, 204, 205 or 304, otherwise
diff --git a/middleman-core/lib/middleman-core/renderers/redcarpet.rb b/middleman-core/lib/middleman-core/renderers/redcarpet.rb
index b2171f22..1542489c 100644
--- a/middleman-core/lib/middleman-core/renderers/redcarpet.rb
+++ b/middleman-core/lib/middleman-core/renderers/redcarpet.rb
@@ -3,7 +3,7 @@ require 'active_support/core_ext/module/attribute_accessors'
module Middleman
module Renderers
- class RedcarpetTemplate < ::Tilt::RedcarpetTemplate
+ class RedcarpetTemplate < ::Tilt::RedcarpetTemplate::Redcarpet2
# because tilt has decided to convert these
# in the wrong direction
ALIASES = {
diff --git a/middleman-core/lib/middleman-core/sitemap/extensions/ignores.rb b/middleman-core/lib/middleman-core/sitemap/extensions/ignores.rb
index 0367c64a..dfa80304 100644
--- a/middleman-core/lib/middleman-core/sitemap/extensions/ignores.rb
+++ b/middleman-core/lib/middleman-core/sitemap/extensions/ignores.rb
@@ -14,31 +14,16 @@ module Middleman
Contract Or[String, Regexp, Proc] => RespondTo[:execute_descriptor]
def ignore(path=nil, &block)
@app.sitemap.invalidate_resources_not_ignored_cache!
-
- if path.is_a? Regexp
- RegexpIgnoreDescriptor.new(path)
- elsif path.is_a? String
- path_clean = ::Middleman::Util.normalize_path(path)
-
- if path_clean.include?('*') # It's a glob
- GlobIgnoreDescriptor.new(path_clean)
- else
- StringIgnoreDescriptor.new(path_clean)
- end
- elsif block
- BlockIgnoreDescriptor.new(nil, block)
- else
- IgnoreDescriptor.new(path, block)
- end
+ IgnoreDescriptor.new(path, block)
end
IgnoreDescriptor = Struct.new(:path, :block) do
def execute_descriptor(_app, resources)
resources.map do |r|
# Ignore based on the source path (without template extensions)
- if ignored?(r.normalized_path)
+ if ignored?(r.path)
r.ignore!
- elsif !r.is_a?(ProxyResource) && r.file_descriptor && ignored?(r.file_descriptor.normalized_relative_path)
+ elsif !r.is_a?(ProxyResource) && r.file_descriptor && ignored?(r.file_descriptor[:relative_path].to_s)
# This allows files to be ignored by their source file name (with template extensions)
r.ignore!
end
@@ -48,38 +33,27 @@ module Middleman
end
def ignored?(match_path)
- raise NotImplementedError
- end
- end
+ match_path = ::Middleman::Util.normalize_path(match_path)
- class RegexpIgnoreDescriptor < IgnoreDescriptor
- def ignored?(match_path)
- match_path =~ path
- end
- end
+ if path.is_a? Regexp
+ match_path =~ path
+ elsif path.is_a? String
+ path_clean = ::Middleman::Util.normalize_path(path)
- class GlobIgnoreDescriptor < IgnoreDescriptor
- def ignored?(match_path)
- if defined?(::File::FNM_EXTGLOB)
- ::File.fnmatch(path, match_path, ::File::FNM_EXTGLOB)
- else
- ::File.fnmatch(path, match_path)
+ if path_clean.include?('*') # It's a glob
+ if defined?(::File::FNM_EXTGLOB)
+ ::File.fnmatch(path_clean, match_path, ::File::FNM_EXTGLOB)
+ else
+ ::File.fnmatch(path_clean, match_path)
+ end
+ else
+ match_path == path_clean
+ end
+ elsif block
+ block.call(match_path)
end
end
end
-
- class StringIgnoreDescriptor < IgnoreDescriptor
- def ignored?(match_path)
- match_path == path
- end
- end
-
- class BlockIgnoreDescriptor < IgnoreDescriptor
- def ignored?(match_path)
- block.call(match_path)
- end
- end
-
end
end
end
diff --git a/middleman-core/lib/middleman-core/sitemap/extensions/proxies.rb b/middleman-core/lib/middleman-core/sitemap/extensions/proxies.rb
index 42098ae8..b11e02eb 100644
--- a/middleman-core/lib/middleman-core/sitemap/extensions/proxies.rb
+++ b/middleman-core/lib/middleman-core/sitemap/extensions/proxies.rb
@@ -47,7 +47,7 @@ module Middleman
)
if should_ignore
- d = ::Middleman::Sitemap::Extensions::Ignores::StringIgnoreDescriptor.new(target)
+ d = ::Middleman::Sitemap::Extensions::Ignores::IgnoreDescriptor.new(target)
d.execute_descriptor(app, resources)
end
diff --git a/middleman-core/lib/middleman-core/sitemap/resource.rb b/middleman-core/lib/middleman-core/sitemap/resource.rb
index f3619873..22b13498 100644
--- a/middleman-core/lib/middleman-core/sitemap/resource.rb
+++ b/middleman-core/lib/middleman-core/sitemap/resource.rb
@@ -87,7 +87,7 @@ module Middleman
Contract Or[Symbol, String, Fixnum]
def page_id
- metadata[:page][:id] || make_implicit_page_id(destination_path)
+ metadata[:page][:id] || destination_path
end
# Merge in new metadata specific to this resource.
@@ -197,41 +197,10 @@ module Middleman
options[:content_type] || ::Rack::Mime.mime_type(ext, nil)
end
- # The normalized source path of this resource (relative to the source directory,
- # without template extensions)
- # @return [String]
- def normalized_path
- @normalized_path ||= ::Middleman::Util.normalize_path @path
- end
-
def to_s
"#<#{self.class} path=#{@path}>"
end
alias inspect to_s # Ruby 2.0 calls inspect for NoMethodError instead of to_s
-
- protected
-
- # Makes a page id based on path (when not otherwise given)
- #
- # Removes .html extension and potential leading slashes or dots
- # eg. "foo/bar/baz.foo.html" => "foo/bar/baz.foo"
- Contract String => String
- def make_implicit_page_id(path)
- @id ||= begin
- if prok = @app.config[:page_id_generator]
- return prok.call(path)
- end
-
- basename = if ext == ".html"
- File.basename(path, ext)
- else
- File.basename(path)
- end
-
- # Remove leading dot or slash if present
- File.join(File.dirname(path), basename).gsub(/^\.?\//, '')
- end
- end
end
class StringResource < Resource
diff --git a/middleman-core/lib/middleman-core/sources.rb b/middleman-core/lib/middleman-core/sources.rb
index ced46227..f0d3cc91 100644
--- a/middleman-core/lib/middleman-core/sources.rb
+++ b/middleman-core/lib/middleman-core/sources.rb
@@ -8,10 +8,6 @@ module Middleman
::Middleman::Sources.file_cache[full_path] ||= {}
::Middleman::Sources.file_cache[full_path][version] ||= ::File.read(full_path)
end
-
- def normalized_relative_path
- @normalized_relative_path ||= ::Middleman::Util.normalize_path relative_path.to_s
- end
end
# Sources handle multiple on-disk collections of files which make up
@@ -56,13 +52,15 @@ module Middleman
# @param [Hash] options Global options.
# @param [Array] watchers Default watchers.
Contract IsA['Middleman::Application'], Maybe[Hash], Maybe[Array] => Any
- def initialize(app, _options={}, watchers=[])
+ def initialize(app, options={}, watchers=[])
@app = app
@watchers = watchers
@sorted_watchers = @watchers.dup.freeze
::Middleman::Sources.file_cache = {}
+ @options = options
+
# Set of procs wanting to be notified of changes
@on_change_callbacks = ::Hamster::Vector.empty
@@ -170,7 +168,7 @@ module Middleman
# @return [Middleman::Sources]
Contract Symbol => ::Middleman::Sources
def by_type(type)
- self.class.new @app, nil, watchers.select { |d| d.type == type }
+ self.class.new @app, @options, watchers.select { |d| d.type == type }
end
# Get all files for this collection of watchers.
diff --git a/middleman-core/lib/middleman-core/sources/source_watcher.rb b/middleman-core/lib/middleman-core/sources/source_watcher.rb
index 8e3a3550..07d7ff62 100644
--- a/middleman-core/lib/middleman-core/sources/source_watcher.rb
+++ b/middleman-core/lib/middleman-core/sources/source_watcher.rb
@@ -75,10 +75,9 @@ module Middleman
@ignored = options.fetch(:ignored, proc { false })
@only = Array(options.fetch(:only, []))
- @disable_watcher = app.build?
- @force_polling = false
- @latency = nil
- @wait_for_delay = nil
+ @disable_watcher = app.build? || @parent.options.fetch(:disable_watcher, false)
+ @force_polling = @parent.options.fetch(:force_polling, false)
+ @latency = @parent.options.fetch(:latency, nil)
@listener = nil
@@ -96,20 +95,13 @@ module Middleman
def update_path(directory)
@directory = Pathname(File.expand_path(directory, app.root))
- without_listener_running do
- update([], @files.values.map { |source_file| source_file[:full_path] })
- end
+ stop_listener! if @listener
+
+ update([], @files.values.map { |source_file| source_file[:full_path] })
poll_once!
- end
- def update_config(options={})
- without_listener_running do
- @disable_watcher = options.fetch(:disable_watcher, false)
- @force_polling = options.fetch(:force_polling, false)
- @latency = options.fetch(:latency, nil)
- @wait_for_delay = options.fetch(:wait_for_delay, nil)
- end
+ listen! unless @disable_watcher
end
# Stop watching.
@@ -168,10 +160,10 @@ module Middleman
config = {
force_polling: @force_polling,
+ wait_for_delay: 0.5
}
- config[:wait_for_delay] = @wait_for_delay.try(:to_f) || 0.5
- config[:latency] = @latency.to_f if @latency
+ config[:latency] = @latency.to_i if @latency
@listener = ::Listen.to(@directory.to_s, config, &method(:on_listener_change))
@@ -207,7 +199,7 @@ module Middleman
Contract ArrayOf[Pathname]
def poll_once!
updated = ::Middleman::Util.all_files_under(@directory.to_s, &method(:should_not_recurse?))
- removed = @files.keys - updated
+ removed = @files.keys.reject { |p| updated.include?(p) }
result = update(updated, removed)
@@ -351,20 +343,5 @@ module Middleman
@only.any? { |reg| file[:relative_path].to_s =~ reg }
end
end
-
- private
-
- def without_listener_running
- listener_running = @listener && @listener.processing?
-
- stop_listener! if listener_running
-
- yield
-
- if listener_running
- poll_once!
- listen!
- end
- end
end
end
diff --git a/middleman-core/lib/middleman-core/template_renderer.rb b/middleman-core/lib/middleman-core/template_renderer.rb
index 8100a56d..0dcf2af8 100644
--- a/middleman-core/lib/middleman-core/template_renderer.rb
+++ b/middleman-core/lib/middleman-core/template_renderer.rb
@@ -64,7 +64,9 @@ module Middleman
extension_class = ::Middleman::Util.tilt_class(options[:preferred_engine])
# Get a list of extensions for a preferred engine
- preferred_engines += ::Tilt.default_mapping.extensions_for(extension_class)
+ preferred_engines += ::Tilt.mappings.select do |_, engines|
+ engines.include? extension_class
+ end.keys
end
preferred_engines << '*'
diff --git a/middleman-core/lib/middleman-core/util/paths.rb b/middleman-core/lib/middleman-core/util/paths.rb
index 2e229392..2814cfc9 100644
--- a/middleman-core/lib/middleman-core/util/paths.rb
+++ b/middleman-core/lib/middleman-core/util/paths.rb
@@ -1,7 +1,7 @@
# Core Pathname library used for traversal
require 'pathname'
require 'uri'
-require 'addressable/uri'
+require 'addressable'
require 'memoist'
require 'tilt'
@@ -152,8 +152,7 @@ module Middleman
def url_for(app, path_or_resource, options={})
if path_or_resource.is_a?(String) || path_or_resource.is_a?(Symbol)
r = app.sitemap.find_resource_by_page_id(path_or_resource)
-
- path_or_resource = r ? r : path_or_resource.to_s
+ path_or_resource = r if r
end
# Handle Resources and other things which define their own url method
diff --git a/middleman-core/lib/middleman-core/version.rb b/middleman-core/lib/middleman-core/version.rb
index 7b1bf403..6f3f1228 100644
--- a/middleman-core/lib/middleman-core/version.rb
+++ b/middleman-core/lib/middleman-core/version.rb
@@ -1,5 +1,5 @@
module Middleman
# Current Version
# @return [String]
- VERSION = '4.1.14'.freeze unless const_defined?(:VERSION)
+ VERSION = '4.1.10'.freeze unless const_defined?(:VERSION)
end
diff --git a/middleman-core/middleman-core.gemspec b/middleman-core/middleman-core.gemspec
index 38df7be7..f5509c72 100644
--- a/middleman-core/middleman-core.gemspec
+++ b/middleman-core/middleman-core.gemspec
@@ -16,12 +16,12 @@ Gem::Specification.new do |s|
s.files = `git ls-files -z`.split("\0")
s.test_files = `git ls-files -z -- {fixtures,features}/*`.split("\0")
s.require_path = 'lib'
- s.required_ruby_version = '>= 2.2.0'
+ s.required_ruby_version = '>= 2.0.0'
# Core
s.add_dependency('bundler', ['~> 1.1'])
- s.add_dependency('rack', ['>= 1.4.5', '< 3'])
- s.add_dependency('tilt', ['~> 2.0'])
+ s.add_dependency('rack', ['>= 1.4.5', '< 2.0'])
+ s.add_dependency('tilt', ['~> 1.4.1'])
s.add_dependency('erubis')
s.add_dependency('fast_blank')
s.add_dependency('parallel')
@@ -29,7 +29,7 @@ Gem::Specification.new do |s|
s.add_dependency('dotenv')
# Helpers
- s.add_dependency('activesupport', ['>= 4.2', '< 5.1'])
+ s.add_dependency('activesupport', ['~> 4.2'])
s.add_dependency('padrino-helpers', ['~> 0.13.0'])
s.add_dependency("addressable", ["~> 2.3"])
s.add_dependency('memoist', ['~> 0.14'])
diff --git a/middleman-core/spec/middleman-core/util_spec.rb b/middleman-core/spec/middleman-core/util_spec.rb
index 9c429145..a852521d 100644
--- a/middleman-core/spec/middleman-core/util_spec.rb
+++ b/middleman-core/spec/middleman-core/util_spec.rb
@@ -220,7 +220,7 @@ describe Middleman::Util do
it "does not loop infinitely when file name is a possible templating engine" do
expect do
- Timeout::timeout(3.0) do
+ Timeout::timeout(0.5) do
result = Middleman::Util.step_through_extensions("markdown.scss")
expect(result).to eq "markdown"
end
diff --git a/middleman/middleman.gemspec b/middleman/middleman.gemspec
index a172005f..06dd3144 100644
--- a/middleman/middleman.gemspec
+++ b/middleman/middleman.gemspec
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
s.files = `git ls-files -z`.split("\0")
s.test_files = `git ls-files -z -- {fixtures,features}/*`.split("\0")
s.require_path = 'lib'
- s.required_ruby_version = '>= 2.2.0'
+ s.required_ruby_version = '>= 2.0.0'
s.add_dependency('middleman-core', Middleman::VERSION)
s.add_dependency('middleman-cli', Middleman::VERSION)