From 2b3354472c0636a5d2171047eb12bede48249bc9 Mon Sep 17 00:00:00 2001 From: Thomas Reynolds Date: Wed, 28 Dec 2011 15:29:19 -0800 Subject: [PATCH] Run static directories, woot --- CHANGELOG.md | 2 ++ bin/middleman | 10 +++++----- features/ignore_already_minified.features | 12 ++++++++++++ features/static_server.feature | 6 ++++++ fixtures/already-minified-app/config.rb | 2 ++ .../source/javascripts/test.min.js | 10 ++++++++++ .../source/stylesheets/test.min.css | 10 ++++++++++ fixtures/plain-app/index.html | 1 + lib/middleman/base.rb | 7 +++++-- lib/middleman/cli/server.rb | 7 ++++--- lib/middleman/core_extensions/front_matter.rb | 5 ++++- lib/middleman/core_extensions/rendering.rb | 5 ++++- lib/middleman/core_extensions/sitemap.rb | 7 +++++-- lib/middleman/sitemap/store.rb | 5 ++--- lib/middleman/step_definitions/server_steps.rb | 9 ++++++++- 15 files changed, 80 insertions(+), 18 deletions(-) create mode 100644 features/ignore_already_minified.features create mode 100644 features/static_server.feature create mode 100644 fixtures/already-minified-app/config.rb create mode 100644 fixtures/already-minified-app/source/javascripts/test.min.js create mode 100644 fixtures/already-minified-app/source/stylesheets/test.min.css create mode 100644 fixtures/plain-app/index.html diff --git a/CHANGELOG.md b/CHANGELOG.md index 8bb7492e..c8ee1f6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ * Support for placekitten.com * Added MM_ROOT environmental variable * activating extensions can now take an options hash +* Don't re-minify files with ".min" in their name +* Serve purely static folders directly (without source/ and config.rb) 2.0.14 ==== diff --git a/bin/middleman b/bin/middleman index acc6642c..b1ed6b89 100755 --- a/bin/middleman +++ b/bin/middleman @@ -14,17 +14,17 @@ def locate_middleman_root!(cwd = Pathname.new(Dir.pwd)) locate_middleman_root!(cwd.parent) end -if !ENV['MM_ROOT'] && found_path = locate_middleman_root! - ENV['MM_ROOT'] = found_path +if !ENV["MM_ROOT"] && found_path = locate_middleman_root! + ENV["MM_ROOT"] = found_path end -if ENV['MM_ROOT'] +if ENV["MM_ROOT"] # Set up gems listed in the Gemfile. - ENV['BUNDLE_GEMFILE'] ||= File.expand_path('Gemfile', ENV['MM_ROOT']) + ENV['BUNDLE_GEMFILE'] ||= File.expand_path('Gemfile', ENV["MM_ROOT"]) require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE']) end require 'middleman' -Dir.chdir(ENV['MM_ROOT'] || Dir.pwd) do +Dir.chdir(ENV["MM_ROOT"] || Dir.pwd) do Middleman::Cli::Base.start end \ No newline at end of file diff --git a/features/ignore_already_minified.features b/features/ignore_already_minified.features new file mode 100644 index 00000000..98e38620 --- /dev/null +++ b/features/ignore_already_minified.features @@ -0,0 +1,12 @@ +Feature: CSS and Javascripts which are minify shouldn't be re-minified + Scenario: CSS file + + Scenario: JS files containing ".min" should not be re-compressed + And the Server is running at "already-minified-app" + When I go to "/javascripts/test.min.js" + Then I should see "10" lines + + Scenario: CSS files containing ".min" should not be re-compressed + And the Server is running at "already-minified-app" + When I go to "/stylesheets/test.min.css" + Then I should see "10" lines \ No newline at end of file diff --git a/features/static_server.feature b/features/static_server.feature new file mode 100644 index 00000000..569b4cd1 --- /dev/null +++ b/features/static_server.feature @@ -0,0 +1,6 @@ +Feature: Middleman should serve plain directories without config + + Scenario: Preview a folder of static pages + Given the Server is running at "plain-app" + When I go to "/index.html" + Then I should see "I am index" \ No newline at end of file diff --git a/fixtures/already-minified-app/config.rb b/fixtures/already-minified-app/config.rb new file mode 100644 index 00000000..4aafdc75 --- /dev/null +++ b/fixtures/already-minified-app/config.rb @@ -0,0 +1,2 @@ +activate :minify_javascript +activate :minify_css \ No newline at end of file diff --git a/fixtures/already-minified-app/source/javascripts/test.min.js b/fixtures/already-minified-app/source/javascripts/test.min.js new file mode 100644 index 00000000..a656a87d --- /dev/null +++ b/fixtures/already-minified-app/source/javascripts/test.min.js @@ -0,0 +1,10 @@ +var numbers = [ 1, +2, +3, +4, +5, +6, +7, +8, +9, +10 ]; \ No newline at end of file diff --git a/fixtures/already-minified-app/source/stylesheets/test.min.css b/fixtures/already-minified-app/source/stylesheets/test.min.css new file mode 100644 index 00000000..fdfb866d --- /dev/null +++ b/fixtures/already-minified-app/source/stylesheets/test.min.css @@ -0,0 +1,10 @@ +body { one: 1; + two: 2; + three: 3; + four: 4; + five: 5; + six: 6; + seven: 7; + eight: 8; + nine: 9; + ten: 10; } \ No newline at end of file diff --git a/fixtures/plain-app/index.html b/fixtures/plain-app/index.html new file mode 100644 index 00000000..963a3e93 --- /dev/null +++ b/fixtures/plain-app/index.html @@ -0,0 +1 @@ +I am index \ No newline at end of file diff --git a/lib/middleman/base.rb b/lib/middleman/base.rb index b062d88d..236136a2 100644 --- a/lib/middleman/base.rb +++ b/lib/middleman/base.rb @@ -159,7 +159,7 @@ class Middleman::Base # Root project directory (overwritten in middleman build/server) # @return [String] - set :root, ENV['MM_ROOT'] || Dir.pwd + set :root, ENV["MM_ROOT"] || Dir.pwd # Name of the source directory # @return [String] @@ -301,7 +301,10 @@ class Middleman::Base instance_exec(&block) if block_given? # Build expanded source path once paths have been parsed - set :source_dir, File.join(root, source) + path = root.dup + source_path = ENV["MM_SOURCE"] || self.source + path = File.join(root, source_path) unless source_path.empty? + set :source_dir, path super end diff --git a/lib/middleman/cli/server.rb b/lib/middleman/cli/server.rb index d727763f..9a0dd6ad 100644 --- a/lib/middleman/cli/server.rb +++ b/lib/middleman/cli/server.rb @@ -12,7 +12,6 @@ module Middleman::Cli method_option :host, :type => :string, :aliases => "-h", - # :required => true, :default => "0.0.0.0", :desc => "Bind to HOST address" method_option "port", @@ -25,8 +24,10 @@ module Middleman::Cli :desc => 'Print debug messages' def server if !ENV["MM_ROOT"] - $stderr.puts "== Error: Could not find a Middleman project config, perhaps you are in the wrong folder?" - exit(1) + puts "== Warning: Could not find a Middleman project config.rb" + puts "== Treating directory as a static site to be served" + ENV["MM_ROOT"] = Dir.pwd + ENV["MM_SOURCE"] = "" end params = { diff --git a/lib/middleman/core_extensions/front_matter.rb b/lib/middleman/core_extensions/front_matter.rb index 34199c90..041f8eeb 100644 --- a/lib/middleman/core_extensions/front_matter.rb +++ b/lib/middleman/core_extensions/front_matter.rb @@ -25,7 +25,10 @@ module Middleman::CoreExtensions::FrontMatter super exts = frontmatter_extensions.join("|").gsub(".", "\.") - matcher = %r{source/.*(#{exts})} + + static_path = source_dir.sub(self.root, "").sub(/^\//, "").sub(/\/$/, "") + "/" + + matcher = %r{#{static_path}.*(#{exts})} file_changed matcher do |file| frontmatter_extension.touch_file(file) diff --git a/lib/middleman/core_extensions/rendering.rb b/lib/middleman/core_extensions/rendering.rb index ba6e564e..9852bf41 100644 --- a/lib/middleman/core_extensions/rendering.rb +++ b/lib/middleman/core_extensions/rendering.rb @@ -28,7 +28,10 @@ module Middleman::CoreExtensions::Rendering def initialize super - file_changed %r{^source/} do |file| + static_path = source_dir.sub(self.root, "").sub(/^\//, "") + render_regex = static_path.empty? ? // : (%r{^#{static_path + "/"}}) + + file_changed render_regex do |file| path = File.expand_path(file, root) cache.remove(:raw_template, path) end diff --git a/lib/middleman/core_extensions/sitemap.rb b/lib/middleman/core_extensions/sitemap.rb index 3368c771..54437f3e 100644 --- a/lib/middleman/core_extensions/sitemap.rb +++ b/lib/middleman/core_extensions/sitemap.rb @@ -28,11 +28,14 @@ module Middleman::CoreExtensions::Sitemap def initialize super - file_changed %r{^source/} do |file| + static_path = source_dir.sub(self.root, "").sub(/^\//, "") + sitemap_regex = static_path.empty? ? // : (%r{^#{static_path + "/"}}) + + file_changed sitemap_regex do |file| sitemap.touch_file(file) end - file_deleted %r{^source/} do |file| + file_deleted sitemap_regex do |file| sitemap.remove_file(file) end end diff --git a/lib/middleman/sitemap/store.rb b/lib/middleman/sitemap/store.rb index 3b90991d..75b22eb8 100644 --- a/lib/middleman/sitemap/store.rb +++ b/lib/middleman/sitemap/store.rb @@ -4,7 +4,6 @@ module Middleman::Sitemap def initialize(app) @app = app - @source = File.expand_path(@app.source, @app.root) @pages = {} end @@ -88,7 +87,7 @@ module Middleman::Sitemap def file_to_path(file) file = File.expand_path(file, @app.root) - prefix = @source + "/" + prefix = @app.source_dir.sub(/\/$/, "") + "/" return false unless file.include?(prefix) path = file.sub(prefix, "") @@ -98,7 +97,7 @@ module Middleman::Sitemap end def touch_file(file) - return false if file == @source || File.directory?(file) + return false if file == @app.source_dir || File.directory?(file) path = file_to_path(file) return false unless path diff --git a/lib/middleman/step_definitions/server_steps.rb b/lib/middleman/step_definitions/server_steps.rb index e06b9db2..acd05092 100644 --- a/lib/middleman/step_definitions/server_steps.rb +++ b/lib/middleman/step_definitions/server_steps.rb @@ -23,10 +23,17 @@ end Given /^the Server is running at "([^\"]*)"$/ do |app_path| step %Q{a project at "#{app_path}"} + + root_dir = File.join(PROJECT_ROOT_PATH, "fixtures", app_path) + if File.exists?(File.join(root_dir, "source")) + ENV["MM_SOURCE"] = "source" + else + ENV["MM_SOURCE"] = "" + end initialize_commands = @initialize_commands || [] initialize_commands.unshift lambda { - set :root, File.join(PROJECT_ROOT_PATH, "fixtures", app_path) + set :root, root_dir set :environment, @current_env || :development set :show_exceptions, false }