middleman-core 4.3.8 → 4.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/features/asset_hash.feature +64 -62
- data/features/data.feature +20 -0
- data/features/front-matter-neighbor.feature +33 -27
- data/features/front-matter.feature +11 -5
- data/features/i18n_preview.feature +238 -238
- data/features/liquid.feature +5 -2
- data/features/support/env.rb +0 -3
- data/features/unicode_filenames.feature +3 -3
- data/fixtures/basic-data-app/data/test3.toml +7 -0
- data/fixtures/basic-data-app/source/data4.html.erb +5 -0
- data/fixtures/frontmatter-app/source/raw-front-matter-toml.html +6 -0
- data/fixtures/frontmatter-app/source/raw-front-matter.html +1 -1
- data/fixtures/frontmatter-neighbor-app/source/raw-front-matter-toml.html +1 -0
- data/fixtures/frontmatter-neighbor-app/source/raw-front-matter-toml.html.frontmatter +4 -0
- data/lib/middleman-core/builder.rb +1 -1
- data/lib/middleman-core/core_extensions/data.rb +4 -2
- data/lib/middleman-core/core_extensions/default_helpers.rb +1 -0
- data/lib/middleman-core/core_extensions/front_matter.rb +1 -0
- data/lib/middleman-core/core_extensions/rendering.rb +0 -6
- data/lib/middleman-core/dns_resolver/basic_network_resolver.rb +0 -2
- data/lib/middleman-core/dns_resolver.rb +2 -4
- data/lib/middleman-core/extensions/asset_hash.rb +1 -1
- data/lib/middleman-core/preview_server/server_ip_address.rb +5 -14
- data/lib/middleman-core/rack.rb +2 -1
- data/lib/middleman-core/step_definitions/commandline_steps.rb +0 -4
- data/lib/middleman-core/step_definitions/middleman_steps.rb +1 -1
- data/lib/middleman-core/step_definitions/server_steps.rb +3 -2
- data/lib/middleman-core/template_context.rb +3 -3
- data/lib/middleman-core/template_renderer.rb +1 -1
- data/lib/middleman-core/util/data.rb +28 -0
- data/lib/middleman-core/util/paths.rb +2 -1
- data/lib/middleman-core/version.rb +1 -1
- data/middleman-core.gemspec +8 -6
- data/spec/middleman-core/dns_resolver_spec.rb +8 -24
- data/spec/spec_helper.rb +0 -3
- metadata +52 -1083
- data/features/stylus.feature +0 -54
- data/lib/middleman-core/renderers/stylus.rb +0 -10
@@ -47,9 +47,3 @@ Middleman::Extensions.register :less_renderer, auto_activate: :before_configurat
|
|
47
47
|
require 'middleman-core/renderers/less'
|
48
48
|
Middleman::Renderers::Less
|
49
49
|
end
|
50
|
-
|
51
|
-
# Stylus Support
|
52
|
-
Middleman::Extensions.register :stylus_renderer, auto_activate: :before_configuration do
|
53
|
-
require 'middleman-core/renderers/stylus'
|
54
|
-
Middleman::Renderers::Stylus
|
55
|
-
end
|
@@ -31,10 +31,8 @@ module Middleman
|
|
31
31
|
@resolvers = []
|
32
32
|
@resolvers << opts.fetch(:hosts_resolver, HostsResolver.new)
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
@resolvers << opts.fetch(:local_link_resolver, LocalLinkResolver.new)
|
37
|
-
end
|
34
|
+
require 'middleman-core/dns_resolver/local_link_resolver'
|
35
|
+
@resolvers << opts.fetch(:local_link_resolver, LocalLinkResolver.new)
|
38
36
|
|
39
37
|
@resolvers << opts.fetch(:network_resolver, NetworkResolver.new)
|
40
38
|
end
|
@@ -87,7 +87,7 @@ class Middleman::Extensions::AssetHash < ::Middleman::Extension
|
|
87
87
|
else
|
88
88
|
# Render through the Rack interface so middleware and mounted apps get a shot
|
89
89
|
response = @rack_client.get(
|
90
|
-
::
|
90
|
+
::WEBrick::HTTPUtils.escape(resource.destination_path),
|
91
91
|
'bypass_inline_url_rewriter_asset_hash' => 'true'
|
92
92
|
)
|
93
93
|
|
@@ -35,20 +35,11 @@ module Middleman
|
|
35
35
|
format('[%s]', to_s)
|
36
36
|
end
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
false
|
44
|
-
end
|
45
|
-
else
|
46
|
-
def self.match?(str)
|
47
|
-
str = str.to_s.sub(/%.*$/, '')
|
48
|
-
IPAddr.new(str).ipv6?
|
49
|
-
rescue IPAddr::InvalidAddressError, IPAddr::AddressFamilyError
|
50
|
-
false
|
51
|
-
end
|
38
|
+
def self.match?(str)
|
39
|
+
str = str.to_s.sub(/%.*$/, '')
|
40
|
+
IPAddr.new(str).ipv6?
|
41
|
+
rescue IPAddr::InvalidAddressError, IPAddr::AddressFamilyError
|
42
|
+
false
|
52
43
|
end
|
53
44
|
end
|
54
45
|
end
|
data/lib/middleman-core/rack.rb
CHANGED
@@ -3,6 +3,7 @@ require 'rack/file'
|
|
3
3
|
require 'rack/lint'
|
4
4
|
require 'rack/head'
|
5
5
|
require 'rack/utils'
|
6
|
+
require 'webrick'
|
6
7
|
|
7
8
|
require 'middleman-core/util'
|
8
9
|
require 'middleman-core/logger'
|
@@ -86,7 +87,7 @@ module Middleman
|
|
86
87
|
def process_request(env, req, res)
|
87
88
|
start_time = Time.now
|
88
89
|
|
89
|
-
request_path =
|
90
|
+
request_path = WEBrick::HTTPUtils.unescape(env['PATH_INFO'].dup)
|
90
91
|
if request_path.respond_to? :force_encoding
|
91
92
|
request_path.force_encoding('UTF-8')
|
92
93
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'middleman-core/rack'
|
2
2
|
require 'rspec/expectations'
|
3
3
|
require 'capybara/cucumber'
|
4
|
+
require 'webrick'
|
4
5
|
|
5
6
|
Given /^a clean server$/ do
|
6
7
|
@initialize_commands = []
|
@@ -72,11 +73,11 @@ Given /^a template named "([^\"]*)" with:$/ do |name, string|
|
|
72
73
|
end
|
73
74
|
|
74
75
|
When /^I go to "([^\"]*)"$/ do |url|
|
75
|
-
visit(
|
76
|
+
visit(WEBrick::HTTPUtils.escape(url))
|
76
77
|
end
|
77
78
|
|
78
79
|
Then /^going to "([^\"]*)" should not raise an exception$/ do |url|
|
79
|
-
expect{ visit(
|
80
|
+
expect{ visit(WEBrick::HTTPUtils.escape(url)) }.to_not raise_exception
|
80
81
|
end
|
81
82
|
|
82
83
|
Then /^the content type should be "([^\"]*)"$/ do |expected|
|
@@ -99,8 +99,8 @@ module Middleman
|
|
99
99
|
# @param [Hash] options
|
100
100
|
# @param [Proc] block A block will be evaluated to return internal contents.
|
101
101
|
# @return [String]
|
102
|
-
Contract Any, Or[Symbol, String], Hash
|
103
|
-
def render(_, name, options={}, &block)
|
102
|
+
Contract Any, Or[Symbol, String], Hash, Hash, Maybe[Proc] => String
|
103
|
+
def render(_, name, options={}, locals={}, &block)
|
104
104
|
name = name.to_s
|
105
105
|
|
106
106
|
partial_file = locate_partial(name, false) || locate_partial(name, true)
|
@@ -114,7 +114,7 @@ module Middleman
|
|
114
114
|
partial_file.read
|
115
115
|
else
|
116
116
|
opts = options.dup
|
117
|
-
locs =
|
117
|
+
locs = locals.dup
|
118
118
|
|
119
119
|
render_file(partial_file, locs, opts, &block)
|
120
120
|
end
|
@@ -132,7 +132,7 @@ module Middleman
|
|
132
132
|
@app.extensions.add_exposed_to_context(context)
|
133
133
|
|
134
134
|
locals.each do |k, _|
|
135
|
-
next unless context.respond_to?(k) && ![:current_path, :paginate, :page_articles, :blog_controller, :lang, :locale].include?(k.to_sym)
|
135
|
+
next unless context.respond_to?(k) && ![:current_path, :paginate, :page_articles, :blog_controller, :lang, :locale, :data].include?(k.to_sym)
|
136
136
|
|
137
137
|
msg = "Template local `#{k}` tried to overwrite an existing context value. Please rename the key when passing to `locals`"
|
138
138
|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
require 'json'
|
3
|
+
require 'toml'
|
3
4
|
require 'pathname'
|
4
5
|
require 'backports/2.1.0/array/to_h'
|
5
6
|
require 'hashie'
|
@@ -65,6 +66,8 @@ module Middleman
|
|
65
66
|
return [parse_yaml(content, full_path), nil]
|
66
67
|
when :json
|
67
68
|
return [parse_json(content, full_path), nil]
|
69
|
+
when :toml
|
70
|
+
return [parse_toml(content, full_path), nil]
|
68
71
|
end
|
69
72
|
end
|
70
73
|
|
@@ -79,6 +82,11 @@ module Middleman
|
|
79
82
|
parse_json("{#{match[:frontmatter]}}", full_path),
|
80
83
|
match[:additional_content]
|
81
84
|
]
|
85
|
+
when *frontmatter_delims[:toml]
|
86
|
+
[
|
87
|
+
parse_toml(match[:frontmatter], full_path),
|
88
|
+
match[:additional_content]
|
89
|
+
]
|
82
90
|
else
|
83
91
|
[
|
84
92
|
{},
|
@@ -122,6 +130,26 @@ module Middleman
|
|
122
130
|
c ? symbolize_recursive(c) : {}
|
123
131
|
end
|
124
132
|
memoize :parse_yaml
|
133
|
+
|
134
|
+
# Parse TOML frontmatter out of a string
|
135
|
+
# @param [String] content
|
136
|
+
# @return [Hash]
|
137
|
+
Contract String, Pathname => Hash
|
138
|
+
def parse_toml(content, full_path)
|
139
|
+
c = begin
|
140
|
+
::Middleman::Util.instrument 'parse.toml' do
|
141
|
+
::TOML.load(content)
|
142
|
+
end
|
143
|
+
rescue StandardError
|
144
|
+
# TOML parser swallows useful error, so we can't warn about it.
|
145
|
+
# https://github.com/jm/toml/issues/47
|
146
|
+
warn "TOML Exception parsing #{full_path}"
|
147
|
+
{}
|
148
|
+
end
|
149
|
+
|
150
|
+
c ? symbolize_recursive(c) : {}
|
151
|
+
end
|
152
|
+
memoize :parse_yaml
|
125
153
|
|
126
154
|
# Parse JSON frontmatter out of a string
|
127
155
|
# @param [String] content
|
@@ -4,6 +4,7 @@ require 'uri'
|
|
4
4
|
require 'addressable/uri'
|
5
5
|
require 'memoist'
|
6
6
|
require 'tilt'
|
7
|
+
require 'webrick'
|
7
8
|
|
8
9
|
require 'middleman-core/contracts'
|
9
10
|
|
@@ -33,7 +34,7 @@ module Middleman
|
|
33
34
|
Contract String => String
|
34
35
|
def normalize_path(path)
|
35
36
|
# The tr call works around a bug in Ruby's Unicode handling
|
36
|
-
::
|
37
|
+
WEBrick::HTTPUtils.unescape(path).sub(%r{^/}, '').tr('', '')
|
37
38
|
end
|
38
39
|
memoize :normalize_path
|
39
40
|
|
data/middleman-core.gemspec
CHANGED
@@ -16,10 +16,10 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.files = `git ls-files -z`.split("\0")
|
17
17
|
s.test_files = `git ls-files -z -- {fixtures,features}/*`.split("\0")
|
18
18
|
s.require_path = 'lib'
|
19
|
-
s.required_ruby_version = '>= 2.
|
19
|
+
s.required_ruby_version = '>= 2.5.0'
|
20
20
|
|
21
21
|
# Core
|
22
|
-
s.add_dependency('bundler')
|
22
|
+
s.add_dependency('bundler', '~> 2.0')
|
23
23
|
s.add_dependency('rack', ['>= 1.4.5', '< 3'])
|
24
24
|
s.add_dependency('tilt', ['~> 2.0.9'])
|
25
25
|
s.add_dependency('erubis')
|
@@ -27,18 +27,20 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.add_dependency('parallel')
|
28
28
|
s.add_dependency('servolux')
|
29
29
|
s.add_dependency('dotenv')
|
30
|
+
s.add_dependency('toml')
|
31
|
+
s.add_dependency('webrick')
|
30
32
|
|
31
33
|
# Helpers
|
32
|
-
s.add_dependency('activesupport', ['>=
|
33
|
-
s.add_dependency('padrino-helpers', ['~> 0.
|
34
|
-
s.add_dependency("addressable", ["~> 2.
|
34
|
+
s.add_dependency('activesupport', ['>= 6.1', '< 7.0'])
|
35
|
+
s.add_dependency('padrino-helpers', ['~> 0.15.0'])
|
36
|
+
s.add_dependency("addressable", ["~> 2.4"])
|
35
37
|
s.add_dependency('memoist', ['~> 0.14'])
|
36
38
|
|
37
39
|
# Watcher
|
38
40
|
s.add_dependency('listen', ['~> 3.0.0'])
|
39
41
|
|
40
42
|
# i18n
|
41
|
-
s.add_dependency('i18n', ['~>
|
43
|
+
s.add_dependency('i18n', ['~> 1.6.0'])
|
42
44
|
|
43
45
|
# Automatic Image Sizes
|
44
46
|
s.add_dependency('fastimage', ['~> 2.0'])
|
@@ -22,9 +22,7 @@ RSpec.describe Middleman::DnsResolver do
|
|
22
22
|
context 'when hosts resolver can resolve name' do
|
23
23
|
before :each do
|
24
24
|
expect(hosts_resolver).to receive(:getnames).with(unresolved_ip).and_return(resolved_names)
|
25
|
-
|
26
|
-
expect(local_link_resolver).not_to receive(:getnames)
|
27
|
-
end
|
25
|
+
expect(local_link_resolver).not_to receive(:getnames)
|
28
26
|
expect(network_resolver).not_to receive(:getnames)
|
29
27
|
end
|
30
28
|
|
@@ -37,12 +35,8 @@ RSpec.describe Middleman::DnsResolver do
|
|
37
35
|
context 'when local link resolver can resolve name' do
|
38
36
|
before :each do
|
39
37
|
expect(hosts_resolver).to receive(:getnames).with(unresolved_ip).and_return([])
|
40
|
-
|
41
|
-
|
42
|
-
expect(network_resolver).not_to receive(:getnames)
|
43
|
-
else
|
44
|
-
expect(network_resolver).to receive(:getnames).with(unresolved_ip).and_return(resolved_names)
|
45
|
-
end
|
38
|
+
expect(local_link_resolver).to receive(:getnames).with(unresolved_ip).and_return(resolved_names)
|
39
|
+
expect(network_resolver).not_to receive(:getnames)
|
46
40
|
end
|
47
41
|
|
48
42
|
let(:unresolved_ip) { '127.0.0.1' }
|
@@ -54,9 +48,7 @@ RSpec.describe Middleman::DnsResolver do
|
|
54
48
|
context 'when network resolver can resolve name' do
|
55
49
|
before :each do
|
56
50
|
expect(hosts_resolver).to receive(:getnames).with(unresolved_ip).and_return([])
|
57
|
-
|
58
|
-
expect(local_link_resolver).to receive(:getnames).with(unresolved_ip).and_return([])
|
59
|
-
end
|
51
|
+
expect(local_link_resolver).to receive(:getnames).with(unresolved_ip).and_return([])
|
60
52
|
expect(network_resolver).to receive(:getnames).with(unresolved_ip).and_return(resolved_names)
|
61
53
|
end
|
62
54
|
|
@@ -71,9 +63,7 @@ RSpec.describe Middleman::DnsResolver do
|
|
71
63
|
context 'when hosts resolver can resolve name' do
|
72
64
|
before :each do
|
73
65
|
expect(hosts_resolver).to receive(:getaddresses).with(unresolved_ips).and_return(resolved_name)
|
74
|
-
|
75
|
-
expect(local_link_resolver).not_to receive(:getaddresses)
|
76
|
-
end
|
66
|
+
expect(local_link_resolver).not_to receive(:getaddresses)
|
77
67
|
expect(network_resolver).not_to receive(:getaddresses)
|
78
68
|
end
|
79
69
|
|
@@ -86,12 +76,8 @@ RSpec.describe Middleman::DnsResolver do
|
|
86
76
|
context 'when local link resolver can resolve name' do
|
87
77
|
before :each do
|
88
78
|
expect(hosts_resolver).to receive(:getaddresses).with(unresolved_ips).and_return([])
|
89
|
-
|
90
|
-
|
91
|
-
expect(network_resolver).not_to receive(:getaddresses)
|
92
|
-
else
|
93
|
-
expect(network_resolver).to receive(:getaddresses).with(unresolved_ips).and_return(resolved_name)
|
94
|
-
end
|
79
|
+
expect(local_link_resolver).to receive(:getaddresses).with(unresolved_ips).and_return(resolved_name)
|
80
|
+
expect(network_resolver).not_to receive(:getaddresses)
|
95
81
|
end
|
96
82
|
|
97
83
|
let(:unresolved_ips) { '127.0.0.1' }
|
@@ -103,9 +89,7 @@ RSpec.describe Middleman::DnsResolver do
|
|
103
89
|
context 'when network resolver can resolve name' do
|
104
90
|
before :each do
|
105
91
|
expect(hosts_resolver).to receive(:getaddresses).with(unresolved_ips).and_return([])
|
106
|
-
|
107
|
-
expect(local_link_resolver).to receive(:getaddresses).with(unresolved_ips).and_return([])
|
108
|
-
end
|
92
|
+
expect(local_link_resolver).to receive(:getaddresses).with(unresolved_ips).and_return([])
|
109
93
|
expect(network_resolver).to receive(:getaddresses).with(unresolved_ips).and_return(resolved_name)
|
110
94
|
end
|
111
95
|
|
data/spec/spec_helper.rb
CHANGED