google_calendar 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.
@@ -0,0 +1,3 @@
1
+ SID=DQAAANQAAADZMefRbeG9x_P2llJUjewWWasEqC2mubuTSSjH414IJY-TTJF9voB3ZS80C9wFF68jKlpeUwL-9Pss9bk0_yNPCYtvTcx54L6rANjU1Go58r1X0B8RFatiA3Ak7S1zKxaUhfAB48dYoh-swUthjv_Ts8b7uCGUzfmOcKRGdQDy0-7Bdpy6r7cwVP68FPbA3EadPUrQGKKW-M4GXcB8iqymYNAL8utiGlAPtNFIM6It6uVInOiO0-24_pSYM1VxVJ2gBXa3lZevcLGObFHMQkka9Djrs2-d5OCoryjQo7RRFcxBxzZJqmwE
2
+ LSID=DQAAANUAAACgKc7kL-UwiEIsHKB-Rfd3cTPzWCav_-SzJy6e5IviYfruIvtswkDXxzSJ-rv-YmCOC-J0YO3ngnkmQoTnCJUjewWWasBIiO4bnKkk4K8IZdO8pBOHxpGuXBnKER4jaC7DwcQuVlEypBSFddj-s1mil8EQRUIR5SyRsyTbjS2uiO2slQ4jWyxGlds-s4b7DC8c7oMHuVjxrTtE_E9tZeIu4qXOb8QE1dwJGsaNWii7ioH5HVNuKMe0BjkKS5m7rymv4HhMnlN7mw09NJp1AMU9sfeiJ6kH5QVQuVxoAaA7rqm579I0pdQ
3
+ Auth=DQAAANUAAACgKc7kL-UwiEIsHKB-Rfd3cTPzWCav_-SzJy6e5IviYfruIvtswkDXxzSJ-rv-YmCOC-J0YO3ngnkmQoTnCJUjewWWasBIiO4bnKkk4K8IZdO8pBOHxpGuXBnKER4jaC7DwcQuVlEycRu6P375BUUgR1HNa3cxom45s1clzRKy9h4M4PZ2bO9ejr1qn5IkIUBuMmzvOJuDgIzm1V6YCZ_tErZ4WGq3u0tIm_VdDMn-rWEosH8OPfAp8BYShvAQy9cFSKYY1co8M0WJBbuoNlb52DnFtnUxw1UXW9d0xJ8bnSRkIUiDiMA')
@@ -0,0 +1,142 @@
1
+ require 'helper'
2
+
3
+ class TestGoogleCalendar < Test::Unit::TestCase
4
+ include Google
5
+
6
+ context "Connected" do
7
+
8
+ setup do
9
+ @http_mock = mock('Net::HTTPResponse')
10
+ @http_mock.stubs(:code => '200', :kind_of? => false, :message => "OK")
11
+ @http_mock.stubs(:kind_of?).with(Net::HTTPSuccess).returns(true)
12
+ @http_mock.stubs(:body).returns(get_mock_body('successful_login.txt'))
13
+ @http_request_mock = mock('Net::HTTPS')
14
+ @http_request_mock.stubs(:set_form_data => '', :request => @http_mock)
15
+
16
+ Net::HTTPS.stubs(:new).returns(@http_request_mock)
17
+ end
18
+
19
+ context "Login" do
20
+
21
+ should "login properly" do
22
+ assert_nothing_thrown do
23
+ Calendar.new(:username => 'some.one@gmail.com', :password => 'super-secret')
24
+ end
25
+ end
26
+
27
+ should "catch login with invalid credentials" do
28
+ @http_mock.stubs(:kind_of?).with(Net::HTTPForbidden).returns(true)
29
+ @http_mock.stubs(:body).returns('Error=BadAuthentication')
30
+ assert_raise(HTTPAuthorizationFailed) do
31
+ Calendar.new(:username => 'some.one@gmail.com', :password => 'wrong-password')
32
+ end
33
+ end
34
+
35
+ end # login context
36
+
37
+ context "Logged on" do
38
+ setup do
39
+ @calendar = Calendar.new(:username => 'some.one@gmail.com', :password => 'super-secret')
40
+ end
41
+
42
+ should "find all events" do
43
+ @http_mock.stubs(:body).returns( get_mock_body("events.xml") )
44
+ assert_equal @calendar.events.length, 3
45
+ end
46
+
47
+ should "query events" do
48
+ @http_mock.stubs(:body).returns( get_mock_body("query_events.xml") )
49
+ event = @calendar.find_events('Test&gsessionid=12345')
50
+ assert_equal event.title, 'Test'
51
+ end
52
+
53
+ should "find an event by id" do
54
+ @http_mock.stubs(:body).returns( get_mock_body("find_event_by_id.xml") )
55
+ event = @calendar.find_event_by_id('oj6fmpaulbvk9ouoj0lj4v6hio')
56
+ assert_equal event.id, 'oj6fmpaulbvk9ouoj0lj4v6hio'
57
+ end
58
+
59
+ should "throw NotFound with invalid event id" do
60
+ @http_mock.stubs(:kind_of?).with(Net::HTTPNotFound).returns(true)
61
+ assert_raise(HTTPNotFound) do
62
+ @calendar.find_event_by_id('1234')
63
+ end
64
+ end
65
+
66
+ should "create an event with block" do
67
+ @http_mock.stubs(:body).returns( get_mock_body("create_event.xml") )
68
+
69
+ event = @calendar.create_event do |e|
70
+ e.title = 'New Event'
71
+ e.start_time = Time.now + (60 * 60)
72
+ e.end_time = Time.now + (60 * 60 * 2)
73
+ e.content = "A new event"
74
+ e.where = "Joe's House"
75
+ end
76
+
77
+ assert_equal event.title, 'New Event'
78
+ end
79
+
80
+ should "format to_s properly" do
81
+ @http_mock.stubs(:body).returns( get_mock_body("query_events.xml") )
82
+ event = @calendar.find_events('Test')
83
+ assert_equal event.to_s, "Test (oj6fmpaulbvk9ouoj0lj4v6hio)\n\t2010-04-08\n\t2010-04-09\n\tAt School\n\t"
84
+ end
85
+
86
+ should "update an event by id" do
87
+ @http_mock.stubs(:body).returns( get_mock_body("find_event_by_id.xml") )
88
+
89
+ event = @calendar.find_or_create_event_by_id('oj6fmpaulbvk9ouoj0lj4v6hio') do |e|
90
+ e.title = 'New Event Update'
91
+ end
92
+
93
+ assert_equal event.title, 'New Event Update'
94
+ end
95
+
96
+ should "delete an event" do
97
+ @http_mock.stubs(:body).returns( get_mock_body("create_event.xml") )
98
+
99
+ event = @calendar.create_event do |e|
100
+ e.title = 'Delete Me'
101
+ end
102
+
103
+ assert_equal event.id, 'b1vq6rj4r4mg85kcickc7iomb0'
104
+
105
+ @http_mock.stubs(:body).returns("")
106
+ event.delete
107
+ assert_equal event.id, nil
108
+ end
109
+
110
+ should "not redirect forever" do
111
+ @http_mock.stubs(:kind_of?).with(Net::HTTPRedirection).returns(true)
112
+ @http_mock.stubs(:[]).with('location').returns('https://www.google.com')
113
+ assert_raise(HTTPTooManyRedirections) do
114
+ @calendar.events
115
+ end
116
+ end
117
+
118
+ should "throw exception on bad request" do
119
+ @http_mock.stubs(:kind_of?).with(Net::HTTPBadRequest).returns(true)
120
+ assert_raise(HTTPRequestFailed) do
121
+ @calendar.events
122
+ end
123
+ end
124
+
125
+ end # Logged on context
126
+
127
+ end # Connected context
128
+
129
+ def test_https_extension
130
+ assert_nothing_thrown do
131
+ uri = Addressable::URI.parse('https://www.google.com')
132
+ Net::HTTPS.new(uri.host, uri.port)
133
+ end
134
+ end
135
+
136
+ protected
137
+
138
+ def get_mock_body(name)
139
+ File.open(@@mock_path + '/' + name).read
140
+ end
141
+
142
+ end
metadata ADDED
@@ -0,0 +1,286 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: google_calendar
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Steve Zich
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-12-16 00:00:00 -08:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ prerelease: false
23
+ type: :runtime
24
+ name: nokogiri
25
+ version_requirements: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 15
31
+ segments:
32
+ - 1
33
+ - 4
34
+ - 4
35
+ version: 1.4.4
36
+ requirement: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ prerelease: false
39
+ type: :runtime
40
+ name: addressable
41
+ version_requirements: &id002 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ hash: 3
47
+ segments:
48
+ - 2
49
+ - 2
50
+ - 2
51
+ version: 2.2.2
52
+ requirement: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ prerelease: false
55
+ type: :development
56
+ name: shoulda
57
+ version_requirements: &id003 !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ hash: 3
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ requirement: *id003
67
+ - !ruby/object:Gem::Dependency
68
+ prerelease: false
69
+ type: :development
70
+ name: bundler
71
+ version_requirements: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ hash: 23
77
+ segments:
78
+ - 1
79
+ - 0
80
+ - 0
81
+ version: 1.0.0
82
+ requirement: *id004
83
+ - !ruby/object:Gem::Dependency
84
+ prerelease: false
85
+ type: :development
86
+ name: jeweler
87
+ version_requirements: &id005 !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ~>
91
+ - !ruby/object:Gem::Version
92
+ hash: 1
93
+ segments:
94
+ - 1
95
+ - 5
96
+ - 1
97
+ version: 1.5.1
98
+ requirement: *id005
99
+ - !ruby/object:Gem::Dependency
100
+ prerelease: false
101
+ type: :development
102
+ name: rcov
103
+ version_requirements: &id006 !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ hash: 3
109
+ segments:
110
+ - 0
111
+ version: "0"
112
+ requirement: *id006
113
+ - !ruby/object:Gem::Dependency
114
+ prerelease: false
115
+ type: :development
116
+ name: mocha
117
+ version_requirements: &id007 !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ hash: 3
123
+ segments:
124
+ - 0
125
+ version: "0"
126
+ requirement: *id007
127
+ - !ruby/object:Gem::Dependency
128
+ prerelease: false
129
+ type: :runtime
130
+ name: nokogiri
131
+ version_requirements: &id008 !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ hash: 15
137
+ segments:
138
+ - 1
139
+ - 4
140
+ - 4
141
+ version: 1.4.4
142
+ requirement: *id008
143
+ - !ruby/object:Gem::Dependency
144
+ prerelease: false
145
+ type: :runtime
146
+ name: addressable
147
+ version_requirements: &id009 !ruby/object:Gem::Requirement
148
+ none: false
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ hash: 3
153
+ segments:
154
+ - 2
155
+ - 2
156
+ - 2
157
+ version: 2.2.2
158
+ requirement: *id009
159
+ - !ruby/object:Gem::Dependency
160
+ prerelease: false
161
+ type: :development
162
+ name: shoulda
163
+ version_requirements: &id010 !ruby/object:Gem::Requirement
164
+ none: false
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ hash: 3
169
+ segments:
170
+ - 0
171
+ version: "0"
172
+ requirement: *id010
173
+ - !ruby/object:Gem::Dependency
174
+ prerelease: false
175
+ type: :development
176
+ name: bundler
177
+ version_requirements: &id011 !ruby/object:Gem::Requirement
178
+ none: false
179
+ requirements:
180
+ - - ~>
181
+ - !ruby/object:Gem::Version
182
+ hash: 23
183
+ segments:
184
+ - 1
185
+ - 0
186
+ - 0
187
+ version: 1.0.0
188
+ requirement: *id011
189
+ - !ruby/object:Gem::Dependency
190
+ prerelease: false
191
+ type: :development
192
+ name: jeweler
193
+ version_requirements: &id012 !ruby/object:Gem::Requirement
194
+ none: false
195
+ requirements:
196
+ - - ~>
197
+ - !ruby/object:Gem::Version
198
+ hash: 1
199
+ segments:
200
+ - 1
201
+ - 5
202
+ - 1
203
+ version: 1.5.1
204
+ requirement: *id012
205
+ - !ruby/object:Gem::Dependency
206
+ prerelease: false
207
+ type: :development
208
+ name: rcov
209
+ version_requirements: &id013 !ruby/object:Gem::Requirement
210
+ none: false
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ hash: 3
215
+ segments:
216
+ - 0
217
+ version: "0"
218
+ requirement: *id013
219
+ description: A minimal wrapper around the google calendar API, which uses nokogiri for fast parsing.
220
+ email: steve.zich@gmail.com
221
+ executables: []
222
+
223
+ extensions: []
224
+
225
+ extra_rdoc_files:
226
+ - LICENSE.txt
227
+ - README.rdoc
228
+ files:
229
+ - .document
230
+ - Gemfile
231
+ - Gemfile.lock
232
+ - LICENSE.txt
233
+ - README.rdoc
234
+ - Rakefile
235
+ - VERSION
236
+ - google_calendar.gemspec
237
+ - lib/google/calendar.rb
238
+ - lib/google/connection.rb
239
+ - lib/google/errors.rb
240
+ - lib/google/event.rb
241
+ - lib/google/net/https.rb
242
+ - lib/google_calendar.rb
243
+ - test/helper.rb
244
+ - test/mocks/create_event.xml
245
+ - test/mocks/events.xml
246
+ - test/mocks/find_event_by_id.xml
247
+ - test/mocks/query_events.xml
248
+ - test/mocks/successful_login.txt
249
+ - test/test_google_calendar.rb
250
+ has_rdoc: true
251
+ homepage: http://github.com/northworld/google_calendar
252
+ licenses:
253
+ - MIT
254
+ post_install_message:
255
+ rdoc_options: []
256
+
257
+ require_paths:
258
+ - lib
259
+ required_ruby_version: !ruby/object:Gem::Requirement
260
+ none: false
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ hash: 3
265
+ segments:
266
+ - 0
267
+ version: "0"
268
+ required_rubygems_version: !ruby/object:Gem::Requirement
269
+ none: false
270
+ requirements:
271
+ - - ">="
272
+ - !ruby/object:Gem::Version
273
+ hash: 3
274
+ segments:
275
+ - 0
276
+ version: "0"
277
+ requirements: []
278
+
279
+ rubyforge_project:
280
+ rubygems_version: 1.3.7
281
+ signing_key:
282
+ specification_version: 3
283
+ summary: A lightweight google calendar API wrapper
284
+ test_files:
285
+ - test/helper.rb
286
+ - test/test_google_calendar.rb