middleman/lib/middleman/cli.rb

97 lines
3.8 KiB
Ruby
Raw Normal View History

require 'thor'
module Middleman
class CLI < Thor
include Thor::Actions
2011-07-27 06:26:10 +02:00
check_unknown_options!
default_task :server
class_option "help", :type => :boolean, :default => false, :aliases => "-h"
def initialize(*)
super
help_check if options[:help]
end
desc "init NAME [options]", "Create new Middleman project directory NAME"
available_templates = Middleman::Templates.registered_names.join(", ")
2011-07-27 06:25:48 +02:00
method_option "template", :aliases => "-T", :default => "default", :desc => "Optionally use a pre-defined project template: #{available_templates}"
method_option "css_dir", :default => "stylesheets", :desc => 'The path to the css files'
method_option "js_dir", :default => "javascripts", :desc => 'The path to the javascript files'
method_option "images_dir", :default => "images", :desc => 'The path to the image files'
2011-08-05 19:44:41 +02:00
method_option "rack", :type => :boolean, :default => false, :desc => 'Include a config.ru file'
method_option "bundler", :type => :boolean, :default => false, :desc => 'Create a Gemfile and use Bundler to manage gems'
def init(name)
key = options[:template].to_sym
unless Middleman::Templates.registered_templates.has_key?(key)
key = :default
end
thor_group = Middleman::Templates.registered_templates[key]
thor_group.new([name], options).invoke_all
end
desc "server [-p 4567] [-e development]", "Starts the Middleman preview server"
method_option "environment", :aliases => "-e", :default => ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development', :desc => "The environment Middleman will run under"
method_option "port", :aliases => "-p", :default => "4567", :desc => "The port Middleman will listen on"
2011-10-14 22:13:21 +02:00
method_option "disable-watcher", :default => false, :type => :boolean, :desc => "Don't use config.rb watcher (also disables livereload)"
method_option "livereload", :default => false, :type => :boolean, :desc => "Whether to enable Livereload or not"
method_option "livereload-port", :default => "35729", :desc => "The port Livereload will listen on"
def server
v1_check
2011-08-09 23:46:50 +02:00
if options["livereload"]
livereload_options = {:port => options["livereload-port"]}
2011-08-09 23:37:55 +02:00
end
2011-10-14 22:13:21 +02:00
params = {
2011-08-09 23:46:50 +02:00
:port => options[:port],
:environment => options[:environment]
2011-10-14 22:13:21 +02:00
}
if options["disable-watcher"]
Middleman.start_server(params)
else
Middleman::Guard.start(params, livereload_options)
end
end
desc "build", "Builds the static site for deployment"
2011-09-13 01:15:51 +02:00
method_option :relative, :type => :boolean, :aliases => "-r", :default => false, :desc => 'Override the config.rb file and force relative urls'
2011-10-14 20:36:46 +02:00
method_option :clean, :type => :boolean, :aliases => "-c", :default => false, :desc => 'Builds a clean project removing any orpahand files or directories'
2011-09-13 01:15:51 +02:00
method_option :glob, :type => :string, :aliases => "-g", :default => nil, :desc => 'Build a subset of the project'
def build
v1_check
thor_group = Middleman::Builder.new([], options).invoke_all
end
desc "migrate", "Migrates an older Middleman project to the 2.0 structure"
def migrate
return if File.exists?("source")
`mv public source`
`cp -R views/* source/`
`rm -rf views`
end
2011-08-03 23:43:02 +02:00
desc "version", "Show Middleman version"
def version
require 'middleman/version'
say "Middleman #{Middleman::VERSION}"
end
private
2011-08-03 07:27:16 +02:00
def v1_check
if File.exists?("views") || File.exists?("public")
$stderr.puts "== Error: The views and public folders are have been combined. Use the 'middleman migrate' command to merge your folders automatically."
exit 1
end
end
def help_check
help self.class.send(:retrieve_task_name, ARGV.dup)
exit 0
end
end
end