class Quiz

Attributes

logger[R]
options[R]
output[R]
questions[R]
renderer[R]
seed[R]
title[RW]

Public Class Methods

new(title, options={}) click to toggle source
# File lib/ruql/quiz.rb, line 20
def initialize(title, options={})
  @output = ''
  @questions = options[:questions] || []
  @title = title
  @options = @@options.merge(options)
  @seed = srand
  @logger = Logger.new(STDERR)
  @logger.level = (@options['-V'] || @options['--verbose']) ? Logger::INFO : Logger::WARN
  #@quiz_yaml = yaml
end
options() click to toggle source
# File lib/ruql/quiz.rb, line 18
def self.options ; @@options ; end
quiz(title, args={}, &block) click to toggle source
# File lib/ruql/quiz.rb, line 147
def self.quiz(title, args={}, &block)
  quiz = Quiz.new(title, args)
  quiz.instance_eval(&block)
  @@quizzes << quiz
end
quizzes() click to toggle source
# File lib/ruql/quiz.rb, line 17
def self.quizzes ; @@quizzes ; end
reset() click to toggle source
# File lib/ruql/quiz.rb, line 13
def self.reset
  @@quizzes = []
  @@options = {}
end
set_options(options) click to toggle source
# File lib/ruql/quiz.rb, line 45
def self.set_options(options)
  @@options = options
end

Public Instance Methods

as_json() click to toggle source
# File lib/ruql/quiz.rb, line 31
def as_json
  Hash(:title => @title,
    :questions => @questions.map(&:as_json),
    :seed => @seed
    )
end
choice_answer(*args, &block) click to toggle source

this should really be done using mixins.

# File lib/ruql/quiz.rb, line 83
def choice_answer(*args, &block)
  if args.first.is_a?(Hash) # no question text
    q = MultipleChoice.new('',*args)
  else
    text = args.shift
    q = MultipleChoice.new(text, *args)
  end
  q.instance_eval(&block)
  @questions << q
end
dropdown(*args, &block) click to toggle source
fill_in(*args, &block) click to toggle source
# File lib/ruql/quiz.rb, line 136
def fill_in(*args, &block)
  if args.first.is_a?(Hash) # no question text
    q = FillIn.new('', *args)
  else
    text = args.shift
    q = FillIn.new(text, *args)
  end
  q.instance_eval(&block)
  @questions << q
end
get_open_assessment(*args, &block) click to toggle source
# File lib/ruql/quiz.rb, line 127
def get_open_assessment(*args, &block)
  y = @quiz_yaml.shift
  raise "Cannot continue - You must have a yaml block for each peer evaluation question" if y.nil?
  yaml = y[1][0]
  q = OpenAssessment.new(*args, yaml)
  q.instance_eval(&block)
  q
end
grouped_points() click to toggle source
# File lib/ruql/quiz.rb, line 63
def grouped_points
  gq = grouped_questions
  groups.sum do |g|
    gq.detect { |q| q.question_group == g }.points
  end
end
grouped_questions() click to toggle source
# File lib/ruql/quiz.rb, line 53
def grouped_questions
  questions.filter { |q| q.question_group.to_s != '' }.sort_by(&:question_group)
end
groups() click to toggle source
# File lib/ruql/quiz.rb, line 57
def groups ; questions.map(&:question_group).uniq.reject { |g| g.to_s == '' } ; end
num_questions() click to toggle source
# File lib/ruql/quiz.rb, line 74
def num_questions
  groups.length + ungrouped_questions.length
end
open_assessment(*args, &block) click to toggle source
# File lib/ruql/quiz.rb, line 116
def open_assessment(*args, &block)
  q = get_open_assessment(*args, &block)
  @questions << q
end
points() click to toggle source
# File lib/ruql/quiz.rb, line 70
def points
  ungrouped_points + grouped_points
end
random_seed(num) click to toggle source
# File lib/ruql/quiz.rb, line 78
def random_seed(num)
  @seed = num.to_i
end
render_with(renderer,options={}) click to toggle source
# File lib/ruql/quiz.rb, line 38
def render_with(renderer,options={})
  srand @seed
  @renderer = renderer.send(:new,self,options)
  @renderer.render_quiz
  @output = @renderer.output
end
select_multiple(*args, &block) click to toggle source
# File lib/ruql/quiz.rb, line 94
def select_multiple(*args, &block)
  if args.first.is_a?(Hash) # no question text
    q = SelectMultiple.new('', *args)
  else
    text = args.shift
    q = SelectMultiple.new(text, *args)
  end
  q.instance_eval(&block)
  @questions << q
end
simple_open_assessment(*args, &block) click to toggle source
# File lib/ruql/quiz.rb, line 121
def simple_open_assessment(*args, &block)
  q = get_open_assessment(*args, &block)
  q.add_simple_question
  @questions << q
end
truefalse(*args) click to toggle source
# File lib/ruql/quiz.rb, line 105
def truefalse(*args)
  q = TrueFalse.new(*args)
  @questions << q
end
ungrouped_points() click to toggle source
# File lib/ruql/quiz.rb, line 59
def ungrouped_points
  ungrouped_questions.map(&:points).sum
end
ungrouped_questions() click to toggle source
# File lib/ruql/quiz.rb, line 49
def ungrouped_questions
  questions.filter { |q| q.question_group.to_s == '' }
end