gems.maven-tools-1.2.1.lib.maven.tools.dsl.options.rb Maven / Gradle / Ivy
The newest version!
#
# Copyright (C) 2014 Christian Meier
#
# Permission is hereby granted, free of charge, to any person obtaining a copy of
# this software and associated documentation files (the "Software"), to deal in
# the Software without restriction, including without limitation the rights to
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
# the Software, and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
module Maven
module Tools
module DSL
module Options
def args_and_options( *args )
if args.last.is_a? Hash
[ args[0..-2], args.last ]
else
[ args, {} ]
end
end
def fill_options( receiver, options, *allow_defaults )
options.each do |k,v|
if ! allow_defaults.member?( k ) && receiver.send( "#{k}".to_sym )
raise "#{receiver} has attribute #{k} already set"
end
receiver.send( "#{k}=".to_sym, v )
end
end
def help( name, *args )
args, options = args_and_options( *args )
args.each do |a|
options[ a ] = a.to_s if a && !options.key?( a )
end
opts = options.select{ |k,v| v }
t = "\n# " + name.to_s.upcase + " #\n\n"
unless opts.empty?
t += "hash options: #{name} #{opts.inspect.gsub( /\"[{]/, '(' ).gsub( /[}]\"/, ')' )}\n"
end
t += "nested: #{name} do\n"
t = append_nested_block( options, t )
t += " end\n"
t
end
def help_block( *args )
args, options = help_args_and_options( *args )
append_nested_block( options )
end
private
def help_args_and_options( *args )
args, options = args_and_options( *args )
args.each do |a|
options[ a ] = a.to_s if a && !options.key?( a )
end
[ args, options ]
end
def append_nested_block( options, t = "")
options.each do |k,v|
if v
t += " #{k} #{v.inspect.gsub( /\"[{]/, '(' ).gsub( /[}]\"/, ')' )}\n"
else
t += " #{k} # nested element\n"
end
end
t
end
end
end
end
end