require 'guard' require 'guard/plugin' require 'guard/rack/runner' require 'rbconfig' module Guard class Rack < ::Guard::Plugin attr_reader :options, :runner DEFAULT_OPTIONS = { port: 9292, host: '0.0.0.0', environment: 'development', start_on_start: true, force_run: false, timeout: 20, debugger: false, config: 'config.ru', cmd: 'rackup' }.freeze def initialize(options = {}) super @options = DEFAULT_OPTIONS.merge(options) @runner = ::Guard::RackRunner.new(@options) end def start server = options[:server] ? "#{options[:server]} and " : '' UI.info "Guard::Rack will now restart your app on port #{options[:port]} using #{server}#{options[:environment]} environment." reload if options[:start_on_start] end def reload UI.info 'Restarting Rack...' Notifier.notify("Rack restarting on port #{options[:port]} in #{options[:environment]} environment...", title: 'Restarting Rack...', image: :pending) if runner.restart UI.info "Rack restarted, pid #{runner.pid}" Notifier.notify("Rack restarted on port #{options[:port]}.", title: 'Rack restarted!', image: :success) else UI.info 'Rack NOT restarted, check your log files.' Notifier.notify('Rack NOT restarted, check your log files.', title: 'Rack NOT restarted!', image: :failed) end end def stop Notifier.notify('Until next time...', title: 'Rack shutting down.', image: :pending) runner.stop end def run_on_changes(_paths) reload end end end