Class: SakaiInfo::QuizItem

Inherits:
SakaiObject show all
Includes:
ModProps
Defined in:
lib/sakai-info/quiz.rb

Direct Known Subclasses

PendingQuizItem, PublishedQuizItem

Constant Summary collapse

@@cache =
{}

Instance Attribute Summary collapse

Attributes inherited from SakaiObject

#id

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ModProps

included

Methods inherited from SakaiObject

#dbrow_only_serialization, #dbrow_serialization, #object_type_serialization, #serialize, #to_json, #to_yaml

Constructor Details

#initialize(dbrow) ⇒ QuizItem

Returns a new instance of QuizItem.



420
421
422
423
424
425
426
427
428
# File 'lib/sakai-info/quiz.rb', line 420

def initialize(dbrow)
  @dbrow = dbrow

  @id = dbrow[:itemid]
  @section = QuizSection.find(dbrow[:sectionid])
  @quiz = @section.quiz
  @sequence = dbrow[:sequence]
  @typeid = dbrow[:typeid]
end

Instance Attribute Details

#dbrowObject (readonly)

Returns the value of attribute dbrow.



412
413
414
# File 'lib/sakai-info/quiz.rb', line 412

def dbrow
  @dbrow
end

#quizObject (readonly)

Returns the value of attribute quiz.



412
413
414
# File 'lib/sakai-info/quiz.rb', line 412

def quiz
  @quiz
end

#sectionObject (readonly)

Returns the value of attribute section.



412
413
414
# File 'lib/sakai-info/quiz.rb', line 412

def section
  @section
end

#sequenceObject (readonly)

Returns the value of attribute sequence.



412
413
414
# File 'lib/sakai-info/quiz.rb', line 412

def sequence
  @sequence
end

#typeidObject (readonly)

Returns the value of attribute typeid.



412
413
414
# File 'lib/sakai-info/quiz.rb', line 412

def typeid
  @typeid
end

Class Method Details

.all_serializationsObject



519
520
521
# File 'lib/sakai-info/quiz.rb', line 519

def self.all_serializations
  [:default, :mod]
end

.class_for_type(type) ⇒ Object



455
456
457
458
459
460
461
# File 'lib/sakai-info/quiz.rb', line 455

def self.class_for_type(type)
  if type == "pending"
    PendingQuizItem
  else
    PublishedQuizItem
  end
end

.count_by_quiz_id(quiz_id) ⇒ Object



485
486
487
# File 'lib/sakai-info/quiz.rb', line 485

def self.count_by_quiz_id(quiz_id)
  QuizItem.query_by_quiz_id(quiz_id).count
end

.count_by_section_id(section_id) ⇒ Object



468
469
470
# File 'lib/sakai-info/quiz.rb', line 468

def self.count_by_section_id(section_id)
  QuizItem.query_by_section_id(section_id).count
end

.find(id) ⇒ Object



431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
# File 'lib/sakai-info/quiz.rb', line 431

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) ⇒ Object



489
490
491
492
493
494
# File 'lib/sakai-info/quiz.rb', line 489

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).all.collect do |row|
    item_class.new(row)
  end
end

.find_by_section_id(section_id) ⇒ Object



472
473
474
475
476
477
# File 'lib/sakai-info/quiz.rb', line 472

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

.query_by_quiz_id(quiz_id) ⇒ Object



479
480
481
482
483
# File 'lib/sakai-info/quiz.rb', line 479

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) ⇒ Object



463
464
465
466
# File 'lib/sakai-info/quiz.rb', line 463

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) ⇒ Object



447
448
449
450
451
452
453
# File 'lib/sakai-info/quiz.rb', line 447

def self.table_name_for_type(type)
  if type == "pending"
    :sam_item_t
  else
    :sam_publisheditem_t
  end
end

Instance Method Details

#default_serializationObject



500
501
502
503
504
505
506
507
508
509
# File 'lib/sakai-info/quiz.rb', line 500

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_typeObject



496
497
498
# File 'lib/sakai-info/quiz.rb', line 496

def item_type
  nil
end

#summary_serializationObject



511
512
513
514
515
516
517
# File 'lib/sakai-info/quiz.rb', line 511

def summary_serialization
  {
    "id" => self.id,
    "quiz_id" => self.quiz.id,
    "section_id" => self.section.id
  }
end