class SakaiInfo::QuizItem

Attributes

dbrow[R]
quiz[R]
section[R]
sequence[R]
typeid[R]

Public Class Methods

all_serializations() click to toggle source
# File lib/sakai-info/quiz.rb, line 706
def self.all_serializations
  [
   :default,
   :mod,
   :texts
  ]
end
class_for_type(type) click to toggle source
# File lib/sakai-info/quiz.rb, line 601
def self.class_for_type(type)
  if type == "pending"
    PendingQuizItem
  else
    PublishedQuizItem
  end
end
clear_cache() click to toggle source
# File lib/sakai-info/quiz.rb, line 562
def self.clear_cache
  @@cache = {}
end
count_by_quiz_id(quiz_id) click to toggle source
# File lib/sakai-info/quiz.rb, line 631
def self.count_by_quiz_id(quiz_id)
  QuizItem.query_by_quiz_id(quiz_id).count
end
count_by_section_id(section_id) click to toggle source
# File lib/sakai-info/quiz.rb, line 614
def self.count_by_section_id(section_id)
  QuizItem.query_by_section_id(section_id).count
end
find(id) click to toggle source
# File lib/sakai-info/quiz.rb, line 577
def self.find(id)
  id = id.to_s
  if @@cache[id].nil?
    begin
      @@cache[id] = PendingQuizItem.find(id)
    rescue ObjectNotFoundException
      begin
        @@cache[id] = PublishedQuizItem.find(id)
      rescue ObjectNotFoundException
        raise ObjectNotFoundException.new(QuizItem, id)
      end
    end
  end
  @@cache[id]
end
find_by_quiz_id(quiz_id) click to toggle source
# File lib/sakai-info/quiz.rb, line 635
def self.find_by_quiz_id(quiz_id)
  item_class = QuizItem.class_for_type(Quiz.find(quiz_id).quiz_type)
  QuizItem.query_by_quiz_id(quiz_id).order(:sequence).all.collect do |row|
    item_class.new(row)
  end.sort { |a,b| if a.section.sequence == b.section.sequence
                     a.sequence <=> b.sequence
                   else
                     a.section.sequence <=> b.section.sequence
                   end }
end
find_by_section_id(section_id) click to toggle source
# File lib/sakai-info/quiz.rb, line 618
def self.find_by_section_id(section_id)
  item_class = QuizItem.class_for_type(QuizSection.find(section_id).section_type)
  QuizItem.query_by_section_id(section_id).all.collect do |row|
    item_class.new(row)
  end
end
new(dbrow) click to toggle source
# File lib/sakai-info/quiz.rb, line 567
def initialize(dbrow)
  @dbrow = dbrow

  @id = dbrow[:itemid]
  @section = QuizSection.find(dbrow[:sectionid])
  @quiz = @section.quiz
  @sequence = dbrow[:sequence]
  @typeid = dbrow[:typeid]
end
query_by_quiz_id(quiz_id) click to toggle source
# File lib/sakai-info/quiz.rb, line 625
def self.query_by_quiz_id(quiz_id)
  table = QuizItem.table_name_for_type(Quiz.find(quiz_id).quiz_type)
  DB.connect[table].
    where(:sectionid => Quiz.find(quiz_id).sections.collect{|s|s.id})
end
query_by_section_id(section_id) click to toggle source
# File lib/sakai-info/quiz.rb, line 609
def self.query_by_section_id(section_id)
  table = QuizItem.table_name_for_type(QuizSection.find(section_id).section_type)
  DB.connect[table].where(:sectionid => section_id).order(:sequence)
end
table_name_for_type(type) click to toggle source
# File lib/sakai-info/quiz.rb, line 593
def self.table_name_for_type(type)
  if type == "pending"
    :sam_item_t
  else
    :sam_publisheditem_t
  end
end

Public Instance Methods

default_serialization() click to toggle source
# File lib/sakai-info/quiz.rb, line 666
def default_serialization
  {
    "id" => self.id,
    "quiz" => self.quiz.serialize(:summary),
    "section" => self.section.serialize(:summary),
    "sequence" => self.sequence,
    "type" => self.item_type,
    "typeid" => self.typeid
  }
end
item_type() click to toggle source
# File lib/sakai-info/quiz.rb, line 646
def item_type
  nil
end
itemtext_table() click to toggle source
# File lib/sakai-info/quiz.rb, line 650
def itemtext_table
  nil
end
quiz_summary_serialization() click to toggle source
# File lib/sakai-info/quiz.rb, line 685
def quiz_summary_serialization
  {
    "id" => self.id,
    "section" => self.section.sequence,
    "sequence" => self.sequence,
  }
end
section_summary_serialization() click to toggle source
# File lib/sakai-info/quiz.rb, line 693
def section_summary_serialization
  {
    "id" => self.id,
    "sequence" => self.sequence,
  }
end
summary_serialization() click to toggle source
# File lib/sakai-info/quiz.rb, line 677
def summary_serialization
  {
    "id" => self.id,
    "quiz_id" => self.quiz.id,
    "section_id" => self.section.id
  }
end
texts() click to toggle source
# File lib/sakai-info/quiz.rb, line 654
def texts
  if self.itemtext_table.nil?
    return []
  end

  DB.connect[self.itemtext_table].
    select(:text).
    where(:itemid => self.id).
    order(:sequence).all.
    collect { |row| row[:text].read }
end
texts_serialization() click to toggle source
# File lib/sakai-info/quiz.rb, line 700
def texts_serialization
  {
    "texts" => self.texts
  }
end