class Lectures

Public Class Methods

new(sect, citems, schedule=nil, collapsed=false) click to toggle source
Calls superclass method Section::new
# File lib/coursegen/course/data/lectures.rb, line 4
def initialize(sect, citems, schedule=nil, collapsed=false)
  super sect, citems, collapsed
  @schedule = schedule || ::Scheduler.new
  @citems = sort_items
  build_tree
end

Public Instance Methods

build_tree() click to toggle source
# File lib/coursegen/course/data/lectures.rb, line 23
def build_tree
  lecture_num = 1
  @root = Tree::TreeNode.new("root", "root")
  @citems.each do |i|
    i.lecture_number = lecture_num
    i.lecture_date = @schedule.event_date_by_index(lecture_num - 1) # Lecture numbers are base 1
    i.start_time = @schedule.event_start_times[lecture_num - 1]
    i.end_time = @schedule.event_end_times[lecture_num - 1]
    if i.type == "subsection"
      @root.add(Tree::TreeNode.new(i.subsection, i))
    elsif i.type == "page"
      parent_tree_node = parent_node_of(i)
      parent_tree_node.add(Tree::TreeNode.new(i.identifier, i))
      lecture_num += 1
    else
      raise ArgumentError, "invalid lecture page type of #{i.type}for #{i.title}"
    end
  end
end
has_lecture_numbers?() click to toggle source
# File lib/coursegen/course/data/lectures.rb, line 15
def has_lecture_numbers?
  true
end
has_subsections?() click to toggle source
# File lib/coursegen/course/data/lectures.rb, line 11
def has_subsections?
  true
end
next_for(citem) click to toggle source
# File lib/coursegen/course/data/lectures.rb, line 63
def next_for(citem)
  next_node = treenode_of(citem).next_sibling
  if !next_node.nil?
    next_node.content
  else
    citem
  end
end
parent_node_of(citem) click to toggle source
# File lib/coursegen/course/data/lectures.rb, line 43
def parent_node_of citem
  parent_node = @root[citem.subsection]
  raise  RuntimeError, "Cant find section for item: #{citem.identifier}" if parent_node.nil?
  parent_node
end
previous_for(citem) click to toggle source
# File lib/coursegen/course/data/lectures.rb, line 72
def previous_for(citem)
  prev_node = treenode_of(citem).previous_sibling
  if !prev_node.nil?
    prev_node.content
  else
    citem
  end
end
schedule() click to toggle source
# File lib/coursegen/course/data/lectures.rb, line 19
def schedule
  @schedule
end
subsections() click to toggle source
# File lib/coursegen/course/data/lectures.rb, line 59
def subsections
  @root.children
end
treenode_of(citem) click to toggle source
# File lib/coursegen/course/data/lectures.rb, line 49
def treenode_of citem
  @root.find do |tree_node|
    if citem.type == "subsection"
      citem.subsection == tree_node.name
    else
      citem.identifier == tree_node.name
    end
  end
end

Protected Instance Methods

get_time(times, lect_num) click to toggle source

@TODO: once there are skips, this calcluation doesn't work anymore!

# File lib/coursegen/course/data/lectures.rb, line 84
def get_time(times, lect_num)
  if times.nil?
    "0"
  else
    times[(lect_num % 3) - 1]
  end
end
sort_items() click to toggle source

Sort all the items in this section: First by the ordering of the subseciton that the item belongs to, and second by the item's own indicated order.

# File lib/coursegen/course/data/lectures.rb, line 96
def sort_items
  new_citems = @citems.sort_by do |i|
    [lookup_citem_by_identifier(i.subsection + "index.html").order,
     ((i.type == "page" ? 100 : 1) * i.order)]
  end
  @items = new_citems
end