lib/middleman-deploy/commands.rb in middleman-deploy-1.0.0 vs lib/middleman-deploy/commands.rb in middleman-deploy-2.0.0.pre.alpha
- old
+ new
@@ -1,88 +1,118 @@
require 'middleman-core/cli'
-
+require 'middleman-core/rack' if Middleman::VERSION.to_i > 3
require 'middleman-deploy/pkg-info'
require 'middleman-deploy/extension'
require 'middleman-deploy/methods'
require 'middleman-deploy/strategies'
module Middleman
module Cli
# This class provides a "deploy" command for the middleman CLI.
- class Deploy < Thor
+ class Deploy < Thor::Group
include Thor::Actions
check_unknown_options!
namespace :deploy
+ class_option :environment,
+ aliases: '-e',
+ default: ENV['MM_ENV'] || ENV['RACK_ENV'] || 'production',
+ desc: 'The environment Middleman will run under'
+
+ class_option :verbose,
+ type: :boolean,
+ default: false,
+ desc: 'Print debug messages'
+
+ class_option :instrument,
+ type: :string,
+ default: false,
+ desc: 'Print instrument messages'
+
+ class_option :build_before,
+ type: :boolean,
+ aliases: '-b',
+ desc: 'Run `middleman build` before the deploy step'
+
+ def self.subcommand_help(_options)
+ # TODO
+ end
+
# Tell Thor to exit with a nonzero exit code on failure
def self.exit_on_failure?
true
end
- desc 'deploy [options]', Middleman::Deploy::TAGLINE
- method_option 'build_before',
- type: :boolean,
- aliases: '-b',
- desc: 'Run `middleman build` before the deploy step'
def deploy
+ env = options['environment'] ? :production : options['environment'].to_s.to_sym
+ verbose = options['verbose'] ? 0 : 1
+ instrument = options['instrument']
+
+ @app = ::Middleman::Application.new do
+ config[:mode] = :build
+ config[:environment] = env
+ ::Middleman::Logger.singleton(verbose, instrument)
+ end
build_before(options)
process
end
protected
def build_before(options = {})
- build_enabled = options.fetch('build_before', self.deploy_options.build_before)
+ build_enabled = options.fetch('build_before', deploy_options.build_before)
if build_enabled
# http://forum.middlemanapp.com/t/problem-with-the-build-task-in-an-extension
- run('middleman build') || exit(1)
+ run("middleman build -e #{options['environment']}") || exit(1)
end
end
def print_usage_and_die(message)
- raise Error, "ERROR: #{message}\n#{Middleman::Deploy::README}"
+ fail StandardError, "ERROR: #{message}\n#{Middleman::Deploy::README}"
end
def process
- server_instance = ::Middleman::Application.server.inst
-
- camelized_method = self.deploy_options.method.to_s.split('_').map { |word| word.capitalize}.join
+ server_instance = @app
+ camelized_method = deploy_options.deploy_method.to_s.split('_').map(&:capitalize).join
method_class_name = "Middleman::Deploy::Methods::#{camelized_method}"
- method_instance = method_class_name.constantize.new(server_instance, self.deploy_options)
+ method_instance = method_class_name.constantize.new(server_instance, deploy_options)
method_instance.process
end
def deploy_options
options = nil
begin
- options = ::Middleman::Application.server.inst.options
+ options = ::Middleman::Deploy.options
rescue NoMethodError
print_usage_and_die 'You need to activate the deploy extension in config.rb.'
end
- unless options.method
+ unless options.deploy_method
print_usage_and_die 'The deploy extension requires you to set a method.'
end
- case options.method
+ case options.deploy_method
when :rsync, :sftp
unless options.host && options.path
- print_usage_and_die "The #{options.method} method requires host and path to be set."
+ print_usage_and_die "The #{options.deploy_method} method requires host and path to be set."
end
when :ftp
unless options.host && options.user && options.password && options.path
print_usage_and_die 'The ftp deploy method requires host, path, user, and password to be set.'
end
end
options
end
end
+
+ # Add to CLI
+ Base.register(Middleman::Cli::Deploy, 'deploy', 'deploy [options]', Middleman::Deploy::TAGLINE)
# Alias "d" to "deploy"
Base.map('d' => 'deploy')
end
end