diff --git a/middleman-core/bin/middleman b/middleman-core/bin/middleman index aca9cd6f..a2f90c1a 100755 --- a/middleman-core/bin/middleman +++ b/middleman-core/bin/middleman @@ -4,21 +4,13 @@ libdir = File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), "lib")) $LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir) -# Setup RubyGems -require "rubygems" +moredir = File.expand_path(File.join(File.dirname(File.dirname(libdir)), "middleman-more", "lib", "middleman-more")) +$LOAD_PATH.unshift(moredir) unless $LOAD_PATH.include?(moredir) -# Core Pathname library used for traversal -require "pathname" - -# Recursive method to find config.rb -def locate_middleman_root!(cwd = Pathname.new(Dir.pwd)) - return cwd.to_s if File.exists?(File.join(cwd, 'config.rb')) - return false if cwd.root? - locate_middleman_root!(cwd.parent) -end +require "middleman-core/cli" # Only look for config.rb if MM_ROOT isn't set -if !ENV["MM_ROOT"] && found_path = locate_middleman_root! +if !ENV["MM_ROOT"] && found_path = ::Middleman.locate_root ENV["MM_ROOT"] = found_path end @@ -30,30 +22,19 @@ if ENV["MM_ROOT"] require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE']) end +# Automatically discover extensions in RubyGems +require "middleman-core/extensions" +::Middleman.load_extensions_in_path + # Default command is server ARGV.unshift("server") if ARGV.length < 1 || ARGV.first.include?("-") -begin - # Local - require File.expand_path(File.join(File.dirname(File.dirname(libdir)), "middleman-more", "lib", "middleman-more")) -rescue LoadError - begin - # Rubygems - require "middleman-more" - rescue LoadError - # Require Middleman - require 'middleman-core' +# Start the CLI +if ENV["MM_ROOT"] + # Change directory to the root + Dir.chdir(ENV["MM_ROOT"]) do + Middleman::Cli::Base.start end -end - -# Automatically discover extensions in RubyGems -Middleman.load_extensions_in_path - -require "middleman-core/cli" - -# Change directory to the root -Dir.chdir(ENV["MM_ROOT"] || Dir.pwd) do - - # Start the CLI +else Middleman::Cli::Base.start -end +end \ No newline at end of file diff --git a/middleman-core/lib/middleman-core/cli.rb b/middleman-core/lib/middleman-core/cli.rb index 6bbe955c..de41418b 100644 --- a/middleman-core/lib/middleman-core/cli.rb +++ b/middleman-core/lib/middleman-core/cli.rb @@ -2,64 +2,77 @@ require 'thor' require "thor/group" -# CLI Module -module Middleman::Cli - - # The base task from which everything else etends - class Base < Thor - - desc "version", "Show version" - def version - require 'middleman-core/version' - say "Middleman #{Middleman::VERSION}" - end - - # Override the Thor help method to find help for subtasks - # @param [Symbol, String, nil] meth - # @param [Boolean] subcommand - # @return [void] - def help(meth = nil, subcommand = false) - if meth && !self.respond_to?(meth) - klass, task = Thor::Util.find_class_and_task_by_namespace("#{meth}:#{meth}") - klass.start(["-h", task].compact, :shell => self.shell) - else - list = [] - Thor::Util.thor_classes_in(Middleman::Cli).each do |klass| - list += klass.printable_tasks(false) - end - list.sort!{ |a,b| a[0] <=> b[0] } - - shell.say "Tasks:" - shell.print_table(list, :ident => 2, :truncate => true) - shell.say - end - end - - # Intercept missing methods and search subtasks for them - # @param [Symbol] meth - def method_missing(meth, *args) - meth = meth.to_s - - if self.class.map.has_key?(meth) - meth = self.class.map[meth] - end - - klass, task = Thor::Util.find_class_and_task_by_namespace("#{meth}:#{meth}") - - if klass.nil? - tasks_dir = File.join(Dir.pwd, "tasks") +# Core Pathname library used for traversal +require "pathname" - if File.exists?(tasks_dir) - Dir[File.join(tasks_dir, "**/*_task.rb")].each { |f| require f } +# CLI Module +module Middleman + + # Recursive method to find config.rb + def self.locate_root(cwd = Pathname.new(Dir.pwd)) + return cwd.to_s if File.exists?(File.join(cwd, 'config.rb')) + return false if cwd.root? + locate_root(cwd.parent) + end + + module Cli + + # The base task from which everything else etends + class Base < Thor + + desc "version", "Show version" + def version + require 'middleman-core/version' + say "Middleman #{Middleman::VERSION}" + end + + # Override the Thor help method to find help for subtasks + # @param [Symbol, String, nil] meth + # @param [Boolean] subcommand + # @return [void] + def help(meth = nil, subcommand = false) + if meth && !self.respond_to?(meth) klass, task = Thor::Util.find_class_and_task_by_namespace("#{meth}:#{meth}") + klass.start(["-h", task].compact, :shell => self.shell) + else + list = [] + Thor::Util.thor_classes_in(Middleman::Cli).each do |klass| + list += klass.printable_tasks(false) + end + list.sort!{ |a,b| a[0] <=> b[0] } + + shell.say "Tasks:" + shell.print_table(list, :ident => 2, :truncate => true) + shell.say end end + + # Intercept missing methods and search subtasks for them + # @param [Symbol] meth + def method_missing(meth, *args) + meth = meth.to_s - if klass.nil? - super - else - args.unshift(task) if task - klass.start(args, :shell => self.shell) + if self.class.map.has_key?(meth) + meth = self.class.map[meth] + end + + klass, task = Thor::Util.find_class_and_task_by_namespace("#{meth}:#{meth}") + + if klass.nil? + tasks_dir = File.join(Dir.pwd, "tasks") + + if File.exists?(tasks_dir) + Dir[File.join(tasks_dir, "**/*_task.rb")].each { |f| require f } + klass, task = Thor::Util.find_class_and_task_by_namespace("#{meth}:#{meth}") + end + end + + if klass.nil? + super + else + args.unshift(task) if task + klass.start(args, :shell => self.shell) + end end end end diff --git a/middleman-core/lib/middleman-core/cli/build.rb b/middleman-core/lib/middleman-core/cli/build.rb index 38221872..83b15e50 100644 --- a/middleman-core/lib/middleman-core/cli/build.rb +++ b/middleman-core/lib/middleman-core/cli/build.rb @@ -1,9 +1,3 @@ -# Use Rack::Test for inspecting a running server for output -require "rack" -require "rack/test" - -require 'find' - # CLI Module module Middleman::Cli @@ -38,6 +32,12 @@ module Middleman::Cli raise Thor::Error, "Error: Could not find a Middleman project config, perhaps you are in the wrong folder?" end + # Use Rack::Test for inspecting a running server for output + require "rack" + require "rack/test" + + require 'find' + self.class.shared_instance(options["verbose"] || false) self.class.shared_rack diff --git a/middleman-core/lib/middleman-core/cli/server.rb b/middleman-core/lib/middleman-core/cli/server.rb index c43a507b..76a3582a 100644 --- a/middleman-core/lib/middleman-core/cli/server.rb +++ b/middleman-core/lib/middleman-core/cli/server.rb @@ -1,5 +1,3 @@ -require "middleman-core/preview_server" - # CLI Module module Middleman::Cli @@ -34,6 +32,9 @@ module Middleman::Cli # Start the server def server + require "middleman-core" + require "middleman-core/preview_server" + if !ENV["MM_ROOT"] puts "== Could not find a Middleman project config.rb" puts "== Treating directory as a static site to be served" @@ -50,7 +51,7 @@ module Middleman::Cli } puts "== The Middleman is loading" - Middleman::PreviewServer.start(params) + ::Middleman::PreviewServer.start(params) end end diff --git a/middleman-core/lib/middleman-core/extensions.rb b/middleman-core/lib/middleman-core/extensions.rb index d42ebca3..7ba2bc1b 100644 --- a/middleman-core/lib/middleman-core/extensions.rb +++ b/middleman-core/lib/middleman-core/extensions.rb @@ -78,6 +78,13 @@ module Middleman if defined?(Bundler) Bundler.require else + require "rubygems" + + begin + require "middleman-more" + rescue LoadError + end + extensions = rubygems_latest_specs.select do |spec| spec_has_file?(spec, EXTENSION_FILE) end