middleman 1.2.8 → 2.0.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/CHANGELOG +7 -0
- data/README.rdoc +1 -1
- data/bin/mm-server +15 -39
- data/features/coffee-script.feature +6 -1
- data/features/minify_javascript.feature +14 -6
- data/features/slim.feature +7 -0
- data/features/step_definitions/builder_steps.rb +1 -23
- data/features/step_definitions/env.rb +7 -1
- data/features/step_definitions/generator_steps.rb +1 -1
- data/features/step_definitions/middleman_steps.rb +5 -0
- data/fixtures/test-app/config.rb +2 -0
- data/fixtures/test-app/{views → source}/_partial.haml +0 -0
- data/fixtures/test-app/{views → source}/asset_host.html.haml +0 -0
- data/fixtures/test-app/{views → source}/auto-css.html.haml +0 -0
- data/fixtures/test-app/{views → source}/auto-image-sizes.html.haml +0 -0
- data/fixtures/test-app/{views → source}/cache-buster.html.haml +0 -0
- data/fixtures/test-app/{views → source}/custom-layout-dir/index.html.haml +0 -0
- data/fixtures/test-app/{views → source}/custom-layout.html.haml +0 -0
- data/fixtures/test-app/source/front-matter.html.erb +7 -0
- data/fixtures/test-app/{public → source}/images/blank.gif +0 -0
- data/fixtures/test-app/{views → source}/index.html.haml +0 -0
- data/fixtures/test-app/source/inline-coffeescript.html.haml +3 -0
- data/fixtures/test-app/{views → source}/inline-css.html.haml +0 -0
- data/fixtures/test-app/{views → source}/inline-js.html.haml +1 -1
- data/fixtures/test-app/{views → source}/javascripts/coffee_test.js.coffee +0 -0
- data/fixtures/test-app/source/javascripts/jquery.plugin.with.dots.js +1 -0
- data/fixtures/test-app/{views → source}/layout.haml +0 -0
- data/fixtures/test-app/{views → source}/layouts/custom.haml +0 -0
- data/fixtures/test-app/{views → source}/padrino_test.html.haml +0 -0
- data/fixtures/test-app/{views → source}/page-classes.html.haml +0 -0
- data/fixtures/test-app/{views → source}/services/index.html.haml +0 -0
- data/fixtures/test-app/source/slim.html.slim +7 -0
- data/fixtures/test-app/{public → source}/static.html +0 -0
- data/fixtures/test-app/{views → source}/stylesheets/asset_host.css.sass +0 -0
- data/fixtures/test-app/{public → source}/stylesheets/auto-css.css +0 -0
- data/fixtures/test-app/{views → source}/stylesheets/relative_assets.css.sass +0 -0
- data/fixtures/test-app/{views → source}/stylesheets/site.css.sass +0 -0
- data/fixtures/test-app/{views → source}/stylesheets/site_scss.css.scss +0 -0
- data/fixtures/test-app/{public → source}/stylesheets/static.css +0 -0
- data/fixtures/test-app/{public → source}/stylesheets/sub1/auto-css.css +0 -0
- data/fixtures/test-app/{public → source}/stylesheets/sub1/sub2/auto-css.css +0 -0
- data/fixtures/test-app/{views → source}/tiny_src.html.haml +0 -0
- data/lib/middleman.rb +1 -0
- data/lib/middleman/builder.rb +15 -22
- data/lib/middleman/features.rb +7 -1
- data/lib/middleman/features/automatic_image_sizes.rb +1 -1
- data/lib/middleman/features/blog.rb +118 -0
- data/lib/middleman/features/cache_buster.rb +2 -2
- data/lib/middleman/features/data.rb +19 -6
- data/lib/middleman/features/default_helpers.rb +1 -1
- data/lib/middleman/features/front_matter.rb +69 -0
- data/lib/middleman/features/live_reload.rb +8 -3
- data/lib/middleman/features/minify_javascript/rack.rb +27 -6
- data/lib/middleman/renderers/haml.rb +1 -0
- data/lib/middleman/renderers/sass.rb +5 -4
- data/lib/middleman/renderers/slim.rb +12 -0
- data/lib/middleman/server.rb +30 -11
- data/lib/middleman/templates/default.rb +4 -4
- data/lib/middleman/templates/default/{views → source}/index.html.haml +0 -0
- data/lib/middleman/templates/default/{views → source}/layout.haml +0 -0
- data/lib/middleman/templates/default/source/stylesheets/site.css.sass +34 -0
- data/lib/middleman/templates/html5.rb +2 -2
- data/lib/middleman/templates/html5/{public → source}/404.html +0 -0
- data/lib/middleman/templates/html5/{public → source}/apple-touch-icon.png +0 -0
- data/lib/middleman/templates/html5/{public → source}/crossdomain.xml +0 -0
- data/lib/middleman/templates/html5/{public → source}/css/handheld.css +0 -0
- data/lib/middleman/templates/html5/{public → source}/css/style.css +0 -0
- data/lib/middleman/templates/html5/{public → source}/favicon.ico +0 -0
- data/lib/middleman/templates/html5/{public → source}/humans.txt +0 -0
- data/lib/middleman/templates/html5/{public → source}/images/.gitignore +0 -0
- data/lib/middleman/templates/html5/{public → source}/index.html +0 -0
- data/lib/middleman/templates/html5/{public → source}/js/libs/dd_belatedpng.js +0 -0
- data/lib/middleman/templates/html5/{public → source}/js/libs/jquery-1.5.0.js +0 -0
- data/lib/middleman/templates/html5/{public → source}/js/libs/jquery-1.5.0.min.js +0 -0
- data/lib/middleman/templates/html5/{public → source}/js/libs/modernizr-1.6.min.js +0 -0
- data/lib/middleman/templates/html5/{public → source}/js/mylibs/.gitignore +0 -0
- data/lib/middleman/templates/html5/{public → source}/js/plugins.js +0 -0
- data/lib/middleman/templates/html5/{public → source}/js/script.js +0 -0
- data/lib/middleman/templates/html5/{public → source}/robots.txt +0 -0
- data/lib/middleman/templates/xhtml.rb +4 -4
- data/lib/middleman/templates/xhtml/{views → source}/index.html.haml +0 -0
- data/lib/middleman/templates/xhtml/{views → source}/layout.haml +0 -0
- data/lib/middleman/templates/xhtml/source/stylesheets/site.css.sass +34 -0
- data/lib/middleman/version.rb +1 -1
- data/middleman.gemspec +7 -7
- metadata +149 -113
- data/lib/middleman/templates/default/views/stylesheets/site.css.sass +0 -27
- data/lib/middleman/templates/xhtml/views/stylesheets/site.css.sass +0 -27
data/.gitignore
CHANGED
data/CHANGELOG
ADDED
data/README.rdoc
CHANGED
@@ -8,7 +8,7 @@ Everything you need to know is on the wiki: http://github.com/tdreyno/middleman/
|
|
8
8
|
|
9
9
|
== Mailing List
|
10
10
|
|
11
|
-
If you have questions, answers can be found on
|
11
|
+
If you have questions, answers can be found on community forum: https://convore.com/middleman/
|
12
12
|
|
13
13
|
== Copyright
|
14
14
|
|
data/bin/mm-server
CHANGED
@@ -1,22 +1,5 @@
|
|
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 if Signal.list.has_key? "TSTP"
|
19
|
-
|
20
3
|
require 'optparse'
|
21
4
|
|
22
5
|
# Require Middleman
|
@@ -25,6 +8,7 @@ require File.join(File.dirname(__FILE__), '..', 'lib', 'middleman')
|
|
25
8
|
env = ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development'
|
26
9
|
options = { :Port => 4567, :AccessLog => [] }
|
27
10
|
|
11
|
+
# TODO: Switch to Thor
|
28
12
|
OptionParser.new { |opts|
|
29
13
|
opts.banner = "Usage: mm-server [rack options]"
|
30
14
|
opts.separator ""
|
@@ -51,10 +35,9 @@ ENV['RACK_ENV'] = env
|
|
51
35
|
while (!@found_root && (@path_parts.length > 0))
|
52
36
|
@current_path = File.join(*@path_parts)
|
53
37
|
|
54
|
-
|
55
|
-
views_folder = File.join(@current_path, "views")
|
38
|
+
source_folder = File.join(@current_path, "source")
|
56
39
|
|
57
|
-
if File.exists?(
|
40
|
+
if File.exists?(source_folder)
|
58
41
|
@found_root = true
|
59
42
|
next
|
60
43
|
end
|
@@ -67,31 +50,24 @@ if !@found_root
|
|
67
50
|
exit
|
68
51
|
end
|
69
52
|
|
70
|
-
# If the old init.rb exists,
|
53
|
+
# If the old init.rb exists, issue warning
|
71
54
|
old_config = File.join(@current_path, "init.rb")
|
72
55
|
if File.exists? old_config
|
73
56
|
$stderr.puts "== Error: The init.rb file (deprecated) needs to be be renamed to config.rb"
|
74
57
|
exit
|
75
58
|
end
|
76
59
|
|
60
|
+
# If the old directories exists, use it, but issue warning
|
61
|
+
old_views = File.join(@current_path, "views")
|
62
|
+
old_public = File.join(@current_path, "public")
|
63
|
+
if File.exists?(old_views) || File.exists?(old_public)
|
64
|
+
$stderr.puts "== Error: The views and public folders are have been combined. Create a new 'source' folder, add the contents of views and public to it and then remove the empty views and public folders."
|
65
|
+
exit
|
66
|
+
end
|
77
67
|
|
78
|
-
# require 'shotgun'
|
79
|
-
# config = File.join(File.dirname(__FILE__), '..', 'lib', 'middleman', 'config.ru')
|
80
|
-
# app = Shotgun.new(config, &lambda { |inner_app| Middleman::Server })
|
81
68
|
Middleman::Server.root = @current_path
|
82
|
-
app
|
69
|
+
options[:app] = Middleman::Server.new
|
70
|
+
# options[:server] = 'webrick'
|
83
71
|
|
84
|
-
|
85
|
-
|
86
|
-
unless defined?(JRUBY_VERSION)
|
87
|
-
require 'thin'
|
88
|
-
handler = Rack::Handler::Thin
|
89
|
-
else
|
90
|
-
require 'kirk'
|
91
|
-
require 'rack/handler/kirk'
|
92
|
-
handler = Rack::Handler::Kirk
|
93
|
-
end
|
94
|
-
|
95
|
-
handler.run app, options do |inst|
|
96
|
-
puts "== The Middleman is standing watch on port #{options[:Port]}"
|
97
|
-
end
|
72
|
+
puts "== The Middleman is standing watch on port #{options[:Port]}"
|
73
|
+
Rack::Server.new(options).start
|
@@ -1,7 +1,12 @@
|
|
1
1
|
Feature: Support coffee-script
|
2
2
|
In order to offer an alternative when writing Javascript
|
3
|
-
|
3
|
+
|
4
4
|
Scenario: Rendering coffee script
|
5
5
|
Given the Server is running
|
6
6
|
When I go to "/javascripts/coffee_test.js"
|
7
|
+
Then I should see "Array.prototype.slice"
|
8
|
+
|
9
|
+
Scenario: Rendering coffee-script with :coffeescript haml-filter
|
10
|
+
Given the Server is running
|
11
|
+
When I go to "/inline-coffeescript.html"
|
7
12
|
Then I should see "Array.prototype.slice"
|
@@ -1,12 +1,20 @@
|
|
1
1
|
Feature: Minify Javascript
|
2
2
|
In order reduce bytes sent to client and appease YSlow
|
3
|
-
|
3
|
+
|
4
|
+
Background:
|
5
|
+
Given current environment is "build"
|
6
|
+
|
4
7
|
Scenario: Rendering inline js with the feature disabled
|
5
8
|
Given "minify_javascript" feature is "disabled"
|
6
9
|
When I go to "/inline-js.html"
|
7
10
|
Then I should see "10" lines
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
11
|
+
|
12
|
+
Scenario: Rendering inline js with the feature enabled
|
13
|
+
Given "minify_javascript" feature is "enabled"
|
14
|
+
When I go to "/inline-js.html"
|
15
|
+
Then I should see "5" lines
|
16
|
+
|
17
|
+
Scenario: Rendering inline js (coffeescript) with the feature enabled
|
18
|
+
Given "minify_javascript" feature is "enabled"
|
19
|
+
When I go to "/inline-coffeescript.html"
|
20
|
+
Then I should see "5" lines
|
@@ -26,26 +26,4 @@ end
|
|
26
26
|
Then /^"([^"]*)" should not exist$/ do |target_file|
|
27
27
|
target = File.join(File.dirname(File.dirname(File.dirname(__FILE__))), "fixtures", "test-app", "build", target_file)
|
28
28
|
File.exists?(target).should be_false
|
29
|
-
end
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
# require 'fileutils'
|
34
|
-
#
|
35
|
-
# describe "Builder" do
|
36
|
-
# def project_file(*parts)
|
37
|
-
# File.expand_path(File.join(File.dirname(__FILE__), "..", *parts))
|
38
|
-
# end
|
39
|
-
#
|
40
|
-
# before :all do
|
41
|
-
# @root_dir = project_file("spec", "fixtures", "sample")
|
42
|
-
# end
|
43
|
-
#
|
44
|
-
# before :each do
|
45
|
-
# build_cmd = project_file("bin", "mm-build")
|
46
|
-
# `cd #{@root_dir} && MM_DIR="#{@root_dir}" #{build_cmd}`
|
47
|
-
# end
|
48
|
-
#
|
49
|
-
# after :each do
|
50
|
-
# FileUtils.rm_rf(File.join(@root_dir, "build"))
|
51
|
-
# end
|
29
|
+
end
|
@@ -1,3 +1,9 @@
|
|
1
1
|
ENV["MM_DIR"] = File.join(File.dirname(File.dirname(File.dirname(__FILE__))), "fixtures", "test-app")
|
2
2
|
require File.join(File.dirname(File.dirname(File.dirname(__FILE__))), 'lib', 'middleman')
|
3
|
-
require "rack/test"
|
3
|
+
require "rack/test"
|
4
|
+
|
5
|
+
# absolute views path
|
6
|
+
# otherwise resolve_template (padrino-core) can't find templates
|
7
|
+
Before do
|
8
|
+
Middleman::Server.views = File.join(Middleman::Server.root, "source")
|
9
|
+
end
|
@@ -19,7 +19,7 @@ end
|
|
19
19
|
Then /^empty directories should exist at "([^\"]*)"$/ do |dirname|
|
20
20
|
target = File.join(File.dirname(File.dirname(File.dirname(__FILE__))), "fixtures", dirname)
|
21
21
|
|
22
|
-
%w(
|
22
|
+
%w(source/stylesheets source/javascripts source/images).each do |d|
|
23
23
|
File.exists?("#{target}/#{d}").should be_true
|
24
24
|
end
|
25
25
|
end
|
@@ -2,9 +2,14 @@ Given /^"([^\"]*)" feature is "([^\"]*)"$/ do |feature, state|
|
|
2
2
|
if state == "enabled"
|
3
3
|
Middleman::Server.activate(feature.to_sym)
|
4
4
|
end
|
5
|
+
Middleman::Server.environment = @current_env || :development
|
5
6
|
@browser = Rack::Test::Session.new(Rack::MockSession.new(Middleman::Server.new))
|
6
7
|
end
|
7
8
|
|
9
|
+
Given /^current environment is "([^\"]*)"$/ do |env|
|
10
|
+
@current_env = env.to_sym
|
11
|
+
end
|
12
|
+
|
8
13
|
Given /^the Server is running$/ do
|
9
14
|
@browser = Rack::Test::Session.new(Rack::MockSession.new(Middleman::Server.new))
|
10
15
|
end
|
data/fixtures/test-app/config.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
// Success
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/middleman.rb
CHANGED
data/lib/middleman/builder.rb
CHANGED
@@ -8,7 +8,7 @@ module Middleman
|
|
8
8
|
def tilt_template(source, *args, &block)
|
9
9
|
config = args.last.is_a?(Hash) ? args.pop : {}
|
10
10
|
destination = args.first || source
|
11
|
-
|
11
|
+
|
12
12
|
source = File.expand_path(find_in_source_paths(source.to_s))
|
13
13
|
context = instance_eval('binding')
|
14
14
|
|
@@ -33,6 +33,7 @@ module Middleman
|
|
33
33
|
super
|
34
34
|
|
35
35
|
Middleman::Server.new
|
36
|
+
|
36
37
|
if options.has_key?("relative") && options["relative"]
|
37
38
|
Middleman::Server.activate :relative_assets
|
38
39
|
end
|
@@ -41,17 +42,12 @@ module Middleman
|
|
41
42
|
|
42
43
|
def source_paths
|
43
44
|
@source_paths ||= [
|
44
|
-
Middleman::Server.
|
45
|
-
Middleman::Server.views
|
45
|
+
Middleman::Server.root
|
46
46
|
]
|
47
47
|
end
|
48
48
|
|
49
|
-
def
|
50
|
-
action Directory.new(self, Middleman::Server.
|
51
|
-
end
|
52
|
-
|
53
|
-
def build_dynamic_files
|
54
|
-
action Directory.new(self, Middleman::Server.views, :dynamic, Middleman::Server.build_dir, { :force => true })
|
49
|
+
def build_all_files
|
50
|
+
action Directory.new(self, Middleman::Server.views, Middleman::Server.build_dir, { :force => true })
|
55
51
|
end
|
56
52
|
|
57
53
|
@@hooks = {}
|
@@ -69,8 +65,7 @@ module Middleman
|
|
69
65
|
class Directory < ::Thor::Actions::EmptyDirectory
|
70
66
|
attr_reader :source
|
71
67
|
|
72
|
-
def initialize(base, source,
|
73
|
-
@mode = mode
|
68
|
+
def initialize(base, source, destination=nil, config={}, &block)
|
74
69
|
@source = File.expand_path(base.find_in_source_paths(source.to_s))
|
75
70
|
@block = block
|
76
71
|
super(base, destination, { :recursive => true }.merge(config))
|
@@ -96,22 +91,20 @@ module Middleman
|
|
96
91
|
end
|
97
92
|
|
98
93
|
next if file_source.include?('layout')
|
99
|
-
|
100
|
-
|
94
|
+
|
95
|
+
# Skip partials prefixed with an underscore
|
96
|
+
next unless file_source.gsub(Middleman::Server.root, '').split('/').select { |p| p[0,1] == '_' }.empty?
|
97
|
+
|
101
98
|
file_extension = File.extname(file_source)
|
102
99
|
file_destination = File.join(given_destination, file_source.gsub(source, '.'))
|
103
100
|
file_destination.gsub!('/./', '/')
|
104
|
-
|
105
|
-
handled_by_tilt = ::Tilt.mappings.keys.include?(file_extension.gsub(/^\./, ""))
|
106
|
-
if handled_by_tilt || (file_extension == ".js")
|
107
|
-
new_file_extension = (file_extension == ".js") ? ".js" : ""
|
108
|
-
next if @mode == :dynamic && file_source.split('/').last.split('.').length < 3
|
109
101
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
destination = base.copy_file(file_source, file_destination, config, &@block)
|
102
|
+
handled_by_tilt = ::Tilt.mappings.has_key?(file_extension.gsub(/^\./, ""))
|
103
|
+
if handled_by_tilt
|
104
|
+
file_destination.gsub!(file_extension, "")
|
114
105
|
end
|
106
|
+
|
107
|
+
destination = base.tilt_template(file_source, file_destination, config, &@block)
|
115
108
|
end
|
116
109
|
end
|
117
110
|
|
data/lib/middleman/features.rb
CHANGED
@@ -71,6 +71,12 @@ module Middleman::Features
|
|
71
71
|
# to dynamic requests.
|
72
72
|
autoload :Data, "middleman/features/data"
|
73
73
|
|
74
|
+
# Parse YAML metadata from templates
|
75
|
+
autoload :FrontMatter, "middleman/features/front_matter"
|
76
|
+
|
77
|
+
# Treat project as a blog
|
78
|
+
autoload :Blog, "middleman/features/blog"
|
79
|
+
|
74
80
|
# Proxy web services requests in dev mode only
|
75
81
|
# autoload :Proxy, "middleman/features/proxy"
|
76
82
|
|
@@ -79,7 +85,7 @@ module Middleman::Features
|
|
79
85
|
|
80
86
|
# LiveReload will auto-reload browsers with the live reload extension installed after changes
|
81
87
|
# Currently disabled and untested.
|
82
|
-
#autoload :LiveReload, "middleman/features/live_reload"
|
88
|
+
# autoload :LiveReload, "middleman/features/live_reload"
|
83
89
|
|
84
90
|
# The Feature API is itself a Feature. Mind blowing!
|
85
91
|
class << self
|