Sha256: e7d8e42b5c6db7232b8b1e6c8e2b8903384c1f30bdfe90a5f284b234448f62dc

Contents?: true

Size: 1.88 KB

Versions: 11

Compression:

Stored size: 1.88 KB

Contents

require 'forwardable'
require 'byebug'

class Section
  extend Forwardable
  attr_reader :section
  def_delegators :@citems, :[], :count, :each, :sort!, :reduce

  def initialize(sect, citems, collapsed)
    @section = sect
    @collapsed = collapsed
    @citems = section_filter(citems)
    sort_pages
  end

  def find_index(citem)
    @citems.find_index(citem)
  end

  def find_by_short_name(sname)
    matches = @citems.select { |c| sname == c.short_name }
    raise RuntimeError,"'#{sname}': invalid reference in section \"#{@section}\"" if matches.length == 0
    raise RuntimeError, "'#{sname}': duplicate referenced in section \"#{@section}\"" if matches.length != 1
    matches[0]
  end

  def [](ind)
    @citems[ind]
  end

  def next_for(citem)
    index = @citems.find_index(citem)
    raise ArgumentError, "invalid citem in next_for" if index.nil?
    new_index = [index, @citems.length - 2].min
    @citems[new_index + 1]
  end

  def previous_for(citem)
    index = @citems.find_index(citem)
    byebug if index.nil?
    raise ArgumentError, "invalid citem in previous_for" if index.nil?
    new_index = [index, 1].max
    @citems[new_index - 1]
  end

  def has_subsections?
    false
  end

  def has_lecture_numbers?
    false
  end

  def collapsed?
    @collapsed
  end

  protected

  def lookup_citem_by_identifier identifier
    res = @citems.select { |i| i.identifier.to_s == identifier }
    fail "TOC#lookup_citem_by_identifier failed to find: '#{identifier}'"  if res.length != 1
#		binding.pry if res.length != 1
    res[0]
  end

  # Remove citems that don't belong in this section, or are hidden
  def section_filter citems
    filtered_citems = citems.map do |citem|
      citem.section == @section && !citem.hidden? ? citem : nil
    end
    filtered_citems.compact
  end

  def sort_pages
    @citems.sort! { |a,b| a.order <=> b.order } rescue fail "sort_pages in section.rb"
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
coursegen-0.8.3 lib/coursegen/course/data/section.rb
coursegen-0.8.2 lib/coursegen/course/data/section.rb
coursegen-0.8.1 lib/coursegen/course/data/section.rb
coursegen-0.7.7 lib/coursegen/course/data/section.rb
coursegen-0.7.6 lib/coursegen/course/data/section.rb
coursegen-0.7.5 lib/coursegen/course/data/section.rb
coursegen-0.7.4 lib/coursegen/course/data/section.rb
coursegen-0.7.3 lib/coursegen/course/data/section.rb
coursegen-0.7.2 lib/coursegen/course/data/section.rb
coursegen-0.7.1 lib/coursegen/course/data/section.rb
coursegen-0.7.0 lib/coursegen/course/data/section.rb