Skip to content
This repository

Calendar-generating plugin for Ruby

branch: master


Build Status


A simple helper for creating an HTML calendar. The “calendar” method will be automatically available to your Rails view templates, or can be used with Sinatra or other webapps.

Some example stylesheets are provided via the Rails asset pipeline. Add to your main stylesheet with one of the following:

 *= require 'calendar_styles/grey'
 *   OR
 *= require 'calendar_styles/red'
 *   OR
 *= require 'calendar_styles/blue'


# Simple
calendar(:year => 2005, :month => 6)

# Set table class
calendar({:year => 2005, :month => 6, :table_class => "calendar_helper"})

# Full featured
calendar(:year => 2005, :month => 5) do |d| # This generates a simple calendar, but gives special days
  if listOfSpecialDays.include?(d)          # (days that are in the array listOfSpecialDays) one CSS class,
    [d.mday, {:class => "specialDay"}]      # "specialDay", and gives the rest of the days another CSS class,
  else                                      # "normalDay". You can also use this highlight today differently
    [d.mday, {:class => "normalDay"}]       # from the rest of the days, etc.

If using with ERb (Rails), put in a printing tag.

<%= calendar(:year => @year, :month => @month, :first_day_of_week => 1) do |d|

With Haml, use a helper to set options for each cell.

= calendar(:year => @year, :month => @month, :first_day_of_week => 1) do |d|
  - render_calendar_cell(d)

In Sinatra, include the CalendarHelper module in your helpers:

helpers do
  include CalendarHelper

Accessibility & 508 Compliance:

  • The table tag has a summary attribute (overridable).

  • Each th has an id.

  • Each td as a headers attribute, containing the element id of the appropriate th.


Jeremy Voorhis – Original implementation

Geoffrey Grosenbach – Test suite and conversion to a Rails plugin



See the RDoc (or use “rake rdoc”).

To copy the CSS files, use

./script/generate calendar_styles

CSS will be copied to subdirectories of public/stylesheets/calendar.

Something went wrong with that request. Please try again.