middleman 0.9.4 → 0.9.5
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/VERSION +1 -1
- data/bin/mm-server +14 -4
- data/lib/middleman/base.rb +29 -13
- data/lib/middleman/builder.rb +3 -0
- data/lib/middleman/features/cache_buster.rb +18 -9
- data/lib/middleman/features/compass.rb +3 -3
- data/lib/middleman/features/haml.rb +3 -1
- data/lib/middleman/features/relative_assets.rb +5 -2
- data/lib/middleman/features/slickmap.rb +22 -3
- data/lib/middleman/helpers.rb +12 -11
- data/lib/middleman/template/init.rb +10 -14
- data/lib/middleman/template/views/index.haml +3 -0
- data/lib/middleman/template/views/layout.haml +1 -0
- data/middleman.gemspec +6 -2
- data/spec/cache_buster_spec.rb +28 -0
- data/spec/relative_assets_spec.rb +28 -0
- metadata +6 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.5
|
data/bin/mm-server
CHANGED
@@ -1,9 +1,19 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'optparse'
|
4
|
+
|
3
5
|
# Require Middleman
|
4
6
|
require File.join(File.dirname(__FILE__), '..', 'lib', 'middleman')
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
class Middleman::Base
|
9
|
+
set :root, Dir.pwd
|
10
|
+
|
11
|
+
OptionParser.new { |op|
|
12
|
+
op.on('-e env') { |val| set :environment, val.to_sym }
|
13
|
+
op.on('-s server') { |val| set :server, val }
|
14
|
+
op.on('-p port') { |val| set :port, val.to_i }
|
15
|
+
}.parse!(ARGV.dup)
|
16
|
+
|
17
|
+
# Start Middleman
|
18
|
+
run!
|
19
|
+
end
|
data/lib/middleman/base.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
+
# Be nice to other library systems, like the wonderful Rip
|
1
2
|
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
2
|
-
|
3
|
+
|
4
|
+
# We're riding on Sinatra, so let's include it
|
3
5
|
require 'sinatra/base'
|
4
|
-
require 'middleman/helpers'
|
5
6
|
|
7
|
+
# Rack helper for adding mime-types during local preview
|
6
8
|
def mime(ext, type)
|
7
9
|
ext = ".#{ext}" unless ext.to_s[0] == ?.
|
8
10
|
Rack::Mime::MIME_TYPES[ext.to_s] = type
|
@@ -15,14 +17,19 @@ module Middleman
|
|
15
17
|
set :environment, ENV['MM_ENV'] || :development
|
16
18
|
set :supported_formats, []
|
17
19
|
set :index_file, 'index.html'
|
20
|
+
set :js_dir, "javascripts"
|
18
21
|
set :css_dir, "stylesheets"
|
19
22
|
set :images_dir, "images"
|
20
23
|
set :build_dir, "build"
|
24
|
+
set :http_prefix, "/"
|
21
25
|
|
26
|
+
# Features enabled by default
|
22
27
|
enable :compass
|
23
28
|
enable :content_for
|
24
29
|
enable :sprockets
|
25
|
-
|
30
|
+
|
31
|
+
# Features disabled by default
|
32
|
+
disable :slickmap
|
26
33
|
disable :cache_buster
|
27
34
|
disable :minify_css
|
28
35
|
disable :minify_javascript
|
@@ -30,17 +37,14 @@ module Middleman
|
|
30
37
|
disable :markaby
|
31
38
|
disable :maruku
|
32
39
|
|
33
|
-
# include helpers
|
34
|
-
helpers Middleman::Helpers
|
35
|
-
|
36
40
|
# Default build features
|
37
41
|
configure :build do
|
38
42
|
enable :minify_css
|
39
43
|
enable :minify_javascript
|
40
44
|
enable :cache_buster
|
41
|
-
# disable :slickmap
|
42
45
|
end
|
43
46
|
|
47
|
+
# Convenience function to discover if a tempalte exists for the requested renderer (haml, sass, etc)
|
44
48
|
def template_exists?(path, renderer=nil)
|
45
49
|
template_path = path.dup
|
46
50
|
template_path << ".#{renderer}" if renderer
|
@@ -55,21 +59,25 @@ module Middleman
|
|
55
59
|
end
|
56
60
|
include StaticRender
|
57
61
|
|
58
|
-
#
|
62
|
+
# Disable static asset handling in Rack, so we can customize it here
|
59
63
|
disable :static
|
64
|
+
|
65
|
+
# This will match all requests not overridden in the project's init.rb
|
60
66
|
not_found do
|
67
|
+
# Normalize the path and add index if we're looking at a directory
|
61
68
|
path = request.path
|
62
69
|
path << options.index_file if path.match(%r{/$})
|
63
70
|
path.gsub!(%r{^/}, '')
|
64
71
|
|
72
|
+
# If the enabled renderers succeed, return the content, mime-type and an HTTP 200
|
65
73
|
if content = render_path(path)
|
66
74
|
content_type media_type(File.extname(path)), :charset => 'utf-8'
|
67
75
|
status 200
|
68
76
|
content
|
69
77
|
else
|
70
|
-
#
|
78
|
+
# If no template handler renders the template, return the static file if it exists
|
71
79
|
path = File.join(options.public, request.path)
|
72
|
-
if File.exists?(path)
|
80
|
+
if !File.directory?(path) && File.exists?(path)
|
73
81
|
status 200
|
74
82
|
send_file(path)
|
75
83
|
else
|
@@ -78,6 +86,8 @@ module Middleman
|
|
78
86
|
end
|
79
87
|
end
|
80
88
|
|
89
|
+
# Copy, pasted & edited version of the setup in Sinatra.
|
90
|
+
# Basically just changed the app's name and call out feature & configuration init.
|
81
91
|
def self.run!(options={}, &block)
|
82
92
|
init!
|
83
93
|
set options
|
@@ -101,15 +111,21 @@ module Middleman
|
|
101
111
|
puts "== The Middleman is already standing watch on port #{port}!"
|
102
112
|
end
|
103
113
|
|
114
|
+
# Require the features for this project
|
104
115
|
def self.init!
|
105
|
-
#
|
116
|
+
# Built-in helpers
|
117
|
+
require 'middleman/helpers'
|
118
|
+
helpers Middleman::Helpers
|
119
|
+
|
120
|
+
# Haml is required & includes helpers
|
121
|
+
require "middleman/features/haml"
|
122
|
+
|
123
|
+
# Check for and evaluate local configuration
|
106
124
|
local_config = File.join(self.root, "init.rb")
|
107
125
|
if File.exists? local_config
|
108
126
|
puts "== Local config at: #{local_config}"
|
109
127
|
class_eval File.read(local_config)
|
110
128
|
end
|
111
|
-
|
112
|
-
require "middleman/features/haml"
|
113
129
|
|
114
130
|
# loop over enabled feature
|
115
131
|
features_path = File.expand_path("features/*.rb", File.dirname(__FILE__))
|
data/lib/middleman/builder.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
|
+
# Use Rack::Test to access Sinatra without starting up a full server
|
1
2
|
require 'rack/test'
|
2
3
|
|
4
|
+
# Placeholder for any methods the builder needs to abstract to allow feature integration
|
3
5
|
module Middleman
|
4
6
|
class Builder
|
7
|
+
# The default render just requests the page over Rack and writes the response
|
5
8
|
def self.render_file(source, destination)
|
6
9
|
request_path = destination.gsub(File.join(Dir.pwd, Middleman::Base.build_dir), "")
|
7
10
|
browser = Rack::Test::Session.new(Rack::MockSession.new(Middleman::Base))
|
@@ -1,9 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
1
|
+
class Middleman::Base
|
2
|
+
helpers do
|
3
|
+
alias_method :pre_cache_buster_asset_url, :asset_url
|
4
|
+
def asset_url(path, prefix="")
|
5
|
+
path = pre_cache_buster_asset_url(path, prefix)
|
6
|
+
if path.include?("://")
|
7
|
+
path
|
8
|
+
else
|
9
|
+
real_path = File.join(options.public, path)
|
10
|
+
if File.readable?(real_path)
|
11
|
+
path << "?" + File.mtime(real_path).strftime("%s")
|
12
|
+
else
|
13
|
+
$stderr.puts "WARNING: '#{File.basename(path)}' was not found (or cannot be read) in #{File.dirname(real_path)}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -17,9 +17,9 @@ class Middleman::Base
|
|
17
17
|
false
|
18
18
|
end
|
19
19
|
end
|
20
|
-
|
21
|
-
config.http_images_path =
|
22
|
-
config.http_stylesheets_path =
|
20
|
+
|
21
|
+
config.http_images_path = File.join(self.http_prefix, self.images_dir)
|
22
|
+
config.http_stylesheets_path = File.join(self.http_prefix, self.css_dir)
|
23
23
|
config.add_import_path(config.sass_dir)
|
24
24
|
end
|
25
25
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'haml'
|
2
|
+
|
1
3
|
module Middleman
|
2
4
|
module Haml
|
3
5
|
def self.included(base)
|
@@ -70,7 +72,7 @@ module Middleman
|
|
70
72
|
static_version = options.public + request.path_info
|
71
73
|
send_file(static_version) if File.exists? static_version
|
72
74
|
|
73
|
-
location_of_sass_file = options.environment == "build" ? "build" : "
|
75
|
+
location_of_sass_file = options.environment == "build" ? "build" : "public"
|
74
76
|
css_filename = File.join(Dir.pwd, location_of_sass_file) + request.path_info
|
75
77
|
sass(path.to_sym, Compass.sass_engine_options.merge({ :css_filename => css_filename }))
|
76
78
|
rescue Exception => e
|
@@ -8,12 +8,15 @@ class Middleman::Base
|
|
8
8
|
end
|
9
9
|
|
10
10
|
helpers do
|
11
|
-
|
11
|
+
alias_method :pre_relative_asset_url, :asset_url
|
12
|
+
def asset_url(path, prefix="")
|
13
|
+
path = pre_relative_asset_url(path, prefix)
|
12
14
|
if path.include?("://")
|
13
15
|
path
|
14
16
|
else
|
17
|
+
path = path[1,path.length-1] if path[0,1] == '/'
|
15
18
|
request_path = request.path_info.dup
|
16
|
-
request_path <<
|
19
|
+
request_path << options.index_file if path.match(%r{/$})
|
17
20
|
request_path.gsub!(%r{^/}, '')
|
18
21
|
parts = request_path.split('/')
|
19
22
|
|
@@ -1,5 +1,24 @@
|
|
1
1
|
require 'slickmap'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
class Middleman::Base
|
4
|
+
def build_sitemap(&block)
|
5
|
+
# views - stylesheets
|
6
|
+
# public
|
7
|
+
# .select
|
8
|
+
# block.call(this)
|
9
|
+
end
|
10
|
+
|
11
|
+
get '/sitemap.html' do
|
12
|
+
@tree = build_sitemap do |file_name|
|
13
|
+
true
|
14
|
+
end
|
15
|
+
haml :sitemap, :layout => false
|
16
|
+
end
|
17
|
+
|
18
|
+
use_in_file_templates!
|
19
|
+
end
|
20
|
+
|
21
|
+
__END__
|
22
|
+
|
23
|
+
@@ sitemap
|
24
|
+
%div.title Hello world!!!!!
|
data/lib/middleman/helpers.rb
CHANGED
@@ -2,7 +2,7 @@ module Middleman
|
|
2
2
|
module Helpers
|
3
3
|
def page_classes(*additional)
|
4
4
|
path = request.path_info
|
5
|
-
path <<
|
5
|
+
path << options.index_file if path.match(%r{/$})
|
6
6
|
path.gsub!(%r{^/}, '')
|
7
7
|
|
8
8
|
classes = []
|
@@ -20,26 +20,27 @@ module Middleman
|
|
20
20
|
%Q{<a #{params}>#{title}</a>}
|
21
21
|
end
|
22
22
|
|
23
|
-
def asset_url(path)
|
24
|
-
|
23
|
+
def asset_url(path, prefix="")
|
24
|
+
base_url = File.join(options.http_prefix, prefix)
|
25
|
+
path.include?("://") ? path : File.join(base_url, path)
|
25
26
|
end
|
26
27
|
|
27
|
-
def image_tag(path,
|
28
|
-
|
29
|
-
params =
|
28
|
+
def image_tag(path, params={})
|
29
|
+
params[:alt] ||= ""
|
30
|
+
params = params.merge(:src => asset_url(path, options.images_dir))
|
30
31
|
params = params.map { |k,v| %Q{#{k}="#{v}"}}.join(' ')
|
31
32
|
"<img #{params} />"
|
32
33
|
end
|
33
34
|
|
34
|
-
def javascript_include_tag(path,
|
35
|
-
params =
|
35
|
+
def javascript_include_tag(path, params={})
|
36
|
+
params = params.merge(:src => asset_url(path, options.js_dir), :type => "text/javascript")
|
36
37
|
params = params.map { |k,v| %Q{#{k}="#{v}"}}.join(' ')
|
37
38
|
"<script #{params}></script>"
|
38
39
|
end
|
39
40
|
|
40
|
-
def stylesheet_link_tag(path,
|
41
|
-
|
42
|
-
params =
|
41
|
+
def stylesheet_link_tag(path, params={})
|
42
|
+
params[:rel] ||= "stylesheet"
|
43
|
+
params = params.merge(:href => asset_url(path, options.css_dir), :type => "text/css")
|
43
44
|
params = params.map { |k,v| %Q{#{k}="#{v}"}}.join(' ')
|
44
45
|
"<link #{params} />"
|
45
46
|
end
|
@@ -2,21 +2,17 @@
|
|
2
2
|
helpers do
|
3
3
|
end
|
4
4
|
|
5
|
-
#
|
6
|
-
#
|
5
|
+
# Generic configuration
|
6
|
+
# enable :slickmap
|
7
7
|
|
8
8
|
# Build-specific configuration
|
9
9
|
configure :build do
|
10
|
-
Compass
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
# config.asset_cache_buster do
|
19
|
-
# false
|
20
|
-
# end
|
21
|
-
end
|
10
|
+
# For example, change the Compass output style for deployment
|
11
|
+
# enable :minified_css
|
12
|
+
|
13
|
+
# Or use a different image path
|
14
|
+
# set :http_path, "/Content/images/"
|
15
|
+
|
16
|
+
# Disable cache buster
|
17
|
+
# disable :cache_buster
|
22
18
|
end
|
data/middleman.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{middleman}
|
8
|
-
s.version = "0.9.
|
8
|
+
s.version = "0.9.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Thomas Reynolds"]
|
12
|
-
s.date = %q{2009-
|
12
|
+
s.date = %q{2009-10-01}
|
13
13
|
s.email = %q{tdreyno@gmail.com}
|
14
14
|
s.executables = ["mm-init", "mm-build", "mm-server"]
|
15
15
|
s.extra_rdoc_files = [
|
@@ -50,6 +50,7 @@ Gem::Specification.new do |s|
|
|
50
50
|
"lib/middleman/template/views/stylesheets/site.sass",
|
51
51
|
"middleman.gemspec",
|
52
52
|
"spec/builder_spec.rb",
|
53
|
+
"spec/cache_buster_spec.rb",
|
53
54
|
"spec/fixtures/sample/init.rb",
|
54
55
|
"spec/fixtures/sample/public/javascripts/empty-with-include.js",
|
55
56
|
"spec/fixtures/sample/public/javascripts/to-be-included.js",
|
@@ -64,6 +65,7 @@ Gem::Specification.new do |s|
|
|
64
65
|
"spec/fixtures/sample/views/services/index.html.haml",
|
65
66
|
"spec/fixtures/sample/views/stylesheets/site.css.sass",
|
66
67
|
"spec/generator_spec.rb",
|
68
|
+
"spec/relative_assets_spec.rb",
|
67
69
|
"spec/spec_helper.rb"
|
68
70
|
]
|
69
71
|
s.has_rdoc = true
|
@@ -75,8 +77,10 @@ Gem::Specification.new do |s|
|
|
75
77
|
s.summary = %q{A static site generator utilizing Haml, Sass and providing YUI compression and cache busting}
|
76
78
|
s.test_files = [
|
77
79
|
"spec/builder_spec.rb",
|
80
|
+
"spec/cache_buster_spec.rb",
|
78
81
|
"spec/fixtures/sample/init.rb",
|
79
82
|
"spec/generator_spec.rb",
|
83
|
+
"spec/relative_assets_spec.rb",
|
80
84
|
"spec/spec_helper.rb"
|
81
85
|
]
|
82
86
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
+
|
3
|
+
base = ::Middleman::Base
|
4
|
+
base.set :root, File.join(File.dirname(__FILE__), "fixtures", "sample")
|
5
|
+
|
6
|
+
describe "Cache Buster Feature" do
|
7
|
+
before do
|
8
|
+
base.disable :cache_buster
|
9
|
+
base.init!
|
10
|
+
@app = base.new
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should not append query string if off" do
|
14
|
+
@app.asset_url("stylesheets/static.css").should_not include("?")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "Cache Buster Feature" do
|
19
|
+
before do
|
20
|
+
base.enable :cache_buster
|
21
|
+
base.init!
|
22
|
+
@app = base.new
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should append query string if on" do
|
26
|
+
@app.asset_url("stylesheets/static.css").should include("?")
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
+
#
|
3
|
+
# base = ::Middleman::Base
|
4
|
+
# base.set :root, File.join(File.dirname(__FILE__), "fixtures", "sample")
|
5
|
+
#
|
6
|
+
# describe "Relative Assets Feature" do
|
7
|
+
# before do
|
8
|
+
# base.disable :relative_assets
|
9
|
+
# base.init!
|
10
|
+
# @app = base.new
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# it "should not contain ../ if off" do
|
14
|
+
# @app.asset_url("stylesheets/static.css").should_not include("?")
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# describe "Relative Assets Feature" do
|
19
|
+
# before do
|
20
|
+
# base.enable :relative_assets
|
21
|
+
# base.init!
|
22
|
+
# @app = base.new
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# it "should contain ../ if on" do
|
26
|
+
# @app.asset_url("stylesheets/static.css").should include("?")
|
27
|
+
# end
|
28
|
+
# end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: middleman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Reynolds
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-10-01 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -137,6 +137,7 @@ files:
|
|
137
137
|
- lib/middleman/template/views/stylesheets/site.sass
|
138
138
|
- middleman.gemspec
|
139
139
|
- spec/builder_spec.rb
|
140
|
+
- spec/cache_buster_spec.rb
|
140
141
|
- spec/fixtures/sample/init.rb
|
141
142
|
- spec/fixtures/sample/public/javascripts/empty-with-include.js
|
142
143
|
- spec/fixtures/sample/public/javascripts/to-be-included.js
|
@@ -151,6 +152,7 @@ files:
|
|
151
152
|
- spec/fixtures/sample/views/services/index.html.haml
|
152
153
|
- spec/fixtures/sample/views/stylesheets/site.css.sass
|
153
154
|
- spec/generator_spec.rb
|
155
|
+
- spec/relative_assets_spec.rb
|
154
156
|
- spec/spec_helper.rb
|
155
157
|
has_rdoc: true
|
156
158
|
homepage: http://wiki.github.com/tdreyno/middleman
|
@@ -180,6 +182,8 @@ specification_version: 2
|
|
180
182
|
summary: A static site generator utilizing Haml, Sass and providing YUI compression and cache busting
|
181
183
|
test_files:
|
182
184
|
- spec/builder_spec.rb
|
185
|
+
- spec/cache_buster_spec.rb
|
183
186
|
- spec/fixtures/sample/init.rb
|
184
187
|
- spec/generator_spec.rb
|
188
|
+
- spec/relative_assets_spec.rb
|
185
189
|
- spec/spec_helper.rb
|