lib/googlecalendar/calendar.rb in gcalapi-0.0.4 vs lib/googlecalendar/calendar.rb in gcalapi-0.1.0

- old
+ new

@@ -1,11 +1,17 @@ require "googlecalendar/service" require "googlecalendar/event" require "rexml/document" +# +# = SUMMARY +# google calendar api for ruby +# module GoogleCalendar class InvalidCalendarURL < StandardError; end #:nodoc: all + + # # = SUMMARY # This class represents User's Calendar. # # = How to get this class # * get calendar list @@ -20,51 +26,18 @@ # * create an instance from calendar's feed url # # srv = GoogleCalendar::Service.new(MAIL, PASS) # cal = Calendar.new(srv, FEED) # + class Calendar - # - # get user's calendar list. - # - def self.calendars(srv) - ret = srv.calendar_list - list = REXML::Document.new(ret.body) - h = {} - list.root.elements.each("entry/link") do |e| - if e.attributes["rel"] == "alternate" - feed = e.attributes["href"] - h[feed] = Calendar.new(srv, feed) - end - end - h - end - - # - # defines calendar's readonly attributes - # - ATTRIBUTES = { - "updated" => ["updated"], - "title" => ["title"], - "subtitle" => ["subtitle"], - "name" => ["author/name"], - "email" => ["author/email"], - "timezone" => ["gCal:timezone", "value"], - "where" => ["gd:where", "valueString"]}.each do |key, val| - module_eval( - "def #{key}; self.source.root.elements[\"#{val[0]}\"]." + - (val.length == 1 ? "text" : "attributes[\"#{val[1]}\"]") + - "; end" - ) - end - attr_reader :feed # srv: GoogleCalendar::Service object - # feed: Calendar's editable feed url - def initialize(srv, feed) + # feed: Calendar's editable feed url(default value: user's default calendar) + def initialize(srv, feed = DEFAULT_CALENDAR_FEED) @srv = srv @feed = feed @source = nil end @@ -110,8 +83,47 @@ #gets calendar data without events ret = @srv.query(@feed, "start-min" => Time.now, "start-max" => Time.now - 1) raise InvalidCalendarURL, ret.inspect unless ret.code == "200" REXML::Document.new(ret.body) end + + public + + DEFAULT_CALENDAR_FEED = "http://www.google.com/calendar/feeds/default/private/full" + # + # get user's calendar list. + # + def self.calendars(srv) + ret = srv.calendar_list + list = REXML::Document.new(ret.body) + h = {} + list.root.elements.each("entry/link") do |e| + if e.attributes["rel"] == "alternate" + feed = e.attributes["href"] + h[feed] = Calendar.new(srv, feed) + end + end + h + end + + # + # defines calendar's readonly attributes + # + ATTRIBUTES = { + "updated" => ["updated"], + "title" => ["title"], + "subtitle" => ["subtitle"], + "name" => ["author/name"], + "email" => ["author/email"], + "timezone" => ["gCal:timezone", "value"], + "where" => ["gd:where", "valueString"]}.each do |key, val| + module_eval( + "def #{key}; self.source.root.elements[\"#{val[0]}\"]." + + (val.length == 1 ? "text" : "attributes[\"#{val[1]}\"]") + + "; end" + ) + end + end # class Calendar + end # module