class GithubToCanvasQuiz::Builder::Quiz

Create markdown files from a Canvas Quiz

Attributes

client[R]
course_id[R]
path[R]
quiz_id[R]

Public Class Methods

new(client, course_id, quiz_id, path) click to toggle source
# File lib/github_to_canvas_quiz/builder/quiz.rb, line 10
def initialize(client, course_id, quiz_id, path)
  @path = path
  @client = client
  @course_id = course_id
  @quiz_id = quiz_id
end

Public Instance Methods

build() click to toggle source
# File lib/github_to_canvas_quiz/builder/quiz.rb, line 17
def build
  prepare_directory!
  save_quiz!
  save_questions!
  backup_canvas_to_json!
  commit!
end

Private Instance Methods

backup_canvas_to_json!() click to toggle source
# File lib/github_to_canvas_quiz/builder/quiz.rb, line 47
def backup_canvas_to_json!
  quiz = client.get_single_quiz(course_id, quiz_id)
  questions = client.list_questions(course_id, quiz_id)

  json_data = JSON.pretty_generate({ quiz: quiz, questions: questions })
  File.write(json_path, json_data)
end
canvas_question_data() click to toggle source
# File lib/github_to_canvas_quiz/builder/quiz.rb, line 103
def canvas_question_data
  questions_data = client.list_questions(course_id, quiz_id)
  questions_data.map do |question_data|
    question_data.merge({ 'course_id' => course_id, 'quiz_id' => quiz_id })
  end
end
canvas_quiz_data() click to toggle source
# File lib/github_to_canvas_quiz/builder/quiz.rb, line 90
def canvas_quiz_data
  quiz_data = client.get_single_quiz(course_id, quiz_id)
  quiz_data.merge({ 'course_id' => course_id })
end
commit!() click to toggle source
# File lib/github_to_canvas_quiz/builder/quiz.rb, line 55
def commit!
  repo = RepositoryInterface.new(path)
  repo.commit_files('README.md', 'questions', '.canvas-snapshot.json', 'Created Canvas backup')
end
json_path() click to toggle source
# File lib/github_to_canvas_quiz/builder/quiz.rb, line 60
def json_path
  File.join(path, '.canvas-snapshot.json')
end
prepare_directory!() click to toggle source
# File lib/github_to_canvas_quiz/builder/quiz.rb, line 31
def prepare_directory!
  Dir.mkdir(path) unless Pathname(path).directory?
  @path = File.expand_path(path)
end
question_readme_path(index) click to toggle source
# File lib/github_to_canvas_quiz/builder/quiz.rb, line 72
def question_readme_path(index)
  filename = "#{index.to_s.rjust(2, '0')}.md"
  File.join(questions_path, filename)
end
questions() click to toggle source

Get question data from the Canvas API and return an array of Model::Question memoized to prevent unnecessary API calls

# File lib/github_to_canvas_quiz/builder/quiz.rb, line 97
def questions
  @questions ||= canvas_question_data.map do |question_data|
    Parser::Canvas::Question.new(question_data).parse
  end
end
questions_path() click to toggle source
# File lib/github_to_canvas_quiz/builder/quiz.rb, line 68
def questions_path
  File.join(path, 'questions')
end
quiz() click to toggle source

Get quiz data from the Canvas API and return a Model::Quiz memoized to prevent unnecessary API calls

# File lib/github_to_canvas_quiz/builder/quiz.rb, line 79
def quiz
  return @quiz if defined? @quiz

  @quiz = begin
    quiz = Parser::Canvas::Quiz.new(canvas_quiz_data).parse
    # use file path as repo if not present
    quiz.repo = File.basename(path) unless quiz.repo
    quiz
  end
end
quiz_readme_path() click to toggle source
# File lib/github_to_canvas_quiz/builder/quiz.rb, line 64
def quiz_readme_path
  File.join(path, 'README.md')
end
repo() click to toggle source
# File lib/github_to_canvas_quiz/builder/quiz.rb, line 27
def repo
  @repo ||= RepositoryInterface.new(path)
end
save_questions!() click to toggle source
# File lib/github_to_canvas_quiz/builder/quiz.rb, line 40
def save_questions!
  Dir.mkdir(questions_path) unless Pathname(questions_path).directory?
  questions.each.with_index do |question, index|
    File.write(question_readme_path(index), question.to_markdown)
  end
end
save_quiz!() click to toggle source
# File lib/github_to_canvas_quiz/builder/quiz.rb, line 36
def save_quiz!
  File.write(quiz_readme_path, quiz.to_markdown)
end