More idiomatic Ruby code with rubocop.
This commit is contained in:
parent
471ef55729
commit
5f234f88e8
|
@ -0,0 +1,2 @@
|
||||||
|
Style/IndentationWidth:
|
||||||
|
Width: 4
|
|
@ -77,23 +77,26 @@
|
||||||
##
|
##
|
||||||
|
|
||||||
module EasyOptions
|
module EasyOptions
|
||||||
|
|
||||||
class Option
|
class Option
|
||||||
def initialize(long_version, short_version, boolean=true)
|
def initialize(long_version, short_version, boolean = true)
|
||||||
raise ArgumentError.new('Long version is mandatory') if not long_version or long_version.length < 2
|
fail ArgumentError.new('Long version is mandatory') if !long_version || long_version.length < 2
|
||||||
@short = short_version.to_sym if short_version
|
@short = short_version.to_sym if short_version
|
||||||
@long = long_version.to_s.gsub('-', '_').to_sym
|
@long = long_version.to_s.gsub('-', '_').to_sym
|
||||||
@boolean = boolean
|
@boolean = boolean
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_s
|
def to_s
|
||||||
"--#{long_dashed}"
|
"--#{long_dashed}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def in?(string)
|
def in?(string)
|
||||||
string =~ /^--#{long_dashed}$/ or (@short and string =~ /^-#{@short}$/)
|
string =~ /^--#{long_dashed}$/ || (@short && string =~ /^-#{@short}$/)
|
||||||
end
|
end
|
||||||
|
|
||||||
def in_with_value?(string)
|
def in_with_value?(string)
|
||||||
string =~ /^--#{long_dashed}=.*$/
|
string =~ /^--#{long_dashed}=.*$/
|
||||||
end
|
end
|
||||||
|
|
||||||
def long_dashed
|
def long_dashed
|
||||||
@long.to_s.gsub('_', '-')
|
@long.to_s.gsub('_', '-')
|
||||||
end
|
end
|
||||||
|
@ -112,7 +115,7 @@ module EasyOptions
|
||||||
|
|
||||||
def parse_doc
|
def parse_doc
|
||||||
begin
|
begin
|
||||||
doc = File.readlines($0)
|
doc = File.readlines($PROGRAM_NAME)
|
||||||
rescue Errno::ENOENT
|
rescue Errno::ENOENT
|
||||||
exit false
|
exit false
|
||||||
end
|
end
|
||||||
|
@ -122,7 +125,7 @@ module EasyOptions
|
||||||
doc = doc.map do |line|
|
doc = doc.map do |line|
|
||||||
line.strip!
|
line.strip!
|
||||||
line.sub!(/^## ?/, '')
|
line.sub!(/^## ?/, '')
|
||||||
line.gsub!(/@script.name/, File.basename($0))
|
line.gsub!(/@script.name/, File.basename($PROGRAM_NAME))
|
||||||
line.gsub(/@#/, '@')
|
line.gsub(/@#/, '@')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -143,7 +146,7 @@ module EasyOptions
|
||||||
|
|
||||||
# Format arguments input
|
# Format arguments input
|
||||||
raw_arguments = ARGV.map do |argument|
|
raw_arguments = ARGV.map do |argument|
|
||||||
if argument =~ /^-[^-].*$/i then
|
if argument =~ /^-[^-].*$/i
|
||||||
argument.split('')[1..-1].map { |char| "-#{char}" }
|
argument.split('')[1..-1].map { |char| "-#{char}" }
|
||||||
else
|
else
|
||||||
argument
|
argument
|
||||||
|
@ -156,22 +159,22 @@ module EasyOptions
|
||||||
@known_options.each do |known_option|
|
@known_options.each do |known_option|
|
||||||
|
|
||||||
# Boolean option
|
# Boolean option
|
||||||
if known_option.in?(argument) and known_option.boolean then
|
if known_option.in?(argument) && known_option.boolean
|
||||||
@options[known_option.long] = true
|
@options[known_option.long] = true
|
||||||
unknown_option = false
|
unknown_option = false
|
||||||
break
|
break
|
||||||
|
|
||||||
# Option with value in next parameter
|
# Option with value in next parameter
|
||||||
elsif known_option.in?(argument) and not known_option.boolean then
|
elsif known_option.in?(argument) && !known_option.boolean
|
||||||
value = raw_arguments[index + 1]
|
value = raw_arguments[index + 1]
|
||||||
Parser.finish("you must specify a value for #{known_option}") if not value or value.start_with?('-')
|
Parser.finish("you must specify a value for #{known_option}") if !value || value.start_with?('-')
|
||||||
value = value.to_i if value =~ /^[0-9]+$/
|
value = value.to_i if value =~ /^[0-9]+$/
|
||||||
@options[known_option.long] = value
|
@options[known_option.long] = value
|
||||||
unknown_option = false
|
unknown_option = false
|
||||||
break
|
break
|
||||||
|
|
||||||
# Option with value after equal sign
|
# Option with value after equal sign
|
||||||
elsif known_option.in_with_value?(argument) and not known_option.boolean then
|
elsif known_option.in_with_value?(argument) && !known_option.boolean
|
||||||
value = argument.split('=')[1]
|
value = argument.split('=')[1]
|
||||||
value = value.to_i if value =~ /^[0-9]+$/
|
value = value.to_i if value =~ /^[0-9]+$/
|
||||||
@options[known_option.long] = value
|
@options[known_option.long] = value
|
||||||
|
@ -179,19 +182,19 @@ module EasyOptions
|
||||||
break
|
break
|
||||||
|
|
||||||
# Long option with unnecessary value
|
# Long option with unnecessary value
|
||||||
elsif known_option.in_with_value?(argument) and known_option.boolean then
|
elsif known_option.in_with_value?(argument) && known_option.boolean
|
||||||
value = argument.split('=')[1]
|
value = argument.split('=')[1]
|
||||||
Parser.finish("#{known_option} does not accept a value (you specified \"#{value}\")")
|
Parser.finish("#{known_option} does not accept a value (you specified \"#{value}\")")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Unrecognized option
|
# Unrecognized option
|
||||||
Parser.finish("unrecognized option \"#{argument}\"") if unknown_option and argument.start_with?('-')
|
Parser.finish("unrecognized option \"#{argument}\"") if unknown_option && argument.start_with?('-')
|
||||||
end
|
end
|
||||||
|
|
||||||
# Help option
|
# Help option
|
||||||
if @options[:help]
|
if @options[:help]
|
||||||
if BashOutput then
|
if BashOutput
|
||||||
print "printf '"
|
print "printf '"
|
||||||
puts @documentation
|
puts @documentation
|
||||||
puts "'"
|
puts "'"
|
||||||
|
@ -205,17 +208,17 @@ module EasyOptions
|
||||||
# Regular arguments
|
# Regular arguments
|
||||||
next_is_value = false
|
next_is_value = false
|
||||||
raw_arguments.each do |argument|
|
raw_arguments.each do |argument|
|
||||||
if argument.start_with?('-') then
|
if argument.start_with?('-')
|
||||||
known_option = @known_options.find { |known_option| known_option.in?(argument) }
|
known_option = @known_options.find { |known_option| known_option.in?(argument) }
|
||||||
next_is_value = (known_option and not known_option.boolean)
|
next_is_value = (known_option && !known_option.boolean)
|
||||||
else
|
else
|
||||||
arguments << argument if not next_is_value
|
arguments << argument unless next_is_value
|
||||||
next_is_value = false
|
next_is_value = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Bash support
|
# Bash support
|
||||||
if BashOutput then
|
if BashOutput
|
||||||
@options.keys.each do |name|
|
@options.keys.each do |name|
|
||||||
puts "#{name}=\"#{@options[name].to_s.sub('true', 'yes')}\""
|
puts "#{name}=\"#{@options[name].to_s.sub('true', 'yes')}\""
|
||||||
end
|
end
|
||||||
|
@ -234,8 +237,8 @@ module EasyOptions
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.check_bash_output
|
def self.check_bash_output
|
||||||
$0 = ENV['from'] || $0
|
$0 = ENV['from'] || $PROGRAM_NAME
|
||||||
$0 == ENV['from']
|
$PROGRAM_NAME == ENV['from']
|
||||||
end
|
end
|
||||||
|
|
||||||
BashOutput = check_bash_output
|
BashOutput = check_bash_output
|
||||||
|
@ -250,15 +253,19 @@ module EasyOptions
|
||||||
def options
|
def options
|
||||||
@@parser.options
|
@@parser.options
|
||||||
end
|
end
|
||||||
|
|
||||||
def arguments
|
def arguments
|
||||||
@@parser.arguments
|
@@parser.arguments
|
||||||
end
|
end
|
||||||
|
|
||||||
def documentation
|
def documentation
|
||||||
@@parser.documentation
|
@@parser.documentation
|
||||||
end
|
end
|
||||||
|
|
||||||
def all
|
def all
|
||||||
[options, arguments, documentation]
|
[options, arguments, documentation]
|
||||||
end
|
end
|
||||||
|
|
||||||
def finish(error)
|
def finish(error)
|
||||||
Parser.finish(error)
|
Parser.finish(error)
|
||||||
end
|
end
|
||||||
|
|
|
@ -31,7 +31,7 @@ puts 'Option specified: --some-boolean' if options[:some_boolean]
|
||||||
# Parameter option
|
# Parameter option
|
||||||
value = options[:some_value]
|
value = options[:some_value]
|
||||||
if value
|
if value
|
||||||
type = value.is_a?(Fixnum)? 'number' : 'string'
|
type = value.is_a?(Fixnum) ? 'number' : 'string'
|
||||||
puts "Option specified: --some-value is #{value} (a #{type})"
|
puts "Option specified: --some-value is #{value} (a #{type})"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue