google_calendar 0.1.4 → 0.2.0

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 0.2.0
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{google_calendar}
8
- s.version = "0.1.4"
7
+ s.name = "google_calendar"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Steve Zich"]
12
- s.date = %q{2011-02-09}
13
- s.description = %q{A minimal wrapper around the google calendar API, which uses nokogiri for fast parsing.}
14
- s.email = %q{steve.zich@gmail.com}
12
+ s.date = "2011-11-07"
13
+ s.description = "A minimal wrapper around the google calendar API, which uses nokogiri for fast parsing."
14
+ s.email = "steve.zich@gmail.com"
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE.txt",
17
17
  "README.rdoc"
@@ -33,17 +33,19 @@ Gem::Specification.new do |s|
33
33
  "lib/google_calendar.rb",
34
34
  "test/helper.rb",
35
35
  "test/mocks/create_event.xml",
36
+ "test/mocks/create_quickadd_event.xml",
36
37
  "test/mocks/events.xml",
37
38
  "test/mocks/find_event_by_id.xml",
39
+ "test/mocks/list_calendars.xml",
38
40
  "test/mocks/query_events.xml",
39
41
  "test/mocks/successful_login.txt",
40
42
  "test/test_google_calendar.rb"
41
43
  ]
42
- s.homepage = %q{http://github.com/northworld/google_calendar}
44
+ s.homepage = "http://github.com/northworld/google_calendar"
43
45
  s.licenses = ["MIT"]
44
46
  s.require_paths = ["lib"]
45
- s.rubygems_version = %q{1.5.0}
46
- s.summary = %q{A lightweight google calendar API wrapper}
47
+ s.rubygems_version = "1.8.10"
48
+ s.summary = "A lightweight google calendar API wrapper"
47
49
  s.test_files = [
48
50
  "test/helper.rb",
49
51
  "test/test_google_calendar.rb"
@@ -1,3 +1,5 @@
1
+ require 'nokogiri'
2
+
1
3
  module Google
2
4
 
3
5
  # Calendar is the main object you use to interact with events.
@@ -17,13 +19,13 @@ module Google
17
19
  #
18
20
  # ==== Examples
19
21
  # # Use the default calendar
20
- # Calendar.new(username: => 'some.guy@gmail.com', :password => 'ilovepie!')
22
+ # Calendar.new(:username => 'some.guy@gmail.com', :password => 'ilovepie!')
21
23
  #
22
24
  # # Specify the calendar
23
- # Calendar.new(username: => 'some.guy@gmail.com', :password => 'ilovepie!', :calendar => 'my.company@gmail.com')
25
+ # Calendar.new(:username => 'some.guy@gmail.com', :password => 'ilovepie!', :calendar => 'my.company@gmail.com')
24
26
  #
25
27
  # # Specify the app_name
26
- # Calendar.new(username: => 'some.guy@gmail.com', :password => 'ilovepie!', :app_name => 'mycompany.com-googlecalendar-integration')
28
+ # Calendar.new(:username => 'some.guy@gmail.com', :password => 'ilovepie!', :app_name => 'mycompany.com-googlecalendar-integration')
27
29
  #
28
30
  def initialize(params)
29
31
  username = params[:username]
@@ -144,12 +146,31 @@ module Google
144
146
  end
145
147
  end
146
148
 
147
- def calendar_url #:nodoc:
148
- @calendar || 'default'
149
+ def calendar_id #:nodoc:
150
+ @calendar || "default"
149
151
  end
150
152
 
151
- def events_url #:nodoc:
152
- "https://www.google.com/calendar/feeds/#{calendar_url}/private/full"
153
+ # Initialize the events URL given String attribute @calendar value :
154
+ #
155
+ # contains a '@' : construct the feed url with @calendar.
156
+ # does not contain '@' : fetch user's all calendars (http://code.google.com/apis/calendar/data/2.0/developers_guide_protocol.html#RetrievingAllCalendars)
157
+ # and return feed url matching @calendar.
158
+ # nil : default feed url.
159
+ #
160
+ # Returns:
161
+ # a String url for a calendar feeds.
162
+ # raise a Google::InvalidCalendar error if @calendar is invalid.
163
+ #
164
+ def events_url
165
+ if @calendar and !@calendar.include?("@")
166
+ xml = @connection.send(Addressable::URI.parse("https://www.google.com/calendar/feeds/default/allcalendars/full"), :get)
167
+ doc = Nokogiri::XML(xml.body)
168
+ doc.remove_namespaces!
169
+ link = doc.xpath("//entry[title='#{@calendar}']/link[contains(@rel, '#eventFeed')]/@href").to_s
170
+ link.empty? ? raise(Google::InvalidCalendar) : link
171
+ else
172
+ "https://www.google.com/calendar/feeds/#{calendar_id}/private/full"
173
+ end
153
174
  end
154
175
 
155
176
  def setup_event(event) #:nodoc:
data/lib/google/errors.rb CHANGED
@@ -3,4 +3,5 @@ module Google
3
3
  class HTTPAuthorizationFailed < StandardError; end
4
4
  class HTTPNotFound < StandardError; end
5
5
  class HTTPTooManyRedirections < StandardError; end
6
+ class InvalidCalendar < StandardError; end
6
7
  end
data/lib/google/event.rb CHANGED
@@ -17,7 +17,7 @@ module Google
17
17
  #
18
18
  class Event
19
19
  attr_reader :id, :raw_xml
20
- attr_accessor :title, :content, :where, :calendar
20
+ attr_accessor :title, :content, :where, :calendar, :quickadd
21
21
 
22
22
  # Create a new event, and optionally set it's attributes.
23
23
  #
@@ -38,6 +38,7 @@ module Google
38
38
  @end_time = params[:end_time]
39
39
  @calendar = params[:calendar]
40
40
  @raw_xml = params[:raw_xml]
41
+ @quickadd = params[:quickadd]
41
42
  end
42
43
 
43
44
  # Sets the start time of the Event. Must be a Time object or a parsable string representation of a time.
@@ -80,21 +81,30 @@ module Google
80
81
  # Google XMl representation of an evetn object.
81
82
  #
82
83
  def to_xml
83
- "<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005'>
84
- <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category>
85
- <title type='text'>#{title}</title>
86
- <content type='text'>#{content}</content>
87
- <gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency>
88
- <gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus>
89
- <gd:where valueString=\"#{where}\"></gd:where>
90
- <gd:when startTime=\"#{start_time}\" endTime=\"#{end_time}\"></gd:when>
91
- </entry>"
84
+ unless quickadd
85
+ "<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005'>
86
+ <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category>
87
+ <title type='text'>#{title}</title>
88
+ <content type='text'>#{content}</content>
89
+ <gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency>
90
+ <gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus>
91
+ <gd:where valueString=\"#{where}\"></gd:where>
92
+ <gd:when startTime=\"#{start_time}\" endTime=\"#{end_time}\"></gd:when>
93
+ </entry>"
94
+ else
95
+ %Q{<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gCal='http://schemas.google.com/gCal/2005'>
96
+ <content type="html">#{content}</content>
97
+ <gCal:quickadd value="true"/>
98
+ </entry>}
99
+ end
92
100
  end
93
101
 
94
102
  # String representation of an event object.
95
103
  #
96
104
  def to_s
97
- "#{title} (#{self.id})\n\t#{start_time}\n\t#{end_time}\n\t#{where}\n\t#{content}"
105
+ s = "#{title} (#{self.id})\n\t#{start_time}\n\t#{end_time}\n\t#{where}\n\t#{content}"
106
+ s << "\n\t#{quickadd}" if quickadd
107
+ s
98
108
  end
99
109
 
100
110
  # Saves an event.
@@ -125,6 +135,7 @@ module Google
125
135
  where = xml.at_xpath("gd:where")['valueString']
126
136
  start_time = xml.at_xpath("gd:when")['startTime']
127
137
  end_time = xml.at_xpath("gd:when")['endTime']
138
+ quickadd = xml.at_xpath("gCal:quickadd") ? xml.at_xpath("gCal:quickadd")['quickadd'] : nil
128
139
 
129
140
  Event.new(:id => id,
130
141
  :title => title,
@@ -133,7 +144,8 @@ module Google
133
144
  :start_time => start_time,
134
145
  :end_time => end_time,
135
146
  :calendar => calendar,
136
- :raw_xml => xml)
147
+ :raw_xml => xml,
148
+ :quickadd => quickadd)
137
149
  end
138
150
 
139
151
  # Set the ID after google assigns it (only necessary when we are creating a new event)
@@ -0,0 +1,31 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <entry xmlns="http://www.w3.org/2005/Atom" xmlns:gCal="http://schemas.google.com/gCal/2005" xmlns:gd="http://schemas.google.com/g/2005">
3
+ <id>http://www.google.com/calendar/feeds/default/private/full/b1vq6rj4r4mg85kcickc7iomb0</id>
4
+ <published>2011-05-04T00:59:03.000Z</published>
5
+ <updated>2011-05-04T00:59:03.000Z</updated>
6
+ <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/g/2005#event"/>
7
+ <title type="text">movie at AMC Van Ness</title>
8
+ <content type="text"/>
9
+ <link rel="alternate" type="text/html" href="https://www.google.com/calendar/event?eid=aW1vcnE4cHY5YWZlZ3R0ZDVlN3Fkc2ZidmcgYXluQGFuZHJld25nLmNvbQ" title="alternate"/>
10
+ <link rel="self" type="application/atom+xml" href="https://www.google.com/calendar/feeds/default/private/full/imorq8pv9afegttd5e7qdsfbvg"/>
11
+ <link rel="edit" type="application/atom+xml" href="https://www.google.com/calendar/feeds/default/private/full/imorq8pv9afegttd5e7qdsfbvg/63440153943"/>
12
+ <author>
13
+ <name>Some Guy</name>
14
+ <email>some.guy@gmail.com</email>
15
+ </author>
16
+ <gd:comments>
17
+ <gd:feedLink href="https://www.google.com/calendar/feeds/default/private/full/b1vq6rj4r4mg85kcickc7iomb0/comments"/>
18
+ </gd:comments>
19
+ <gd:eventStatus value="http://schemas.google.com/g/2005#event.confirmed"/>
20
+ <gd:where valueString="AMC Van Ness"/>
21
+ <gd:who email="some.guy@gmail.com" rel="http://schemas.google.com/g/2005#event.organizer" valueString="some.guy@gmail.com"/>
22
+ <gd:when endTime="2011-05-05T00:00:00.000-07:00" startTime="2011-05-04T23:00:00.000-07:00"/>
23
+ <gd:transparency value="http://schemas.google.com/g/2005#event.opaque"/>
24
+ <gd:visibility value="http://schemas.google.com/g/2005#event.default"/>
25
+ <gCal:anyoneCanAddSelf value="false"/>
26
+ <gCal:guestsCanInviteOthers value="true"/>
27
+ <gCal:guestsCanModify value="false"/>
28
+ <gCal:guestsCanSeeGuests value="true"/>
29
+ <gCal:sequence value="0"/>
30
+ <gCal:uid value="b1vq6rj4r4mg85kcickc7iomb0@google.com"/>
31
+ </entry>
@@ -0,0 +1,89 @@
1
+ <?xml version='1.0' encoding='utf-8'?>
2
+ <feed xmlns='http://www.w3.org/2005/Atom'
3
+ xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/'
4
+ xmlns:gCal='http://schemas.google.com/gCal/2005'
5
+ xmlns:gd='http://schemas.google.com/g/2005'
6
+ gd:etag='W/"CkYFSHg-fyp7ImA9WxRVGUo."'>
7
+ <id>http://www.google.com/calendar/feeds/default/allcalendars/full</id>
8
+ <updated>2008-11-18T01:01:59.657Z</updated>
9
+ <title>Coach's Calendar List</title>
10
+ <link rel='alternate' type='text/html'
11
+ href='https://www.google.com/calendar/render' />
12
+ <link rel='http://schemas.google.com/g/2005#feed'
13
+ type='application/atom+xml'
14
+ href='https://www.google.com/calendar/feeds/default/allcalendars/full' />
15
+ <link rel='http://schemas.google.com/g/2005#post'
16
+ type='application/atom+xml'
17
+ href='https://www.google.com/calendar/feeds/default/allcalendars/full' />
18
+ <link rel='self' type='application/atom+xml'
19
+ href='https://www.google.com/calendar/feeds/default/allcalendars/full' />
20
+ <author>
21
+ <name>Coach</name>
22
+ <email>user@gmail.com</email>
23
+ </author>
24
+ <generator version='1.0' uri='http://www.google.com/calendar'>Google Calendar</generator>
25
+ <openSearch:startIndex>1</openSearch:startIndex>
26
+ <entry gd:etag='W/"DU4ERH47eCp7ImA9WxRVEkQ."'>
27
+ <id>http://www.google.com/calendar/feeds/default/allcalendars/full/user%40gmail.com</id>
28
+ <published>2007-07-11T22:10:30.257Z</published>
29
+ <updated>2007-07-11T21:46:35.000Z</updated>
30
+ <title>My Primary Calendar</title>
31
+ <summary type='text'>A primary calendar is created by default for each Google Calendar user.</summary>
32
+ <link rel='alternate' type='application/atom+xml' href='https://www.google.com/calendar/feeds/user%40gmail.com/private/full' />
33
+ <link rel='http://schemas.google.com/gCal/2005#eventFeed' type='application/atom+xml' href='https://www.google.com/calendar/feeds/user%40gmail.com/private/full' />
34
+ <link rel='http://schemas.google.com/acl/2007#accessControlList' type='application/atom+xml' href='https://www.google.com/calendar/feeds/user%40gmail.com/acl/full' />
35
+ <link rel='self' type='application/atom+xml' href='https://www.google.com/calendar/feeds/default/allcalendars/full/user%40gmail.com' />
36
+ <link rel='edit' type='application/atom+xml' href='https://www.google.com/calendar/feeds/default/allcalendars/full/user%40gmail.com' />
37
+ <author>
38
+ <name>Coach</name>
39
+ <email>user@gmail.com</email>
40
+ </author>
41
+ <gCal:timezone value='America/Los_Angeles' />
42
+ <gCal:hidden value='false' />
43
+ <gCal:color value='#2952A3' />
44
+ <gCal:selected value='true' />
45
+ <gCal:accesslevel value='owner' />
46
+ <gd:where valueString='Mountain View' />
47
+ </entry>
48
+ <entry gd:etag='W/"Ck4GRH4-eSp7ImA9WxRVGUo."'>
49
+ <id>http://www.google.com/calendar/feeds/default/allcalendars/full/rf1c66uld6dgk2t5lh43svev6g%40group.calendar.google.com</id>
50
+ <published>2007-07-11T22:10:30.258Z</published>
51
+ <updated>2007-07-11T21:50:15.000Z</updated>
52
+ <title>Little Giants</title>
53
+ <summary type='text'>This calendar contains practice times and this season's Little League game schedule. Go Little Giants!</summary>
54
+ <link rel='alternate' type='application/atom+xml' href='https://www.google.com/calendar/feeds/rf1c66uld6dgk2t5lh43svev6g%40group.calendar.google.com/private/full'/>
55
+ <link rel='http://schemas.google.com/gCal/2005#eventFeed' type='application/atom+xml' href='https://www.google.com/calendar/feeds/rf1c66uld6dgk2t5lh43svev6g%40group.calendar.google.com/private/full'/>
56
+ <link rel='http://schemas.google.com/acl/2007#accessControlList' type='application/atom+xml' href='https://www.google.com/calendar/feeds/rf1c66uld6dgk2t5lh43svev6g%40group.calendar.google.com/acl/full'/>
57
+ <link rel='self' type='application/atom+xml' href='https://www.google.com/calendar/feeds/default/allcalendars/full/rf1c66uld6dgk2t5lh43svev6g%40group.calendar.google.com'/>
58
+ <link rel='edit' type='application/atom+xml' href='https://www.google.com/calendar/feeds/default/allcalendars/full/rf1c66uld6dgk2t5lh43svev6g%40group.calendar.google.com'/>
59
+ <author>
60
+ <name>Little Giants</name>
61
+ </author>
62
+ <gCal:timezone value='America/Los_Angeles' />
63
+ <gCal:hidden value='false' />
64
+ <gCal:color value='#5A6986' />
65
+ <gCal:selected value='false' />
66
+ <gCal:accesslevel value='owner' />
67
+ <gd:where valueString='San Francisco' />
68
+ </entry>
69
+ <entry gd:etag='W/"C0cEQnkyeip7ImA9WxRVGUo."'>
70
+ <id>http://www.google.com/calendar/feeds/default/allcalendars/full/c4o4i7m2lbamc4k26sc2vokh5g%40group.calendar.google.com</id>
71
+ <published>2007-07-11T22:10:30.297Z</published>
72
+ <updated>2007-06-05T09:38:50.000Z</updated>
73
+ <title>Google Doodles</title>
74
+ <summary type='text'/>
75
+ <link rel='alternate' type='application/atom+xml' href='https://www.google.com/calendar/feeds/c4o4i7m2lbamc4k26sc2vokh5g%40group.calendar.google.com/private/full'/>
76
+ <link rel='http://schemas.google.com/gCal/2005#eventFeed' type='application/atom+xml' href='https://www.google.com/calendar/feeds/c4o4i7m2lbamc4k26sc2vokh5g%40group.calendar.google.com/private/full'/>
77
+ <link rel='self' type='application/atom+xml' href='https://www.google.com/calendar/feeds/default/allcalendars/full/c4o4i7m2lbamc4k26sc2vokh5g%40group.calendar.google.com'/>
78
+ <link rel='edit' type='application/atom+xml' href='https://www.google.com/calendar/feeds/default/allcalendars/full/c4o4i7m2lbamc4k26sc2vokh5g%40group.calendar.google.com'/>
79
+ <author>
80
+ <name>Google Doodles</name>
81
+ </author>
82
+ <gCal:timezone value='Etc/GMT' />
83
+ <gCal:hidden value='false' />
84
+ <gCal:color value='#5229A3' />
85
+ <gCal:selected value='false' />
86
+ <gCal:accesslevel value='read' />
87
+ <gd:where valueString='' />
88
+ </entry>
89
+ </feed>
@@ -66,6 +66,40 @@ class TestGoogleCalendar < Test::Unit::TestCase
66
66
  :auth_url => "https://www.google.com/accounts/ClientLogin/waffles"
67
67
  )
68
68
  end
69
+ end
70
+
71
+ should "login properly with a calendar" do
72
+ assert_nothing_thrown do
73
+ cal = Calendar.new(:username => 'some.one@gmail.com', :password => 'super-secret',
74
+ :calendar => "Little Giants")
75
+
76
+ #mock calendar list request
77
+ calendar_uri = mock("get calendar uri")
78
+ Addressable::URI.expects(:parse).with("https://www.google.com/calendar/feeds/default/allcalendars/full").once.returns(calendar_uri)
79
+ Connection.any_instance.expects(:send).with(calendar_uri, :get).once.returns(mock("response", :body => get_mock_body('list_calendars.xml')))
80
+
81
+ #mock events list request
82
+ events_uri = mock("get events uri")
83
+ Addressable::URI.expects(:parse).with("https://www.google.com/calendar/feeds/rf1c66uld6dgk2t5lh43svev6g%40group.calendar.google.com/private/full").once.returns(events_uri)
84
+ Connection.any_instance.expects(:send).with(events_uri, :get).once.returns(mock("response", :body => get_mock_body('events.xml')))
85
+
86
+ cal.events
87
+ end
88
+ end
89
+
90
+ should "catch login with invalid calendar" do
91
+
92
+ assert_raise(InvalidCalendar) do
93
+ cal = Calendar.new(:username => 'some.one@gmail.com', :password => 'super-secret',
94
+ :calendar => "invalid calendar")
95
+
96
+ #mock calendar list request
97
+ calendar_uri = mock("get calendar uri")
98
+ Addressable::URI.expects(:parse).with("https://www.google.com/calendar/feeds/default/allcalendars/full").once.returns(calendar_uri)
99
+ Connection.any_instance.expects(:send).with(calendar_uri, :get).once.returns(mock("response", :body => get_mock_body('list_calendars.xml')))
100
+
101
+ cal.events
102
+ end
69
103
  end
70
104
 
71
105
  end # login context
@@ -118,6 +152,17 @@ class TestGoogleCalendar < Test::Unit::TestCase
118
152
  assert_equal event.title, 'New Event'
119
153
  end
120
154
 
155
+ should "create a quickadd event" do
156
+ @http_mock.stubs(:body).returns( get_mock_body("create_quickadd_event.xml") )
157
+
158
+ event = @calendar.create_event do |e|
159
+ e.content = "movie tomorrow 23:00 at AMC Van Ness"
160
+ e.quickadd = true
161
+ end
162
+
163
+ assert_equal event.content, "movie tomorrow 23:00 at AMC Van Ness"
164
+ end
165
+
121
166
  should "format to_s properly" do
122
167
  @http_mock.stubs(:body).returns( get_mock_body("query_events.xml") )
123
168
  event = @calendar.find_events('Test')
metadata CHANGED
@@ -1,139 +1,102 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: google_calendar
3
- version: !ruby/object:Gem::Version
4
- hash: 19
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 4
10
- version: 0.1.4
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Steve Zich
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-02-09 00:00:00 -08:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2011-11-07 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: nokogiri
23
- version_requirements: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70109869359520 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 15
29
- segments:
30
- - 1
31
- - 4
32
- - 4
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
33
21
  version: 1.4.4
34
- prerelease: false
35
22
  type: :runtime
36
- requirement: *id001
37
- - !ruby/object:Gem::Dependency
23
+ prerelease: false
24
+ version_requirements: *70109869359520
25
+ - !ruby/object:Gem::Dependency
38
26
  name: addressable
39
- version_requirements: &id002 !ruby/object:Gem::Requirement
27
+ requirement: &70109869358300 !ruby/object:Gem::Requirement
40
28
  none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- hash: 3
45
- segments:
46
- - 2
47
- - 2
48
- - 2
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
49
32
  version: 2.2.2
50
- prerelease: false
51
33
  type: :runtime
52
- requirement: *id002
53
- - !ruby/object:Gem::Dependency
34
+ prerelease: false
35
+ version_requirements: *70109869358300
36
+ - !ruby/object:Gem::Dependency
54
37
  name: shoulda
55
- version_requirements: &id003 !ruby/object:Gem::Requirement
38
+ requirement: &70109869357620 !ruby/object:Gem::Requirement
56
39
  none: false
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- hash: 3
61
- segments:
62
- - 0
63
- version: "0"
64
- prerelease: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
65
44
  type: :development
66
- requirement: *id003
67
- - !ruby/object:Gem::Dependency
45
+ prerelease: false
46
+ version_requirements: *70109869357620
47
+ - !ruby/object:Gem::Dependency
68
48
  name: bundler
69
- version_requirements: &id004 !ruby/object:Gem::Requirement
49
+ requirement: &70109869346740 !ruby/object:Gem::Requirement
70
50
  none: false
71
- requirements:
51
+ requirements:
72
52
  - - ~>
73
- - !ruby/object:Gem::Version
74
- hash: 23
75
- segments:
76
- - 1
77
- - 0
78
- - 0
53
+ - !ruby/object:Gem::Version
79
54
  version: 1.0.0
80
- prerelease: false
81
55
  type: :development
82
- requirement: *id004
83
- - !ruby/object:Gem::Dependency
56
+ prerelease: false
57
+ version_requirements: *70109869346740
58
+ - !ruby/object:Gem::Dependency
84
59
  name: jeweler
85
- version_requirements: &id005 !ruby/object:Gem::Requirement
60
+ requirement: &70109869345680 !ruby/object:Gem::Requirement
86
61
  none: false
87
- requirements:
62
+ requirements:
88
63
  - - ~>
89
- - !ruby/object:Gem::Version
90
- hash: 1
91
- segments:
92
- - 1
93
- - 5
94
- - 1
64
+ - !ruby/object:Gem::Version
95
65
  version: 1.5.1
96
- prerelease: false
97
66
  type: :development
98
- requirement: *id005
99
- - !ruby/object:Gem::Dependency
67
+ prerelease: false
68
+ version_requirements: *70109869345680
69
+ - !ruby/object:Gem::Dependency
100
70
  name: rcov
101
- version_requirements: &id006 !ruby/object:Gem::Requirement
71
+ requirement: &70109869343760 !ruby/object:Gem::Requirement
102
72
  none: false
103
- requirements:
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- hash: 3
107
- segments:
108
- - 0
109
- version: "0"
110
- prerelease: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
111
77
  type: :development
112
- requirement: *id006
113
- - !ruby/object:Gem::Dependency
78
+ prerelease: false
79
+ version_requirements: *70109869343760
80
+ - !ruby/object:Gem::Dependency
114
81
  name: mocha
115
- version_requirements: &id007 !ruby/object:Gem::Requirement
82
+ requirement: &70109869342600 !ruby/object:Gem::Requirement
116
83
  none: false
117
- requirements:
118
- - - ">="
119
- - !ruby/object:Gem::Version
120
- hash: 3
121
- segments:
122
- - 0
123
- version: "0"
124
- prerelease: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
125
88
  type: :development
126
- requirement: *id007
127
- description: A minimal wrapper around the google calendar API, which uses nokogiri for fast parsing.
89
+ prerelease: false
90
+ version_requirements: *70109869342600
91
+ description: A minimal wrapper around the google calendar API, which uses nokogiri
92
+ for fast parsing.
128
93
  email: steve.zich@gmail.com
129
94
  executables: []
130
-
131
95
  extensions: []
132
-
133
- extra_rdoc_files:
96
+ extra_rdoc_files:
134
97
  - LICENSE.txt
135
98
  - README.rdoc
136
- files:
99
+ files:
137
100
  - .document
138
101
  - Gemfile
139
102
  - Gemfile.lock
@@ -150,45 +113,41 @@ files:
150
113
  - lib/google_calendar.rb
151
114
  - test/helper.rb
152
115
  - test/mocks/create_event.xml
116
+ - test/mocks/create_quickadd_event.xml
153
117
  - test/mocks/events.xml
154
118
  - test/mocks/find_event_by_id.xml
119
+ - test/mocks/list_calendars.xml
155
120
  - test/mocks/query_events.xml
156
121
  - test/mocks/successful_login.txt
157
122
  - test/test_google_calendar.rb
158
- has_rdoc: true
159
123
  homepage: http://github.com/northworld/google_calendar
160
- licenses:
124
+ licenses:
161
125
  - MIT
162
126
  post_install_message:
163
127
  rdoc_options: []
164
-
165
- require_paths:
128
+ require_paths:
166
129
  - lib
167
- required_ruby_version: !ruby/object:Gem::Requirement
130
+ required_ruby_version: !ruby/object:Gem::Requirement
168
131
  none: false
169
- requirements:
170
- - - ">="
171
- - !ruby/object:Gem::Version
172
- hash: 3
173
- segments:
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ segments:
174
137
  - 0
175
- version: "0"
176
- required_rubygems_version: !ruby/object:Gem::Requirement
138
+ hash: 3242428222687686780
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
177
140
  none: false
178
- requirements:
179
- - - ">="
180
- - !ruby/object:Gem::Version
181
- hash: 3
182
- segments:
183
- - 0
184
- version: "0"
141
+ requirements:
142
+ - - ! '>='
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
185
145
  requirements: []
186
-
187
146
  rubyforge_project:
188
- rubygems_version: 1.5.0
147
+ rubygems_version: 1.8.10
189
148
  signing_key:
190
149
  specification_version: 3
191
150
  summary: A lightweight google calendar API wrapper
192
- test_files:
151
+ test_files:
193
152
  - test/helper.rb
194
153
  - test/test_google_calendar.rb