middleman-core 3.0.11 → 3.0.12.pre.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/middleman-core/cli/build.rb +4 -2
- data/lib/middleman-core/core_extensions/data.rb +2 -2
- data/lib/middleman-core/core_extensions/file_watcher.rb +2 -1
- data/lib/middleman-core/core_extensions/front_matter.rb +11 -3
- data/lib/middleman-core/core_extensions/rendering.rb +19 -2
- data/lib/middleman-core/preview_server.rb +1 -1
- data/lib/middleman-core/renderers/coffee_script.rb +9 -5
- data/lib/middleman-core/sitemap.rb +5 -4
- data/lib/middleman-core/sitemap/store.rb +3 -3
- data/lib/middleman-core/util.rb +19 -2
- data/lib/middleman-core/version.rb +1 -1
- data/middleman-core-x86-mingw32.gemspec +2 -2
- data/middleman-core.gemspec +4 -5
- data/spec/middleman-core/binary_spec.rb +15 -0
- data/spec/middleman-core/binary_spec/middleman +0 -0
- data/spec/middleman-core/binary_spec/middleman.png +0 -0
- data/spec/middleman-core/binary_spec/plain.txt +1 -0
- data/spec/middleman-core/binary_spec/stars.svgz +0 -0
- data/spec/middleman-core/binary_spec/unicode +1 -0
- data/spec/middleman-core/binary_spec/unicode.txt +1 -0
- data/spec/middleman-core/sitemap_spec.rb +0 -0
- data/spec/spec_helper.rb +0 -0
- metadata +20 -30
@@ -65,7 +65,9 @@ module Middleman::Cli
|
|
65
65
|
action GlobAction.new(self, opts)
|
66
66
|
|
67
67
|
if @had_errors && !@debugging
|
68
|
-
|
68
|
+
cmd = "middleman build --verbose"
|
69
|
+
cmd = "bundle exec '#{cmd}'" if defined?(Bundler)
|
70
|
+
self.shell.say "There were errors during this build, re-run with `#{cmd}` to see the full exception."
|
69
71
|
end
|
70
72
|
|
71
73
|
exit(1) if @had_errors
|
@@ -231,7 +233,7 @@ module Middleman::Cli
|
|
231
233
|
|
232
234
|
paths = ::Middleman::Util.all_files_under(@destination)
|
233
235
|
@cleaning_queue += paths.select do |path|
|
234
|
-
|
236
|
+
path.to_s !~ /\/\./ || path.to_s =~ /\.(htaccess|htpasswd)/
|
235
237
|
end
|
236
238
|
end
|
237
239
|
|
@@ -25,11 +25,11 @@ module Middleman
|
|
25
25
|
# parsing config.rb
|
26
26
|
def initialize
|
27
27
|
self.files.changed DataStore.matcher do |file|
|
28
|
-
self.data.touch_file(file) if file.
|
28
|
+
self.data.touch_file(file) if file.start_with?("#{self.data_dir}/")
|
29
29
|
end
|
30
30
|
|
31
31
|
self.files.deleted DataStore.matcher do |file|
|
32
|
-
self.data.remove_file(file) if file.
|
32
|
+
self.data.remove_file(file) if file.start_with?("#{self.data_dir}/")
|
33
33
|
end
|
34
34
|
|
35
35
|
super
|
@@ -145,7 +145,8 @@ module Middleman
|
|
145
145
|
# @param [Pathname] path
|
146
146
|
# @return [Boolean]
|
147
147
|
def ignored?(path)
|
148
|
-
|
148
|
+
path = path.to_s
|
149
|
+
IGNORE_LIST.any? { |r| path =~ r }
|
149
150
|
end
|
150
151
|
|
151
152
|
# Notify callbacks for a file given an array of callbacks
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
1
3
|
# Extensions namespace
|
2
4
|
module Middleman::CoreExtensions
|
3
5
|
|
@@ -70,8 +72,9 @@ module Middleman::CoreExtensions
|
|
70
72
|
@cache.delete(path)
|
71
73
|
end
|
72
74
|
|
73
|
-
YAML_ERRORS = [
|
75
|
+
YAML_ERRORS = [ StandardError ]
|
74
76
|
|
77
|
+
# https://github.com/tenderlove/psych/issues/23
|
75
78
|
if defined?(Psych) && defined?(Psych::SyntaxError)
|
76
79
|
YAML_ERRORS << Psych::SyntaxError
|
77
80
|
end
|
@@ -127,7 +130,12 @@ module Middleman::CoreExtensions
|
|
127
130
|
# @param [String] path
|
128
131
|
# @return [Array<Thor::CoreExt::HashWithIndifferentAccess, String>]
|
129
132
|
def frontmatter_and_content(path)
|
130
|
-
full_path =
|
133
|
+
full_path = if Pathname(path).relative?
|
134
|
+
File.join(@app.source_dir, path)
|
135
|
+
else
|
136
|
+
path
|
137
|
+
end
|
138
|
+
|
131
139
|
data = {}
|
132
140
|
content = nil
|
133
141
|
|
@@ -155,7 +163,7 @@ module Middleman::CoreExtensions
|
|
155
163
|
end
|
156
164
|
|
157
165
|
def normalize_path(path)
|
158
|
-
path.sub(@app.source_dir, "")
|
166
|
+
path.sub(%r{^#{@app.source_dir}\/}, "")
|
159
167
|
end
|
160
168
|
|
161
169
|
# Update the main sitemap resource list
|
@@ -19,6 +19,9 @@ module Middleman
|
|
19
19
|
# Include methods
|
20
20
|
app.send :include, InstanceMethods
|
21
21
|
|
22
|
+
app.define_hook :before_render
|
23
|
+
app.define_hook :after_render
|
24
|
+
|
22
25
|
# Activate custom renderers
|
23
26
|
require "middleman-core/renderers/erb"
|
24
27
|
app.register Middleman::Renderers::ERb
|
@@ -243,13 +246,27 @@ module Middleman
|
|
243
246
|
options = opts.merge(options_for_ext(extension))
|
244
247
|
options[:outvar] ||= '@_out_buf'
|
245
248
|
|
249
|
+
template_class = Tilt[path]
|
250
|
+
# Allow hooks to manipulate the template before render
|
251
|
+
self.class.callbacks_for_hook(:before_render).each do |callback|
|
252
|
+
newbody = callback.call(body, path, locs, template_class)
|
253
|
+
body = newbody if newbody # Allow the callback to return nil to skip it
|
254
|
+
end
|
255
|
+
|
246
256
|
# Read compiled template from disk or cache
|
247
257
|
template = cache.fetch(:compiled_template, options, body) do
|
248
258
|
::Tilt.new(path, 1, options) { body }
|
249
259
|
end
|
250
260
|
|
251
261
|
# Render using Tilt
|
252
|
-
template.render(context, locs, &block)
|
262
|
+
content = template.render(context, locs, &block)
|
263
|
+
|
264
|
+
# Allow hooks to manipulate the result after render
|
265
|
+
self.class.callbacks_for_hook(:after_render).each do |callback|
|
266
|
+
content = callback.call(content, path, locs, template_class)
|
267
|
+
end
|
268
|
+
|
269
|
+
return content
|
253
270
|
ensure
|
254
271
|
# Reset stored buffer
|
255
272
|
@_out_buf = _buf_was
|
@@ -402,7 +419,7 @@ module Middleman
|
|
402
419
|
# Find the path by searching or using the cache
|
403
420
|
request_path = request_path.to_s
|
404
421
|
cache.fetch(:resolve_template, request_path, options) do
|
405
|
-
relative_path =
|
422
|
+
relative_path = Util.strip_leading_slash(request_path)
|
406
423
|
on_disk_path = File.expand_path(relative_path, self.source_dir)
|
407
424
|
|
408
425
|
# By default, any engine will do
|
@@ -11,25 +11,29 @@ module Middleman
|
|
11
11
|
class << self
|
12
12
|
# Once registered
|
13
13
|
def registered(app)
|
14
|
-
app.before_configuration do
|
15
|
-
template_extensions :coffee => :js
|
16
|
-
end
|
17
|
-
|
18
14
|
# Tell Tilt to use it as well (for inline scss blocks)
|
19
15
|
::Tilt.register 'coffee', DebuggingCoffeeScriptTemplate
|
20
16
|
::Tilt.prefer(DebuggingCoffeeScriptTemplate)
|
17
|
+
|
18
|
+
app.before_configuration do
|
19
|
+
template_extensions :coffee => :js
|
20
|
+
DebuggingCoffeeScriptTemplate.middleman_app = self
|
21
|
+
end
|
21
22
|
end
|
22
23
|
alias :included :registered
|
23
24
|
end
|
24
25
|
|
25
26
|
# A Template for Tilt which outputs debug messages
|
26
27
|
class DebuggingCoffeeScriptTemplate < ::Tilt::CoffeeScriptTemplate
|
28
|
+
# Make the current Middleman app accessible to the template
|
29
|
+
cattr_accessor :middleman_app
|
30
|
+
|
27
31
|
# Add exception messaging
|
28
32
|
# @param [Class] context
|
29
33
|
# @param [Hash] locals
|
30
34
|
# @return [String]
|
31
35
|
def evaluate(context, locals, &block)
|
32
|
-
return super if
|
36
|
+
return super if middleman_app.build?
|
33
37
|
|
34
38
|
begin
|
35
39
|
super
|
@@ -25,18 +25,18 @@ module Middleman
|
|
25
25
|
# Setup callbacks which can exclude paths from the sitemap
|
26
26
|
app.set :ignored_sitemap_matchers, {
|
27
27
|
# dotfiles and folders in the root
|
28
|
-
:root_dotfiles => proc { |file| file.
|
28
|
+
:root_dotfiles => proc { |file| file.start_with?('.') },
|
29
29
|
|
30
30
|
# Files starting with an dot, but not .htaccess
|
31
31
|
:source_dotfiles => proc { |file|
|
32
|
-
file
|
32
|
+
file =~ %r{/\.} && file !~ %r{/\.(htaccess|htpasswd)}
|
33
33
|
},
|
34
34
|
|
35
35
|
# Files starting with an underscore, but not a double-underscore
|
36
|
-
:partials => proc { |file| file
|
36
|
+
:partials => proc { |file| file =~ %r{/_} && file !~ %r{/__} },
|
37
37
|
|
38
38
|
:layout => proc { |file|
|
39
|
-
file.
|
39
|
+
file.start_with?('source/layout.') || file.start_with?('source/layouts/')
|
40
40
|
}
|
41
41
|
}
|
42
42
|
|
@@ -70,6 +70,7 @@ module Middleman
|
|
70
70
|
# Get the resource object for the current path
|
71
71
|
# @return [Middleman::Sitemap::Resource]
|
72
72
|
def current_resource
|
73
|
+
return nil unless current_path
|
73
74
|
sitemap.find_resource_by_destination_path(current_path)
|
74
75
|
end
|
75
76
|
|
@@ -108,7 +108,7 @@ module Middleman
|
|
108
108
|
blank_metadata = { :options => {}, :locals => {}, :page => {}, :blocks => [] }
|
109
109
|
|
110
110
|
provides_metadata.inject(blank_metadata) do |result, (callback, matcher)|
|
111
|
-
next result if
|
111
|
+
next result if matcher && !source_file.match(matcher)
|
112
112
|
|
113
113
|
metadata = callback.call(source_file)
|
114
114
|
|
@@ -146,9 +146,9 @@ module Middleman
|
|
146
146
|
@_cached_metadata[request_path] = provides_metadata_for_path.inject(blank_metadata) do |result, (callback, matcher)|
|
147
147
|
case matcher
|
148
148
|
when Regexp
|
149
|
-
next result unless request_path
|
149
|
+
next result unless request_path =~ matcher
|
150
150
|
when String
|
151
|
-
next result unless File.fnmatch("/" +
|
151
|
+
next result unless File.fnmatch("/" + Util.strip_leading_slash(matcher), "/#{request_path}")
|
152
152
|
end
|
153
153
|
|
154
154
|
metadata = callback.call(request_path)
|
data/lib/middleman-core/util.rb
CHANGED
@@ -10,6 +10,9 @@ require "thor"
|
|
10
10
|
# Core Pathname library used for traversal
|
11
11
|
require "pathname"
|
12
12
|
|
13
|
+
require "tilt"
|
14
|
+
require "rack/mime"
|
15
|
+
|
13
16
|
module Middleman
|
14
17
|
|
15
18
|
module Util
|
@@ -20,11 +23,19 @@ module Middleman
|
|
20
23
|
# @return [Boolean]
|
21
24
|
def self.binary?(filename)
|
22
25
|
ext = File.extname(filename)
|
26
|
+
return true if ext == '.svgz'
|
23
27
|
return false if Tilt.registered?(ext.sub('.',''))
|
24
28
|
|
25
29
|
ext = ".#{ext}" unless ext.to_s[0] == ?.
|
26
30
|
mime = ::Rack::Mime.mime_type(ext, nil)
|
27
|
-
|
31
|
+
unless mime
|
32
|
+
binary_bytes = [0, 1, 2, 3, 4, 5, 6, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31]
|
33
|
+
s = File.read(filename, 4096) || ''
|
34
|
+
s.each_byte do |c|
|
35
|
+
return true if binary_bytes.include?(c)
|
36
|
+
end
|
37
|
+
return false
|
38
|
+
end
|
28
39
|
return false if mime.start_with?('text/')
|
29
40
|
return false if mime.include?('xml')
|
30
41
|
return false if mime.include?('json')
|
@@ -76,7 +87,13 @@ module Middleman
|
|
76
87
|
# @return [String]
|
77
88
|
def self.normalize_path(path)
|
78
89
|
# The tr call works around a bug in Ruby's Unicode handling
|
79
|
-
path.sub(
|
90
|
+
path.sub(%r{^/}, "").tr('','')
|
91
|
+
end
|
92
|
+
|
93
|
+
# This is a separate method from normalize_path in case we
|
94
|
+
# change how we normalize paths
|
95
|
+
def self.strip_leading_slash(path)
|
96
|
+
path.sub(%r{^/}, "")
|
80
97
|
end
|
81
98
|
|
82
99
|
# Extract the text of a Rack response as a string.
|
@@ -33,6 +33,6 @@ Gem::Specification.new do |s|
|
|
33
33
|
s.add_dependency("activesupport", ["~> 3.2.6"])
|
34
34
|
|
35
35
|
# Watcher
|
36
|
-
s.add_dependency("listen", ["~> 0.
|
37
|
-
s.add_dependency("wdm", ["~> 0.0
|
36
|
+
s.add_dependency("listen", ["~> 0.7.2"])
|
37
|
+
s.add_dependency("wdm", ["~> 0.1.0"]) # Windows
|
38
38
|
end
|
data/middleman-core.gemspec
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
require "middleman-core/version"
|
2
|
+
require File.expand_path("../lib/middleman-core/version", __FILE__)
|
4
3
|
|
5
4
|
Gem::Specification.new do |s|
|
6
5
|
s.name = "middleman-core"
|
@@ -33,7 +32,7 @@ Gem::Specification.new do |s|
|
|
33
32
|
s.add_dependency("activesupport", ["~> 3.2.6"])
|
34
33
|
|
35
34
|
# Watcher
|
36
|
-
s.add_dependency("listen", ["~> 0.
|
37
|
-
s.add_dependency("rb-fsevent", ["~> 0.9.
|
38
|
-
s.add_dependency("rb-inotify", ["~> 0.
|
35
|
+
s.add_dependency("listen", ["~> 0.7.2"])
|
36
|
+
s.add_dependency("rb-fsevent", ["~> 0.9.3"]) # OS X
|
37
|
+
# s.add_dependency("rb-inotify", ["~> 0.9.0"]) # Linux
|
39
38
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'middleman-core/util'
|
2
|
+
|
3
|
+
describe "Middleman::Util#binary?" do
|
4
|
+
%w(plain.txt unicode.txt unicode).each do |file|
|
5
|
+
it "recognizes #{file} as not binary" do
|
6
|
+
Middleman::Util.binary?(File.join(File.dirname(__FILE__), "binary_spec/#{file}")).should be_false
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
%w(middleman.png middleman stars.svgz).each do |file|
|
11
|
+
it "recognizes #{file} as binary" do
|
12
|
+
Middleman::Util.binary?(File.join(File.dirname(__FILE__), "binary_spec/#{file}")).should be_true
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
Some plain text
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
明日がある。
|
@@ -0,0 +1 @@
|
|
1
|
+
明日がある。
|
File without changes
|
data/spec/spec_helper.rb
ADDED
File without changes
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: middleman-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
5
|
-
prerelease:
|
4
|
+
version: 3.0.12.pre.1
|
5
|
+
prerelease: 7
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Thomas Reynolds
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-02-20 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -115,7 +115,7 @@ dependencies:
|
|
115
115
|
requirements:
|
116
116
|
- - ~>
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version: 0.
|
118
|
+
version: 0.7.2
|
119
119
|
type: :runtime
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -123,7 +123,7 @@ dependencies:
|
|
123
123
|
requirements:
|
124
124
|
- - ~>
|
125
125
|
- !ruby/object:Gem::Version
|
126
|
-
version: 0.
|
126
|
+
version: 0.7.2
|
127
127
|
- !ruby/object:Gem::Dependency
|
128
128
|
name: rb-fsevent
|
129
129
|
requirement: !ruby/object:Gem::Requirement
|
@@ -131,7 +131,7 @@ dependencies:
|
|
131
131
|
requirements:
|
132
132
|
- - ~>
|
133
133
|
- !ruby/object:Gem::Version
|
134
|
-
version: 0.9.
|
134
|
+
version: 0.9.3
|
135
135
|
type: :runtime
|
136
136
|
prerelease: false
|
137
137
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -139,23 +139,7 @@ dependencies:
|
|
139
139
|
requirements:
|
140
140
|
- - ~>
|
141
141
|
- !ruby/object:Gem::Version
|
142
|
-
version: 0.9.
|
143
|
-
- !ruby/object:Gem::Dependency
|
144
|
-
name: rb-inotify
|
145
|
-
requirement: !ruby/object:Gem::Requirement
|
146
|
-
none: false
|
147
|
-
requirements:
|
148
|
-
- - ~>
|
149
|
-
- !ruby/object:Gem::Version
|
150
|
-
version: 0.8.8
|
151
|
-
type: :runtime
|
152
|
-
prerelease: false
|
153
|
-
version_requirements: !ruby/object:Gem::Requirement
|
154
|
-
none: false
|
155
|
-
requirements:
|
156
|
-
- - ~>
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
version: 0.8.8
|
142
|
+
version: 0.9.3
|
159
143
|
description: A static site generator. Provides dozens of templating languages (Haml,
|
160
144
|
Sass, Compass, Slim, CoffeeScript, and more). Makes minification, compression, cache
|
161
145
|
busting, Yaml data (and more) an easy part of your development cycle.
|
@@ -591,6 +575,15 @@ files:
|
|
591
575
|
- lib/middleman/rack.rb
|
592
576
|
- middleman-core-x86-mingw32.gemspec
|
593
577
|
- middleman-core.gemspec
|
578
|
+
- spec/middleman-core/binary_spec.rb
|
579
|
+
- spec/middleman-core/binary_spec/middleman
|
580
|
+
- spec/middleman-core/binary_spec/middleman.png
|
581
|
+
- spec/middleman-core/binary_spec/plain.txt
|
582
|
+
- spec/middleman-core/binary_spec/stars.svgz
|
583
|
+
- spec/middleman-core/binary_spec/unicode
|
584
|
+
- spec/middleman-core/binary_spec/unicode.txt
|
585
|
+
- spec/middleman-core/sitemap_spec.rb
|
586
|
+
- spec/spec_helper.rb
|
594
587
|
homepage: http://middlemanapp.com
|
595
588
|
licenses:
|
596
589
|
- MIT
|
@@ -606,19 +599,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
606
599
|
version: '0'
|
607
600
|
segments:
|
608
601
|
- 0
|
609
|
-
hash:
|
602
|
+
hash: -3461050941848331354
|
610
603
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
611
604
|
none: false
|
612
605
|
requirements:
|
613
|
-
- - ! '
|
606
|
+
- - ! '>'
|
614
607
|
- !ruby/object:Gem::Version
|
615
|
-
version:
|
616
|
-
segments:
|
617
|
-
- 0
|
618
|
-
hash: 714789105575917864
|
608
|
+
version: 1.3.1
|
619
609
|
requirements: []
|
620
610
|
rubyforge_project:
|
621
|
-
rubygems_version: 1.8.
|
611
|
+
rubygems_version: 1.8.23
|
622
612
|
signing_key:
|
623
613
|
specification_version: 3
|
624
614
|
summary: Hand-crafted frontend development
|