Sha256: 77bd75fc84dc8d77342a704c69ce27d5dad9ff4192c27478a04bfe039f2d9dd6
Contents?: true
Size: 1.54 KB
Versions: 2
Compression:
Stored size: 1.54 KB
Contents
module Quizzes class QuestionFactory def initialize(params = {}) @levels = params[:levels] @used_questions = params[:used_questions] || [] @number_of_questions = params[:number_of_questions] unless @levels && @number_of_questions raise "It needs an array of levels and a number of questions" end end def generate questions = search unless all_requested_questions_found?(questions) number_of_questions = reviewed_number_of_questions(questions) if(number_of_questions > 0) questions += Quizzes::QuestionFactory.new({ levels: Quizzes::Level.all_and_nil, used_questions: questions + @used_questions, number_of_questions: number_of_questions }).generate end end questions.sort{|a, b| a.level && b.level ? a.level.code <=> a.level.code : a.level ? -1 : 1 } end private def search Quizzes::Question.where( level: @levels ).where.not( id: question_ids_used ).sample(@number_of_questions) end def all_requested_questions_found?(questions) questions.size == @number_of_questions end def reviewed_number_of_questions(questions) total_questions = Quizzes::Question.count (@number_of_questions > total_questions ? total_questions : @number_of_questions) - questions.size end def question_ids_used if @used_questions && @used_questions.any? return @used_questions.map(&:id) end return [0] end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
quizzes-0.1.1 | app/models/quizzes/question_factory.rb |
quizzes-0.1.0 | app/models/quizzes/question_factory.rb |