From f40c8a56da1b77dcabfb65c287040924741b1881 Mon Sep 17 00:00:00 2001 From: Thomas Reynolds Date: Sun, 10 Apr 2011 15:27:18 -0700 Subject: [PATCH] traverse up directories to find root mm project. closes #19 --- bin/mm-server | 32 ++++++++++++++++++++++++++++++-- lib/middleman/server.rb | 29 +++++++++++++---------------- 2 files changed, 43 insertions(+), 18 deletions(-) diff --git a/bin/mm-server b/bin/mm-server index 50b3ca1c..04b48d6d 100755 --- a/bin/mm-server +++ b/bin/mm-server @@ -44,13 +44,41 @@ OptionParser.new { |opts| ENV['RACK_ENV'] = env -class Middleman::Server - set :root, Dir.pwd +@current_path = Dir.pwd +@path_parts = @current_path.split("/") +@found_root = false + +while (!@found_root && (@path_parts.length > 0)) + @current_path = File.join(*@path_parts) + + public_folder = File.join(@current_path, "public") + views_folder = File.join(@current_path, "views") + + if File.exists?(public_folder) && File.exists?(views_folder) + @found_root = true + next + end + + @path_parts.pop end +if !@found_root + $stderr.puts "== Error: Could not find a Middleman project structure, perhaps you are in the wrong folder?" + exit +end + +# If the old init.rb exists, use it, but issue warning +old_config = File.join(@current_path, "init.rb") +if File.exists? old_config + $stderr.puts "== Error: The init.rb file (deprecated) needs to be be renamed to config.rb" + exit +end + + # require 'shotgun' # config = File.join(File.dirname(__FILE__), '..', 'lib', 'middleman', 'config.ru') # app = Shotgun.new(config, &lambda { |inner_app| Middleman::Server }) +Middleman::Server.root = @current_path app = Middleman::Server.new require 'rubygems' diff --git a/lib/middleman/server.rb b/lib/middleman/server.rb index 2d83a867..03130a57 100644 --- a/lib/middleman/server.rb +++ b/lib/middleman/server.rb @@ -9,7 +9,7 @@ module Middleman class Server < Sinatra::Base # Basic Sinatra config set :app_file, __FILE__ - set :root, ENV["MM_DIR"] || Dir.pwd + #set :root, ENV["MM_DIR"] || Dir.pwd set :reload, false set :sessions, false set :logging, false @@ -117,13 +117,17 @@ module Middleman def process_request(options={}) # Normalize the path and add index if we're looking at a directory path = request.path - path = File.join(path, settings.index_file) if path.split('/').last.split('.').length == 1 - path.gsub!(%r{^/}, '') - static_path = File.join(Middleman::Server.public, path) - if File.exists? static_path - send_file static_path - return + parts = path ? path.split('/') : [] + if parts.last.nil? || parts.last.split('.').length == 1 + path = File.join(path, settings.index_file) end + path.gsub!(%r{^/}, '') + + static_path = File.join(Middleman::Server.public, path) + # if File.exists? static_path + # send_file static_path + # return + # end old_layout = settings.current_layout settings.layout(options[:layout]) if !options[:layout].nil? @@ -150,16 +154,9 @@ require "middleman/assets" # The Rack App class Middleman::Server - def self.new(*args, &block) - # If the old init.rb exists, use it, but issue warning - old_config = File.join(self.root, "init.rb") - if File.exists? old_config - $stderr.puts "== Warning: The init.rb file has been renamed to config.rb" - local_config = old_config - end - + def self.new(*args, &block) # Check for and evaluate local configuration - local_config ||= File.join(self.root, "config.rb") + local_config = File.join(self.root, "config.rb") if File.exists? local_config $stderr.puts "== Reading: Local config" if logging? Middleman::Server.class_eval File.read(local_config)