gcal4ruby 0.2.1 → 0.2.2

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.
data/CHANGELOG CHANGED
@@ -1,4 +1,9 @@
1
1
  #=CHANGELOG
2
+ #==version 0.2.2
3
+ #* Fixed URL encoding problem in Event.find method.
4
+ #* cleaned up Event.find method to allow for finding events by id
5
+ #* updated Calendar.find method to add params hash
6
+ #* added 'published', 'updated', and 'edited' attributes
2
7
  #==version 0.2.1
3
8
  #* fixed Event.find calendar specification
4
9
  #==version 0.2.0
@@ -179,7 +179,7 @@ class Calendar
179
179
  #should be an appropriately authenticated Service. The term parameter can be any string. The
180
180
  #scope parameter may be either :all to return an array of matches, or :first to return
181
181
  #the first match as a Calendar object.
182
- def self.find(service, query_term, scope = :all)
182
+ def self.find(service, query_term=nil, params = {})
183
183
  t = query_term.downcase
184
184
  cals = service.calendars
185
185
  ret = []
@@ -187,10 +187,13 @@ class Calendar
187
187
  title = cal.title || ""
188
188
  summary = cal.summary || ""
189
189
  id = cal.id || ""
190
- if title.downcase.match(t) or summary.downcase.match(t) or id.downcase.match(t)
191
- if scope == :first
190
+ if id == query_term
191
+ return cal
192
+ end
193
+ if title.downcase.match(t) or summary.downcase.match(t)
194
+ if params[:scope] == :first
192
195
  return cal
193
- elsif scope == :all
196
+ else
194
197
  ret << cal
195
198
  end
196
199
  end
@@ -73,6 +73,12 @@ module GCal4Ruby
73
73
  attr_reader :end
74
74
  #The reminder settings for the event, returned as a hash
75
75
  attr_reader :reminder
76
+ #The date the event was created
77
+ attr_reader :published
78
+ #The date the event was last updated
79
+ attr_reader :updated
80
+ #The date the event was last edited
81
+ attr_reader :edited
76
82
 
77
83
  #Sets the reminder options for the event. Parameter must be a hash containing one of
78
84
  #:hours, :minutes and :days, which are simply the number of each before the event start date you'd like to
@@ -210,6 +216,7 @@ module GCal4Ruby
210
216
  raise EventSaveFailed
211
217
  end
212
218
  end
219
+ reload
213
220
  return true
214
221
  end
215
222
 
@@ -279,6 +286,12 @@ module GCal4Ruby
279
286
  @etag = xml.root.attributes['etag']
280
287
  xml.root.elements.each(){}.map do |ele|
281
288
  case ele.name
289
+ when 'updated'
290
+ @updated = ele.text
291
+ when 'published'
292
+ @published = ele.text
293
+ when 'edited'
294
+ @edited = ele.text
282
295
  when 'id'
283
296
  @id, @edit_feed = ele.text
284
297
  when 'title'
@@ -333,9 +346,9 @@ module GCal4Ruby
333
346
  #Reloads the event data from the Google Calendar Service. Returns true if successful,
334
347
  #false otherwise.
335
348
  def reload
336
- t = Event.find(@calendar, @id, :first)
349
+ t = Event.find(@calendar, @id)
337
350
  if t
338
- if load(t.xml)
351
+ if load(t.to_xml)
339
352
  return true
340
353
  else
341
354
  return false
@@ -345,8 +358,10 @@ module GCal4Ruby
345
358
  end
346
359
  end
347
360
 
348
- #Finds the event that matches a query term in the event title or description.
349
- #'query' is a string to perform the search on.
361
+ #Finds the event that matches a query term in the event title or description.
362
+ #
363
+ #'query' is a string to perform the search on or an event id.
364
+ #
350
365
  #The params hash can contain the following hash values
351
366
  #* *scope*: may be :all or :first, indicating whether to return the first record found or an array of all records that match the query. Default is :all.
352
367
  #* *range*: a hash including a :start and :end time to constrain the search by
@@ -357,6 +372,32 @@ module GCal4Ruby
357
372
  def self.find(calendar, query = '', params = {})
358
373
  query_string = ''
359
374
 
375
+ begin
376
+ test = URI.parse(query).scheme
377
+ rescue Exception => e
378
+ test = nil
379
+ end
380
+
381
+ if test
382
+ puts "id passed, finding event by id" if calendar.service.debug
383
+ es = calendar.service.send_get("http://www.google.com/calendar/feeds/#{calendar.id}/private/full")
384
+ REXML::Document.new(es.read_body).root.elements.each("entry"){}.map do |entry|
385
+ puts "element = "+entry.name if calendar.service.debug
386
+ id = ''
387
+ entry.elements.each("id") {|v| id = v.text}
388
+ puts "id = #{id}" if calendar.service.debug
389
+ if id == query
390
+ entry.attributes["xmlns:gCal"] = "http://schemas.google.com/gCal/2005"
391
+ entry.attributes["xmlns:gd"] = "http://schemas.google.com/g/2005"
392
+ entry.attributes["xmlns"] = "http://www.w3.org/2005/Atom"
393
+ event = Event.new(calendar)
394
+ event.load("<?xml version='1.0' encoding='UTF-8'?>#{entry.to_s}")
395
+ return event
396
+ end
397
+ end
398
+ end
399
+
400
+
360
401
  #parse params hash for values
361
402
  range = params[:range] || nil
362
403
  max_results = params[:max_results] || nil
@@ -365,7 +406,7 @@ module GCal4Ruby
365
406
  timezone = params[:ctz] || nil
366
407
 
367
408
  #set up query string
368
- query_string += "q=#{query}" if query
409
+ query_string += "q=#{CGI.escape(query)}" if query
369
410
  if range
370
411
  if not range.is_a? Hash or (range.size > 0 and (not range[:start].is_a? Time or not range[:end].is_a? Time))
371
412
  raise "The date range must be a hash including the :start and :end date values as Times"
data/test/unit.rb CHANGED
@@ -67,7 +67,15 @@ def calendar_test
67
67
  puts "Test 2 Failed"
68
68
  end
69
69
 
70
- puts "3. Delete Calendar"
70
+ puts "3. Find Calendar by ID"
71
+ c = Calendar.find(@service, cal.id)
72
+ if c.title == cal.title
73
+ successful
74
+ else
75
+ failed "#{c.title} not equal to #{cal.title}"
76
+ end
77
+
78
+ puts "4. Delete Calendar"
71
79
  if cal.delete and not cal.title
72
80
  successful
73
81
  else
@@ -98,7 +106,20 @@ def event_test
98
106
  failed
99
107
  end
100
108
 
101
- puts "3. Delete Event"
109
+ puts "3. Reload Event"
110
+ if event.reload
111
+ successful
112
+ end
113
+
114
+ puts "4. Find Event by id"
115
+ e = Event.find(@service.calendars[0], event.id)
116
+ if e.title == event.title
117
+ successful
118
+ else
119
+ failed "Found event doesn't match existing event"
120
+ end
121
+
122
+ puts "5. Delete Event"
102
123
  if event.delete
103
124
  successful
104
125
  else
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gcal4ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Reich
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-09 00:00:00 -07:00
12
+ date: 2009-07-16 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15