gcalapi 0.0.4 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +19 -15
- data/VERSION +1 -1
- data/example/mixi2gcal.rb +88 -0
- data/html/classes/GoogleCalendar.html +149 -280
- data/html/classes/GoogleCalendar/AuthSubFailed.html +165 -0
- data/html/classes/GoogleCalendar/AuthSubUtil.html +397 -0
- data/html/classes/GoogleCalendar/AuthenticationFailed.html +110 -110
- data/html/classes/GoogleCalendar/Calendar.html +381 -203
- data/html/classes/GoogleCalendar/Event.html +800 -510
- data/html/classes/GoogleCalendar/EventDeleteFailed.html +110 -110
- data/html/classes/GoogleCalendar/EventGetFailed.html +111 -0
- data/html/classes/GoogleCalendar/EventInsertFailed.html +110 -110
- data/html/classes/GoogleCalendar/EventUpdateFailed.html +110 -110
- data/html/classes/GoogleCalendar/InvalidCalendarURL.html +110 -110
- data/html/classes/GoogleCalendar/Service.html +305 -594
- data/html/classes/GoogleCalendar/ServiceAuthSub.html +181 -0
- data/html/classes/GoogleCalendar/ServiceBase.html +694 -0
- data/html/created.rid +1 -1
- data/html/files/README.html +116 -116
- data/html/files/lib/googlecalendar/auth_sub_util_rb.html +111 -0
- data/html/files/lib/googlecalendar/calendar_rb.html +109 -109
- data/html/files/lib/googlecalendar/event_rb.html +109 -109
- data/html/files/lib/googlecalendar/service_auth_sub_rb.html +108 -0
- data/html/files/lib/googlecalendar/service_base_rb.html +114 -0
- data/html/files/lib/googlecalendar/service_rb.html +107 -113
- data/html/fr_class_index.html +39 -34
- data/html/fr_file_index.html +32 -29
- data/html/fr_method_index.html +75 -52
- data/html/index.html +23 -23
- data/html/rdoc-style.css +207 -207
- data/lib/googlecalendar/auth_sub_util.rb +143 -0
- data/lib/googlecalendar/calendar.rb +48 -36
- data/lib/googlecalendar/event.rb +16 -11
- data/lib/googlecalendar/service.rb +30 -180
- data/lib/googlecalendar/service_auth_sub.rb +18 -0
- data/lib/googlecalendar/service_base.rb +197 -0
- data/test/00_service_test.rb +2 -1
- data/test/01_calendar_test.rb +1 -1
- data/test/02_event_test.rb +28 -1
- data/test/03_authsub_test.rb +119 -0
- data/test/base_unit.rb +3 -0
- metadata +105 -62
@@ -0,0 +1,18 @@
|
|
1
|
+
require "googlecalendar/service_base"
|
2
|
+
|
3
|
+
module GoogleCalendar
|
4
|
+
#
|
5
|
+
# this class interacts with Google Calendar and uses AuthSub interface for authentication.
|
6
|
+
#
|
7
|
+
class ServiceAuthSub < ServiceBase
|
8
|
+
|
9
|
+
def initialize(token)
|
10
|
+
@auth = token
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
def add_authorize_header(header)
|
15
|
+
header["Authorization"] = "AuthSub token=#{@auth}"
|
16
|
+
end
|
17
|
+
end # ServiceAuthSub
|
18
|
+
end # GoogleCalendar
|
@@ -0,0 +1,197 @@
|
|
1
|
+
require "cgi"
|
2
|
+
require "uri"
|
3
|
+
require "net/http"
|
4
|
+
require "net/https"
|
5
|
+
require "open-uri"
|
6
|
+
require "nkf"
|
7
|
+
require "time"
|
8
|
+
|
9
|
+
Net::HTTP.version_1_2
|
10
|
+
|
11
|
+
module GoogleCalendar
|
12
|
+
|
13
|
+
class AuthenticationFailed < StandardError; end #:nodoc: all
|
14
|
+
|
15
|
+
#
|
16
|
+
# This class interacts with google calendar service.
|
17
|
+
#
|
18
|
+
class ServiceBase
|
19
|
+
# Server name to Authenticate
|
20
|
+
AUTH_SERVER = "www.google.com"
|
21
|
+
|
22
|
+
# proxy server address
|
23
|
+
@@proxy_addr = nil
|
24
|
+
def self.proxy_addr
|
25
|
+
@@proxy_addr
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.proxy_addr=(addr)
|
29
|
+
@@proxy_addr=addr
|
30
|
+
end
|
31
|
+
|
32
|
+
# proxy server port number
|
33
|
+
@@proxy_port = nil
|
34
|
+
def self.proxy_port
|
35
|
+
@@proxy_port
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.proxy_port=(port)
|
39
|
+
@@proxy_port = port
|
40
|
+
end
|
41
|
+
|
42
|
+
# proxy server username
|
43
|
+
@@proxy_user = nil
|
44
|
+
def self.proxy_user
|
45
|
+
@@proxy_user
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.proxy_user=(user)
|
49
|
+
@@proxy_user = user
|
50
|
+
end
|
51
|
+
|
52
|
+
# proxy server password
|
53
|
+
@@proxy_pass = nil
|
54
|
+
def self.proxy_pass
|
55
|
+
@@proxy_pass
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.proxy_pass=(pass)
|
59
|
+
@@proxy_pass = pass
|
60
|
+
end
|
61
|
+
|
62
|
+
attr_accessor :logger
|
63
|
+
|
64
|
+
#
|
65
|
+
# send query for events of a calendar and returns http response object.
|
66
|
+
# available condtions are
|
67
|
+
# * :q => query string
|
68
|
+
# * :max-results => max contents count. (default: 25)
|
69
|
+
# * :start-index => 1-based index of the first result to be retrieved
|
70
|
+
# * :orderby => the order of retrieved data.
|
71
|
+
# * :published-min => Bounds on the entry publication date(oldest)
|
72
|
+
# * :published-max => Bounds on the entry publication date(newest)
|
73
|
+
# * :updated-min => Bounds on the entry update date(oldest)
|
74
|
+
# * :updated-max => Bounds on the entry update date(newest)
|
75
|
+
# * :author => Entry author
|
76
|
+
# and so on.
|
77
|
+
# For detail, see http://code.google.com/apis/gdata/protocol.html#Queries
|
78
|
+
# and http://code.google.com/apis/calendar/reference.html#Parameters
|
79
|
+
#
|
80
|
+
def query(cal_url, conditions = nil)
|
81
|
+
logger.info("-- query st --") if logger
|
82
|
+
auth unless @auth
|
83
|
+
uri = URI.parse(cal_url)
|
84
|
+
uri.query = conditions.map do |key, val|
|
85
|
+
"#{key}=#{URI.escape(val.kind_of?(Time) ? val.getutc.iso8601 : val.to_s)}"
|
86
|
+
end.join("&") unless conditions.nil?
|
87
|
+
res = do_get(uri, {})
|
88
|
+
logger.info("-- query en (#{res.message}) --") if logger
|
89
|
+
res
|
90
|
+
end
|
91
|
+
|
92
|
+
#
|
93
|
+
# delete an event.
|
94
|
+
#
|
95
|
+
def delete(feed)
|
96
|
+
logger.info("-- delete st --") if logger
|
97
|
+
auth unless @auth
|
98
|
+
uri = URI.parse(feed)
|
99
|
+
res = do_post(uri,
|
100
|
+
{"X-HTTP-Method-Override" => "DELETE"},
|
101
|
+
"DELETE " + uri.path)
|
102
|
+
logger.info("-- delete en (#{res.message}) --") if logger
|
103
|
+
res
|
104
|
+
end
|
105
|
+
|
106
|
+
#
|
107
|
+
# insert an event
|
108
|
+
#
|
109
|
+
def insert(feed, event)
|
110
|
+
logger.info("-- insert st --") if logger
|
111
|
+
auth unless @auth
|
112
|
+
uri = URI.parse(feed)
|
113
|
+
res = do_post(uri,
|
114
|
+
{"Content-Type" => "application/atom+xml",
|
115
|
+
"Content-Length" => event.length.to_s}, event)
|
116
|
+
logger.info("-- insert en (#{res.message}) --") if logger
|
117
|
+
res
|
118
|
+
end
|
119
|
+
|
120
|
+
#
|
121
|
+
# update an event.
|
122
|
+
#
|
123
|
+
def update(feed, event)
|
124
|
+
logger.info("-- update st --") if logger
|
125
|
+
auth unless @auth
|
126
|
+
uri = URI.parse(feed)
|
127
|
+
res = do_post(uri,
|
128
|
+
{"X-HTTP-Method-Override" => "PUT",
|
129
|
+
"Content-Type" => "application/atom+xml",
|
130
|
+
"Content-Length" => event.length.to_s}, event)
|
131
|
+
logger.info("-- update en (#{res.message}) --") if logger
|
132
|
+
res
|
133
|
+
end
|
134
|
+
|
135
|
+
private
|
136
|
+
|
137
|
+
# authencate
|
138
|
+
def auth
|
139
|
+
raise AuthenticationFailed
|
140
|
+
end
|
141
|
+
|
142
|
+
def do_post(uri, header, content)
|
143
|
+
logger.debug("POST:" + uri.to_s) if logger
|
144
|
+
res = nil
|
145
|
+
try_http(uri, header, content) do |http,path,head,args|
|
146
|
+
cont = args[0]
|
147
|
+
res = http.post(path, cont, head)
|
148
|
+
end
|
149
|
+
res
|
150
|
+
end
|
151
|
+
|
152
|
+
def do_get(uri, header)
|
153
|
+
logger.debug("GET:" + uri.to_s) if logger
|
154
|
+
res = nil
|
155
|
+
try_http(uri, header) do |http,path,head|
|
156
|
+
res = http.get(path, head)
|
157
|
+
end
|
158
|
+
res
|
159
|
+
end
|
160
|
+
|
161
|
+
def try_http(uri, header, *args)
|
162
|
+
res = nil
|
163
|
+
add_authorize_header(header)
|
164
|
+
Net::HTTP.start(uri.host, uri.port, @@proxy_addr, @@proxy_port, @@proxy_user, @@proxy_pass) do |http|
|
165
|
+
header["Cookie"] = @cookie if @cookie
|
166
|
+
res = yield(http, path_with_authorized_query(uri), header, args)
|
167
|
+
logger.debug(res) if logger
|
168
|
+
if res.code == "302"
|
169
|
+
ck = sess = nil
|
170
|
+
ck = res["set-cookie"] if res.key?("set-cookie")
|
171
|
+
uri = URI.parse(res["location"]) if res.key?("location")
|
172
|
+
if uri && uri.query
|
173
|
+
qr = CGI.parse(uri.query)
|
174
|
+
sess = qr["gsessionid"][0] if qr.key?("gsessionid")
|
175
|
+
end
|
176
|
+
if ck && sess
|
177
|
+
logger.debug("cookie: #{ck}, gsessionid:#{sess}") if logger
|
178
|
+
header["Cookie"] = @cookie = ck
|
179
|
+
@session = sess
|
180
|
+
res = yield(http, path_with_authorized_query(uri), header, args)
|
181
|
+
logger.debug(res) if logger
|
182
|
+
else
|
183
|
+
logger.fatal res.body.gsub(/\n/, ' ') if logger
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
res
|
188
|
+
end
|
189
|
+
|
190
|
+
def path_with_authorized_query(uri)
|
191
|
+
query = CGI.parse(uri.query.nil? ? "" : uri.query)
|
192
|
+
query["gsessionid"] = [@session] if @session
|
193
|
+
qs = query.map do |k,v| "#{CGI.escape(k)}=#{CGI.escape(v[0])}" end.join("&")
|
194
|
+
qs.empty? ? uri.path : "#{uri.path}?#{qs}"
|
195
|
+
end
|
196
|
+
end # class ServiceBase
|
197
|
+
end # module
|
data/test/00_service_test.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
require "base_unit"
|
2
2
|
|
3
|
-
class
|
3
|
+
class TestService0 < Test::Unit::TestCase
|
4
4
|
include GoogleCalendar
|
5
5
|
include CalendarTest
|
6
6
|
|
7
7
|
def test_invalid_auth
|
8
8
|
s = GoogleCalendar::Service.new("invalid@example.com", "invalidpassword")
|
9
|
+
s.logger = @srv.logger
|
9
10
|
assert_raise(GoogleCalendar::AuthenticationFailed) do
|
10
11
|
s.calendar_list
|
11
12
|
end
|
data/test/01_calendar_test.rb
CHANGED
data/test/02_event_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require "base_unit"
|
2
2
|
|
3
|
-
class
|
3
|
+
class TestCalendar2 < Test::Unit::TestCase
|
4
4
|
include GoogleCalendar
|
5
5
|
include CalendarTest
|
6
6
|
|
@@ -44,6 +44,33 @@ class TestCalendar < Test::Unit::TestCase
|
|
44
44
|
assert_equal(0, @cal.events.length)
|
45
45
|
end
|
46
46
|
|
47
|
+
def test_get_event
|
48
|
+
ev = @cal.create_event
|
49
|
+
ev.title = "title"
|
50
|
+
ev.desc = "desc"
|
51
|
+
ev.st = Time.now
|
52
|
+
ev.en = Time.now + 3600
|
53
|
+
ev.save!
|
54
|
+
|
55
|
+
#@srv.logger.level = Logger::DEBUG
|
56
|
+
e2 = Event.get(ev.feed, @srv)
|
57
|
+
assert_same_event(ev, e2)
|
58
|
+
|
59
|
+
e2.desc = "changed"
|
60
|
+
e2.save!
|
61
|
+
assert_equal("changed", e2.desc)
|
62
|
+
|
63
|
+
e3 = Event.get(ev.feed, @srv)
|
64
|
+
assert_same_event(e2, e3)
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_get_event_fail
|
68
|
+
#@srv.logger.level = Logger::DEBUG
|
69
|
+
assert_raise(GoogleCalendar::EventGetFailed) do
|
70
|
+
Event.get(GoogleCalendar::Calendar::DEFAULT_CALENDAR_FEED + "/XXXXXXXXXXXXXXXXXXXXX", @srv)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
47
74
|
def setup
|
48
75
|
@srv = get_service
|
49
76
|
clear_all(@srv, FEED)
|
@@ -0,0 +1,119 @@
|
|
1
|
+
require "base_unit"
|
2
|
+
require "rubygems"
|
3
|
+
require "mechanize"
|
4
|
+
require "logger"
|
5
|
+
require "cgi"
|
6
|
+
require "uri"
|
7
|
+
require "googlecalendar/service_auth_sub"
|
8
|
+
require "googlecalendar/auth_sub_util"
|
9
|
+
|
10
|
+
class TestService3 < Test::Unit::TestCase
|
11
|
+
SAMPLE_URL = "http://www.example.com/sample.html"
|
12
|
+
attr_accessor :logger
|
13
|
+
# get one-time token
|
14
|
+
def test_get_onetime_token
|
15
|
+
# login google account
|
16
|
+
agent = WWW::Mechanize.new do |a| a.log = logger end
|
17
|
+
page = agent.get("https://www.google.com/accounts/Login")
|
18
|
+
|
19
|
+
form = page.forms[0]
|
20
|
+
form["Email"] = MAIL
|
21
|
+
form["Passwd"] = PASS
|
22
|
+
page = agent.submit(form)
|
23
|
+
|
24
|
+
# get auth sub request url
|
25
|
+
next_url = SAMPLE_URL
|
26
|
+
use_secure = false
|
27
|
+
use_session = true
|
28
|
+
request_url = GoogleCalendar::AuthSubUtil.build_request_url(
|
29
|
+
next_url, GoogleCalendar::AuthSubUtil::CALENDAR_SCOPE, use_secure, use_session)
|
30
|
+
query = "next=#{CGI.escape(next_url)}&scope=#{CGI.escape(GoogleCalendar::AuthSubUtil::CALENDAR_SCOPE)}&secure=#{use_secure ? "1" : "0"}&session=#{use_session ? "1" : "0"}"
|
31
|
+
logger.debug(request_url)
|
32
|
+
assert_equal(query, URI.parse(request_url).query)
|
33
|
+
|
34
|
+
# get authsub request
|
35
|
+
page = agent.get(request_url)
|
36
|
+
form = page.forms[0]
|
37
|
+
agent.redirect_ok = false
|
38
|
+
page = agent.submit(form, form.buttons.first)
|
39
|
+
|
40
|
+
#get one time token
|
41
|
+
#
|
42
|
+
# In the real world, Google shows the link for your website. When the user clicks the link, you can
|
43
|
+
# get the one time token.
|
44
|
+
# But in this UNIT TEST, this process is omitted and the token is retrieved directly from google's response.
|
45
|
+
#
|
46
|
+
uri = URI.parse(page.links.first.href)
|
47
|
+
params = CGI.parse(uri.query)
|
48
|
+
expected = params["token"][0]
|
49
|
+
logger.debug " token: #{expected}"
|
50
|
+
one_time_token = GoogleCalendar::AuthSubUtil.get_one_time_token(page.links.first.href)
|
51
|
+
assert_equal(expected, one_time_token)
|
52
|
+
return one_time_token
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_use_session_token
|
56
|
+
one_time_token = test_get_onetime_token
|
57
|
+
session_token = nil
|
58
|
+
srv = nil
|
59
|
+
begin
|
60
|
+
#get session token
|
61
|
+
session_token = GoogleCalendar::AuthSubUtil.exchange_session_token(one_time_token)
|
62
|
+
assert_not_nil(session_token)
|
63
|
+
logger.debug(session_token)
|
64
|
+
srv = GoogleCalendar::ServiceAuthSub.new(session_token)
|
65
|
+
srv.logger = logger
|
66
|
+
ret = srv.query(FEED, {})
|
67
|
+
logger.debug(ret.body)
|
68
|
+
assert_equal("200", ret.code)
|
69
|
+
|
70
|
+
#do something
|
71
|
+
yield(session_token, srv) if block_given?
|
72
|
+
ensure
|
73
|
+
#revoke token
|
74
|
+
unless session_token.nil?
|
75
|
+
GoogleCalendar::AuthSubUtil.revoke_session_token(session_token)
|
76
|
+
ret = srv.query(FEED, {})
|
77
|
+
logger.debug(ret)
|
78
|
+
assert_equal("401", ret.code)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_query_with_session_token
|
84
|
+
test_use_session_token do |token, srv|
|
85
|
+
ret = srv.query(GoogleCalendar::Calendar::DEFAULT_CALENDAR_FEED, {})
|
86
|
+
assert_equal("200", ret.code)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_with_session_token
|
91
|
+
test_use_session_token do |token, srv|
|
92
|
+
cal = GoogleCalendar::Calendar.new(srv)
|
93
|
+
event = cal.create_event
|
94
|
+
event.desc = "desc"
|
95
|
+
event.st = Time.now
|
96
|
+
event.en = Time.now + 3600
|
97
|
+
ret = event.save
|
98
|
+
assert(ret)
|
99
|
+
event.destroy!
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_session_info
|
104
|
+
test_use_session_token do |token, session|
|
105
|
+
ret = GoogleCalendar::AuthSubUtil.token_info(token)
|
106
|
+
expected = {"Secure" => "false",
|
107
|
+
"Scope" => GoogleCalendar::AuthSubUtil::CALENDAR_SCOPE,
|
108
|
+
"Target" => "www.example.com"}
|
109
|
+
expected.each do |k,v|
|
110
|
+
assert(ret.key?(k))
|
111
|
+
assert_equal(v, ret[k]) if ret.key?(k)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def setup
|
117
|
+
@logger = Logger.new("authsub.log")
|
118
|
+
end
|
119
|
+
end
|
data/test/base_unit.rb
CHANGED
@@ -3,11 +3,14 @@ $:.unshift(File.dirname(__FILE__) + '/../lib')
|
|
3
3
|
require "parameters"
|
4
4
|
require 'test/unit'
|
5
5
|
require "googlecalendar/calendar"
|
6
|
+
require "logger"
|
6
7
|
|
7
8
|
module CalendarTest
|
8
9
|
include GoogleCalendar
|
9
10
|
def get_service
|
10
11
|
srv = Service.new(MAIL, PASS)
|
12
|
+
srv.logger = Logger.new("testlog.log")
|
13
|
+
srv.logger.level = Logger::INFO
|
11
14
|
assert_instance_of(Service, srv)
|
12
15
|
srv.send("auth")
|
13
16
|
assert_not_nil(srv.instance_eval("@auth"))
|
metadata
CHANGED
@@ -1,87 +1,130 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.
|
2
|
+
rubygems_version: 0.9.0
|
3
3
|
specification_version: 1
|
4
4
|
name: gcalapi
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0
|
7
|
-
date:
|
6
|
+
version: 0.1.0
|
7
|
+
date: 2007-02-18 00:00:00 +09:00
|
8
8
|
summary: Google Calendar API
|
9
9
|
require_paths:
|
10
|
-
|
10
|
+
- lib
|
11
11
|
email: zoriorz@gmail.com
|
12
12
|
homepage: http://gcalapi.rubyforge.net
|
13
13
|
rubyforge_project: gcalapi
|
14
|
-
description:
|
14
|
+
description: ""
|
15
15
|
autorequire: googlecalendar/calendar
|
16
16
|
default_executable:
|
17
17
|
bindir: bin
|
18
18
|
has_rdoc: true
|
19
19
|
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
20
|
requirements:
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
version: 0.0.0
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
25
24
|
version:
|
26
25
|
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
27
29
|
authors:
|
28
|
-
|
30
|
+
- zorio
|
29
31
|
files:
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
32
|
+
- doc
|
33
|
+
- example
|
34
|
+
- html
|
35
|
+
- lib
|
36
|
+
- Rakefile
|
37
|
+
- README
|
38
|
+
- test
|
39
|
+
- VERSION
|
40
|
+
- doc/classes
|
41
|
+
- doc/files
|
42
|
+
- doc/classes/CalendarTest.src
|
43
|
+
- doc/classes/GoogleCalendar
|
44
|
+
- doc/classes/GoogleCalendar.src
|
45
|
+
- doc/classes/Mail.src
|
46
|
+
- doc/classes/TestCalendar1.src
|
47
|
+
- doc/classes/TestCalendar2.src
|
48
|
+
- doc/classes/TestService0.src
|
49
|
+
- doc/classes/TestService3.src
|
50
|
+
- doc/classes/GoogleCalendar/AuthSubFailed.src
|
51
|
+
- doc/classes/GoogleCalendar/AuthSubUtil.src
|
52
|
+
- doc/classes/GoogleCalendar/Calendar.src
|
53
|
+
- doc/classes/GoogleCalendar/Event.src
|
54
|
+
- doc/classes/GoogleCalendar/Service.src
|
55
|
+
- doc/classes/GoogleCalendar/ServiceAuthSub.src
|
56
|
+
- doc/classes/GoogleCalendar/ServiceBase.src
|
57
|
+
- doc/files/example
|
58
|
+
- doc/files/lib
|
59
|
+
- doc/files/test
|
60
|
+
- doc/files/example/ol2gcal_rb.src
|
61
|
+
- doc/files/lib/googlecalendar
|
62
|
+
- example/mail2gcal.rb
|
63
|
+
- example/mixi2gcal.rb
|
64
|
+
- example/ol2gcal.rb
|
65
|
+
- html/classes
|
66
|
+
- html/created.rid
|
67
|
+
- html/files
|
68
|
+
- html/fr_class_index.html
|
69
|
+
- html/fr_file_index.html
|
70
|
+
- html/fr_method_index.html
|
71
|
+
- html/index.html
|
72
|
+
- html/rdoc-style.css
|
73
|
+
- html/classes/GoogleCalendar
|
74
|
+
- html/classes/GoogleCalendar.html
|
75
|
+
- html/classes/GoogleCalendar/AuthenticationFailed.html
|
76
|
+
- html/classes/GoogleCalendar/AuthSubFailed.html
|
77
|
+
- html/classes/GoogleCalendar/AuthSubUtil.html
|
78
|
+
- html/classes/GoogleCalendar/Calendar.html
|
79
|
+
- html/classes/GoogleCalendar/Event.html
|
80
|
+
- html/classes/GoogleCalendar/EventDeleteFailed.html
|
81
|
+
- html/classes/GoogleCalendar/EventGetFailed.html
|
82
|
+
- html/classes/GoogleCalendar/EventInsertFailed.html
|
83
|
+
- html/classes/GoogleCalendar/EventUpdateFailed.html
|
84
|
+
- html/classes/GoogleCalendar/InvalidCalendarURL.html
|
85
|
+
- html/classes/GoogleCalendar/Service.html
|
86
|
+
- html/classes/GoogleCalendar/ServiceAuthSub.html
|
87
|
+
- html/classes/GoogleCalendar/ServiceBase.html
|
88
|
+
- html/files/lib
|
89
|
+
- html/files/README.html
|
90
|
+
- html/files/lib/googlecalendar
|
91
|
+
- html/files/lib/googlecalendar/auth_sub_util_rb.html
|
92
|
+
- html/files/lib/googlecalendar/calendar_rb.html
|
93
|
+
- html/files/lib/googlecalendar/event_rb.html
|
94
|
+
- html/files/lib/googlecalendar/service_auth_sub_rb.html
|
95
|
+
- html/files/lib/googlecalendar/service_base_rb.html
|
96
|
+
- html/files/lib/googlecalendar/service_rb.html
|
97
|
+
- lib/gcalapi.rb
|
98
|
+
- lib/googlecalendar
|
99
|
+
- lib/googlecalendar/auth_sub_util.rb
|
100
|
+
- lib/googlecalendar/calendar.rb
|
101
|
+
- lib/googlecalendar/event.rb
|
102
|
+
- lib/googlecalendar/service.rb
|
103
|
+
- lib/googlecalendar/service_auth_sub.rb
|
104
|
+
- lib/googlecalendar/service_base.rb
|
105
|
+
- test/00_service_test.rb
|
106
|
+
- test/01_calendar_test.rb
|
107
|
+
- test/02_event_test.rb
|
108
|
+
- test/03_authsub_test.rb
|
109
|
+
- test/all.sh
|
110
|
+
- test/base_unit.rb
|
111
|
+
- test/each.sh
|
112
|
+
- test/template.parameters.rb
|
75
113
|
test_files:
|
76
|
-
|
77
|
-
|
78
|
-
|
114
|
+
- test/00_service_test.rb
|
115
|
+
- test/01_calendar_test.rb
|
116
|
+
- test/02_event_test.rb
|
117
|
+
- test/03_authsub_test.rb
|
79
118
|
rdoc_options:
|
80
|
-
|
81
|
-
|
119
|
+
- --line-numbers
|
120
|
+
- --inline-source
|
82
121
|
extra_rdoc_files:
|
83
|
-
|
122
|
+
- README
|
84
123
|
executables: []
|
124
|
+
|
85
125
|
extensions: []
|
126
|
+
|
86
127
|
requirements: []
|
87
|
-
|
128
|
+
|
129
|
+
dependencies: []
|
130
|
+
|