class SakaiInfo::Quiz
Constants
- ACTIVE
- DELETED
- INACTIVE
possible statuses
- RETRACTED_FOR_EDITING
Attributes
dbrow[R]
site[R]
title[R]
Public Class Methods
all_serializations()
click to toggle source
# File lib/sakai-info/quiz.rb, line 222 def self.all_serializations [ :default, :sections, :items, ] end
clear_cache()
click to toggle source
# File lib/sakai-info/quiz.rb, line 22 def self.clear_cache @@cache = {} end
count_by_site_id(site_id)
click to toggle source
# File lib/sakai-info/quiz.rb, line 89 def self.count_by_site_id(site_id) { "pending_count" => PendingQuiz.count_by_site_id(site_id), "published_count" => PublishedQuiz.count_by_site_id(site_id) } end
find(id)
click to toggle source
# File lib/sakai-info/quiz.rb, line 64 def self.find(id) id = id.to_s if @@cache[id].nil? quiz = nil begin quiz = PendingQuiz.find(id) rescue ObjectNotFoundException begin quiz = PublishedQuiz.find(id) rescue ObjectNotFoundException raise ObjectNotFoundException.new(Quiz, id) end end @@cache[id] = quiz end @@cache[id] end
find_by_site_id(site_id)
click to toggle source
# File lib/sakai-info/quiz.rb, line 82 def self.find_by_site_id(site_id) { "pending" => PendingQuiz.find_by_site_id(site_id), "published" => PublishedQuiz.find_by_site_id(site_id) } end
new(dbrow, site = nil)
click to toggle source
a note about quizzes: they do not link directly back to sites instead, they link back only via the sam_authzdata_t table
# File lib/sakai-info/quiz.rb, line 30 def initialize(dbrow, site = nil) @site = nil if site.is_a? String begin @site = Site.find(site) rescue ObjectNotFoundException @site = nil end elsif site.is_a? Site @site = site end @id = dbrow[:id] @title = dbrow[:title] @dbrow = dbrow if @site.nil? # published quizzes map to site_id via the OWN_PUBLISHED_ASSESSMENT function # pending quizzes map to site_id via the EDIT_ASSESSMENT function DB.connect[:sam_authzdata_t].select(Sequel.function(:distinct, :agentid)). where(:qualifierid => @id). where(:functionid => ["OWN_PUBLISHED_ASSESSMENT","EDIT_ASSESSMENT"]). all.each do |row| begin site = Site.find(row[:agentid]) @site = site rescue ObjectNotFoundException @site = nil end break if not @site.nil? end end end
Public Instance Methods
access_control()
click to toggle source
# File lib/sakai-info/quiz.rb, line 131 def access_control @access_control ||= self.access_control_class.find(self.id) end
access_control_summary_serialization()
click to toggle source
# File lib/sakai-info/quiz.rb, line 188 def access_control_summary_serialization result = self.summary_serialization result.delete("id") result end
auths_serialization()
click to toggle source
# File lib/sakai-info/quiz.rb, line 218 def auths_serialization self.authorizations_serialization end
default_serialization()
click to toggle source
# File lib/sakai-info/quiz.rb, line 143 def default_serialization result = { "id" => self.id, "title" => self.title, "site" => nil, "status" => self.status, "type" => self.quiz_type, "section_count" => self.section_count, "item_count" => self.item_count, "attempt_count" => nil, "access_control" => self.access_control.serialize(:quiz_summary) } if not self.site.nil? result["site"] = self.site.serialize(:summary) end if self.respond_to? :attempt_count result["attempt_count"] = self.attempt_count else result.delete("attempt_count") end result end
item_count()
click to toggle source
# File lib/sakai-info/quiz.rb, line 123 def item_count @item_count ||= self.item_class.count_by_quiz_id(self.id) end
items()
click to toggle source
# File lib/sakai-info/quiz.rb, line 127 def items @items ||= self.item_class.find_by_quiz_id(self.id) end
items_serialization()
click to toggle source
# File lib/sakai-info/quiz.rb, line 200 def items_serialization { "items" => self.items.collect { |i| i.serialize(:quiz_summary) } } end
metadata()
click to toggle source
# File lib/sakai-info/quiz.rb, line 135 def metadata @metadata ||= self.metadata_class.find_by_quiz_id(self.id) end
metadata_serialization()
click to toggle source
# File lib/sakai-info/quiz.rb, line 206 def metadata_serialization { "metadata" => self.metadata.collect { |m| [m.key, m.value] }.to_h } end
quiz_type()
click to toggle source
# File lib/sakai-info/quiz.rb, line 96 def quiz_type nil end
section_count()
click to toggle source
# File lib/sakai-info/quiz.rb, line 115 def section_count @section_count ||= self.section_class.count_by_quiz_id(@id) end
sections()
click to toggle source
# File lib/sakai-info/quiz.rb, line 119 def sections @sections ||= self.section_class.find_by_quiz_id(@id) end
sections_serialization()
click to toggle source
# File lib/sakai-info/quiz.rb, line 194 def sections_serialization { "sections" => self.sections.collect{|s|s.serialize(:quiz_summary)} } end
site_summary_serialization()
click to toggle source
# File lib/sakai-info/quiz.rb, line 180 def site_summary_serialization { "id" => self.id, "title" => self.title, "status" => self.status, } end
status()
click to toggle source
# File lib/sakai-info/quiz.rb, line 105 def status case @dbrow[:status].to_i when INACTIVE then "inactive" when ACTIVE then "active" when DELETED then "deleted" when RETRACTED_FOR_EDITING then "retracted for editing" else "unknown status '#{@dbrow[:status].to_i}'" end end
summary_serialization()
click to toggle source
# File lib/sakai-info/quiz.rb, line 166 def summary_serialization result = { "id" => self.id, "title" => self.title, "site_id" => nil, "status" => self.status, "type" => self.quiz_type } if not self.site.nil? result["site_id"] = self.site.id end result end