gcalapi 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,35 @@
1
+
2
+ <?xml version="1.0" encoding="iso-8859-1"?>
3
+ <!DOCTYPE html
4
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
+
7
+ <!--
8
+
9
+ Classes
10
+
11
+ -->
12
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
+ <head>
14
+ <title>Classes</title>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
16
+ <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
+ <base target="docwin" />
18
+ </head>
19
+ <body>
20
+ <div id="index">
21
+ <h1 class="section-bar">Classes</h1>
22
+ <div id="index-entries">
23
+ <a href="classes/GoogleCalendar.html">GoogleCalendar</a><br />
24
+ <a href="classes/GoogleCalendar/AuthenticationFailed.html">GoogleCalendar::AuthenticationFailed</a><br />
25
+ <a href="classes/GoogleCalendar/Calendar.html">GoogleCalendar::Calendar</a><br />
26
+ <a href="classes/GoogleCalendar/Event.html">GoogleCalendar::Event</a><br />
27
+ <a href="classes/GoogleCalendar/EventDeleteFailed.html">GoogleCalendar::EventDeleteFailed</a><br />
28
+ <a href="classes/GoogleCalendar/EventInsertFailed.html">GoogleCalendar::EventInsertFailed</a><br />
29
+ <a href="classes/GoogleCalendar/EventUpdateFailed.html">GoogleCalendar::EventUpdateFailed</a><br />
30
+ <a href="classes/GoogleCalendar/InvalidCalendarURL.html">GoogleCalendar::InvalidCalendarURL</a><br />
31
+ <a href="classes/GoogleCalendar/Service.html">GoogleCalendar::Service</a><br />
32
+ </div>
33
+ </div>
34
+ </body>
35
+ </html>
@@ -0,0 +1,30 @@
1
+
2
+ <?xml version="1.0" encoding="iso-8859-1"?>
3
+ <!DOCTYPE html
4
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
+
7
+ <!--
8
+
9
+ Files
10
+
11
+ -->
12
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
+ <head>
14
+ <title>Files</title>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
16
+ <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
+ <base target="docwin" />
18
+ </head>
19
+ <body>
20
+ <div id="index">
21
+ <h1 class="section-bar">Files</h1>
22
+ <div id="index-entries">
23
+ <a href="files/README.html">README</a><br />
24
+ <a href="files/lib/googlecalendar/calendar_rb.html">lib/googlecalendar/calendar.rb</a><br />
25
+ <a href="files/lib/googlecalendar/event_rb.html">lib/googlecalendar/event.rb</a><br />
26
+ <a href="files/lib/googlecalendar/service_rb.html">lib/googlecalendar/service.rb</a><br />
27
+ </div>
28
+ </div>
29
+ </body>
30
+ </html>
@@ -0,0 +1,49 @@
1
+
2
+ <?xml version="1.0" encoding="iso-8859-1"?>
3
+ <!DOCTYPE html
4
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
+
7
+ <!--
8
+
9
+ Methods
10
+
11
+ -->
12
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
+ <head>
14
+ <title>Methods</title>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
16
+ <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
+ <base target="docwin" />
18
+ </head>
19
+ <body>
20
+ <div id="index">
21
+ <h1 class="section-bar">Methods</h1>
22
+ <div id="index-entries">
23
+ <a href="classes/GoogleCalendar/Service.html#M000018">calendar_list (GoogleCalendar::Service)</a><br />
24
+ <a href="classes/GoogleCalendar/Calendar.html#M000012">calendars (GoogleCalendar::Calendar)</a><br />
25
+ <a href="classes/GoogleCalendar/Service.html#M000019">calendars (GoogleCalendar::Service)</a><br />
26
+ <a href="classes/GoogleCalendar.html#M000004">create_event (GoogleCalendar)</a><br />
27
+ <a href="classes/GoogleCalendar/Service.html#M000021">delete (GoogleCalendar::Service)</a><br />
28
+ <a href="classes/GoogleCalendar/Event.html#M000009">destroy (GoogleCalendar::Event)</a><br />
29
+ <a href="classes/GoogleCalendar/Event.html#M000010">destroy! (GoogleCalendar::Event)</a><br />
30
+ <a href="classes/GoogleCalendar.html#M000003">events (GoogleCalendar)</a><br />
31
+ <a href="classes/GoogleCalendar/Service.html#M000022">insert (GoogleCalendar::Service)</a><br />
32
+ <a href="classes/GoogleCalendar/Event.html#M000006">load_xml (GoogleCalendar::Event)</a><br />
33
+ <a href="classes/GoogleCalendar.html#M000001">new (GoogleCalendar)</a><br />
34
+ <a href="classes/GoogleCalendar/Event.html#M000005">new (GoogleCalendar::Event)</a><br />
35
+ <a href="classes/GoogleCalendar/Service.html#M000017">new (GoogleCalendar::Service)</a><br />
36
+ <a href="classes/GoogleCalendar/Service.html#M000013">proxy_addr (GoogleCalendar::Service)</a><br />
37
+ <a href="classes/GoogleCalendar/Service.html#M000014">proxy_addr= (GoogleCalendar::Service)</a><br />
38
+ <a href="classes/GoogleCalendar/Service.html#M000015">proxy_port (GoogleCalendar::Service)</a><br />
39
+ <a href="classes/GoogleCalendar/Service.html#M000016">proxy_port= (GoogleCalendar::Service)</a><br />
40
+ <a href="classes/GoogleCalendar/Service.html#M000020">query (GoogleCalendar::Service)</a><br />
41
+ <a href="classes/GoogleCalendar/Event.html#M000007">save (GoogleCalendar::Event)</a><br />
42
+ <a href="classes/GoogleCalendar/Event.html#M000008">save! (GoogleCalendar::Event)</a><br />
43
+ <a href="classes/GoogleCalendar.html#M000002">source (GoogleCalendar)</a><br />
44
+ <a href="classes/GoogleCalendar/Event.html#M000011">to_s (GoogleCalendar::Event)</a><br />
45
+ <a href="classes/GoogleCalendar/Service.html#M000023">update (GoogleCalendar::Service)</a><br />
46
+ </div>
47
+ </div>
48
+ </body>
49
+ </html>
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
5
+
6
+ <!--
7
+
8
+ RDoc Documentation
9
+
10
+ -->
11
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
12
+ <head>
13
+ <title>RDoc Documentation</title>
14
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
15
+ </head>
16
+ <frameset rows="20%, 80%">
17
+ <frameset cols="25%,35%,45%">
18
+ <frame src="fr_file_index.html" title="Files" name="Files" />
19
+ <frame src="fr_class_index.html" name="Classes" />
20
+ <frame src="fr_method_index.html" name="Methods" />
21
+ </frameset>
22
+ <frame src="files/README.html" name="docwin" />
23
+ </frameset>
24
+ </html>
@@ -0,0 +1,208 @@
1
+
2
+ body {
3
+ font-family: Verdana,Arial,Helvetica,sans-serif;
4
+ font-size: 90%;
5
+ margin: 0;
6
+ margin-left: 40px;
7
+ padding: 0;
8
+ background: white;
9
+ }
10
+
11
+ h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
12
+ h1 { font-size: 150%; }
13
+ h2,h3,h4 { margin-top: 1em; }
14
+
15
+ a { background: #eef; color: #039; text-decoration: none; }
16
+ a:hover { background: #039; color: #eef; }
17
+
18
+ /* Override the base stylesheet's Anchor inside a table cell */
19
+ td > a {
20
+ background: transparent;
21
+ color: #039;
22
+ text-decoration: none;
23
+ }
24
+
25
+ /* and inside a section title */
26
+ .section-title > a {
27
+ background: transparent;
28
+ color: #eee;
29
+ text-decoration: none;
30
+ }
31
+
32
+ /* === Structural elements =================================== */
33
+
34
+ div#index {
35
+ margin: 0;
36
+ margin-left: -40px;
37
+ padding: 0;
38
+ font-size: 90%;
39
+ }
40
+
41
+
42
+ div#index a {
43
+ margin-left: 0.7em;
44
+ }
45
+
46
+ div#index .section-bar {
47
+ margin-left: 0px;
48
+ padding-left: 0.7em;
49
+ background: #ccc;
50
+ font-size: small;
51
+ }
52
+
53
+
54
+ div#classHeader, div#fileHeader {
55
+ width: auto;
56
+ color: white;
57
+ padding: 0.5em 1.5em 0.5em 1.5em;
58
+ margin: 0;
59
+ margin-left: -40px;
60
+ border-bottom: 3px solid #006;
61
+ }
62
+
63
+ div#classHeader a, div#fileHeader a {
64
+ background: inherit;
65
+ color: white;
66
+ }
67
+
68
+ div#classHeader td, div#fileHeader td {
69
+ background: inherit;
70
+ color: white;
71
+ }
72
+
73
+
74
+ div#fileHeader {
75
+ background: #057;
76
+ }
77
+
78
+ div#classHeader {
79
+ background: #048;
80
+ }
81
+
82
+
83
+ .class-name-in-header {
84
+ font-size: 180%;
85
+ font-weight: bold;
86
+ }
87
+
88
+
89
+ div#bodyContent {
90
+ padding: 0 1.5em 0 1.5em;
91
+ }
92
+
93
+ div#description {
94
+ padding: 0.5em 1.5em;
95
+ background: #efefef;
96
+ border: 1px dotted #999;
97
+ }
98
+
99
+ div#description h1,h2,h3,h4,h5,h6 {
100
+ color: #125;;
101
+ background: transparent;
102
+ }
103
+
104
+ div#validator-badges {
105
+ text-align: center;
106
+ }
107
+ div#validator-badges img { border: 0; }
108
+
109
+ div#copyright {
110
+ color: #333;
111
+ background: #efefef;
112
+ font: 0.75em sans-serif;
113
+ margin-top: 5em;
114
+ margin-bottom: 0;
115
+ padding: 0.5em 2em;
116
+ }
117
+
118
+
119
+ /* === Classes =================================== */
120
+
121
+ table.header-table {
122
+ color: white;
123
+ font-size: small;
124
+ }
125
+
126
+ .type-note {
127
+ font-size: small;
128
+ color: #DEDEDE;
129
+ }
130
+
131
+ .xxsection-bar {
132
+ background: #eee;
133
+ color: #333;
134
+ padding: 3px;
135
+ }
136
+
137
+ .section-bar {
138
+ color: #333;
139
+ border-bottom: 1px solid #999;
140
+ margin-left: -20px;
141
+ }
142
+
143
+
144
+ .section-title {
145
+ background: #79a;
146
+ color: #eee;
147
+ padding: 3px;
148
+ margin-top: 2em;
149
+ margin-left: -30px;
150
+ border: 1px solid #999;
151
+ }
152
+
153
+ .top-aligned-row { vertical-align: top }
154
+ .bottom-aligned-row { vertical-align: bottom }
155
+
156
+ /* --- Context section classes ----------------------- */
157
+
158
+ .context-row { }
159
+ .context-item-name { font-family: monospace; font-weight: bold; color: black; }
160
+ .context-item-value { font-size: small; color: #448; }
161
+ .context-item-desc { color: #333; padding-left: 2em; }
162
+
163
+ /* --- Method classes -------------------------- */
164
+ .method-detail {
165
+ background: #efefef;
166
+ padding: 0;
167
+ margin-top: 0.5em;
168
+ margin-bottom: 1em;
169
+ border: 1px dotted #ccc;
170
+ }
171
+ .method-heading {
172
+ color: black;
173
+ background: #ccc;
174
+ border-bottom: 1px solid #666;
175
+ padding: 0.2em 0.5em 0 0.5em;
176
+ }
177
+ .method-signature { color: black; background: inherit; }
178
+ .method-name { font-weight: bold; }
179
+ .method-args { font-style: italic; }
180
+ .method-description { padding: 0 0.5em 0 0.5em; }
181
+
182
+ /* --- Source code sections -------------------- */
183
+
184
+ a.source-toggle { font-size: 90%; }
185
+ div.method-source-code {
186
+ background: #262626;
187
+ color: #ffdead;
188
+ margin: 1em;
189
+ padding: 0.5em;
190
+ border: 1px dashed #999;
191
+ overflow: hidden;
192
+ }
193
+
194
+ div.method-source-code pre { color: #ffdead; overflow: hidden; }
195
+
196
+ /* --- Ruby keyword styles --------------------- */
197
+
198
+ .standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
199
+
200
+ .ruby-constant { color: #7fffd4; background: transparent; }
201
+ .ruby-keyword { color: #00ffff; background: transparent; }
202
+ .ruby-ivar { color: #eedd82; background: transparent; }
203
+ .ruby-operator { color: #00ffee; background: transparent; }
204
+ .ruby-identifier { color: #ffdead; background: transparent; }
205
+ .ruby-node { color: #ffa07a; background: transparent; }
206
+ .ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
207
+ .ruby-regexp { color: #ffa07a; background: transparent; }
208
+ .ruby-value { color: #7fffd4; background: transparent; }
@@ -0,0 +1,117 @@
1
+ require "googlecalendar/service"
2
+ require "googlecalendar/event"
3
+ require "rexml/document"
4
+
5
+ module GoogleCalendar
6
+ class InvalidCalendarURL < StandardError; end #:nodoc: all
7
+ # = SUMMARY
8
+ # This class represents User's Calendar.
9
+ #
10
+ # = How to get this class
11
+ # * get calendar list
12
+ #
13
+ # srv = GoogleCalendar::Service.new(MAIL, PASS)
14
+ # cal_list = srv.calendars
15
+ #
16
+ # cal_list is a hash of user's calendars.
17
+ # key: a calendar's editable feed url.
18
+ # value: calendar object.
19
+ #
20
+ # * create an instance from calendar's feed url
21
+ #
22
+ # srv = GoogleCalendar::Service.new(MAIL, PASS)
23
+ # cal = Calendar.new(srv, FEED)
24
+ #
25
+ class Calendar
26
+
27
+ #
28
+ # get user's calendar list.
29
+ #
30
+ def self.calendars(srv)
31
+ ret = srv.calendar_list
32
+ list = REXML::Document.new(ret.body)
33
+ h = {}
34
+ list.root.elements.each("entry/link") do |e|
35
+ if e.attributes["rel"] == "alternate"
36
+ feed = e.attributes["href"]
37
+ h[feed] = Calendar.new(srv, feed)
38
+ end
39
+ end
40
+ h
41
+ end
42
+
43
+ #
44
+ # defines calendar's readonly attributes
45
+ #
46
+ ATTRIBUTES = {
47
+ "updated" => ["updated"],
48
+ "title" => ["title"],
49
+ "subtitle" => ["subtitle"],
50
+ "name" => ["author/name"],
51
+ "email" => ["author/email"],
52
+ "timezone" => ["gCal:timezone", "value"],
53
+ "where" => ["gd:where", "valueString"]}.each do |key, val|
54
+ module_eval(
55
+ "def #{key}; self.source.root.elements[\"#{val[0]}\"]." +
56
+ (val.length == 1 ? "text" : "attributes[\"#{val[1]}\"]") +
57
+ "; end"
58
+ )
59
+ end
60
+
61
+ attr_reader :feed
62
+
63
+ # srv: GoogleCalendar::Service object
64
+ # feed: Calendar's editable feed url
65
+ def initialize(srv, feed)
66
+ @srv = srv
67
+ @feed = feed
68
+ @source = nil
69
+ end
70
+
71
+ #
72
+ # REXML::Document object which represents calendar object
73
+ #
74
+ def source
75
+ @source = get_data unless @source
76
+ @source
77
+ end
78
+
79
+ #
80
+ # send query to get events and returns an array of Event objects.
81
+ # if any conditions are given, recent 25 entries are retrieved.
82
+ # For detail, see Service#query
83
+ #
84
+ def events(conditions = {})
85
+ ret = @srv.query(self.feed, conditions)
86
+ raise InvalidCalendarURL unless ret.code == "200"
87
+ REXML::Document.new(ret.body).root.elements.each("entry"){}.map do |elem|
88
+ elem.attributes["xmlns:gCal"] = "http://schemas.google.com/gCal/2005"
89
+ elem.attributes["xmlns:gd"] = "http://schemas.google.com/g/2005"
90
+ elem.attributes["xmlns"] = "http://www.w3.org/2005/Atom"
91
+ entry = Event.new
92
+ entry.srv = @srv
93
+ entry.load_xml("<?xml version='1.0' encoding='UTF-8'?>#{elem.to_s}")
94
+ end
95
+ end
96
+
97
+ #
98
+ # creates a new Event instance which belongs to this clandar instance.
99
+ #
100
+ def create_event
101
+ ev = Event.new
102
+ ev.srv = @srv
103
+ ev.feed = @feed
104
+ ev
105
+ end
106
+
107
+ private
108
+
109
+ def get_data
110
+ #gets calendar data without events
111
+ ret = @srv.query(@feed, "start-min" => Time.now, "start-max" => Time.now - 1)
112
+ raise InvalidCalendarURL, ret.inspect unless ret.code == "200"
113
+ REXML::Document.new(ret.body)
114
+ end
115
+ end # class Calendar
116
+ end # module
117
+