google_calendar 0.5 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,45 +1,50 @@
1
1
  {
2
- "kind": "calendar#events",
3
- "defaultReminders": [],
4
- "description": "My Personal Events Calendar",
2
+ "kind": "calendar#events",
3
+ "defaultReminders": [],
4
+ "description": "My Personal Events Calendar",
5
5
  "items": [
6
6
  {
7
- "status": "confirmed",
8
- "kind": "calendar#event",
7
+ "status": "confirmed",
8
+ "kind": "calendar#event",
9
9
  "end": {
10
10
  "dateTime": "2008-09-24T11:00:00-07:00"
11
- },
12
- "description": "My Test Event",
13
- "created": "2008-09-18T21:17:11.000Z",
14
- "iCalUID": "fhru34kt6ikmr20knd2456l08n@google.com",
11
+ },
12
+ "description": "My Test Event",
13
+ "created": "2008-09-18T21:17:11.000Z",
14
+ "iCalUID": "fhru34kt6ikmr20knd2456l08n@google.com",
15
15
  "reminders": {
16
16
  "useDefault": true
17
- },
18
- "htmlLink": "https://www.google.com/calendar/event?eid=dDAwam5wcWMwOHJjYWJpNnBhNTQ5dHRqbGsgZ3FlYjBpNnY3MzdrZnU1bWQwZjNldWtqbGdAZw",
19
- "sequence": 1,
20
- "updated": "2008-10-24T23:08:09.010Z",
17
+ },
18
+ "htmlLink": "https://www.google.com/calendar/event?eid=dDAwam5wcWMwOHJjYWJpNnBhNTQ5dHRqbGsgZ3FlYjBpNnY3MzdrZnU1bWQwZjNldWtqbGdAZw",
19
+ "sequence": 1,
20
+ "updated": "2008-10-24T23:08:09.010Z",
21
21
  "summary": "Test Event",
22
22
  "colorId": "3",
23
23
  "start": {
24
24
  "dateTime": "2008-09-24T10:30:00-07:00"
25
- },
26
- "etag": "\"2449779378020000\"",
25
+ },
26
+ "etag": "\"2449779378020000\"",
27
27
  "organizer": {
28
- "self": true,
29
- "displayName": "Some Person",
28
+ "self": true,
29
+ "displayName": "Some Person",
30
30
  "email": "some.person@gmail.com"
31
- },
31
+ },
32
32
  "creator": {
33
- "displayName": "Some Person",
33
+ "displayName": "Some Person",
34
34
  "email": "some.person@gmail.com"
35
- },
36
- "id": "fhru34kt6ikmr20knd2456l08n"
35
+ },
36
+ "id": "fhru34kt6ikmr20knd2456l08n",
37
+ "extendedProperties": {
38
+ "shared": {
39
+ "key": "value"
40
+ }
41
+ }
37
42
  }
38
- ],
39
- "updated": "2014-11-15T22:32:46.965Z",
40
- "summary": "My Events Calendar",
41
- "etag": "\"1234567890123000\"",
42
- "nextSyncToken": "AKi8uge987ECEIjyiZnV_cECGAU=",
43
- "timeZone": "America/Los_Angeles",
43
+ ],
44
+ "updated": "2014-11-15T22:32:46.965Z",
45
+ "summary": "My Events Calendar",
46
+ "etag": "\"1234567890123000\"",
47
+ "nextSyncToken": "AKi8uge987ECEIjyiZnV_cECGAU=",
48
+ "timeZone": "America/Los_Angeles",
44
49
  "accessRole": "owner"
45
50
  }
@@ -1,48 +1,53 @@
1
1
  {
2
- "kind": "calendar#events",
3
- "defaultReminders": [],
4
- "description": "My Personal Events Calendar",
2
+ "kind": "calendar#events",
3
+ "defaultReminders": [],
4
+ "description": "My Personal Events Calendar",
5
5
  "items": [
6
6
  {
7
- "status": "confirmed",
8
- "kind": "calendar#event",
7
+ "status": "confirmed",
8
+ "kind": "calendar#event",
9
9
  "end": {
10
- "timeZone": "America/Los_Angeles",
10
+ "timeZone": "America/Los_Angeles",
11
11
  "dateTime": "2014-11-15T18:00:00-08:00"
12
- },
13
- "created": "2014-11-17T00:45:30.000Z",
14
- "iCalUID": "fhru34kt6ikmr20knd2456l08n@google.com",
12
+ },
13
+ "created": "2014-11-17T00:45:30.000Z",
14
+ "iCalUID": "fhru34kt6ikmr20knd2456l08n@google.com",
15
15
  "reminders": {
16
16
  "useDefault": true
17
- },
18
- "htmlLink": "https://www.google.com/calendar/event?eid=MjRmNHZhY2pzY3A1YjB0NHE2OThoMGs2YXNfMjAxNDExMTZUMDEwMDAwWiBncWViMGk2djczN2tmdTVtZDBmM2V1a2psZ0Bn",
19
- "sequence": 0,
20
- "updated": "2014-11-17T00:45:30.431Z",
21
- "summary": "Test Repeating Events",
17
+ },
18
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjRmNHZhY2pzY3A1YjB0NHE2OThoMGs2YXNfMjAxNDExMTZUMDEwMDAwWiBncWViMGk2djczN2tmdTVtZDBmM2V1a2psZ0Bn",
19
+ "sequence": 0,
20
+ "updated": "2014-11-17T00:45:30.431Z",
21
+ "summary": "Test Repeating Events",
22
22
  "recurrence": [
23
23
  "RRULE:FREQ=DAILY;COUNT=3"
24
- ],
24
+ ],
25
25
  "start": {
26
- "timeZone": "America/Los_Angeles",
26
+ "timeZone": "America/Los_Angeles",
27
27
  "dateTime": "2014-11-15T17:00:00-08:00"
28
- },
29
- "etag": "\"2832370260862000\"",
28
+ },
29
+ "etag": "\"2832370260862000\"",
30
30
  "organizer": {
31
- "self": true,
32
- "displayName": "Some Person",
31
+ "self": true,
32
+ "displayName": "Some Person",
33
33
  "email": "some.person@gmail.com"
34
- },
34
+ },
35
35
  "creator": {
36
- "displayName": "Some Person",
36
+ "displayName": "Some Person",
37
37
  "email": "some.person@gmail.com"
38
- },
39
- "id": "fhru34kt6ikmr20knd2456l08n"
38
+ },
39
+ "id": "fhru34kt6ikmr20knd2456l08n",
40
+ "extendedProperties": {
41
+ "shared": {
42
+ "key": "value"
43
+ }
44
+ }
40
45
  }
41
- ],
42
- "updated": "2014-11-17T00:45:30.522Z",
43
- "summary": "My Events Calendar",
44
- "etag": "\"1416185130522000\"",
45
- "nextSyncToken": "AKi8uge987ECEIjyiZnV_cECGAU=",
46
- "timeZone": "America/Los_Angeles",
46
+ ],
47
+ "updated": "2014-11-17T00:45:30.522Z",
48
+ "summary": "My Events Calendar",
49
+ "etag": "\"1416185130522000\"",
50
+ "nextSyncToken": "AKi8uge987ECEIjyiZnV_cECGAU=",
51
+ "timeZone": "America/Los_Angeles",
47
52
  "accessRole": "owner"
48
53
  }
@@ -1,6 +1,6 @@
1
1
  {
2
- "access_token": "ya29.hYjPO0uHt63uWr5qmQtMEReZEvILcdGlPCOHDy6quKPyEQaQQvqaVAlLAVASaRm_O0a7vkZ91T8xyQ",
3
- "token_type": "Bearer",
4
- "expires_in": 3600,
2
+ "access_token": "ya29.hYjPO0uHt63uWr5qmQtMEReZEvILcdGlPCOHDy6quKPyEQaQQvqaVAlLAVASaRm_O0a7vkZ91T8xyQ",
3
+ "token_type": "Bearer",
4
+ "expires_in": 3600,
5
5
  "refresh_token": "1/aJUy7pQzc4fUMX89BMMLeAfKcYteBKRMpQvf4fQFX0"
6
6
  }
@@ -92,6 +92,20 @@ class TestGoogleCalendar < Minitest::Test
92
92
  @calendar.find_events_in_range(start_min, start_max)
93
93
  end
94
94
 
95
+ should "find events with shared extended property" do
96
+ @calendar.expects(:event_lookup).with("?sharedExtendedProperty=p%3Dv&sharedExtendedProperty=q%3Dw&orderBy=startTime&maxResults=25&singleEvents=true")
97
+ @calendar.find_events_by_extended_properties({'shared' => {'p' => 'v', 'q' => 'w'}})
98
+ end
99
+
100
+ should "find events with shared extended property in range" do
101
+ now = Time.now.utc
102
+ Time.stubs(:now).returns(now)
103
+ start_min = now
104
+ start_max = (now + 60*60*24)
105
+ @calendar.expects(:event_lookup).with("?sharedExtendedProperty=p%3Dv&timeMin=#{start_min.strftime("%FT%TZ")}&timeMax=#{start_max.strftime("%FT%TZ")}&orderBy=startTime&maxResults=25&singleEvents=true")
106
+ @calendar.find_events_by_extended_properties_in_range({'shared' => {'p' => 'v'}}, start_min, start_max)
107
+ end
108
+
95
109
  should "find future events" do
96
110
  now = Time.now.utc
97
111
  Time.stubs(:now).returns(now)
@@ -112,6 +126,12 @@ class TestGoogleCalendar < Minitest::Test
112
126
  assert_equal events.class.to_s, "Array"
113
127
  end
114
128
 
129
+ should "return one event in range as array from cancelled data" do
130
+ @client_mock.stubs(:body).returns( get_mock_body("cancelled_events.json") )
131
+ events = @calendar.events
132
+ assert_equal events.class.to_s, "Array"
133
+ end
134
+
115
135
  should "return response of no events in range as array" do
116
136
  @client_mock.stubs(:body).returns( get_mock_body("empty_events.json") )
117
137
  events = @calendar.events
@@ -128,7 +148,7 @@ class TestGoogleCalendar < Minitest::Test
128
148
  should "throw NotFound with invalid event id" do
129
149
  @client_mock.stubs(:status).returns(404)
130
150
  @client_mock.stubs(:body).returns( get_mock_body("404.json") )
131
- assert_equal @calendar.find_event_by_id('1234'), nil
151
+ assert_equal @calendar.find_event_by_id('1234'), []
132
152
  end
133
153
 
134
154
  should "create an event with block" do
@@ -140,6 +160,7 @@ class TestGoogleCalendar < Minitest::Test
140
160
  e.end_time = Time.now + (60 * 60 * 2)
141
161
  e.description = "A new event"
142
162
  e.location = "Joe's House"
163
+ e.extended_properties = {'shared' => {'key' => 'value' }}
143
164
  end
144
165
 
145
166
  assert_equal event.title, 'New Event'
@@ -259,7 +280,7 @@ class TestGoogleCalendar < Minitest::Test
259
280
  end
260
281
  context "when the event is marked as All Day in google calendar and have more than one day" do
261
282
  should "be true" do
262
- @event = Event.new(:start_time => "2012-03-31", :end_time => "2012-04-03")
283
+ @event = Event.new(:start_time => "2012-03-31", :end_time => "2012-04-03", :all_day => "2012-03-31")
263
284
  assert @event.all_day?
264
285
  end
265
286
  end
@@ -329,6 +350,7 @@ class TestGoogleCalendar < Minitest::Test
329
350
  {'email' => 'some.a.one@gmail.com', 'displayName' => 'Some A One', 'responseStatus' => 'tentative'},
330
351
  {'email' => 'some.b.one@gmail.com', 'displayName' => 'Some B One', 'responseStatus' => 'tentative'}
331
352
  ]
353
+ @event.extended_properties = { 'shared' => { 'key' => 'value' }}
332
354
 
333
355
  expected_structure = {
334
356
  "summary" => "Go Swimming",
@@ -341,7 +363,8 @@ class TestGoogleCalendar < Minitest::Test
341
363
  {"displayName" => "Some A One", "email" => "some.a.one@gmail.com", "responseStatus" => "tentative"},
342
364
  {"displayName" => "Some B One", "email" => "some.b.one@gmail.com", "responseStatus" => "tentative"}
343
365
  ],
344
- "reminders" => {"useDefault" => false, "overrides" => [{"method" => "popup", "minutes" => 10}]}
366
+ "reminders" => {"useDefault" => false, "overrides" => [{"method" => "popup", "minutes" => 10}]},
367
+ "extendedProperties" => {"shared" => {'key' => 'value'}}
345
368
  }
346
369
  assert_equal JSON.parse(@event.to_json), expected_structure
347
370
  end
@@ -383,19 +406,22 @@ class TestGoogleCalendar < Minitest::Test
383
406
  {'email' => 'some.b.one@gmail.com', 'displayName' => 'Some B One', 'responseStatus' => 'tentative'}
384
407
  ]
385
408
  @event.recurrence = {freq: "monthly", count: "5", interval: "2"}
409
+ @event.extended_properties = {'shared' => {'key' => 'value'}}
410
+ require 'timezone_parser'
386
411
  expected_structure = {
387
412
  "summary" => "Go Swimming",
388
413
  "visibility"=>"default",
389
414
  "description" => "The polar bear plunge",
390
415
  "location" => "In the arctic ocean",
391
- "start" => {"dateTime" => "#{@event.start_time}", "timeZone" => "#{Time.now.getlocal.zone}"},
392
- "end" => {"dateTime" => "#{@event.end_time}", "timeZone" => "#{Time.now.getlocal.zone}"},
416
+ "start" => {"dateTime" => "#{@event.start_time}", "timeZone" => "#{TimezoneParser::getTimezones(Time.now.getlocal.zone).last}"},
417
+ "end" => {"dateTime" => "#{@event.end_time}", "timeZone" => "#{TimezoneParser::getTimezones(Time.now.getlocal.zone).last}"},
393
418
  "recurrence" => ["RRULE:FREQ=MONTHLY;COUNT=5;INTERVAL=2"],
394
419
  "attendees" => [
395
420
  {"displayName" => "Some A One", "email" => "some.a.one@gmail.com", "responseStatus" => "tentative"},
396
421
  {"displayName" => "Some B One", "email" => "some.b.one@gmail.com", "responseStatus" => "tentative"}
397
422
  ],
398
- "reminders" => {"useDefault" => false, "overrides" => [{"method" => "popup", "minutes"=>10}]}
423
+ "reminders" => {"useDefault" => false, "overrides" => [{"method" => "popup", "minutes"=>10}]},
424
+ "extendedProperties" => {"shared" => {'key' => 'value'}}
399
425
  }
400
426
  assert_equal JSON.parse(@event.to_json), expected_structure
401
427
  end
metadata CHANGED
@@ -1,167 +1,181 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google_calendar
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.5'
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Zich
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-30 00:00:00.000000000 Z
11
+ date: 2015-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: signet
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0.6'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.8'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: TimezoneParser
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 0.2.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.2.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: terminal-notifier-guard
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - "~>"
59
+ - - ~>
46
60
  - !ruby/object:Gem::Version
47
61
  version: '1.6'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - "~>"
66
+ - - ~>
53
67
  - !ruby/object:Gem::Version
54
68
  version: '1.6'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rb-fsevent
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - "~>"
73
+ - - ~>
60
74
  - !ruby/object:Gem::Version
61
75
  version: '0.9'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - "~>"
80
+ - - ~>
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0.9'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: minitest
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - "~>"
87
+ - - ~>
74
88
  - !ruby/object:Gem::Version
75
89
  version: '5.1'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - "~>"
94
+ - - ~>
81
95
  - !ruby/object:Gem::Version
82
96
  version: '5.1'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: minitest-reporters
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - "~>"
101
+ - - ~>
88
102
  - !ruby/object:Gem::Version
89
103
  version: '1.0'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - "~>"
108
+ - - ~>
95
109
  - !ruby/object:Gem::Version
96
110
  version: '1.0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: shoulda-context
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
- - - "~>"
115
+ - - ~>
102
116
  - !ruby/object:Gem::Version
103
117
  version: '1.2'
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
- - - "~>"
122
+ - - ~>
109
123
  - !ruby/object:Gem::Version
110
124
  version: '1.2'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: bundler
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
- - - ">="
129
+ - - '>='
116
130
  - !ruby/object:Gem::Version
117
131
  version: '1.2'
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
- - - ">="
136
+ - - '>='
123
137
  - !ruby/object:Gem::Version
124
138
  version: '1.2'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: mocha
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
- - - "~>"
143
+ - - ~>
130
144
  - !ruby/object:Gem::Version
131
145
  version: '1.1'
132
146
  type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
- - - "~>"
150
+ - - ~>
137
151
  - !ruby/object:Gem::Version
138
152
  version: '1.1'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: rake
141
155
  requirement: !ruby/object:Gem::Requirement
142
156
  requirements:
143
- - - "~>"
157
+ - - ~>
144
158
  - !ruby/object:Gem::Version
145
159
  version: '10'
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
- - - "~>"
164
+ - - ~>
151
165
  - !ruby/object:Gem::Version
152
166
  version: '10'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: rdoc
155
169
  requirement: !ruby/object:Gem::Requirement
156
170
  requirements:
157
- - - "~>"
171
+ - - ~>
158
172
  - !ruby/object:Gem::Version
159
173
  version: '4.1'
160
174
  type: :development
161
175
  prerelease: false
162
176
  version_requirements: !ruby/object:Gem::Requirement
163
177
  requirements:
164
- - - "~>"
178
+ - - ~>
165
179
  - !ruby/object:Gem::Version
166
180
  version: '4.1'
167
181
  description: A minimal wrapper around the google calendar API
@@ -172,9 +186,9 @@ extra_rdoc_files:
172
186
  - LICENSE.txt
173
187
  - README.rdoc
174
188
  files:
175
- - ".document"
176
- - ".gitignore"
177
- - ".travis.yml"
189
+ - .document
190
+ - .gitignore
191
+ - .travis.yml
178
192
  - Gemfile
179
193
  - Gemfile.lock
180
194
  - Guardfile
@@ -196,6 +210,7 @@ files:
196
210
  - test/mocks/401.json
197
211
  - test/mocks/403.json
198
212
  - test/mocks/404.json
213
+ - test/mocks/cancelled_events.json
199
214
  - test/mocks/create_event.json
200
215
  - test/mocks/create_quickadd_event.json
201
216
  - test/mocks/empty_events.json
@@ -222,17 +237,17 @@ require_paths:
222
237
  - lib
223
238
  required_ruby_version: !ruby/object:Gem::Requirement
224
239
  requirements:
225
- - - ">="
240
+ - - '>='
226
241
  - !ruby/object:Gem::Version
227
242
  version: '0'
228
243
  required_rubygems_version: !ruby/object:Gem::Requirement
229
244
  requirements:
230
- - - ">="
245
+ - - '>='
231
246
  - !ruby/object:Gem::Version
232
247
  version: '0'
233
248
  requirements: []
234
249
  rubyforge_project:
235
- rubygems_version: 2.4.3
250
+ rubygems_version: 2.0.3
236
251
  signing_key:
237
252
  specification_version: 4
238
253
  summary: A lightweight Google Calendar API wrapper
@@ -241,6 +256,7 @@ test_files:
241
256
  - test/mocks/401.json
242
257
  - test/mocks/403.json
243
258
  - test/mocks/404.json
259
+ - test/mocks/cancelled_events.json
244
260
  - test/mocks/create_event.json
245
261
  - test/mocks/create_quickadd_event.json
246
262
  - test/mocks/empty_events.json