class Kuport::Timetable

Attributes

dates[R]
special[R]
table[R]
year[R]

Public Class Methods

new(doc) click to toggle source
# File lib/kuport/timetable.rb, line 5
def initialize(doc)
  period_line = doc.at_css('.portlet_module > .ac > table').css('tr')
  parse_dates(period_line.shift)
  parse_special(period_line.pop)
  parse_table(period_line)
end

Public Instance Methods

compact() click to toggle source
# File lib/kuport/timetable.rb, line 59
def compact
  # 土曜日から連続して授業の無い日を消す
  table.reverse_each do |key, val|
    break unless val.all?{|elem| elem[:name].nil?}
    table.delete(key)
  end

  # 週を通してn時限目が無ければ消す
  6.downto(0).each do |i|
    break unless table.all?{|key, val| val[i][:name].nil?}
    table.each{|key, val| val.pop}
  end
end
parse_class_text(text) click to toggle source
# File lib/kuport/timetable.rb, line 48
def parse_class_text(text)
  text.strip!
  text = '' if text == '-'
  text = text.to_half_str

  name,room,period = text.split("\n")
  name.sub!(/\[(.+)\]/, '\1') if name
  period.sub!(/\((\w+)\)/, '\1') if period
  [name,room,period]
end
parse_dates(dates_doc) click to toggle source
# File lib/kuport/timetable.rb, line 18
def parse_dates(dates_doc)
  dates_doc.br_to_return
  tds = dates_doc.css('td')
  @year = tds.shift.text

  @dates = tds.map do |td|
    # 月日曜, 祝
    date,special = td.text.sub("\n", ' ').split("\n")
    {date: date, special: special}
  end
end
parse_special(special_doc) click to toggle source

集中講義(1週間共通)

# File lib/kuport/timetable.rb, line 13
def parse_special(special_doc)
  @special = special_doc.css('td')[1].text
  @special = '' if @special == '-'
end
parse_table(period_line) click to toggle source
# File lib/kuport/timetable.rb, line 30
def parse_table(period_line)
  @table = {mon: [], tue: [], wed: [], thurs: [], fri: [], sat: []}

  period_line.each do |tr|
    tds = tr.css('td')
    tds.shift # 横枠破棄(1~7時限 集中講義等)

    tds.zip(@table).each do |(td, day)| # 各曜日のn限
      td.br_to_return
      name,room,period = parse_class_text(td.text)

      # 休講とか (kyuko)
      status = td.css('img').map{|img| File.basename_noext(img['src'])}
      day[1] << {name: name, room: room, period: period, status: status}
    end
  end
end
to_h() click to toggle source
# File lib/kuport/timetable.rb, line 73
def to_h
  @data_hash ||= {
    year: year,
    dates: dates,
    table: table,
    special: special,
  }
end
to_json(*a) click to toggle source
# File lib/kuport/timetable.rb, line 86
def to_json(*a)
  @data_json ||= to_h.to_json(*a)
end
to_s() click to toggle source
# File lib/kuport/timetable.rb, line 82
def to_s
  @data_str = to_h.to_s
end