middleman 0.9.0.pre → 0.9.3
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/.document +0 -0
- data/.gitignore +2 -3
- data/LICENSE +0 -0
- data/README.rdoc +0 -4
- data/Rakefile +36 -26
- data/VERSION +1 -1
- data/bin/mm-build +54 -3
- data/bin/mm-init +8 -11
- data/bin/mm-server +4 -56
- data/deps.rip +7 -0
- data/lib/middleman.rb +1 -5
- data/lib/middleman/base.rb +98 -120
- data/lib/middleman/builder.rb +8 -55
- data/lib/middleman/features/cache_buster.rb +7 -41
- data/lib/middleman/features/compass.rb +28 -0
- data/lib/middleman/features/content_for.rb +9 -0
- data/lib/middleman/features/growl.rb +2 -0
- data/lib/middleman/features/haml.rb +128 -0
- data/lib/middleman/features/markaby.rb +43 -0
- data/lib/middleman/features/maruku.rb +42 -0
- data/lib/middleman/features/minify_css.rb +2 -9
- data/lib/middleman/features/minify_javascript.rb +24 -13
- data/lib/middleman/features/relative_assets.rb +14 -21
- data/lib/middleman/features/slickmap.rb +4 -117
- data/lib/middleman/features/sprockets+ruby19.rb +29 -0
- data/lib/middleman/features/sprockets.rb +29 -0
- data/lib/middleman/helpers.rb +47 -0
- data/lib/middleman/template/init.rb +22 -0
- data/lib/middleman/template/views/index.haml +1 -0
- data/lib/middleman/template/views/layout.haml +4 -11
- data/lib/middleman/template/views/stylesheets/site.sass +1 -0
- data/middleman.gemspec +53 -109
- data/spec/builder_spec.rb +19 -16
- data/spec/fixtures/sample/init.rb +2 -28
- data/spec/fixtures/sample/public/javascripts/empty-with-include.js +1 -0
- data/spec/fixtures/sample/public/javascripts/to-be-included.js +1 -0
- data/spec/fixtures/sample/public/static.html +0 -0
- data/spec/fixtures/sample/public/stylesheets/static.css +0 -0
- data/spec/fixtures/sample/views/_partial.haml +0 -0
- data/spec/fixtures/sample/views/index.html.haml +0 -0
- data/spec/fixtures/sample/views/inline-js.html.haml +0 -0
- data/spec/fixtures/sample/views/layout.haml +1 -1
- data/spec/fixtures/sample/views/markaby.html.mab +5 -0
- data/spec/fixtures/sample/views/maruku.html.maruku +0 -0
- data/spec/fixtures/sample/views/services/index.html.haml +0 -0
- data/spec/fixtures/sample/views/stylesheets/site.css.sass +1 -1
- data/spec/generator_spec.rb +34 -0
- data/spec/spec_helper.rb +5 -3
- metadata +72 -288
- data/features/asset_host.feature +0 -12
- data/features/automatic_image_sizes.feature +0 -14
- data/features/cache_buster.feature +0 -22
- data/features/generator.feature +0 -8
- data/features/minify_css.feature +0 -22
- data/features/minify_javascript.feature +0 -12
- data/features/page_alias_and_layouts.feature +0 -12
- data/features/relative_assets.feature +0 -12
- data/features/step_definitions/asset_host_steps.rb +0 -7
- data/features/step_definitions/env.rb +0 -3
- data/features/step_definitions/generator_steps.rb +0 -24
- data/features/step_definitions/middleman_steps.rb +0 -28
- data/features/step_definitions/page_layout_steps.rb +0 -13
- data/lib/middleman/assets.rb +0 -33
- data/lib/middleman/config.ru +0 -2
- data/lib/middleman/features.rb +0 -39
- data/lib/middleman/features/asset_host.rb +0 -21
- data/lib/middleman/features/automatic_image_sizes.rb +0 -31
- data/lib/middleman/features/automatic_image_sizes/fastimage.rb +0 -282
- data/lib/middleman/features/default_helpers.rb +0 -68
- data/lib/middleman/features/livereload.rb +0 -19
- data/lib/middleman/features/minify_javascript/rack.rb +0 -31
- data/lib/middleman/features/smush_pngs.rb +0 -38
- data/lib/middleman/features/ugly_haml.rb +0 -7
- data/lib/middleman/renderers.rb +0 -26
- data/lib/middleman/renderers/coffee.rb +0 -28
- data/lib/middleman/renderers/haml.rb +0 -47
- data/lib/middleman/renderers/sass.rb +0 -67
- data/lib/middleman/template/init.rbt +0 -57
- data/lib/middleman/template/views/index.html.haml +0 -4
- data/lib/middleman/template/views/stylesheets/site.css.sass +0 -27
- data/lib/middleman/templater+dynamic_renderer.rb +0 -26
- data/spec/fixtures/sample/public/images/blank.gif +0 -0
- data/spec/fixtures/sample/public/stylesheets/auto-css.css +0 -0
- data/spec/fixtures/sample/public/stylesheets/sub1/auto-css.css +0 -0
- data/spec/fixtures/sample/public/stylesheets/sub1/sub2/auto-css.css +0 -0
- data/spec/fixtures/sample/views/asset_host.html.haml +0 -1
- data/spec/fixtures/sample/views/auto-css.html.haml +0 -1
- data/spec/fixtures/sample/views/auto-image-sizes.html.haml +0 -1
- data/spec/fixtures/sample/views/cache-buster.html.haml +0 -2
- data/spec/fixtures/sample/views/custom-layout.html.haml +0 -1
- data/spec/fixtures/sample/views/custom.haml +0 -5
- data/spec/fixtures/sample/views/inline-css.html.haml +0 -4
- data/spec/fixtures/sample/views/page-classes.html.haml +0 -1
- data/spec/fixtures/sample/views/stylesheets/asset_host.css.sass +0 -3
- data/spec/fixtures/sample/views/stylesheets/relative_assets.css.sass +0 -3
- data/spec/fixtures/sample/views/stylesheets/site_scss.css.scss +0 -1
- data/spec/fixtures/sample/views/stylesheets/test_less.css.less +0 -5
- data/spec/helpers_spec.rb +0 -43
data/.document
CHANGED
|
File without changes
|
data/.gitignore
CHANGED
data/LICENSE
CHANGED
|
File without changes
|
data/README.rdoc
CHANGED
|
@@ -2,10 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
The Middleman is ever-vigilant against tag-soup, unreadable CSS and repetition. He stands-watch over your Haml and Sass producing only the cleanest and efficient markup.
|
|
4
4
|
|
|
5
|
-
== Getting Started
|
|
6
|
-
|
|
7
|
-
Everything you need to know is on the wiki: http://wiki.github.com/tdreyno/middleman
|
|
8
|
-
|
|
9
5
|
== Copyright
|
|
10
6
|
|
|
11
7
|
Copyright (c) 2009 Thomas Reynolds. See LICENSE for details.
|
data/Rakefile
CHANGED
|
@@ -1,36 +1,29 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'rubygems'
|
|
2
2
|
require 'rake'
|
|
3
|
-
require 'spec/rake/spectask'
|
|
4
|
-
require 'cucumber/rake/task'
|
|
5
3
|
|
|
6
4
|
begin
|
|
7
5
|
require 'jeweler'
|
|
8
6
|
Jeweler::Tasks.new do |gem|
|
|
9
7
|
gem.name = "middleman"
|
|
10
|
-
gem.summary = %Q{A static site generator utilizing Haml
|
|
8
|
+
gem.summary = %Q{A static site generator utilizing Haml and Sass}
|
|
11
9
|
gem.email = "tdreyno@gmail.com"
|
|
12
|
-
gem.homepage = "http://
|
|
10
|
+
gem.homepage = "http://github.com/tdreyno/middleman"
|
|
13
11
|
gem.authors = ["Thomas Reynolds"]
|
|
14
12
|
gem.rubyforge_project = "middleman"
|
|
13
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
|
15
14
|
gem.executables = %w(mm-init mm-build mm-server)
|
|
16
|
-
gem.add_dependency("
|
|
17
|
-
gem.add_dependency("
|
|
18
|
-
gem.add_dependency("
|
|
19
|
-
gem.add_dependency("
|
|
20
|
-
gem.add_dependency("
|
|
21
|
-
gem.add_dependency("
|
|
22
|
-
gem.add_dependency("
|
|
23
|
-
gem.add_dependency("
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
gem.add_dependency("compass-slickmap", "~>0.3.0")
|
|
29
|
-
# gem.add_dependency("livereload", "~>1.4.0")
|
|
30
|
-
|
|
31
|
-
gem.add_development_dependency("rspec")
|
|
32
|
-
gem.add_development_dependency("cucumber")
|
|
33
|
-
gem.add_development_dependency("jeweler")
|
|
15
|
+
gem.add_dependency("templater")
|
|
16
|
+
gem.add_dependency("sprockets")
|
|
17
|
+
gem.add_dependency("sinatra")
|
|
18
|
+
gem.add_dependency("sinatra-content-for")
|
|
19
|
+
gem.add_dependency("rack-test")
|
|
20
|
+
gem.add_dependency("yui-compressor")
|
|
21
|
+
gem.add_dependency("haml", ">=2.1.0")
|
|
22
|
+
gem.add_dependency("chriseppstein-compass")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
Jeweler::RubyforgeTasks.new do |rubyforge|
|
|
26
|
+
rubyforge.doc_task = "rdoc"
|
|
34
27
|
end
|
|
35
28
|
|
|
36
29
|
Jeweler::GemcutterTasks.new
|
|
@@ -38,15 +31,32 @@ rescue LoadError
|
|
|
38
31
|
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
|
39
32
|
end
|
|
40
33
|
|
|
34
|
+
require 'spec/rake/spectask'
|
|
41
35
|
Spec::Rake::SpecTask.new(:spec) do |spec|
|
|
42
36
|
spec.libs << 'lib' << 'spec'
|
|
43
37
|
spec.spec_files = FileList['spec/**/*_spec.rb']
|
|
44
38
|
end
|
|
45
39
|
|
|
46
|
-
|
|
47
|
-
|
|
40
|
+
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
|
41
|
+
spec.libs << 'lib' << 'spec'
|
|
42
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
|
43
|
+
spec.rcov = true
|
|
48
44
|
end
|
|
49
45
|
|
|
50
46
|
task :spec => :check_dependencies
|
|
51
47
|
|
|
52
|
-
task :default =>
|
|
48
|
+
task :default => :spec
|
|
49
|
+
|
|
50
|
+
require 'rake/rdoctask'
|
|
51
|
+
Rake::RDocTask.new do |rdoc|
|
|
52
|
+
if File.exist?('VERSION')
|
|
53
|
+
version = File.read('VERSION')
|
|
54
|
+
else
|
|
55
|
+
version = ""
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
rdoc.rdoc_dir = 'rdoc'
|
|
59
|
+
rdoc.title = "middleman #{version}"
|
|
60
|
+
rdoc.rdoc_files.include('README*')
|
|
61
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
62
|
+
end
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.9.
|
|
1
|
+
0.9.3
|
data/bin/mm-build
CHANGED
|
@@ -1,12 +1,63 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
|
+
require 'templater'
|
|
4
|
+
|
|
3
5
|
ENV['MM_ENV'] = "build"
|
|
4
6
|
|
|
5
7
|
# Require app
|
|
6
8
|
require File.join(File.dirname(__FILE__), "..", "lib", "middleman")
|
|
7
9
|
require 'middleman/builder'
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
Middleman::Base.init!
|
|
12
|
+
|
|
13
|
+
module Generators
|
|
14
|
+
extend Templater::Manifold
|
|
15
|
+
desc "Build a staticmatic site"
|
|
16
|
+
|
|
17
|
+
class Builder < Templater::Generator
|
|
18
|
+
# Define source and desintation
|
|
19
|
+
def self.source_root; Dir.pwd; end
|
|
20
|
+
def destination_root; File.join(Dir.pwd, Middleman::Base.build_dir); end
|
|
21
|
+
|
|
22
|
+
# Override template to ask middleman for the correct extension to output
|
|
23
|
+
def self.template(name, *args, &block)
|
|
24
|
+
return if args[0].include?('layout')
|
|
25
|
+
|
|
26
|
+
args.first.split('/').each do |part|
|
|
27
|
+
return if part[0,1] == '_'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
if (args[0] === args[1])
|
|
31
|
+
args[1] = args[0].gsub("#{File.basename(Middleman::Base.views)}/", "")
|
|
32
|
+
.gsub("#{File.basename(Middleman::Base.public)}/", "")
|
|
33
|
+
if File.extname(args[1]) != ".js"
|
|
34
|
+
args[1] = args[1].gsub!(File.extname(args[1]), "") if File.basename(args[1]).split('.').length > 2
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
super(name, *args, &block)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.file(name, *args, &block)
|
|
42
|
+
if (args[0] === args[1])
|
|
43
|
+
args[1] = args[0].gsub("#{File.basename(Middleman::Base.views)}/", "")
|
|
44
|
+
.gsub("#{File.basename(Middleman::Base.public)}/", "")
|
|
45
|
+
end
|
|
46
|
+
super(name, *args, &block)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
glob! File.basename(Middleman::Base.public), Middleman::Base.supported_formats
|
|
50
|
+
glob! File.basename(Middleman::Base.views), Middleman::Base.supported_formats
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
add :build, Builder
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Monkey-patch to use a dynamic renderer
|
|
57
|
+
class Templater::Actions::Template
|
|
58
|
+
def render
|
|
59
|
+
::Middleman::Builder.render_file(source, destination)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
11
62
|
|
|
12
|
-
|
|
63
|
+
Generators.run_cli(Dir.pwd, 'mm-build', 1, %w(build --force).concat(ARGV))
|
data/bin/mm-init
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
require File.join(File.dirname(File.dirname(__FILE__)), 'lib', 'middleman')
|
|
3
2
|
require 'templater'
|
|
4
3
|
|
|
5
4
|
module Generators
|
|
@@ -7,12 +6,11 @@ module Generators
|
|
|
7
6
|
desc "Generator for streamlining staticmatic"
|
|
8
7
|
|
|
9
8
|
class NewSite < Templater::Generator
|
|
10
|
-
desc "Creates a new
|
|
9
|
+
desc "Creates a new staticmatic scaffold."
|
|
11
10
|
first_argument :location, :required => true, :desc => "Project location"
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
option :images_dir, :desc => 'The path to the image files'
|
|
11
|
+
|
|
12
|
+
# css_dir
|
|
13
|
+
# images_dir
|
|
16
14
|
|
|
17
15
|
def destination_root
|
|
18
16
|
File.expand_path(location)
|
|
@@ -22,13 +20,12 @@ module Generators
|
|
|
22
20
|
File.join(File.dirname(__FILE__), '..', 'lib', 'middleman', 'template')
|
|
23
21
|
end
|
|
24
22
|
|
|
25
|
-
|
|
23
|
+
file :init, "init.rb"
|
|
26
24
|
glob! :views
|
|
27
25
|
glob! :public
|
|
28
|
-
|
|
29
|
-
empty_directory :
|
|
30
|
-
empty_directory :
|
|
31
|
-
empty_directory :images, "public/images"#, File.join("public", images_dir)
|
|
26
|
+
empty_directory :stylesheets, "public/stylesheets"
|
|
27
|
+
empty_directory :javascripts, "public/javascripts"
|
|
28
|
+
empty_directory :images, "public/images"
|
|
32
29
|
end
|
|
33
30
|
|
|
34
31
|
add :setup, NewSite
|
data/bin/mm-server
CHANGED
|
@@ -1,61 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
|
-
# Non-blocking site rebuilding
|
|
4
|
-
trap("TSTP") do
|
|
5
|
-
fork do
|
|
6
|
-
require "open3"
|
|
7
|
-
first_run = true
|
|
8
|
-
Open3.popen3(%Q{cd "#{Dir.pwd}" && #{File.join(File.dirname(__FILE__), "mm-build")} | grep FORCED}) do |stdin, stdout, stderr|
|
|
9
|
-
puts "\n== Building the site..."
|
|
10
|
-
stdout.readlines.each do |l|
|
|
11
|
-
puts "== Updated:" if first_run
|
|
12
|
-
puts " " + l.split("[FORCED]").last.chomp
|
|
13
|
-
first_run = false
|
|
14
|
-
end
|
|
15
|
-
puts "== Build complete"
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
require 'optparse'
|
|
21
|
-
|
|
22
3
|
# Require Middleman
|
|
23
4
|
require File.join(File.dirname(__FILE__), '..', 'lib', 'middleman')
|
|
24
5
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
opts.banner = "Usage: mm-server [rack options]"
|
|
30
|
-
opts.separator ""
|
|
31
|
-
opts.separator "Rack options:"
|
|
32
|
-
opts.on("-p", "--port PORT", "use PORT (default: 4567)") { |port|
|
|
33
|
-
options[:Port] = port
|
|
34
|
-
}
|
|
35
|
-
opts.on("-E", "--env ENVIRONMENT", "use ENVIRONMENT for defaults (default: development)") { |e|
|
|
36
|
-
env = e
|
|
37
|
-
}
|
|
38
|
-
opts.on("--debug", "Debug mode") {
|
|
39
|
-
::Middleman::Base.set :logging, true
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
opts.parse! ARGV
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
ENV['RACK_ENV'] = env
|
|
46
|
-
|
|
47
|
-
class Middleman::Base
|
|
48
|
-
set :root, Dir.pwd
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
require 'shotgun'
|
|
52
|
-
config = File.join(File.dirname(__FILE__), '..', 'lib', 'middleman', 'config.ru')
|
|
53
|
-
app = Shotgun.new(config, &lambda { |inner_app| Middleman::Base })
|
|
54
|
-
|
|
55
|
-
require 'rubygems'
|
|
56
|
-
require 'thin'
|
|
57
|
-
Thin::Logging.silent = true
|
|
58
|
-
|
|
59
|
-
Rack::Handler::Thin.run app, options do |inst|
|
|
60
|
-
puts "== The Middleman is standing watch on port #{options[:Port]}"
|
|
61
|
-
end
|
|
6
|
+
# Start Middleman
|
|
7
|
+
Middleman::Base.set({ :server => %w[thin webrick],
|
|
8
|
+
:root => Dir.pwd })
|
|
9
|
+
Middleman::Base.run!
|
data/deps.rip
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
git://github.com/jnicklas/templater.git
|
|
2
|
+
git://github.com/sstephenson/sprockets.git
|
|
3
|
+
git://github.com/sinatra/sinatra.git
|
|
4
|
+
git://github.com/nex3/haml.git
|
|
5
|
+
git://github.com/chriseppstein/compass.git
|
|
6
|
+
git://github.com/foca/sinatra-content-for.git
|
|
7
|
+
git://github.com/brynary/rack-test.git
|
data/lib/middleman.rb
CHANGED
data/lib/middleman/base.rb
CHANGED
|
@@ -1,147 +1,125 @@
|
|
|
1
|
-
|
|
2
|
-
require
|
|
3
|
-
require
|
|
1
|
+
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
|
2
|
+
require 'haml'
|
|
3
|
+
require 'sinatra/base'
|
|
4
|
+
require 'middleman/helpers'
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
def mime(ext, type)
|
|
7
|
+
ext = ".#{ext}" unless ext.to_s[0] == ?.
|
|
8
|
+
Rack::Mime::MIME_TYPES[ext.to_s] = type
|
|
7
9
|
end
|
|
8
10
|
|
|
9
11
|
module Middleman
|
|
10
12
|
class Base < Sinatra::Base
|
|
11
13
|
set :app_file, __FILE__
|
|
12
|
-
set :root,
|
|
13
|
-
set :reload, false
|
|
14
|
-
set :sessions, false
|
|
15
|
-
set :logging, false
|
|
14
|
+
set :root, Dir.pwd
|
|
16
15
|
set :environment, ENV['MM_ENV'] || :development
|
|
17
|
-
set :
|
|
18
|
-
set :
|
|
16
|
+
set :supported_formats, []
|
|
17
|
+
set :index_file, 'index.html'
|
|
19
18
|
set :css_dir, "stylesheets"
|
|
20
19
|
set :images_dir, "images"
|
|
21
|
-
set :fonts_dir, "fonts"
|
|
22
20
|
set :build_dir, "build"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
super(option, value, &nil)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
@@afters = []
|
|
49
|
-
def self.after_feature_init(&block)
|
|
50
|
-
@@afters << block
|
|
21
|
+
|
|
22
|
+
enable :compass
|
|
23
|
+
enable :content_for
|
|
24
|
+
enable :sprockets
|
|
25
|
+
#enable :slickmap
|
|
26
|
+
disable :cache_buster
|
|
27
|
+
disable :minify_css
|
|
28
|
+
disable :minify_javascript
|
|
29
|
+
disable :relative_assets
|
|
30
|
+
disable :markaby
|
|
31
|
+
disable :maruku
|
|
32
|
+
|
|
33
|
+
# include helpers
|
|
34
|
+
helpers Middleman::Helpers
|
|
35
|
+
|
|
36
|
+
# Default build features
|
|
37
|
+
configure :build do
|
|
38
|
+
enable :minify_css
|
|
39
|
+
enable :minify_javascript
|
|
40
|
+
enable :cache_buster
|
|
41
|
+
# disable :slickmap
|
|
51
42
|
end
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
43
|
+
|
|
44
|
+
def template_exists?(path, renderer=nil)
|
|
45
|
+
template_path = path.dup
|
|
46
|
+
template_path << ".#{renderer}" if renderer
|
|
47
|
+
File.exists? File.join(options.views, template_path)
|
|
57
48
|
end
|
|
58
49
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
get(url) do
|
|
65
|
-
return yield if block_given?
|
|
66
|
-
process_request(layout)
|
|
50
|
+
# Base case renderer (do nothing), Should be over-ridden
|
|
51
|
+
module StaticRender
|
|
52
|
+
def render_path(path)
|
|
53
|
+
false
|
|
67
54
|
end
|
|
68
55
|
end
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
ensure
|
|
74
|
-
@@layout = nil
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def self.enabled?(name)
|
|
78
|
-
name = (name.to_s << "?").to_sym
|
|
79
|
-
self.respond_to?(name) && self.send(name)
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
def enabled?(name)
|
|
83
|
-
self.class.enabled?(name)
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
# This will match all requests not overridden in the project's init.rb
|
|
56
|
+
include StaticRender
|
|
57
|
+
|
|
58
|
+
# All other files
|
|
59
|
+
disable :static
|
|
87
60
|
not_found do
|
|
88
|
-
process_request
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
private
|
|
92
|
-
def process_request(layout = :layout)
|
|
93
|
-
# Normalize the path and add index if we're looking at a directory
|
|
94
61
|
path = request.path
|
|
95
|
-
path <<
|
|
62
|
+
path << options.index_file if path.match(%r{/$})
|
|
96
63
|
path.gsub!(%r{^/}, '')
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
64
|
+
|
|
65
|
+
if content = render_path(path)
|
|
66
|
+
content_type media_type(File.extname(path)), :charset => 'utf-8'
|
|
67
|
+
status 200
|
|
68
|
+
content
|
|
69
|
+
else
|
|
70
|
+
# Otherwise, send the static file
|
|
71
|
+
path = File.join(options.public, request.path)
|
|
72
|
+
if File.exists?(path)
|
|
104
73
|
status 200
|
|
105
|
-
|
|
74
|
+
send_file(path)
|
|
75
|
+
else
|
|
76
|
+
status 404
|
|
106
77
|
end
|
|
107
78
|
end
|
|
108
|
-
|
|
109
|
-
status 404
|
|
110
79
|
end
|
|
111
80
|
|
|
112
|
-
def
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
81
|
+
def self.run!(options={}, &block)
|
|
82
|
+
init!
|
|
83
|
+
set options
|
|
84
|
+
handler = detect_rack_handler
|
|
85
|
+
handler_name = handler.name.gsub(/.*::/, '')
|
|
86
|
+
puts "== The Middleman is standing watch on port #{port}"
|
|
87
|
+
handler.run self, :Host => host, :Port => port do |server|
|
|
88
|
+
trap(:INT) do
|
|
89
|
+
## Use thins' hard #stop! if available, otherwise just #stop
|
|
90
|
+
server.respond_to?(:stop!) ? server.stop! : server.stop
|
|
91
|
+
puts "\n== The Middleman has ended his patrol"
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
if block_given?
|
|
95
|
+
block.call
|
|
96
|
+
## Use thins' hard #stop! if available, otherwise just #stop
|
|
97
|
+
server.respond_to?(:stop!) ? server.stop! : server.stop
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
rescue Errno::EADDRINUSE => e
|
|
101
|
+
puts "== The Middleman is already standing watch on port #{port}!"
|
|
132
102
|
end
|
|
133
103
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
104
|
+
def self.init!
|
|
105
|
+
# Check for local config
|
|
106
|
+
local_config = File.join(self.root, "init.rb")
|
|
107
|
+
if File.exists? local_config
|
|
108
|
+
puts "== Local config at: #{local_config}"
|
|
109
|
+
class_eval File.read(local_config)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
require "middleman/features/haml"
|
|
113
|
+
|
|
114
|
+
# loop over enabled feature
|
|
115
|
+
features_path = File.expand_path("features/*.rb", File.dirname(__FILE__))
|
|
116
|
+
Dir[features_path].each do |f|
|
|
117
|
+
feature_name = File.basename(f, '.rb')
|
|
118
|
+
option_name = :"#{feature_name}?"
|
|
119
|
+
if respond_to?(option_name) && send(option_name) === true
|
|
120
|
+
require "middleman/features/#{feature_name}"
|
|
121
|
+
end
|
|
122
|
+
end
|
|
139
123
|
end
|
|
140
|
-
|
|
141
|
-
use ::Rack::ConditionalGet if environment == :development
|
|
142
|
-
|
|
143
|
-
@@afters.each { |block| class_eval(&block) }
|
|
144
|
-
|
|
145
|
-
super
|
|
146
124
|
end
|
|
147
|
-
end
|
|
125
|
+
end
|