google_calendar 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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