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 +1 -1
- data/google_calendar.gemspec +10 -8
- data/lib/google/calendar.rb +28 -7
- data/lib/google/errors.rb +1 -0
- data/lib/google/event.rb +24 -12
- data/test/mocks/create_quickadd_event.xml +31 -0
- data/test/mocks/list_calendars.xml +89 -0
- data/test/test_google_calendar.rb +45 -0
- metadata +78 -119
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/google_calendar.gemspec
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.
|
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 =
|
13
|
-
s.description =
|
14
|
-
s.email =
|
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 =
|
44
|
+
s.homepage = "http://github.com/northworld/google_calendar"
|
43
45
|
s.licenses = ["MIT"]
|
44
46
|
s.require_paths = ["lib"]
|
45
|
-
s.rubygems_version =
|
46
|
-
s.summary =
|
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"
|
data/lib/google/calendar.rb
CHANGED
@@ -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
|
22
|
+
# Calendar.new(:username => 'some.guy@gmail.com', :password => 'ilovepie!')
|
21
23
|
#
|
22
24
|
# # Specify the calendar
|
23
|
-
# Calendar.new(username
|
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
|
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
|
148
|
-
@calendar ||
|
149
|
+
def calendar_id #:nodoc:
|
150
|
+
@calendar || "default"
|
149
151
|
end
|
150
152
|
|
151
|
-
|
152
|
-
|
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
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
|
-
|
84
|
-
<
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
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
|
-
|
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
|
-
|
19
|
-
|
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
|
-
|
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
|
-
|
37
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70109869359520
|
25
|
+
- !ruby/object:Gem::Dependency
|
38
26
|
name: addressable
|
39
|
-
|
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
|
-
|
53
|
-
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70109869358300
|
36
|
+
- !ruby/object:Gem::Dependency
|
54
37
|
name: shoulda
|
55
|
-
|
38
|
+
requirement: &70109869357620 !ruby/object:Gem::Requirement
|
56
39
|
none: false
|
57
|
-
requirements:
|
58
|
-
- -
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
|
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
|
-
|
67
|
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70109869357620
|
47
|
+
- !ruby/object:Gem::Dependency
|
68
48
|
name: bundler
|
69
|
-
|
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
|
-
|
83
|
-
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70109869346740
|
58
|
+
- !ruby/object:Gem::Dependency
|
84
59
|
name: jeweler
|
85
|
-
|
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
|
-
|
99
|
-
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70109869345680
|
69
|
+
- !ruby/object:Gem::Dependency
|
100
70
|
name: rcov
|
101
|
-
|
71
|
+
requirement: &70109869343760 !ruby/object:Gem::Requirement
|
102
72
|
none: false
|
103
|
-
requirements:
|
104
|
-
- -
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
|
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
|
-
|
113
|
-
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *70109869343760
|
80
|
+
- !ruby/object:Gem::Dependency
|
114
81
|
name: mocha
|
115
|
-
|
82
|
+
requirement: &70109869342600 !ruby/object:Gem::Requirement
|
116
83
|
none: false
|
117
|
-
requirements:
|
118
|
-
- -
|
119
|
-
- !ruby/object:Gem::Version
|
120
|
-
|
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
|
-
|
127
|
-
|
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
|
-
|
173
|
-
segments:
|
132
|
+
requirements:
|
133
|
+
- - ! '>='
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0'
|
136
|
+
segments:
|
174
137
|
- 0
|
175
|
-
|
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
|
-
|
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.
|
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
|