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