middleman 0.5.5 → 0.9.0.pre
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 +1 -2
- data/.gitignore +3 -2
- data/LICENSE +0 -0
- data/README.rdoc +4 -0
- data/Rakefile +28 -36
- data/VERSION +1 -1
- data/bin/mm-build +7 -113
- data/bin/mm-init +11 -5
- data/bin/mm-server +56 -3
- data/features/asset_host.feature +12 -0
- data/features/automatic_image_sizes.feature +14 -0
- data/features/cache_buster.feature +22 -0
- data/features/generator.feature +8 -0
- data/features/minify_css.feature +22 -0
- data/features/minify_javascript.feature +12 -0
- data/features/page_alias_and_layouts.feature +12 -0
- data/features/relative_assets.feature +12 -0
- data/features/step_definitions/asset_host_steps.rb +7 -0
- data/features/step_definitions/env.rb +3 -0
- data/features/step_definitions/generator_steps.rb +24 -0
- data/features/step_definitions/middleman_steps.rb +28 -0
- data/features/step_definitions/page_layout_steps.rb +13 -0
- data/lib/middleman.rb +6 -132
- data/lib/middleman/assets.rb +33 -0
- data/lib/middleman/base.rb +147 -0
- data/lib/middleman/builder.rb +59 -0
- data/lib/middleman/config.ru +2 -0
- data/lib/middleman/features.rb +39 -0
- data/lib/middleman/features/asset_host.rb +21 -0
- data/lib/middleman/features/automatic_image_sizes.rb +31 -0
- data/lib/middleman/features/automatic_image_sizes/fastimage.rb +282 -0
- data/lib/middleman/features/cache_buster.rb +43 -0
- data/lib/middleman/features/default_helpers.rb +68 -0
- data/lib/middleman/features/livereload.rb +19 -0
- data/lib/middleman/features/minify_css.rb +9 -0
- data/lib/middleman/features/minify_javascript.rb +20 -0
- data/lib/middleman/features/minify_javascript/rack.rb +31 -0
- data/lib/middleman/features/relative_assets.rb +35 -0
- data/lib/middleman/features/slickmap.rb +118 -0
- data/lib/middleman/features/smush_pngs.rb +38 -0
- data/lib/middleman/features/ugly_haml.rb +7 -0
- data/lib/middleman/renderers.rb +26 -0
- data/lib/middleman/renderers/coffee.rb +28 -0
- data/lib/middleman/renderers/haml.rb +47 -0
- data/lib/middleman/renderers/sass.rb +67 -0
- data/lib/middleman/template/init.rbt +57 -0
- data/lib/middleman/template/views/index.html.haml +4 -0
- data/lib/middleman/template/views/layout.haml +11 -4
- data/lib/middleman/template/views/stylesheets/site.css.sass +27 -0
- data/lib/middleman/templater+dynamic_renderer.rb +26 -0
- data/middleman.gemspec +121 -107
- data/spec/builder_spec.rb +17 -16
- data/spec/fixtures/sample/init.rb +28 -2
- data/spec/fixtures/sample/public/images/blank.gif +0 -0
- data/spec/fixtures/sample/public/static.html +0 -0
- data/{vendor/sinatra-maruku/examples/public/javascripts/application.js → spec/fixtures/sample/public/stylesheets/auto-css.css} +0 -0
- data/spec/fixtures/sample/public/stylesheets/static.css +0 -0
- data/{vendor/sinatra-maruku/examples/public/stylesheets/print.css → 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/_partial.haml +0 -0
- data/spec/fixtures/sample/views/asset_host.html.haml +1 -0
- data/spec/fixtures/sample/views/auto-css.html.haml +1 -0
- data/spec/fixtures/sample/views/auto-image-sizes.html.haml +1 -0
- data/spec/fixtures/sample/views/cache-buster.html.haml +2 -0
- data/spec/fixtures/sample/views/{index.haml → custom-layout.html.haml} +0 -0
- data/spec/fixtures/sample/views/custom.haml +5 -0
- data/spec/fixtures/sample/views/index.html.haml +1 -0
- data/spec/fixtures/sample/views/inline-css.html.haml +4 -0
- data/spec/fixtures/sample/views/{inline-js.haml → inline-js.html.haml} +0 -0
- data/spec/fixtures/sample/views/layout.haml +1 -1
- data/spec/fixtures/sample/views/{maruku.maruku → maruku.html.maruku} +0 -0
- data/spec/fixtures/sample/views/page-classes.html.haml +1 -0
- data/spec/fixtures/sample/views/services/{index.haml → index.html.haml} +0 -0
- data/spec/fixtures/sample/views/stylesheets/asset_host.css.sass +3 -0
- data/spec/fixtures/sample/views/stylesheets/relative_assets.css.sass +3 -0
- data/spec/fixtures/sample/views/stylesheets/site.css.sass +1 -0
- data/spec/fixtures/sample/views/stylesheets/site_scss.css.scss +1 -0
- data/spec/fixtures/sample/views/stylesheets/test_less.css.less +5 -0
- data/spec/helpers_spec.rb +43 -0
- data/spec/spec_helper.rb +3 -5
- metadata +298 -127
- data/lib/middleman/helpers.rb +0 -131
- data/lib/middleman/markaby.rb +0 -4
- data/lib/middleman/maruku.rb +0 -4
- data/lib/middleman/sprockets_ext.rb +0 -29
- data/lib/middleman/template/init.rb +0 -22
- data/lib/middleman/template/views/index.haml +0 -1
- data/lib/middleman/template/views/stylesheets/site.sass +0 -1
- data/spec/fixtures/sample/views/markaby.mab +0 -5
- data/spec/fixtures/sample/views/stylesheets/site.sass +0 -1
- data/spec/generator_spec.rb +0 -34
- data/vendor/rack-test/History.txt +0 -64
- data/vendor/rack-test/MIT-LICENSE.txt +0 -19
- data/vendor/rack-test/README.rdoc +0 -57
- data/vendor/rack-test/Rakefile +0 -62
- data/vendor/rack-test/lib/rack/mock_session.rb +0 -57
- data/vendor/rack-test/lib/rack/test.rb +0 -246
- data/vendor/rack-test/lib/rack/test/cookie_jar.rb +0 -169
- data/vendor/rack-test/lib/rack/test/methods.rb +0 -73
- data/vendor/rack-test/lib/rack/test/mock_digest_request.rb +0 -27
- data/vendor/rack-test/lib/rack/test/uploaded_file.rb +0 -36
- data/vendor/rack-test/lib/rack/test/utils.rb +0 -75
- data/vendor/rack-test/spec/fixtures/config.ru +0 -3
- data/vendor/rack-test/spec/fixtures/fake_app.rb +0 -109
- data/vendor/rack-test/spec/fixtures/foo.txt +0 -1
- data/vendor/rack-test/spec/rack/test/cookie_spec.rb +0 -176
- data/vendor/rack-test/spec/rack/test/digest_auth_spec.rb +0 -48
- data/vendor/rack-test/spec/rack/test/multipart_spec.rb +0 -85
- data/vendor/rack-test/spec/rack/test/utils_spec.rb +0 -44
- data/vendor/rack-test/spec/rack/test_spec.rb +0 -363
- data/vendor/rack-test/spec/rcov.opts +0 -1
- data/vendor/rack-test/spec/spec.opts +0 -1
- data/vendor/rack-test/spec/spec_helper.rb +0 -48
- data/vendor/sinatra-content-for/LICENSE +0 -22
- data/vendor/sinatra-content-for/README.rdoc +0 -49
- data/vendor/sinatra-content-for/Rakefile +0 -33
- data/vendor/sinatra-content-for/lib/sinatra/content_for.rb +0 -58
- data/vendor/sinatra-content-for/sinatra-content-for.gemspec +0 -34
- data/vendor/sinatra-content-for/test/content_for_test.rb +0 -156
- data/vendor/sinatra-markaby/CHANGES +0 -7
- data/vendor/sinatra-markaby/LICENSE +0 -20
- data/vendor/sinatra-markaby/README.rdoc +0 -33
- data/vendor/sinatra-markaby/Rakefile +0 -45
- data/vendor/sinatra-markaby/TODO +0 -3
- data/vendor/sinatra-markaby/VERSION.yml +0 -4
- data/vendor/sinatra-markaby/lib/sinatra/markaby.rb +0 -31
- data/vendor/sinatra-markaby/sinatra-markaby.gemspec +0 -49
- data/vendor/sinatra-markaby/test/sinatra_markaby_test.rb +0 -72
- data/vendor/sinatra-markaby/test/test_helper.rb +0 -19
- data/vendor/sinatra-markaby/test/views/hello.mab +0 -1
- data/vendor/sinatra-markaby/test/views/html.mab +0 -4
- data/vendor/sinatra-maruku/LICENSE +0 -22
- data/vendor/sinatra-maruku/README.markdown +0 -85
- data/vendor/sinatra-maruku/Rakefile +0 -34
- data/vendor/sinatra-maruku/VERSION.yml +0 -4
- data/vendor/sinatra-maruku/examples/app.rb +0 -8
- data/vendor/sinatra-maruku/examples/config.ru +0 -4
- data/vendor/sinatra-maruku/examples/mapp.rb +0 -15
- data/vendor/sinatra-maruku/examples/public/stylesheets/application.css +0 -23
- data/vendor/sinatra-maruku/examples/views/index.maruku +0 -32
- data/vendor/sinatra-maruku/examples/views/layout.maruku +0 -9
- data/vendor/sinatra-maruku/lib/sinatra/maruku.rb +0 -25
- data/vendor/sinatra-maruku/sinatra-maruku.gemspec +0 -70
- data/vendor/sinatra-maruku/test/sinatra_maruku_test.rb +0 -91
- data/vendor/sinatra-maruku/test/test_helper.rb +0 -21
- data/vendor/sinatra-maruku/test/views/hello.maruku +0 -1
- data/vendor/sinatra-maruku/test/views/layout2.maruku +0 -2
data/.document
CHANGED
data/.gitignore
CHANGED
data/LICENSE
CHANGED
|
File without changes
|
data/README.rdoc
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
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
|
+
|
|
5
9
|
== Copyright
|
|
6
10
|
|
|
7
11
|
Copyright (c) 2009 Thomas Reynolds. See LICENSE for details.
|
data/Rakefile
CHANGED
|
@@ -1,60 +1,52 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'lib/middleman'
|
|
2
2
|
require 'rake'
|
|
3
|
+
require 'spec/rake/spectask'
|
|
4
|
+
require 'cucumber/rake/task'
|
|
3
5
|
|
|
4
6
|
begin
|
|
5
7
|
require 'jeweler'
|
|
6
8
|
Jeweler::Tasks.new do |gem|
|
|
7
9
|
gem.name = "middleman"
|
|
8
|
-
gem.summary = %Q{A static site generator utilizing Haml and
|
|
10
|
+
gem.summary = %Q{A static site generator utilizing Haml, Sass and providing YUI compression and cache busting}
|
|
9
11
|
gem.email = "tdreyno@gmail.com"
|
|
10
|
-
gem.homepage = "http://github.com/tdreyno/middleman"
|
|
12
|
+
gem.homepage = "http://wiki.github.com/tdreyno/middleman"
|
|
11
13
|
gem.authors = ["Thomas Reynolds"]
|
|
12
14
|
gem.rubyforge_project = "middleman"
|
|
13
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
|
14
15
|
gem.executables = %w(mm-init mm-build mm-server)
|
|
15
|
-
gem.add_dependency("
|
|
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("
|
|
16
|
+
gem.add_dependency("rack", "~>1.0")
|
|
17
|
+
gem.add_dependency("thin", "~>1.2.0")
|
|
18
|
+
gem.add_dependency("shotgun", "~>0.8.0")
|
|
19
|
+
gem.add_dependency("templater", "~>1.0.0")
|
|
20
|
+
gem.add_dependency("sinatra", "~>1.0")
|
|
21
|
+
gem.add_dependency("sinatra-content-for", "~>0.2.0")
|
|
22
|
+
gem.add_dependency("rack-test", "~>0.5.0")
|
|
23
|
+
gem.add_dependency("yui-compressor", "~>0.9.0")
|
|
24
|
+
gem.add_dependency("haml", "~>3.0")
|
|
25
|
+
gem.add_dependency("compass", "~>0.10.0")
|
|
26
|
+
gem.add_dependency("json_pure", "~>1.4.0")
|
|
27
|
+
gem.add_dependency("smusher", "~>0.4.5")
|
|
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")
|
|
23
34
|
end
|
|
24
35
|
|
|
25
|
-
Jeweler::
|
|
26
|
-
rubyforge.doc_task = "rdoc"
|
|
27
|
-
end
|
|
36
|
+
Jeweler::GemcutterTasks.new
|
|
28
37
|
rescue LoadError
|
|
29
|
-
puts "Jeweler (or a dependency) not available. Install it with:
|
|
38
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
|
30
39
|
end
|
|
31
40
|
|
|
32
|
-
require 'spec/rake/spectask'
|
|
33
41
|
Spec::Rake::SpecTask.new(:spec) do |spec|
|
|
34
42
|
spec.libs << 'lib' << 'spec'
|
|
35
43
|
spec.spec_files = FileList['spec/**/*_spec.rb']
|
|
36
44
|
end
|
|
37
45
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
|
41
|
-
spec.rcov = true
|
|
46
|
+
Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
|
|
47
|
+
t.cucumber_opts = "--color --tags ~@wip --strict --format #{ENV['CUCUMBER_FORMAT'] || 'pretty'}"
|
|
42
48
|
end
|
|
43
49
|
|
|
44
50
|
task :spec => :check_dependencies
|
|
45
51
|
|
|
46
|
-
task :default => :spec
|
|
47
|
-
|
|
48
|
-
require 'rake/rdoctask'
|
|
49
|
-
Rake::RDocTask.new do |rdoc|
|
|
50
|
-
if File.exist?('VERSION')
|
|
51
|
-
version = File.read('VERSION')
|
|
52
|
-
else
|
|
53
|
-
version = ""
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
rdoc.rdoc_dir = 'rdoc'
|
|
57
|
-
rdoc.title = "middleman #{version}"
|
|
58
|
-
rdoc.rdoc_files.include('README*')
|
|
59
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
60
|
-
end
|
|
52
|
+
task :default => [:cucumber, :spec]
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.9.0.pre
|
data/bin/mm-build
CHANGED
|
@@ -1,118 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
require 'templater'
|
|
5
|
-
|
|
6
|
-
MIDDLEMAN_BUILDER = true
|
|
7
|
-
require File.join(File.dirname(__FILE__), '..', 'lib', 'middleman')
|
|
8
|
-
require File.join(File.dirname(__FILE__), '..', 'vendor', 'rack-test', 'lib', 'rack', 'test')
|
|
9
|
-
|
|
10
|
-
module Generators
|
|
11
|
-
extend Templater::Manifold
|
|
12
|
-
desc "Build a staticmatic site"
|
|
13
|
-
|
|
14
|
-
class Builder < Templater::Generator
|
|
15
|
-
# Define source and desintation
|
|
16
|
-
def self.source_root; Dir.pwd; end
|
|
17
|
-
def destination_root; File.join(Dir.pwd, 'build'); end
|
|
18
|
-
|
|
19
|
-
# Override template to ask middleman for the correct extension to output
|
|
20
|
-
def self.template(name, *args, &block)
|
|
21
|
-
return if args.first.include?('layout')
|
|
22
|
-
args.first.split('/').each do |part|
|
|
23
|
-
return if part[0,1] == '_'
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
if (args[0] === args[1])
|
|
27
|
-
file_name_parts = File.basename(args.first).split('.')
|
|
28
|
-
|
|
29
|
-
if file_name_parts.length > 2
|
|
30
|
-
# static ext embedded in filename
|
|
31
|
-
newext = ""
|
|
32
|
-
else
|
|
33
|
-
# use defaults
|
|
34
|
-
newext = case file_name_parts.last
|
|
35
|
-
when 'haml', 'erb', 'mab', 'maruku'
|
|
36
|
-
'.html'
|
|
37
|
-
when 'sass'
|
|
38
|
-
'.css'
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
args[1] = args[0].gsub(".#{file_name_parts.last}", newext).gsub('views/', '')
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
super(name, *args, &block)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def self.file(name, *args, &block)
|
|
49
|
-
args[1] = args[0].gsub('views/', '') if (args[0] === args[1])
|
|
50
|
-
super(name, *args, &block)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
public_files_glob = File.join(source_root, "public", '**/*')
|
|
54
|
-
Dir[public_files_glob].each do |action|
|
|
55
|
-
next if File.directory?(action)
|
|
56
|
-
action = action.sub("#{source_root}/", '')
|
|
57
|
-
template_sym = action.downcase.gsub(/[^a-z0-9]+/, '_').to_sym
|
|
58
|
-
|
|
59
|
-
if File.extname(action) == '.js' && !action.include?('min')
|
|
60
|
-
template(template_sym, action, action.gsub('public/', ''))
|
|
61
|
-
else
|
|
62
|
-
file(template_sym, action, action.gsub('public/', ''))
|
|
63
|
-
end
|
|
64
|
-
end
|
|
3
|
+
ENV['MM_ENV'] = "build"
|
|
65
4
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
add :build, Builder
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
class BuildConfig
|
|
73
|
-
def self.render(source, destination)
|
|
74
|
-
renderer.render(source, destination)
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def self.renderer
|
|
78
|
-
@@renderer ||= BuildRenderer
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def self.renderer=(val)
|
|
82
|
-
@@renderer = val
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
# Monkey-patch to use a dynamic renderer
|
|
87
|
-
class Templater::Actions::Template
|
|
88
|
-
def render
|
|
89
|
-
BuildConfig.render(source, destination)
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
# Default render through middleman
|
|
94
|
-
class BuildRenderer
|
|
95
|
-
def self.render(source, destination)
|
|
96
|
-
request_path = destination.gsub(File.join(Dir.pwd, 'build'), "")
|
|
97
|
-
browser = Rack::Test::Session.new(Rack::MockSession.new(Middleman))
|
|
98
|
-
browser.get(request_path)
|
|
99
|
-
browser.last_response.body
|
|
100
|
-
end
|
|
101
|
-
end
|
|
5
|
+
# Require app
|
|
6
|
+
require File.join(File.dirname(__FILE__), "..", "lib", "middleman")
|
|
7
|
+
require 'middleman/builder'
|
|
102
8
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if File.extname(source) == '.js'
|
|
106
|
-
secretary = Sprockets::Secretary.new( :asset_root => "public",
|
|
107
|
-
:load_path => ["public/assets/javascripts/**/*.js"],
|
|
108
|
-
:source_files => [source] )
|
|
109
|
-
compressor = YUI::JavaScriptCompressor.new(:munge => true)
|
|
110
|
-
compressor.compress(secretary.concatenation.to_s)
|
|
111
|
-
else
|
|
112
|
-
super
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
BuildConfig.renderer = SprocketsRenderer
|
|
9
|
+
# Middleman::Base.init!
|
|
10
|
+
Middleman::Builder.init!
|
|
117
11
|
|
|
118
|
-
Generators.run_cli(Dir.pwd, 'mm-build', 1, %w(build --force).concat(ARGV))
|
|
12
|
+
Middleman::Generators.run_cli(Dir.pwd, 'mm-build', 1, %w(build --force).concat(ARGV))
|
data/bin/mm-init
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
require File.join(File.dirname(File.dirname(__FILE__)), 'lib', 'middleman')
|
|
2
3
|
require 'templater'
|
|
3
4
|
|
|
4
5
|
module Generators
|
|
@@ -6,8 +7,12 @@ module Generators
|
|
|
6
7
|
desc "Generator for streamlining staticmatic"
|
|
7
8
|
|
|
8
9
|
class NewSite < Templater::Generator
|
|
9
|
-
desc "Creates a new
|
|
10
|
+
desc "Creates a new middleman scaffold."
|
|
10
11
|
first_argument :location, :required => true, :desc => "Project location"
|
|
12
|
+
|
|
13
|
+
option :css_dir, :desc => 'The path to the css files'
|
|
14
|
+
option :js_dir, :desc => 'The path to the javascript files'
|
|
15
|
+
option :images_dir, :desc => 'The path to the image files'
|
|
11
16
|
|
|
12
17
|
def destination_root
|
|
13
18
|
File.expand_path(location)
|
|
@@ -17,12 +22,13 @@ module Generators
|
|
|
17
22
|
File.join(File.dirname(__FILE__), '..', 'lib', 'middleman', 'template')
|
|
18
23
|
end
|
|
19
24
|
|
|
20
|
-
|
|
25
|
+
template :init, "init.rb"
|
|
21
26
|
glob! :views
|
|
22
27
|
glob! :public
|
|
23
|
-
|
|
24
|
-
empty_directory :
|
|
25
|
-
empty_directory :
|
|
28
|
+
|
|
29
|
+
empty_directory :stylesheets, "public/stylesheets"#, File.join("public", css_dir)
|
|
30
|
+
empty_directory :javascripts, "public/javascripts"#, File.join("public", js_dir)
|
|
31
|
+
empty_directory :images, "public/images"#, File.join("public", images_dir)
|
|
26
32
|
end
|
|
27
33
|
|
|
28
34
|
add :setup, NewSite
|
data/bin/mm-server
CHANGED
|
@@ -1,8 +1,61 @@
|
|
|
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
|
+
|
|
3
22
|
# Require Middleman
|
|
4
23
|
require File.join(File.dirname(__FILE__), '..', 'lib', 'middleman')
|
|
5
24
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
25
|
+
env = ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development'
|
|
26
|
+
options = { :Port => 4567, :AccessLog => [] }
|
|
27
|
+
|
|
28
|
+
OptionParser.new { |opts|
|
|
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
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
Feature: Alternate between multiple asset hosts
|
|
2
|
+
In order to speed up page loading
|
|
3
|
+
|
|
4
|
+
Scenario: Rendering css with the feature enabled
|
|
5
|
+
Given I am using an asset host
|
|
6
|
+
When I go to "/stylesheets/asset_host.css"
|
|
7
|
+
Then I should see "http://assets"
|
|
8
|
+
|
|
9
|
+
Scenario: Rendering html with the feature enabled
|
|
10
|
+
Given I am using an asset host
|
|
11
|
+
When I go to "/asset_host.html"
|
|
12
|
+
Then I should see "http://assets"
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Feature: Automatically detect and insert image dimensions into tags
|
|
2
|
+
In order to speed up development and appease YSlow
|
|
3
|
+
|
|
4
|
+
Scenario: Rendering an image with the feature disabled
|
|
5
|
+
Given "automatic_image_sizes" feature is "disabled"
|
|
6
|
+
When I go to "/auto-image-sizes.html"
|
|
7
|
+
Then I should not see "width="
|
|
8
|
+
And I should not see "height="
|
|
9
|
+
|
|
10
|
+
Scenario: Rendering an image with the feature enabled
|
|
11
|
+
Given "automatic_image_sizes" feature is "enabled"
|
|
12
|
+
When I go to "/auto-image-sizes.html"
|
|
13
|
+
Then I should see "width="
|
|
14
|
+
And I should see "height="
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Feature: Generate mtime-based query string for busting browser caches
|
|
2
|
+
In order to display the most recent content for IE & CDNs and appease YSlow
|
|
3
|
+
|
|
4
|
+
Scenario: Rendering css with the feature disabled
|
|
5
|
+
Given "cache_buster" feature is "disabled"
|
|
6
|
+
When I go to "/stylesheets/relative_assets.css"
|
|
7
|
+
Then I should not see "?"
|
|
8
|
+
|
|
9
|
+
Scenario: Rendering html with the feature disabled
|
|
10
|
+
Given "cache_buster" feature is "disabled"
|
|
11
|
+
When I go to "/cache-buster.html"
|
|
12
|
+
Then I should not see "?"
|
|
13
|
+
|
|
14
|
+
Scenario: Rendering css with the feature enabled
|
|
15
|
+
Given "cache_buster" feature is "enabled"
|
|
16
|
+
When I go to "/stylesheets/relative_assets.css"
|
|
17
|
+
Then I should see "?"
|
|
18
|
+
|
|
19
|
+
Scenario: Rendering html with the feature enabled
|
|
20
|
+
Given "cache_buster" feature is "enabled"
|
|
21
|
+
When I go to "/cache-buster.html"
|
|
22
|
+
Then I should not see "?"
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
Feature: Generator
|
|
2
|
+
In order to generate static assets for client
|
|
3
|
+
|
|
4
|
+
Scenario: Copying template files
|
|
5
|
+
Given generated directory at "generator-test"
|
|
6
|
+
Then template files should exist at "generator-test"
|
|
7
|
+
And empty directories should exist at "generator-test"
|
|
8
|
+
And cleanup at "generator-test"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Feature: Minify CSS
|
|
2
|
+
In order reduce bytes sent to client and appease YSlow
|
|
3
|
+
|
|
4
|
+
Scenario: Rendering inline css with the feature disabled
|
|
5
|
+
Given "minify_css" feature is "disabled"
|
|
6
|
+
When I go to "/inline-css.html"
|
|
7
|
+
Then I should see "4" lines
|
|
8
|
+
|
|
9
|
+
Scenario: Rendering external css with the feature disabled
|
|
10
|
+
Given "minify_css" feature is "disabled"
|
|
11
|
+
When I go to "/stylesheets/site.css"
|
|
12
|
+
Then I should see "51" lines
|
|
13
|
+
|
|
14
|
+
Scenario: Rendering inline css with the feature enabled
|
|
15
|
+
Given "minify_css" feature is "enabled"
|
|
16
|
+
When I go to "/inline-css.html"
|
|
17
|
+
Then I should see "1" lines
|
|
18
|
+
|
|
19
|
+
Scenario: Rendering external css with the feature enabled
|
|
20
|
+
Given "minify_css" feature is "enabled"
|
|
21
|
+
When I go to "/stylesheets/site.css"
|
|
22
|
+
Then I should see "1" lines
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
Feature: Minify Javascript
|
|
2
|
+
In order reduce bytes sent to client and appease YSlow
|
|
3
|
+
|
|
4
|
+
Scenario: Rendering inline js with the feature disabled
|
|
5
|
+
Given "minify_javascript" feature is "disabled"
|
|
6
|
+
When I go to "/inline-js.html"
|
|
7
|
+
Then I should see "10" lines
|
|
8
|
+
|
|
9
|
+
Scenario: Rendering inline js with the feature enabled
|
|
10
|
+
Given "minify_javascript" feature is "enabled"
|
|
11
|
+
When I go to "/inline-js.html"
|
|
12
|
+
Then I should see "1" lines
|