# File lib/runt/sugar.rb, line 133
  def build(name, *args, &block)
    case name.to_s
    when /^daily_(\d{1,2})_(\d{2})([ap]m)_to_(\d{1,2})_(\d{2})([ap]m)$/
      # REDay
      st_hr, st_min, st_m, end_hr, end_min, end_m = $1, $2, $3, $4, $5, $6
      args = parse_time(st_hr, st_min, st_m)
      args.concat(parse_time(end_hr, end_min, end_m))
      return REDay.new(*args)
    when Regexp.new('^weekly_' + DAYS + '_to_' + DAYS + '$')
      # REWeek
      st_day, end_day = $1, $2
      return REWeek.new(Runt.const(st_day), Runt.const(end_day))
    when Regexp.new('^monthly_(\d{1,2})' + ORDINAL_SUFFIX + '_to_(\d{1,2})' \
                    + ORDINAL_SUFFIX + '$')
      # REMonth
      st_day, end_day = $1, $2
      return REMonth.new(st_day, end_day)
    when Regexp.new('^yearly_' + MONTHS + '_(\d{1,2})_to_' + MONTHS + '_(\d{1,2})$')
      # REYear
      st_mon, st_day, end_mon, end_day = $1, $2, $3, $4
      return REYear.new(Runt.const(st_mon), st_day, Runt.const(end_mon), end_day)
    when Regexp.new('^' + DAYS + '$')
      # DIWeek
      return DIWeek.new(Runt.const(name.to_s))
    when Regexp.new(WEEK_OF_MONTH_ORDINALS + '_' + DAYS)
      # DIMonth
      ordinal, day = $1, $2
      return DIMonth.new(Runt.const(ordinal), Runt.const(day))
    else
      # You're hosed
      nil
    end
  end