class Event

Attributes

allday[RW]
cal_name[RW]
date[RW]
desc[RW]
end_time[RW]
every[RW]
location[RW]
main_method[RW]
range_begins[RW]
range_ends[RW]
start_time[RW]
sub_method[RW]
title[RW]

Public Class Methods

new(title) click to toggle source
# File lib/gcalgen/event.rb, line 9
def initialize(title)
  @title = title
end

Public Instance Methods

_check_holiday(date) click to toggle source

internal methods

# File lib/gcalgen/event.rb, line 66
def _check_holiday(date)
  date.to_date.national_holiday?
end
_generate_annualy() click to toggle source
# File lib/gcalgen/event.rb, line 187
def _generate_annualy
  ret = []

  today = @date
  if @range_begins 
    while @range_begins > today
      today = today.next_year
    end
  end
  if @range_ends
    limit = @range_ends
  else
    limit = today + 5.years
    limit = limit.change(:offset => DateTime.now.zone)
  end

  # generate array of st/en
  while today < limit
    ## st time/ en time
    ##
    ret << _generate_st_en(today)
    today = today.next_year
  end
  ret
end
_generate_monthly() click to toggle source
# File lib/gcalgen/event.rb, line 153
def _generate_monthly
  ret = []

  if @range_begins 
    today = @range_begins
  else
    today = Date.today 
    today = today.change(:offset => DateTime.now.zone)
  end

  if @range_ends
    limit = @range_ends
  else
    limit = today + 6.month
    limit = limit.change(:offset => DateTime.now.zone)
  end

  # generate array of st/en
  while today < limit
    if @every.first_flg
      today = _get_first(today, @every.business_day)
    elsif @every.last_flg
      today = _get_last(today, @every.business_day)
    end
    today = today.beginning_of_day

    ## st time/ en time
    ##
    ret << _generate_st_en(today)
    today = today.next_month.beginning_of_month
  end
  ret
end
_generate_oneshot() click to toggle source
# File lib/gcalgen/event.rb, line 213
def _generate_oneshot
  ret = []
  if @start_time
    today = @date.beginning_of_day
    today = DateTime.parse(@date.strftime("%Y/%m/%d ") + @start_time + DateTime.now.zone)
    st = today
    if @end_time
      today = @date.beginning_of_day
      today = DateTime.parse(@date.strftime("%Y/%m/%d ") + @end_time + DateTime.now.zone)
      en=today
    else
      en = st + 1.hour
    end
  else
    st = @date.beginning_of_day
    en= @date.beginning_of_day
    allday = true
  end
  ret << {:st => st, :en => en, :allday => allday}
end
_generate_st_en(today) click to toggle source
# File lib/gcalgen/event.rb, line 90
def _generate_st_en(today)
  allday = true if @allday
  if @start_time =~/(\d\d):(\d\d)/
    st = today.to_time
    st += $1.to_i.hours
    st += $2.to_i.minutes
    if @end_time =~/(\d\d):(\d\d)/
      en = today.to_time
      en+= $1.to_i.hours
      en+= $2.to_i.minutes
    else
      en = st + 1.hour 
    end
  else
    st = today.in_time_zone
    en = today.in_time_zone
    allday = true
  end
  return {:st => st, :en => en, :allday => allday}
end
_generate_weekly() click to toggle source
# File lib/gcalgen/event.rb, line 111
def _generate_weekly
  ret = []

  if @range_begins 
    today = @range_begins
  else
    today = Date.today 
    today = today.change(:offset => DateTime.now.zone)
  end
  if @range_ends
    limit = @range_ends
  else
    limit = today + 3.month
    limit = limit.change(:offset => DateTime.now.zone)
  end

  @every.weekday = today.strftime('%A') unless @every.weekday

  # search matched wday forward
  while today.strftime('%A') !~ /#{@every.weekday}/i
    today += 1.day
  end
  # generate array of st,en
  while today < limit
    if _check_holiday(today)
      if @every.business
        if @every.shift
          while _check_holiday(today)
            today += 1.day
          end
        else
          today += 7.days
          next
        end
      end
    end
    ret << _generate_st_en(today)
    today = today.next_week
  end
  ret
end
_get_first(date, business_day) click to toggle source
# File lib/gcalgen/event.rb, line 70
def _get_first(date, business_day)
  first = date.beginning_of_month
  if business_day
    while _check_holiday(first)
      first += 1.day
    end
  end
  first
end
_get_last(date, business_day) click to toggle source
# File lib/gcalgen/event.rb, line 80
def _get_last(date, business_day)
  last = date.end_of_month
  if business_day
    while _check_holiday(last)
      last -= 1.day
    end
  end
  last
end
all_day() click to toggle source
# File lib/gcalgen/event.rb, line 38
def all_day
  @allday = true
end
at(location) click to toggle source
# File lib/gcalgen/event.rb, line 30
def at(location)
  @location = location
end
calendar(cal_name) click to toggle source
# File lib/gcalgen/event.rb, line 57
def calendar(cal_name)
  @cal_name = cal_name
end
ends(end_time) click to toggle source
# File lib/gcalgen/event.rb, line 26
def ends(end_time)
  @end_time = end_time
end
generate_gcalevent() click to toggle source
# File lib/gcalgen/event.rb, line 234
def generate_gcalevent
  ret = []

  if @cal_name
    user = $myConfig[@cal_name].cal_user
    password = $myConfig[@cal_name].cal_password
    feed = $myConfig[@cal_name].cal_feed
  else
    user = $myConfig['default'].cal_user
    password = $myConfig['default'].cal_password
    feed = $myConfig['default'].cal_feed
  end

  cal = GoogleCalendar::Calendar.new(GoogleCalendar::Service.new(user, password), feed)

  if @every
    if @every.method =~ /week/i
      st_en = _generate_weekly
    elsif @every.method =~ /month/i
      st_en = _generate_monthly
    elsif @every.method =~ /year/i
      st_en = _generate_annualy
    end
  else # one shot event
    st_en = _generate_oneshot
  end

  st_en.each {|val|
    event = cal.create_event
    event.title = @title
    event.desc  = @desc
    event.where = @location
    event.allday = val[:allday]
    event.st = val[:st]
    event.en = val[:en]
    ret << event
  }
  ret
end
on(date) click to toggle source

DSL functions

# File lib/gcalgen/event.rb, line 17
def on(date)
  @date=DateTime.parse(date)
  @date = @date.change(:offset => DateTime.now.zone)
end
starts(start_time) click to toggle source
# File lib/gcalgen/event.rb, line 22
def starts(start_time)
  @start_time = start_time
end