module Rake::Opt::KeywordArgs::ClassMethods
Public Instance Methods
define_parameterized_task(*args, &block)
click to toggle source
# File lib/rake/opt/keyword_args.rb, line 29 def define_parameterized_task(*args, &block) arg_options = Rake.application.last_args Rake.application.last_args = nil # Parse the arguments name = '' requirements = [] case args.size when 1 then arg = args.first if arg.is_a? Hash name = arg.keys.first requirements = arg.values.first else name = arg.to_s end when 2 then name = args.first deps = args.last if deps.is_a? Hash if deps.keys.first.empty? requirements = deps.values.last else raise DefinitionError, 'Must have no arguments when defining a paramterized task' end else raise DefinitionError, 'Must have no arguments when defining a paramterized task' end else raise DefinitionError, 'Unknown argument format' end # Set the pseudo args arg_options_str = arg_options.keys.sort do |x,y| next -1 if arg_options[x][:required] && !arg_options[y][:required] next 1 if !arg_options[x][:required] && arg_options[y][:required] next 1 if arg_options[x][:default] && !arg_options[y][:default] next -1 if !arg_options[x][:default] && arg_options[y][:default] next x.to_s <=> y.to_s end.map do |arg| options = arg_options[arg] if options[:default] != nil default_str = options[:default].to_s elsif options[:required] default_str = 'REQUIRED' else default_str = 'nil' end next "#{arg}=#{default_str}" end.join(PARAM_SEPARATOR) task_args = [ name, { [arg_options_str] => requirements } ] task = self.__define_task_before_keyword_args__(*task_args, &verify_args_block(&block)) task.arg_options = arg_options return task end
verify_args_block() { |task, verify_args| ... }
click to toggle source
# File lib/rake/opt/keyword_args.rb, line 21 def verify_args_block # Flush the Print Queue at the end of each iteration lambda do |*args| task = args.first yield task, task.verify_args(args[1]) if block_given? end end