1
0
Fork 0
mirror of https://github.com/middleman/middleman.git synced 2022-11-09 12:20:27 -05:00

Merge remote-tracking branch 'origin/master'

This commit is contained in:
Ben Hollis 2012-02-23 21:33:05 -08:00
commit 81c83fafa6
26 changed files with 192 additions and 155 deletions

View file

@ -2,6 +2,7 @@ rvm:
- 1.8.7
- 1.9.2
- 1.9.3
# - jruby
script: "bundle exec rake test"
branches:

View file

@ -25,6 +25,7 @@
* Serve purely static folders directly (without source/ and config.rb)
* Set ignored files and disable directory_indexes from YAML frontmatter
* Automatically load helper modules in helpers/ directory
* Add pid for cleanup
2.0.14
====

View file

@ -6,7 +6,7 @@ group :development do
gem "rake", "~> 0.9.2"
gem "rspec", "~> 2.7"
gem "rdoc", "~> 3.9"
gem "yard"
# gem "yard"
end
group :test do
@ -15,8 +15,9 @@ group :test do
gem "slim"
gem "coffee-filter", "~> 0.1.1"
gem "liquid", "~> 2.2"
gem "jquery-rails"
gem "bootstrap-rails", "0.0.5"
gem "jquery-rails", "~> 2.0.0"
# gem "bootstrap-rails", "0.0.5"
# gem "zurb-foundation"
end
gem "middleman-core", :path => "middleman-core"

View file

@ -57,9 +57,9 @@ http://rubydoc.info/github/middleman/middleman
# Community
The official community forum is available on Convore at:
The official community forum is available at:
https://convore.com/middleman/
http://forum.middlemanapp.com/
# Bug Reports

View file

@ -1,7 +1,7 @@
require 'rubygems' unless defined?(Gem)
# require 'fileutils' unless defined?(FileUtils)
require 'rake'
require 'yard'
# require 'yard'
require File.expand_path("../middleman-core/lib/middleman-core/version.rb", __FILE__)
@ -84,7 +84,7 @@ end
desc "Run tests for all middleman gems"
task :default => :test
desc "Generate documentation"
task :doc do
YARD::CLI::Yardoc.new.run
end
# desc "Generate documentation"
# task :doc do
# YARD::CLI::Yardoc.new.run
# end

View file

@ -1,7 +1,7 @@
require 'rubygems' unless defined?(Gem)
require 'rake'
require 'cucumber/rake/task'
require 'yard'
# require 'yard'
require 'bundler'
Bundler::GemHelper.install_tasks :name => GEM_NAME
@ -20,6 +20,6 @@ Cucumber::Rake::Task.new(:test, 'Run features that should pass') do |t|
t.cucumber_opts = "--color --tags ~@wip --strict --format #{ENV['CUCUMBER_FORMAT'] || 'pretty'}"
end
YARD::Rake::YardocTask.new
# YARD::Rake::YardocTask.new
task :default => :test

View file

@ -17,7 +17,6 @@ Feature: Builder
Then the following files should not exist:
| _partial |
| layout |
| other_layout |
| layouts/custom |
| layouts/content_for |

View file

@ -0,0 +1,58 @@
Feature: Text Files Without Extensions Should Build and Preview
Scenario: Building Text Files without directory indexes
Given a fixture app "extensionless-text-files-app"
And a file named "config.rb" with:
"""
"""
And a successfully built app at "extensionless-text-files-app"
When I cd to "build"
Then the following files should exist:
| CNAME |
| LICENSE |
| README |
Scenario: Building Text Files with directory indexes
Given a fixture app "extensionless-text-files-app"
And a file named "config.rb" with:
"""
activate :directory_indexes
"""
And a successfully built app at "extensionless-text-files-app"
When I cd to "build"
Then the following files should exist:
| CNAME |
| LICENSE |
| README |
Then the following files should not exist:
| CNAME/index.html |
| LICENSE/index.html |
| README/index.html |
Scenario: Previewing Text Files without directory indexes
Given "directory_indexes" feature is "disabled"
Given the Server is running at "extensionless-text-files-app"
When I go to "/CNAME"
Then I should see "test.github.com"
When I go to "/LICENSE"
Then I should see "You have the right to remain classy."
When I go to "/README"
Then I should see "Bork bork bork"
Scenario: Previewing Text Files with directory indexes
Given "directory_indexes" feature is "enabled"
Given the Server is running at "extensionless-text-files-app"
When I go to "/CNAME"
Then I should see "test.github.com"
When I go to "/LICENSE"
Then I should see "You have the right to remain classy."
When I go to "/README"
Then I should see "Bork bork bork"
# When I go to "/CNAME/index.html"
# Then I should see "File Not Found"
# When I go to "/LICENSE/index.html"
# Then I should see "File Not Found"
# When I go to "/README/index.html"
# Then I should see "File Not Found"

View file

@ -0,0 +1 @@
test.github.com

View file

@ -0,0 +1 @@
You have the right to remain classy.

View file

@ -0,0 +1 @@
Bork bork bork

View file

@ -18,6 +18,8 @@ end
# Simple callback library
require "middleman-core/vendor/hooks-0.2.0/lib/hooks"
require "middleman-core/version"
# Top-level Middleman object
module Middleman
WINDOWS = !!(RUBY_PLATFORM =~ /(mingw|bccwin|wince|mswin32)/i) unless const_defined?(:WINDOWS)

View file

@ -187,6 +187,8 @@ module Middleman::CoreExtensions::FrontMatter
def parse_front_matter(content)
yaml_regex = /^(---\s*\n.*?\n?)^(---\s*$\n?)/m
if content =~ yaml_regex
content = content[($1.size + $2.size)..-1]
begin
data = YAML.load($1)
rescue => e
@ -194,7 +196,6 @@ module Middleman::CoreExtensions::FrontMatter
return false
end
content = content.split(yaml_regex).last
else
return false
end

View file

@ -19,8 +19,12 @@ module Middleman::CoreExtensions::Sitemap
# Files starting with an underscore, but not a double-underscore
:partials => proc { |file, path| (file.match(/\/_/) && !file.match(/\/__/)) },
:layout => proc { |file, path|
file.match(/^source\/layout\./) || file.match(/^source\/layouts\//)
},
# Files without any output extension (layouts, partials)
:extensionless => proc { |file, path| !path.match(/\./) },
# :extensionless => proc { |file, path| !path.match(/\./) },
}
# Include instance methods

View file

@ -88,7 +88,10 @@ module Middleman::Sitemap
def page_by_destination(destination_path)
# TODO: memoize this
destination_path = normalize_path(destination_path)
pages.find {|p| p.destination_path == destination_path }
pages.find do |p|
p.destination_path == destination_path ||
p.destination_path == destination_path.sub("/#{@app.index_file}", "")
end
end
# Whether a path is ignored
@ -107,42 +110,6 @@ module Middleman::Sitemap
false
end
# Get a list of ignored paths
# @return [Array<String>]
def ignored_paths
pages.select(&:ignored?).map(&:path)
end
# Whether the given path is generic
# @param [String] path
# @return [Boolean]
def generic?(path)
generic_paths.include?(normalize_path(path))
end
# Get a list of generic paths
# @return [Array<String>]
def generic_paths
app.cache.fetch :generic_paths do
pages.select(&:generic?).map(&:path)
end
end
# Whether the given path is proxied
# @param [String] path
# @return [Boolean]
def proxied?(path)
proxied_paths.include?(normalize_path(path))
end
# Get a list of proxied paths
# @return [Array<String>]
def proxied_paths
app.cache.fetch :proxied_paths do
pages.select(&:proxy?).map(&:path)
end
end
# Remove a file from the store
# @param [String] file
# @return [void]

View file

@ -3,6 +3,8 @@ require "net/http"
require "win32/process" if ::Middleman::WINDOWS
require "fileutils"
module Middleman
class Watcher
class << self
@ -63,12 +65,26 @@ module Middleman
if @options[:"disable-watcher"]
bootup
else
pid_name = ".mm-pid-#{@options[:port]||4567}"
if File.exists?(pid_name)
current_pid = File.open(pid_name, 'rb') { |f| f.read }
begin
Process.kill("INT", -current_pid.to_i)
rescue
ensure
FileUtils.rm(pid_name)
end
end
@server_job = fork {
trap("INT") { exit(0) }
trap("TERM") { exit(0) }
trap("QUIT") { exit(0) }
bootup
}
File.open(pid_name, "w+") { |f| f.write(Process.getpgrp) }
end
end

View file

@ -19,7 +19,7 @@ Gem::Specification.new do |s|
s.require_path = "lib"
# Core
s.add_dependency("rack", ["~> 1.3.5"])
s.add_dependency("rack", ["~> 1.4.0"])
s.add_dependency("tilt", ["~> 1.3.1"])
# Builder
@ -29,7 +29,7 @@ Gem::Specification.new do |s|
s.add_dependency("thor", ["~> 0.14.0"])
# Helpers
s.add_dependency("activesupport", ["~> 3.1.0"])
s.add_dependency("activesupport", ["~> 3.2.0"])
# Watcher
s.add_dependency("fssm", ["~> 0.2.8"])

View file

@ -1,4 +1,6 @@
Feature: Compass sprites should be generated on build and copied
Scenario: Building a clean site with sprites
Given a successfully built app at "compass-sprites-app"
Then the output should contain "images/icon-"
When I cd to "build"
Then the following files should exist:
| images/icon-s1a8aa64128.png |

View file

@ -8,3 +8,8 @@ Feature: Sprockets Gems
# Given the Server is running at "sprockets-app"
# When I go to "/library/css/bootstrap_include.css"
# Then I should see "Bootstrap"
Scenario: Sprockets can pull js from vendored assets
Given the Server is running at "sprockets-app"
When I go to "/library/js/vendored_include.js"
Then I should see "var vendored_js_included = true;"

View file

@ -0,0 +1 @@
//= require "vendored_js"

View file

@ -0,0 +1 @@
var vendored_js_included = true;

View file

@ -15,56 +15,30 @@ module Middleman::CoreExtensions::Sprockets
# Once Middleman is setup
app.ready do
# Create sprockets env for JS
# Create sprockets env for JS and CSS
js_env = Middleman::CoreExtensions::Sprockets::JavascriptEnvironment.new(self)
css_env = Middleman::CoreExtensions::Sprockets::StylesheetEnvironment.new(self)
# Add any gems with vendor/assets/javascripts to paths
vendor_dir = File.join("vendor", "assets", "javascripts")
gems_with_js = ::Middleman.rubygems_latest_specs.select do |spec|
::Middleman.spec_has_file?(spec, vendor_dir)
end.each do |spec|
js_env.append_path File.join(spec.full_gem_path, vendor_dir)
end
# Add any gems with (vendor|app|.)/assets/javascripts to paths
# also add similar directories from project root (like in rails)
root_paths = [%w{ app }, %w{ assets }, %w{ vendor }, %w{ app assets }, %w{ vendor assets }]
try_js_paths = root_paths.map{|rp| File.join(rp, 'javascripts')}
try_css_paths = root_paths.map{|rp| File.join(rp, 'stylesheets')}
# Add any gems with app/assets/javascripts to paths
app_dir = File.join("app", "assets", "javascripts")
gems_with_js = ::Middleman.rubygems_latest_specs.select do |spec|
::Middleman.spec_has_file?(spec, app_dir)
end.each do |spec|
js_env.append_path File.join(spec.full_gem_path, app_dir)
end
# Intercept requests to /javascripts and pass to sprockets
map "/#{js_dir}" do
run js_env
{ try_js_paths => js_env, try_css_paths => css_env }.each do |paths, env|
([root] + ::Middleman.rubygems_latest_specs.map(&:full_gem_path)).each do |root_path|
paths.map{|p| File.join(root_path, p)}.
select{|p| File.directory?(p)}.
each{|path| env.append_path(path)}
end
end
# Setup Sprockets Sass options
sass.each { |k, v| ::Sprockets::Sass.options[k] = v }
# Create sprockets env for CSS
css_env = Middleman::CoreExtensions::Sprockets::StylesheetEnvironment.new(self)
# Add any gems with vendor/assets/stylesheets to paths
vendor_dir = File.join("vendor", "assets", "stylesheets")
gems_with_css = ::Middleman.rubygems_latest_specs.select do |spec|
::Middleman.spec_has_file?(spec, vendor_dir)
end.each do |spec|
css_env.append_path File.join(spec.full_gem_path, vendor_dir)
end
# Add any gems with app/assets/stylesheets to paths
app_dir = File.join("app", "assets", "stylesheets")
gems_with_css = ::Middleman.rubygems_latest_specs.select do |spec|
::Middleman.spec_has_file?(spec, app_dir)
end.each do |spec|
css_env.append_path File.join(spec.full_gem_path, app_dir)
end
# Intercept requests to /stylesheets and pass to sprockets
map("/#{css_dir}") do
run css_env
end
# Intercept requests to /javascripts and /stylesheets and pass to sprockets
map("/#{js_dir}") { run js_env }
map("/#{css_dir}"){ run css_env }
end
end
alias :included :registered

View file

@ -24,7 +24,7 @@ Gem::Specification.new do |s|
s.add_dependency("sass", ["~> 3.1.7"])
s.add_dependency("compass", ["0.12.rc.1"])
s.add_dependency("coffee-script", ["~> 2.2.0"])
s.add_dependency("execjs", ["~> 1.2.7"])
s.add_dependency("execjs", ["~> 1.2"])
s.add_dependency("sprockets", ["~> 2.1.0"])
s.add_dependency("sprockets-sass", ["~> 0.6.0"])
s.add_dependency("redcarpet", ["~> 2.0.0"])