class AudioFeedManager::ArgumentsParser
Public Instance Methods
parse(specification, arguments)
click to toggle source
# File lib/audio_feed_manager/cli/arguments_parser.rb, line 3 def parse(specification, arguments) result = Arguments.new result, arguments = parse_required_arguments(result, arguments, specification) result, arguments = parse_optional_arguments(result, arguments, specification) result, arguments = parse_varargs(result, arguments, specification) if arguments.any? raise InvalidArguments, "Provided #{arguments.size} extra arguments!" end result end
Private Instance Methods
extract_arguments(result, arguments, specs)
click to toggle source
# File lib/audio_feed_manager/cli/arguments_parser.rb, line 53 def extract_arguments(result, arguments, specs) arguments = arguments.dup specs.each do |arg| value = arguments.shift result.add_argument(arg.name, value) end [result, arguments] end
parse_optional_arguments(result, arguments, specification)
click to toggle source
# File lib/audio_feed_manager/cli/arguments_parser.rb, line 49 def parse_optional_arguments(result, arguments, specification) extract_arguments(result, arguments, specification.optional_arguments) end
parse_required_arguments(result, arguments, specification)
click to toggle source
# File lib/audio_feed_manager/cli/arguments_parser.rb, line 19 def parse_required_arguments(result, arguments, specification) if arguments.size < specification.required_arguments.size raise InvalidArguments, "Provided #{arguments.size} arguments, but #{specification.required_arguments.size} are required." end extract_arguments(result, arguments, specification.required_arguments) end
parse_varargs(result, arguments, specification)
click to toggle source
# File lib/audio_feed_manager/cli/arguments_parser.rb, line 28 def parse_varargs(result, arguments, specification) return [result, arguments] unless specification.varargs_arguments.any? if arguments.size < specification.minimum_varags_count raise InvalidArguments, "Provided #{arguments.size} for variable-length arguments, but #{specification.minimum_varags_count} are required." end specs = specification.varargs_arguments arguments = arguments.dup specs[0..-2].each do |arg| value = arguments.shift(arg.minimum) result.add_argument(arg.name, value) end result.add_argument(specs[-1].name, arguments) [result, []] end