A code autograder for student homework submissions
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

37 lines
821 B

  1. require 'date'
  2. module KGrader
  3. def self.abort(error)
  4. Kernel::abort "fatal: #{error}"
  5. end
  6. def self.parse_args(raw, num, keywords)
  7. args = []
  8. options = {}
  9. raw.each do |arg|
  10. if arg.include? '='
  11. key, val = arg.split('=', 2)
  12. key = key.to_sym
  13. abort "unknown keyword #{key}" unless keywords.include? key
  14. options[key] = case keywords[key]
  15. when :string
  16. val
  17. when :bool
  18. %w(true yes 1 t y).include? val.downcase
  19. when :array
  20. val.split(",").map! { |x| x.strip.downcase }
  21. when :datetime
  22. DateTime.parse(val)
  23. end
  24. else
  25. args << arg
  26. end
  27. end
  28. abort "too few arguments" if args.size < num
  29. abort "too many arguments" if args.size > num
  30. return args, options
  31. end
  32. end