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 +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
|