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
# File lib/ruql/quiz.rb, line 110 def dropdown(*args, &block) q = Dropdown.new(*args) q.instance_eval(&block) @questions << q end
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