gcalapi 0.0.4 → 0.1.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.
Files changed (42) hide show
  1. data/Rakefile +19 -15
  2. data/VERSION +1 -1
  3. data/example/mixi2gcal.rb +88 -0
  4. data/html/classes/GoogleCalendar.html +149 -280
  5. data/html/classes/GoogleCalendar/AuthSubFailed.html +165 -0
  6. data/html/classes/GoogleCalendar/AuthSubUtil.html +397 -0
  7. data/html/classes/GoogleCalendar/AuthenticationFailed.html +110 -110
  8. data/html/classes/GoogleCalendar/Calendar.html +381 -203
  9. data/html/classes/GoogleCalendar/Event.html +800 -510
  10. data/html/classes/GoogleCalendar/EventDeleteFailed.html +110 -110
  11. data/html/classes/GoogleCalendar/EventGetFailed.html +111 -0
  12. data/html/classes/GoogleCalendar/EventInsertFailed.html +110 -110
  13. data/html/classes/GoogleCalendar/EventUpdateFailed.html +110 -110
  14. data/html/classes/GoogleCalendar/InvalidCalendarURL.html +110 -110
  15. data/html/classes/GoogleCalendar/Service.html +305 -594
  16. data/html/classes/GoogleCalendar/ServiceAuthSub.html +181 -0
  17. data/html/classes/GoogleCalendar/ServiceBase.html +694 -0
  18. data/html/created.rid +1 -1
  19. data/html/files/README.html +116 -116
  20. data/html/files/lib/googlecalendar/auth_sub_util_rb.html +111 -0
  21. data/html/files/lib/googlecalendar/calendar_rb.html +109 -109
  22. data/html/files/lib/googlecalendar/event_rb.html +109 -109
  23. data/html/files/lib/googlecalendar/service_auth_sub_rb.html +108 -0
  24. data/html/files/lib/googlecalendar/service_base_rb.html +114 -0
  25. data/html/files/lib/googlecalendar/service_rb.html +107 -113
  26. data/html/fr_class_index.html +39 -34
  27. data/html/fr_file_index.html +32 -29
  28. data/html/fr_method_index.html +75 -52
  29. data/html/index.html +23 -23
  30. data/html/rdoc-style.css +207 -207
  31. data/lib/googlecalendar/auth_sub_util.rb +143 -0
  32. data/lib/googlecalendar/calendar.rb +48 -36
  33. data/lib/googlecalendar/event.rb +16 -11
  34. data/lib/googlecalendar/service.rb +30 -180
  35. data/lib/googlecalendar/service_auth_sub.rb +18 -0
  36. data/lib/googlecalendar/service_base.rb +197 -0
  37. data/test/00_service_test.rb +2 -1
  38. data/test/01_calendar_test.rb +1 -1
  39. data/test/02_event_test.rb +28 -1
  40. data/test/03_authsub_test.rb +119 -0
  41. data/test/base_unit.rb +3 -0
  42. 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
@@ -1,11 +1,12 @@
1
1
  require "base_unit"
2
2
 
3
- class TestService < Test::Unit::TestCase
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
@@ -1,6 +1,6 @@
1
1
  require "base_unit"
2
2
 
3
- class TestCalendar < Test::Unit::TestCase
3
+ class TestCalendar1 < Test::Unit::TestCase
4
4
  include GoogleCalendar
5
5
  include CalendarTest
6
6
 
@@ -1,6 +1,6 @@
1
1
  require "base_unit"
2
2
 
3
- class TestCalendar < Test::Unit::TestCase
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.8.10
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.4
7
- date: 2006-12-28
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
- - lib
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
- - !ruby/object:Gem::Version
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
- - zorio
30
+ - zorio
29
31
  files:
30
- - lib
31
- - html
32
- - test
33
- - Rakefile
34
- - README
35
- - example
36
- - VERSION
37
- - lib/googlecalendar
38
- - lib/gcalapi.rb
39
- - lib/googlecalendar/calendar.rb
40
- - lib/googlecalendar/event.rb
41
- - lib/googlecalendar/service.rb
42
- - html/files
43
- - html/index.html
44
- - html/rdoc-style.css
45
- - html/fr_method_index.html
46
- - html/fr_class_index.html
47
- - html/fr_file_index.html
48
- - html/created.rid
49
- - html/classes
50
- - html/files/lib
51
- - html/files/README.html
52
- - html/files/lib/googlecalendar
53
- - html/files/lib/googlecalendar/event_rb.html
54
- - html/files/lib/googlecalendar/service_rb.html
55
- - html/files/lib/googlecalendar/calendar_rb.html
56
- - html/classes/GoogleCalendar.html
57
- - html/classes/GoogleCalendar
58
- - html/classes/GoogleCalendar/Service.html
59
- - html/classes/GoogleCalendar/EventUpdateFailed.html
60
- - html/classes/GoogleCalendar/Calendar.html
61
- - html/classes/GoogleCalendar/EventInsertFailed.html
62
- - html/classes/GoogleCalendar/EventDeleteFailed.html
63
- - html/classes/GoogleCalendar/Event.html
64
- - html/classes/GoogleCalendar/InvalidCalendarURL.html
65
- - html/classes/GoogleCalendar/AuthenticationFailed.html
66
- - test/each.sh
67
- - test/00_service_test.rb
68
- - test/template.parameters.rb
69
- - test/all.sh
70
- - test/base_unit.rb
71
- - test/01_calendar_test.rb
72
- - test/02_event_test.rb
73
- - example/ol2gcal.rb
74
- - example/mail2gcal.rb
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
- - test/00_service_test.rb
77
- - test/01_calendar_test.rb
78
- - test/02_event_test.rb
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
- - "--line-numbers"
81
- - "--inline-source"
119
+ - --line-numbers
120
+ - --inline-source
82
121
  extra_rdoc_files:
83
- - README
122
+ - README
84
123
  executables: []
124
+
85
125
  extensions: []
126
+
86
127
  requirements: []
87
- dependencies: []
128
+
129
+ dependencies: []
130
+