This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
require 'getoptlong'
|
||||
|
||||
# = GetoptLong
|
||||
#
|
||||
# Ruby's standard GetoptLong class with an added DSL.
|
||||
#
|
||||
# opts = GetoptLong.new do
|
||||
# reqs '--expect', '-x'
|
||||
# flag '--help', '-h'
|
||||
# end
|
||||
#
|
||||
# See GetoptLong::DSL for details.
|
||||
|
||||
class GetoptLong
|
||||
|
||||
alias :init :initialize
|
||||
|
||||
#
|
||||
def initialize(*arguments, &block)
|
||||
if block_given?
|
||||
raise ArgumentError unless arguments.empty?
|
||||
arguments = DSL.new(&block).arguments
|
||||
end
|
||||
init(*arguments)
|
||||
end
|
||||
|
||||
# DSL-mode parser.
|
||||
class DSL
|
||||
attr :arguments
|
||||
|
||||
def initialize(&block)
|
||||
@arguments = []
|
||||
instance_eval(&block)
|
||||
end
|
||||
|
||||
#
|
||||
def flag(*opts)
|
||||
@arguments << (opts << GetoptLong::NO_ARGUMENT)
|
||||
end
|
||||
|
||||
#
|
||||
def required(*opts)
|
||||
@arguments << (opts << GetoptLong::REQUIRED_ARGUMENT)
|
||||
end
|
||||
|
||||
#
|
||||
alias :reqs :required
|
||||
|
||||
#
|
||||
def optional(*opts)
|
||||
@arguments << (opts << GetoptLong::OPTIONAL_ARGUMENT)
|
||||
end
|
||||
|
||||
#
|
||||
alias :opts :optional
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user