52 lines
1.4 KiB
Ruby
52 lines
1.4 KiB
Ruby
# CLI Module
|
|
module Middleman::Cli
|
|
# The CLI Console class
|
|
class Console < Thor::Group
|
|
include Thor::Actions
|
|
|
|
check_unknown_options!
|
|
|
|
class_option :environment,
|
|
aliases: '-e',
|
|
default: ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development',
|
|
desc: 'The environment Middleman will run under'
|
|
class_option :verbose,
|
|
type: :boolean,
|
|
default: false,
|
|
desc: 'Print debug messages'
|
|
def console
|
|
require 'middleman-core'
|
|
require 'irb'
|
|
|
|
opts = {
|
|
environment: options['environment'],
|
|
debug: options['verbose']
|
|
}
|
|
|
|
@app = ::Middleman::Application.new do
|
|
config[:environment] = opts[:environment].to_sym if opts[:environment]
|
|
|
|
::Middleman::Logger.singleton(opts[:debug] ? 0 : 1, opts[:instrumenting] || false)
|
|
end
|
|
|
|
self.class.interact_with @app
|
|
end
|
|
|
|
# Start an interactive console in the context of the provided object.
|
|
# @param [Object] context
|
|
# @return [void]
|
|
def self.interact_with(context)
|
|
IRB.setup nil
|
|
IRB.conf[:MAIN_CONTEXT] = IRB::Irb.new.context
|
|
require 'irb/ext/multi-irb'
|
|
IRB.irb nil, context
|
|
end
|
|
|
|
# Add to CLI
|
|
Base.register(self, 'console', 'console [options]', 'Start an interactive console in the context of your Middleman application')
|
|
|
|
# Map "c" to "console"
|
|
Base.map('c' => 'console')
|
|
end
|
|
end
|