class Mcal::Calendar

Public Class Methods

new(year) click to toggle source
# File lib/mcal/calendar.rb, line 5
def initialize(year)
  @year = year
end

Public Instance Methods

monthly(month, &block) click to toggle source
# File lib/mcal/calendar.rb, line 9
def monthly(month, &block)
  block ||= lambda { |day| day.mday }
  by_day = Date.new(@year, month, -1)
  week = Array.new(7, nil)
  weeks = []
  Date.new(@year, month).step(by_day).each do |day|
    if day.sunday?
      week[0] = block.call(day)
    else
      week[day.cwday] = block.call(day)
    end

    # End the current week and start a new one
    if day.saturday?
      weeks << week
      week = Array.new(7, nil)
    end
  end

  # Add leftover week (if we didn't end exactly on a Saturday)
  weeks << week if week.compact.any?
  weeks
end