gcal4ruby 0.5.4 → 0.5.5
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +5 -0
- data/README +4 -2
- data/lib/gcal4ruby/calendar.rb +22 -22
- data/lib/gcal4ruby/event.rb +3 -3
- data/lib/gcal4ruby/recurrence.rb +40 -50
- metadata +5 -5
data/CHANGELOG
CHANGED
@@ -1,4 +1,9 @@
|
|
1
1
|
#=CHANGELOG
|
2
|
+
#==version 0.5.5
|
3
|
+
#* Fixed calendar::find method. Thanks to AB <a.berezovskiy@gmail.com>.
|
4
|
+
#* Improved recurrence handling. Thanks to John Paul Narowski <jnarowski@gmail.com>.
|
5
|
+
#* Fixed documentation bug for event reminders.
|
6
|
+
#* Changed license to LGPLv3.
|
2
7
|
#==version 0.5.4
|
3
8
|
#* Fixed Service#to_iframe bgcolor bug
|
4
9
|
#==version 0.5.3
|
data/README
CHANGED
@@ -7,8 +7,10 @@
|
|
7
7
|
#
|
8
8
|
#==Author and Contact Information
|
9
9
|
#GCal4Ruby was created and is maintained by {Mike Reich}[mailto:mike@seabourneconsulting.com]
|
10
|
-
#and is licenses under the
|
11
|
-
#code back to the project and attribute as required by the license.
|
10
|
+
#and is licenses under the LGPL v3. Feel free to use and update, but be sure to contribute your
|
11
|
+
#code back to the project and attribute as required by the license. You can find the text of the LGPL
|
12
|
+
#here: http://www.gnu.org/licenses/lgpl.html.
|
13
|
+
#
|
12
14
|
#===Website
|
13
15
|
#http://cookingandcoding.com/gcal4ruby/
|
14
16
|
#
|
data/lib/gcal4ruby/calendar.rb
CHANGED
@@ -182,7 +182,7 @@ module GCal4Ruby
|
|
182
182
|
cals.each do |cal|
|
183
183
|
if query.is_a?(Hash)
|
184
184
|
results << cal if query[:query] and cal.title.downcase.include? query[:query].downcase
|
185
|
-
results << cal if query[:title] and cal.title == query[:
|
185
|
+
results << cal if query[:title] and cal.title == query[:title]
|
186
186
|
else
|
187
187
|
results << cal if cal.title.downcase.include? query.downcase
|
188
188
|
end
|
@@ -210,21 +210,21 @@ module GCal4Ruby
|
|
210
210
|
xml = REXML::Document.new(super)
|
211
211
|
xml.root.elements.each(){}.map do |ele|
|
212
212
|
case ele.name
|
213
|
-
|
213
|
+
when "summary"
|
214
214
|
ele.text = @summary
|
215
|
-
|
215
|
+
when "timezone"
|
216
216
|
ele.attributes["value"] = @timezone
|
217
|
-
|
217
|
+
when "hidden"
|
218
218
|
ele.attributes["value"] = @hidden.to_s
|
219
|
-
|
219
|
+
when "color"
|
220
220
|
ele.attributes["value"] = @color
|
221
|
-
|
221
|
+
when "selected"
|
222
222
|
ele.attributes["value"] = @selected.to_s
|
223
223
|
end
|
224
224
|
end
|
225
225
|
xml.to_s
|
226
226
|
end
|
227
|
-
|
227
|
+
|
228
228
|
#Loads the Calendar with returned data from Google Calendar feed. Returns true if successful.
|
229
229
|
def load(string)
|
230
230
|
super(string)
|
@@ -234,23 +234,23 @@ module GCal4Ruby
|
|
234
234
|
xml.root.elements.each(){}.map do |ele|
|
235
235
|
case ele.name
|
236
236
|
when "id"
|
237
|
-
|
237
|
+
@id = ele.text.gsub("http://www.google.com/calendar/feeds/default/calendars/", "")
|
238
238
|
when 'summary'
|
239
|
-
|
239
|
+
@summary = ele.text
|
240
240
|
when "color"
|
241
|
-
|
241
|
+
@color = ele.attributes['value']
|
242
242
|
when 'hidden'
|
243
|
-
|
243
|
+
@hidden = ele.attributes["value"] == "true" ? true : false
|
244
244
|
when 'timezone'
|
245
|
-
|
245
|
+
@timezone = ele.attributes["value"]
|
246
246
|
when "selected"
|
247
|
-
|
247
|
+
@selected = ele.attributes["value"] == "true" ? true : false
|
248
248
|
when "link"
|
249
|
-
|
250
|
-
|
251
|
-
|
249
|
+
if ele.attributes['rel'] == 'edit'
|
250
|
+
@edit_feed = ele.attributes['href']
|
251
|
+
end
|
252
252
|
when 'accesslevel'
|
253
|
-
|
253
|
+
@editable = (ele.attributes["value"] == 'editor' or ele.attributes["value"] == 'owner' or ele.attributes["value"] == 'root')
|
254
254
|
end
|
255
255
|
end
|
256
256
|
|
@@ -308,9 +308,9 @@ module GCal4Ruby
|
|
308
308
|
params[:border] ||= "0"
|
309
309
|
params.each{|key, value| params[key] = CGI::escape(value)}
|
310
310
|
output = "#{params.to_a.collect{|a| a.join("=")}.join("&")}"
|
311
|
-
|
311
|
+
|
312
312
|
output += "&src=#{id}"
|
313
|
-
|
313
|
+
|
314
314
|
"<iframe src='http://www.google.com/calendar/embed?#{output}' style='#{params[:border]} px solid;' width='#{params[:width]}' height='#{params[:height]}' frameborder='#{params[:border]}' scrolling='no'></iframe>"
|
315
315
|
end
|
316
316
|
|
@@ -341,12 +341,12 @@ module GCal4Ruby
|
|
341
341
|
params[:border] ||= "0"
|
342
342
|
params.each{|key, value| params[key] = CGI::escape(value)}
|
343
343
|
output = "#{params.to_a.collect{|a| a.join("=")}.join("&")}"
|
344
|
-
|
344
|
+
|
345
345
|
output += "&src=#{id}"
|
346
|
-
|
346
|
+
|
347
347
|
"<iframe src='http://www.google.com/calendar/embed?#{output}' style='#{params[:border]} px solid;' width='#{params[:width]}' height='#{params[:height]}' frameborder='#{params[:border]}' scrolling='no'></iframe>"
|
348
348
|
end
|
349
|
-
|
349
|
+
|
350
350
|
private
|
351
351
|
def self.get_instance(service, d)
|
352
352
|
if d.is_a? Net::HTTPOK
|
data/lib/gcal4ruby/event.rb
CHANGED
@@ -60,7 +60,7 @@ module GCal4Ruby
|
|
60
60
|
# event.start_time = Time.parse("06/20/2009 at 5 pm")
|
61
61
|
# event.end_time = Time.parse("06/20/2009 at 8 pm")
|
62
62
|
# event.where = "Luigi's"
|
63
|
-
# event.reminder = {:minutes => 15, :method => 'email'}
|
63
|
+
# event.reminder = [{:minutes => 15, :method => 'email'}]
|
64
64
|
# event.save
|
65
65
|
#
|
66
66
|
#9. Create an event with attendees
|
@@ -111,7 +111,7 @@ module GCal4Ruby
|
|
111
111
|
attr_accessor :status
|
112
112
|
#Flag indicating whether it is an all day event
|
113
113
|
attr_reader :all_day
|
114
|
-
#
|
114
|
+
#An array of reminders. Each item in the array is a hash representing the event reminder.
|
115
115
|
attr_reader :reminder
|
116
116
|
#The date the event was last edited
|
117
117
|
attr_reader :edited
|
@@ -132,7 +132,7 @@ module GCal4Ruby
|
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
135
|
-
#Sets the reminder options for the event. Parameter must be
|
135
|
+
#Sets the reminder options for the event. Parameter must be an array of hashes containing a :minutes key with a value of 5 up to 40320 (4 weeks)
|
136
136
|
#and a :method key of with a value of one the following:
|
137
137
|
#alert:: causes an alert to appear when a user is viewing the calendar in a browser
|
138
138
|
#email:: sends the user an email message
|
data/lib/gcal4ruby/recurrence.rb
CHANGED
@@ -57,45 +57,36 @@ module GCal4Ruby
|
|
57
57
|
@all_day ||= false
|
58
58
|
end
|
59
59
|
|
60
|
-
#Accepts a string containing a properly formatted ISO 8601 recurrence rule and loads it into the recurrence object
|
60
|
+
#Accepts a string containing a properly formatted ISO 8601 recurrence rule and loads it into the recurrence object.
|
61
|
+
#Contributed by John Paul Narowski.
|
61
62
|
def load(rec)
|
63
|
+
@frequency = {}
|
62
64
|
attrs = rec.split("\n")
|
63
65
|
attrs.each do |val|
|
64
66
|
key, value = val.split(":")
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
@
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
@end_time = Time.parse_complete(value)
|
75
|
-
when 'DTEND;VALUE=DATE'
|
76
|
-
@end_time = Time.parse(value)
|
77
|
-
when 'DTEND;VALUE=DATE-TIME'
|
78
|
-
@end_time = Time.parse_complete(value)
|
79
|
-
when 'RRULE'
|
80
|
-
vals = value.split(";")
|
81
|
-
key = ''
|
82
|
-
by = ''
|
83
|
-
int = nil
|
84
|
-
vals.each do |rr|
|
85
|
-
a, h = rr.split("=")
|
86
|
-
case a
|
87
|
-
when 'FREQ'
|
88
|
-
key = h.downcase.capitalize
|
89
|
-
when 'INTERVAL'
|
90
|
-
int = h
|
91
|
-
when 'UNTIL'
|
92
|
-
@repeat_until = Time.parse(value)
|
93
|
-
else
|
94
|
-
by = h.split(",")
|
67
|
+
if key == 'RRULE'
|
68
|
+
value.split(";").each do |rr|
|
69
|
+
rr_key, rr_value = rr.split("=")
|
70
|
+
rr_key = rr_key.downcase.to_sym
|
71
|
+
unless @frequency.has_key?(rr_key)
|
72
|
+
if rr_key == :until
|
73
|
+
@repeat_until = Time.parse_complete(rr_value)
|
74
|
+
else
|
75
|
+
@frequency[rr_key] = rr_value
|
95
76
|
end
|
96
77
|
end
|
97
|
-
|
98
|
-
|
78
|
+
end
|
79
|
+
elsif key == 'INTERVAL'
|
80
|
+
@frequency[:inverval] = value.to_i
|
81
|
+
elsif key.include?("DTSTART;TZID") or key.include?("DTSTART") or key.include?('DTSTART;VALUE=DATE-TIME')
|
82
|
+
@start_time = Time.parse_complete(value)
|
83
|
+
elsif key.include?('DTSTART;VALUE=DATE')
|
84
|
+
@start_time = Time.parse(value)
|
85
|
+
@all_day = true
|
86
|
+
elsif key.include?("DTEND;TZID") or key.include?("DTEND") or key.include?('DTEND;VALUE=DATE-TIME')
|
87
|
+
@end_time = Time.parse_complete(value)
|
88
|
+
elsif key.include?('DTEND;VALUE=DATE')
|
89
|
+
@end_time = Time.parse(value)
|
99
90
|
end
|
100
91
|
end
|
101
92
|
end
|
@@ -119,19 +110,19 @@ module GCal4Ruby
|
|
119
110
|
f += "#{key.downcase} " if key != 'interval'
|
120
111
|
case key.downcase
|
121
112
|
when "secondly"
|
122
|
-
|
113
|
+
by += "every #{value} second"
|
123
114
|
when "minutely"
|
124
|
-
|
115
|
+
by += "every #{value} minute"
|
125
116
|
when "hourly"
|
126
|
-
|
117
|
+
by += "every #{value} hour"
|
127
118
|
when "weekly"
|
128
|
-
|
119
|
+
by += "on #{value}" if value
|
129
120
|
when "monthly"
|
130
|
-
|
121
|
+
by += "on #{value}"
|
131
122
|
when "yearly"
|
132
|
-
|
123
|
+
by += "on the #{value} day of the year"
|
133
124
|
when 'interval'
|
134
|
-
|
125
|
+
i += "for #{value} times"
|
135
126
|
end
|
136
127
|
end
|
137
128
|
output += f+i+by
|
@@ -144,7 +135,6 @@ module GCal4Ruby
|
|
144
135
|
|
145
136
|
#Returns a string with the correctly formatted ISO 8601 recurrence rule
|
146
137
|
def to_recurrence_string
|
147
|
-
|
148
138
|
output = ''
|
149
139
|
if @all_day
|
150
140
|
output += "DTSTART;VALUE=DATE:#{@start_time.utc.strftime("%Y%m%d")}\n"
|
@@ -171,22 +161,22 @@ module GCal4Ruby
|
|
171
161
|
else
|
172
162
|
value = v
|
173
163
|
end
|
174
|
-
f += "#{key.upcase};" if key != 'interval'
|
175
|
-
case key.downcase
|
164
|
+
f += "#{key.to_s.upcase};" if key != 'interval'
|
165
|
+
case key.to_s.downcase
|
176
166
|
when "secondly"
|
177
|
-
|
167
|
+
by += "BYSECOND=#{value};"
|
178
168
|
when "minutely"
|
179
|
-
|
169
|
+
by += "BYMINUTE=#{value};"
|
180
170
|
when "hourly"
|
181
|
-
|
171
|
+
by += "BYHOUR=#{value};"
|
182
172
|
when "weekly"
|
183
|
-
|
173
|
+
by += "BYDAY=#{value};" if value
|
184
174
|
when "monthly"
|
185
|
-
|
175
|
+
by += "BYDAY=#{value};"
|
186
176
|
when "yearly"
|
187
|
-
|
177
|
+
by += "BYYEARDAY=#{value};"
|
188
178
|
when 'interval'
|
189
|
-
|
179
|
+
i += "INTERVAL=#{value};"
|
190
180
|
end
|
191
181
|
end
|
192
182
|
output += f+i+by
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 5
|
8
|
-
-
|
9
|
-
version: 0.5.
|
8
|
+
- 5
|
9
|
+
version: 0.5.5
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Mike Reich
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-08-15 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -27,8 +27,8 @@ dependencies:
|
|
27
27
|
segments:
|
28
28
|
- 0
|
29
29
|
- 1
|
30
|
-
-
|
31
|
-
version: 0.1.
|
30
|
+
- 5
|
31
|
+
version: 0.1.5
|
32
32
|
type: :runtime
|
33
33
|
version_requirements: *id001
|
34
34
|
description: "GCal4Ruby is a Ruby Gem that can be used to interact with the current version of the Google Calendar API. GCal4Ruby provides the following features: Create and edit calendar events, Add and invite users to events, Set reminders, Make recurring events."
|