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.

40 lines
966 B

  1. module KGrader
  2. class Assignment
  3. attr_reader :name, :manifest
  4. def initialize(filesystem, course, name)
  5. @fs = filesystem
  6. @course = course
  7. @name = name
  8. @root = @fs.assignment @course.name, @name
  9. @config = @fs.load @fs.assignment_config(@course.name, @name)
  10. @manifest = build_manifest
  11. rescue FilesystemError
  12. raise AssignmentError, "unknown assignment: #{name}"
  13. end
  14. def id
  15. @config['id'] || @name
  16. end
  17. def build_manifest
  18. unless @config.include? 'manifest'
  19. raise AssignmentError, "missing manifest: #{@name}"
  20. end
  21. manifest = @config['manifest']
  22. provided = manifest['provided'].map do |fn|
  23. { :name => fn, :path => File.join(@root, 'provided', fn) }
  24. end
  25. graded = manifest['graded'].map { |fn| { :name => fn } }
  26. {
  27. :provided => provided,
  28. :graded => graded,
  29. :report => manifest['report']
  30. }
  31. end
  32. end
  33. end