lib/rerun/options.rb in rerun-0.12.0 vs lib/rerun/options.rb in rerun-0.13.0
- old
+ new
@@ -15,128 +15,131 @@
# If you change the default pattern, please update the README.md file -- the list appears twice therein, which at the time of this comment are lines 17 and 119
DEFAULT_PATTERN = "**/*.{rb,js,coffee,css,scss,sass,erb,html,haml,ru,yml,slim,md,feature,c,h}"
DEFAULT_DIRS = ["."]
DEFAULTS = {
- :pattern => DEFAULT_PATTERN,
- :signal => (windows? ? "TERM,KILL" : "TERM,INT,KILL"),
- :wait => 2,
- :notify => true,
- :quiet => false,
- :verbose => false,
- :name => Pathname.getwd.basename.to_s.capitalize,
- :ignore => [],
- :dir => DEFAULT_DIRS,
- :force_polling => false,
+ :pattern => DEFAULT_PATTERN,
+ :signal => (windows? ? "TERM,KILL" : "TERM,INT,KILL"),
+ :wait => 2,
+ :notify => true,
+ :quiet => false,
+ :verbose => false,
+ :background => false,
+ :name => Pathname.getwd.basename.to_s.capitalize,
+ :ignore => [],
+ :dir => DEFAULT_DIRS,
+ :force_polling => false,
}
- def self.parse args = ARGV
+ def self.parse args: ARGV, config_file: nil
default_options = DEFAULTS.dup
options = {
- ignore: []
+ ignore: []
}
- opts = OptionParser.new("", 24, ' ') do |opts|
- opts.banner = "Usage: rerun [options] [--] cmd"
+ if config_file && File.exist?(config_file)
+ require 'shellwords'
+ config_args = File.read(config_file).shellsplit
+ args = config_args + args
+ end
- opts.separator ""
- opts.separator "Launches an app, and restarts it when the filesystem changes."
- opts.separator "See http://github.com/alexch/rerun for more info."
- opts.separator "Version: #{$spec.version}"
- opts.separator ""
- opts.separator "Options:"
+ option_parser = OptionParser.new("", 24, ' ') do |o|
+ o.banner = "Usage: rerun [options] [--] cmd"
- opts.on("-d dir", "--dir dir", "directory to watch, default = \"#{DEFAULT_DIRS}\". Specify multiple paths with ',' or separate '-d dir' option pairs.") do |dir|
+ o.separator ""
+ o.separator "Launches an app, and restarts it when the filesystem changes."
+ o.separator "See http://github.com/alexch/rerun for more info."
+ o.separator "Version: #{$spec.version}"
+ o.separator ""
+ o.separator "Options:"
+
+ o.on("-d dir", "--dir dir", "directory to watch, default = \"#{DEFAULT_DIRS}\". Specify multiple paths with ',' or separate '-d dir' option pairs.") do |dir|
elements = dir.split(",")
options[:dir] = (options[:dir] || []) + elements
end
# todo: rename to "--watch"
- opts.on("-p pattern", "--pattern pattern", "file glob to watch, default = \"#{DEFAULTS[:pattern]}\"") do |pattern|
+ o.on("-p pattern", "--pattern pattern", "file glob to watch, default = \"#{DEFAULTS[:pattern]}\"") do |pattern|
options[:pattern] = pattern
end
- opts.on("-i pattern", "--ignore pattern", "file glob to ignore (can be set many times). To ignore a directory, you must append '/*' e.g. --ignore 'coverage/*'") do |pattern|
+ o.on("-i pattern", "--ignore pattern", "file glob to ignore (can be set many times). To ignore a directory, you must append '/*' e.g. --ignore 'coverage/*'") do |pattern|
options[:ignore] += [pattern]
end
- opts.on("-s signal", "--signal signal", "terminate process using this signal. To try several signals in series, use a comma-delimited list. Default: \"#{DEFAULTS[:signal]}\"") do |signal|
+ o.on("-s signal", "--signal signal", "terminate process using this signal. To try several signals in series, use a comma-delimited list. Default: \"#{DEFAULTS[:signal]}\"") do |signal|
options[:signal] = signal
end
- opts.on("-w sec", "--wait sec", "after asking the process to terminate, wait this long (in seconds) before either aborting, or trying the next signal in series. Default: #{DEFAULTS[:wait]} sec")
+ o.on("-w sec", "--wait sec", "after asking the process to terminate, wait this long (in seconds) before either aborting, or trying the next signal in series. Default: #{DEFAULTS[:wait]} sec")
- opts.on("-r", "--restart", "expect process to restart itself, so just send a signal and continue watching. Uses the HUP signal unless overridden using --signal") do |signal|
+ o.on("-r", "--restart", "expect process to restart itself, so just send a signal and continue watching. Uses the HUP signal unless overridden using --signal") do |signal|
options[:restart] = true
default_options[:signal] = "HUP"
end
- opts.on("-x", "--exit", "expect the program to exit. With this option, rerun checks the return value; without it, rerun checks that the process is running.") do |dir|
- options[:exit] = true
+ o.on("-x", "--exit", "expect the program to exit. With this option, rerun checks the return value; without it, rerun checks that the process is running.") do |value|
+ options[:exit] = value
end
- opts.on("-c", "--clear", "clear screen before each run") do
- options[:clear] = true
+ o.on("-c", "--clear", "clear screen before each run") do |value|
+ options[:clear] = value
end
- opts.on("-b", "--background", "disable on-the-fly commands, allowing the process to be backgrounded") do
- options[:background] = true
+ o.on("-b", "--background", "disable on-the-fly commands, allowing the process to be backgrounded") do |value|
+ options[:background] = value
end
- opts.on("-n name", "--name name", "name of app used in logs and notifications, default = \"#{DEFAULTS[:name]}\"") do |name|
+ o.on("-n name", "--name name", "name of app used in logs and notifications, default = \"#{DEFAULTS[:name]}\"") do |name|
options[:name] = name
end
- opts.on("--force-polling", "use polling instead of a native filesystem scan (useful for Vagrant)") do
- options[:force_polling] = true
+ o.on("--[no-]force-polling", "use polling instead of a native filesystem scan (useful for Vagrant)") do |value|
+ options[:force_polling] = value
end
- opts.on("--no-growl", "don't use growl [OBSOLETE]") do
+ o.on("--no-growl", "don't use growl [OBSOLETE]") do
options[:growl] = false
$stderr.puts "--no-growl is obsolete; use --no-notify instead"
return
end
- opts.on("--[no-]notify [notifier]", "send messages through a desktop notification application. Supports growl (requires growlnotify), osx (requires terminal-notifier gem), and notify-send on GNU/Linux (notify-send must be installed)") do |notifier|
+ o.on("--[no-]notify [notifier]", "send messages through a desktop notification application. Supports growl (requires growlnotify), osx (requires terminal-notifier gem), and notify-send on GNU/Linux (notify-send must be installed)") do |notifier|
notifier = true if notifier.nil?
options[:notify] = notifier
end
- opts.on("-q", "--quiet", "don't output any logs") do
- options[:quiet] = true
+ o.on("-q", "--[no-]quiet", "don't output any logs") do |value|
+ options[:quiet] = value
end
- opts.on("--verbose", "log extra stuff like PIDs (unless you also specified `--quiet`") do
- options[:verbose] = true
+ o.on("--[no-]verbose", "log extra stuff like PIDs (unless you also specified `--quiet`") do |value|
+ options[:verbose] = value
end
- opts.on_tail("-h", "--help", "--usage", "show this message") do
- puts opts
+ o.on_tail("-h", "--help", "--usage", "show this message and immediately exit") do
+ puts o
return
end
- opts.on_tail("--version", "show version") do
+ o.on_tail("--version", "show version and immediately exit") do
puts $spec.version
return
end
- opts.on_tail ""
- opts.on_tail "On top of --pattern and --ignore, we ignore any changes to files and dirs starting with a dot."
+ o.on_tail ""
+ o.on_tail "On top of --pattern and --ignore, we ignore any changes to files and dirs starting with a dot."
end
- if args.empty?
- puts opts
- nil
- else
- opts.parse! args
- default_options[:cmd] = args.join(" ")
+ option_parser.parse! args
+ options = default_options.merge(options)
+ options[:cmd] = args.join(" ").strip # todo: better arg word handling
- options = default_options.merge(options)
+ puts option_parser if args.empty?
- options
- end
+ options
end
-
end
+
end