rubyでcalを書いてみる

require 'date'

class CalMon
  def initialize(year, mon)
    @year = year
    @mon = mon
  end
  def getFirstDay
    return Date.new(@year, @mon, 1)
  end
  def getLastDay
    return (Date.new(@year, @mon, 1) >> 1) - 1
  end
  def getWeeks
    a = Array::new()
    d = getFirstDay
    begin
        a << getWeekRange(d)
        d += 7
    end while d.mon == @mon
    return a
  end
  def getWeekRange(d)
    d0 = d - d.wday
    d6 = d0 + 6
    return [d0, d6]
  end
end

t = Date.today
print "      ", t.strftime("%B %Y"), "\n"
print " S  M Tu  W Th  F  S\n"
CalMon.new(t.year, t.mon).getWeeks.each do |w|
  d = w[0]
  7.times {|i|
    if(d.mon == t.mon)
      print (d.day < 10) ? " " : "", "#{d.day} "
    else
      print "   "
    end
    d += 1
  }
  print "\n"
end