holiday_list 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,107 @@
1
+ require 'spec_helper'
2
+
3
+ describe HolidayList::Params do
4
+ before(:all) do
5
+ Time.zone = 'Central Time (US & Canada)'
6
+ new_time = Time.zone.local(2014, 1, 29, 12, 0, 0)
7
+ Timecop.freeze(new_time)
8
+ end
9
+
10
+ after(:all) do
11
+ Timecop.return
12
+ end
13
+
14
+ subject { HolidayList::Params.new('12345', options) }
15
+ let(:options) { Hash.new }
16
+
17
+ describe '#to_s' do
18
+ before do
19
+ subject.should_receive(:params_hash).and_return Hash.new
20
+ end
21
+
22
+ it 'calls #params_hash' do
23
+ subject.to_s
24
+ end
25
+ end
26
+
27
+ describe '#params_hash' do
28
+ let(:params_hash) { subject.params_hash }
29
+
30
+ it 'uses the passed in key' do
31
+ expect(params_hash[:key]).to eq '12345'
32
+ end
33
+
34
+ it 'orders by startTime' do
35
+ expect(params_hash[:orderBy]).to eq 'startTime'
36
+ end
37
+
38
+ it 'uses single events' do
39
+ expect(params_hash[:singleEvents]).to be true
40
+ end
41
+
42
+ describe 'time ranges' do
43
+ shared_examples 'customizable start and stop dates' do
44
+ it 'uses a default start date of today' do
45
+ expect(params_hash[:timeMin]).to eq start
46
+ end
47
+
48
+ it 'uses a default stop date of 1 year from now' do
49
+ expect(params_hash[:timeMax]).to eq stop
50
+ end
51
+ end
52
+
53
+ context 'with default start and stop dates' do
54
+ let(:start) { DateTime.new(2014, 1, 29, 12, 0, 0, '-6') }
55
+ let(:stop) { DateTime.new(2015, 1, 29, 12, 0, 0, '-6') }
56
+
57
+ it_behaves_like 'customizable start and stop dates'
58
+ end
59
+
60
+ context 'with custom start and stop dates' do
61
+ let(:start) { DateTime.new(2014, 2, 1) }
62
+ let(:stop) { DateTime.new(2014, 2, 15) }
63
+
64
+ let(:options) do
65
+ {
66
+ 'start' => start,
67
+ 'stop' => stop
68
+ }
69
+ end
70
+
71
+ it_behaves_like 'customizable start and stop dates'
72
+ end
73
+
74
+ context 'with invalid dates' do
75
+ let(:start) { 'foo' }
76
+ let(:stop) { 'bar' }
77
+
78
+ let(:options) do
79
+ {
80
+ 'start' => start,
81
+ 'stop' => stop
82
+ }
83
+ end
84
+
85
+ it 'throws an error' do
86
+ expect { params_hash[:timeMin] }.to raise_error ArgumentError
87
+ end
88
+ end
89
+
90
+ context 'with stop date after start date' do
91
+ let(:start) { DateTime.new(2014, 1, 29, 12, 0, 0, '-6') }
92
+ let(:stop) { DateTime.new(2014, 1, 28, 18, 5, 10, '-6') }
93
+
94
+ let(:options) do
95
+ {
96
+ 'start' => start,
97
+ 'stop' => stop
98
+ }
99
+ end
100
+
101
+ it 'throws an error' do
102
+ expect { params_hash[:timeMin] }.to raise_error ArgumentError
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ class WillError # rubocop:disable Documentation
4
+ include HolidayList::RequestException
5
+
6
+ def without_arguments
7
+ argument_error!
8
+ end
9
+
10
+ def with_arguments
11
+ argument_error! 'My custom error message goes here!'
12
+ end
13
+ end
14
+
15
+ describe HolidayList::RequestException do
16
+ shared_examples_for 'argument_error!' do
17
+ let(:arguments) { [ArgumentError, message] }
18
+
19
+ it 'uses the correct argument' do
20
+ expect { subject.send(method) }.to raise_error(*arguments)
21
+ end
22
+ end
23
+
24
+ subject { WillError.new }
25
+
26
+ describe '#argument_error!' do
27
+ context 'without a default argument' do
28
+ let(:message) { 'A valid google access key is required' }
29
+ let(:method) { :without_arguments }
30
+
31
+ it_should_behave_like 'argument_error!'
32
+ end
33
+
34
+ context 'with a default argument' do
35
+ let(:message) { 'My custom error message goes here!' }
36
+ let(:method) { :with_arguments }
37
+
38
+ it_should_behave_like 'argument_error!'
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,83 @@
1
+ require 'spec_helper'
2
+
3
+ describe HolidayList do
4
+ before(:all) do
5
+ Time.zone = 'Central Time (US & Canada)'
6
+ new_time = Time.zone.local(2014, 1, 29, 12, 0, 0)
7
+ Timecop.freeze(new_time)
8
+ end
9
+
10
+ after(:all) do
11
+ Timecop.return
12
+ end
13
+
14
+ subject { HolidayList.list }
15
+
16
+ shared_context 'valid credentials' do
17
+ before do
18
+ HolidayList.configure do |config|
19
+ config.id = 'usa__en@holiday.calendar.google.com'
20
+ config.key = ENV.fetch('GOOGLE_ACCESS_KEY', 'A_GOOD_KEY')
21
+ end
22
+ end
23
+ end
24
+
25
+ context 'with valid credentials' do
26
+ include_context 'valid credentials'
27
+
28
+ it 'generates a list' do
29
+ VCR.use_cassette '01 29 2014 list' do
30
+ expect(subject.length).to eq(20)
31
+ end
32
+ end
33
+ end
34
+
35
+ context 'without credentials' do
36
+ before do
37
+ HolidayList.configure do |config|
38
+ config.id = nil
39
+ config.key = nil
40
+ end
41
+ end
42
+
43
+ it 'raises an argument error' do
44
+ VCR.use_cassette 'no google access key' do
45
+ expect { subject.first }.to raise_error(ArgumentError)
46
+ end
47
+ end
48
+ end
49
+
50
+ context 'without valid credentials' do
51
+ before do
52
+ HolidayList.configure do |config|
53
+ config.id = 'bad_id'
54
+ config.key = 'bad_key'
55
+ end
56
+ end
57
+
58
+ it 'raises an error' do
59
+ VCR.use_cassette 'bad google access_key' do
60
+ expect { subject.first }.to raise_error(ArgumentError)
61
+ end
62
+ end
63
+ end
64
+
65
+ describe 'a holiday' do
66
+ include_context 'valid credentials'
67
+
68
+ let(:holiday) do
69
+ VCR.use_cassette '01 29 2014 list' do
70
+ subject.first
71
+ end
72
+ end
73
+
74
+ it 'summary is Valentines Day' do
75
+ expect(holiday[:summary]).to eq("Valentine's Day")
76
+ end
77
+
78
+ it 'start date is valid' do
79
+ valentines_day = Date.parse('2014-02-14')
80
+ expect(holiday[:start_date]).to eq valentines_day
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,16 @@
1
+ require 'holiday_list'
2
+ require 'vcr'
3
+ require 'timecop'
4
+ require 'active_support/core_ext/time/calculations'
5
+ require 'dotenv'
6
+ require 'pry'
7
+
8
+ VCR.configure do |config|
9
+ config.cassette_library_dir = File.join %w{ spec vcr cassettes }
10
+ config.hook_into :webmock
11
+
12
+ if ENV['RERECORD'].present?
13
+ Dotenv.load
14
+ config.default_cassette_options = { record: :all }
15
+ end
16
+ end
@@ -0,0 +1,640 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://www.googleapis.com/calendar/v3/calendars/usa__en@holiday.calendar.google.com/events?key=A_GOOD_KEY&orderBy=startTime&singleEvents=true&timeMax=2015-01-29T18:00:00%2B00:00&timeMin=2014-01-29T18:00:00%2B00:00
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.0
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - '*/*'
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Expires:
22
+ - Wed, 26 Feb 2014 04:49:30 GMT
23
+ Date:
24
+ - Wed, 26 Feb 2014 04:49:30 GMT
25
+ Cache-Control:
26
+ - private, max-age=0, must-revalidate, no-transform
27
+ Etag:
28
+ - '"-kteSF26GsdKQ5bfmcd4H3_-u3g/R0ErOA_aNuY54kabK7v4WT8ByPY"'
29
+ Content-Type:
30
+ - application/json; charset=UTF-8
31
+ X-Content-Type-Options:
32
+ - nosniff
33
+ X-Frame-Options:
34
+ - SAMEORIGIN
35
+ X-Xss-Protection:
36
+ - 1; mode=block
37
+ Content-Length:
38
+ - '18797'
39
+ Server:
40
+ - GSE
41
+ Alternate-Protocol:
42
+ - 443:quic
43
+ body:
44
+ encoding: UTF-8
45
+ string: |
46
+ {
47
+ "kind": "calendar#events",
48
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/R0ErOA_aNuY54kabK7v4WT8ByPY\"",
49
+ "summary": "Holidays in United States",
50
+ "description": "Holidays in United States",
51
+ "updated": "2014-02-26T04:49:05.402Z",
52
+ "timeZone": "UTC",
53
+ "accessRole": "reader",
54
+ "items": [
55
+ {
56
+ "kind": "calendar#event",
57
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
58
+ "id": "20140214_60o30dr46so30c1g60o30dr4ck",
59
+ "status": "confirmed",
60
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDAyMTRfNjBvMzBkcjQ2c28zMGMxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
61
+ "created": "2014-02-25T20:48:35.000Z",
62
+ "updated": "2014-02-25T20:48:35.000Z",
63
+ "summary": "Valentine's Day",
64
+ "creator": {
65
+ "email": "usa__en@holiday.calendar.google.com",
66
+ "displayName": "Holidays in United States",
67
+ "self": true
68
+ },
69
+ "organizer": {
70
+ "email": "usa__en@holiday.calendar.google.com",
71
+ "displayName": "Holidays in United States",
72
+ "self": true
73
+ },
74
+ "start": {
75
+ "date": "2014-02-14"
76
+ },
77
+ "end": {
78
+ "date": "2014-02-15"
79
+ },
80
+ "visibility": "public",
81
+ "iCalUID": "20140214_60o30dr46so30c1g60o30dr4ck@google.com",
82
+ "sequence": 1
83
+ },
84
+ {
85
+ "kind": "calendar#event",
86
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
87
+ "id": "20140217_60o30dr570o30e1g60o30dr4ck",
88
+ "status": "confirmed",
89
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDAyMTdfNjBvMzBkcjU3MG8zMGUxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
90
+ "created": "2014-02-25T20:48:35.000Z",
91
+ "updated": "2014-02-25T20:48:35.000Z",
92
+ "summary": "Presidents' Day (Washington's Birthday)",
93
+ "creator": {
94
+ "email": "usa__en@holiday.calendar.google.com",
95
+ "displayName": "Holidays in United States",
96
+ "self": true
97
+ },
98
+ "organizer": {
99
+ "email": "usa__en@holiday.calendar.google.com",
100
+ "displayName": "Holidays in United States",
101
+ "self": true
102
+ },
103
+ "start": {
104
+ "date": "2014-02-17"
105
+ },
106
+ "end": {
107
+ "date": "2014-02-18"
108
+ },
109
+ "visibility": "public",
110
+ "iCalUID": "20140217_60o30dr570o30e1g60o30dr4ck@google.com",
111
+ "sequence": 1
112
+ },
113
+ {
114
+ "kind": "calendar#event",
115
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
116
+ "id": "20140309_60o30c9o60o30dpj6sqj0dr4ck",
117
+ "status": "confirmed",
118
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDAzMDlfNjBvMzBjOW82MG8zMGRwajZzcWowZHI0Y2sgdXNhX19lbkBo",
119
+ "created": "2014-02-25T20:48:35.000Z",
120
+ "updated": "2014-02-25T20:48:35.000Z",
121
+ "summary": "Daylight Saving Time starts",
122
+ "creator": {
123
+ "email": "usa__en@holiday.calendar.google.com",
124
+ "displayName": "Holidays in United States",
125
+ "self": true
126
+ },
127
+ "organizer": {
128
+ "email": "usa__en@holiday.calendar.google.com",
129
+ "displayName": "Holidays in United States",
130
+ "self": true
131
+ },
132
+ "start": {
133
+ "date": "2014-03-09"
134
+ },
135
+ "end": {
136
+ "date": "2014-03-10"
137
+ },
138
+ "visibility": "public",
139
+ "iCalUID": "20140309_60o30c9o60o30dpj6sqj0dr4ck@google.com",
140
+ "sequence": 1
141
+ },
142
+ {
143
+ "kind": "calendar#event",
144
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
145
+ "id": "20140413_60o30o9lc8o30c1g60o30dr4ck",
146
+ "status": "confirmed",
147
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDA0MTNfNjBvMzBvOWxjOG8zMGMxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
148
+ "created": "2014-02-25T20:48:35.000Z",
149
+ "updated": "2014-02-25T20:48:35.000Z",
150
+ "summary": "Thomas Jefferson's Birthday",
151
+ "creator": {
152
+ "email": "usa__en@holiday.calendar.google.com",
153
+ "displayName": "Holidays in United States",
154
+ "self": true
155
+ },
156
+ "organizer": {
157
+ "email": "usa__en@holiday.calendar.google.com",
158
+ "displayName": "Holidays in United States",
159
+ "self": true
160
+ },
161
+ "start": {
162
+ "date": "2014-04-13"
163
+ },
164
+ "end": {
165
+ "date": "2014-04-14"
166
+ },
167
+ "visibility": "public",
168
+ "iCalUID": "20140413_60o30o9lc8o30c1g60o30dr4ck@google.com",
169
+ "sequence": 1
170
+ },
171
+ {
172
+ "kind": "calendar#event",
173
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
174
+ "id": "20140420_60o30dr660o30c1g60o30dr4ck",
175
+ "status": "confirmed",
176
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDA0MjBfNjBvMzBkcjY2MG8zMGMxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
177
+ "created": "2014-02-25T20:48:35.000Z",
178
+ "updated": "2014-02-25T20:48:35.000Z",
179
+ "summary": "Easter Sunday",
180
+ "creator": {
181
+ "email": "usa__en@holiday.calendar.google.com",
182
+ "displayName": "Holidays in United States",
183
+ "self": true
184
+ },
185
+ "organizer": {
186
+ "email": "usa__en@holiday.calendar.google.com",
187
+ "displayName": "Holidays in United States",
188
+ "self": true
189
+ },
190
+ "start": {
191
+ "date": "2014-04-20"
192
+ },
193
+ "end": {
194
+ "date": "2014-04-21"
195
+ },
196
+ "visibility": "public",
197
+ "iCalUID": "20140420_60o30dr660o30c1g60o30dr4ck@google.com",
198
+ "sequence": 1
199
+ },
200
+ {
201
+ "kind": "calendar#event",
202
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
203
+ "id": "20140511_60o30dr560o30e1g60o30dr4ck",
204
+ "status": "confirmed",
205
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDA1MTFfNjBvMzBkcjU2MG8zMGUxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
206
+ "created": "2014-02-25T20:48:35.000Z",
207
+ "updated": "2014-02-25T20:48:35.000Z",
208
+ "summary": "Mothers' Day",
209
+ "creator": {
210
+ "email": "usa__en@holiday.calendar.google.com",
211
+ "displayName": "Holidays in United States",
212
+ "self": true
213
+ },
214
+ "organizer": {
215
+ "email": "usa__en@holiday.calendar.google.com",
216
+ "displayName": "Holidays in United States",
217
+ "self": true
218
+ },
219
+ "start": {
220
+ "date": "2014-05-11"
221
+ },
222
+ "end": {
223
+ "date": "2014-05-12"
224
+ },
225
+ "visibility": "public",
226
+ "iCalUID": "20140511_60o30dr560o30e1g60o30dr4ck@google.com",
227
+ "sequence": 1
228
+ },
229
+ {
230
+ "kind": "calendar#event",
231
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
232
+ "id": "20140526_60o30dr56co30e1g60o30dr4ck",
233
+ "status": "confirmed",
234
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDA1MjZfNjBvMzBkcjU2Y28zMGUxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
235
+ "created": "2014-02-25T20:48:35.000Z",
236
+ "updated": "2014-02-25T20:48:35.000Z",
237
+ "summary": "Memorial Day",
238
+ "creator": {
239
+ "email": "usa__en@holiday.calendar.google.com",
240
+ "displayName": "Holidays in United States",
241
+ "self": true
242
+ },
243
+ "organizer": {
244
+ "email": "usa__en@holiday.calendar.google.com",
245
+ "displayName": "Holidays in United States",
246
+ "self": true
247
+ },
248
+ "start": {
249
+ "date": "2014-05-26"
250
+ },
251
+ "end": {
252
+ "date": "2014-05-27"
253
+ },
254
+ "visibility": "public",
255
+ "iCalUID": "20140526_60o30dr56co30e1g60o30dr4ck@google.com",
256
+ "sequence": 1
257
+ },
258
+ {
259
+ "kind": "calendar#event",
260
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
261
+ "id": "20140615_60o30dr564o30c1g60o30dr4ck",
262
+ "status": "confirmed",
263
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDA2MTVfNjBvMzBkcjU2NG8zMGMxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
264
+ "created": "2014-02-25T20:48:35.000Z",
265
+ "updated": "2014-02-25T20:48:35.000Z",
266
+ "summary": "Fathers' Day",
267
+ "creator": {
268
+ "email": "usa__en@holiday.calendar.google.com",
269
+ "displayName": "Holidays in United States",
270
+ "self": true
271
+ },
272
+ "organizer": {
273
+ "email": "usa__en@holiday.calendar.google.com",
274
+ "displayName": "Holidays in United States",
275
+ "self": true
276
+ },
277
+ "start": {
278
+ "date": "2014-06-15"
279
+ },
280
+ "end": {
281
+ "date": "2014-06-16"
282
+ },
283
+ "visibility": "public",
284
+ "iCalUID": "20140615_60o30dr564o30c1g60o30dr4ck@google.com",
285
+ "sequence": 1
286
+ },
287
+ {
288
+ "kind": "calendar#event",
289
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
290
+ "id": "20140704_60o30dr470o30c1g60o30dr4ck",
291
+ "status": "confirmed",
292
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDA3MDRfNjBvMzBkcjQ3MG8zMGMxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
293
+ "created": "2014-02-25T20:48:35.000Z",
294
+ "updated": "2014-02-25T20:48:35.000Z",
295
+ "summary": "Independence Day",
296
+ "creator": {
297
+ "email": "usa__en@holiday.calendar.google.com",
298
+ "displayName": "Holidays in United States",
299
+ "self": true
300
+ },
301
+ "organizer": {
302
+ "email": "usa__en@holiday.calendar.google.com",
303
+ "displayName": "Holidays in United States",
304
+ "self": true
305
+ },
306
+ "start": {
307
+ "date": "2014-07-04"
308
+ },
309
+ "end": {
310
+ "date": "2014-07-05"
311
+ },
312
+ "visibility": "public",
313
+ "iCalUID": "20140704_60o30dr470o30c1g60o30dr4ck@google.com",
314
+ "sequence": 1
315
+ },
316
+ {
317
+ "kind": "calendar#event",
318
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
319
+ "id": "20140901_60o30dr5c4o30c1g60o30dr4ck",
320
+ "status": "confirmed",
321
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDA5MDFfNjBvMzBkcjVjNG8zMGMxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
322
+ "created": "2014-02-25T20:48:35.000Z",
323
+ "updated": "2014-02-25T20:48:35.000Z",
324
+ "summary": "Labor Day",
325
+ "creator": {
326
+ "email": "usa__en@holiday.calendar.google.com",
327
+ "displayName": "Holidays in United States",
328
+ "self": true
329
+ },
330
+ "organizer": {
331
+ "email": "usa__en@holiday.calendar.google.com",
332
+ "displayName": "Holidays in United States",
333
+ "self": true
334
+ },
335
+ "start": {
336
+ "date": "2014-09-01"
337
+ },
338
+ "end": {
339
+ "date": "2014-09-02"
340
+ },
341
+ "visibility": "public",
342
+ "iCalUID": "20140901_60o30dr5c4o30c1g60o30dr4ck@google.com",
343
+ "sequence": 1
344
+ },
345
+ {
346
+ "kind": "calendar#event",
347
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
348
+ "id": "20141013_60o30dr5c8o32e1g60o30dr4ck",
349
+ "status": "confirmed",
350
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDEwMTNfNjBvMzBkcjVjOG8zMmUxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
351
+ "created": "2014-02-25T20:48:35.000Z",
352
+ "updated": "2014-02-25T20:48:35.000Z",
353
+ "summary": "Columbus Day",
354
+ "description": "Public holiday in: Alabama, Alaska, American Samoa, Arizona, Arkansas, Colorado, Connecticut, Delaware, District of Columbia, Georgia, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana, Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana, Nebraska, New Hampshire, New Jersey, New Mexico, New York, North Carolina, North Dakota, Northern Mariana Islands, Ohio, Oklahoma, Pennsylvania, Rhode Island, South Carolina, Tennessee, Utah, Vermont, Virgin Islands, Virginia, West Virginia, Wisconsin, Wyoming, Wake Island",
355
+ "creator": {
356
+ "email": "usa__en@holiday.calendar.google.com",
357
+ "displayName": "Holidays in United States",
358
+ "self": true
359
+ },
360
+ "organizer": {
361
+ "email": "usa__en@holiday.calendar.google.com",
362
+ "displayName": "Holidays in United States",
363
+ "self": true
364
+ },
365
+ "start": {
366
+ "date": "2014-10-13"
367
+ },
368
+ "end": {
369
+ "date": "2014-10-14"
370
+ },
371
+ "visibility": "public",
372
+ "iCalUID": "20141013_60o30dr5c8o32e1g60o30dr4ck@google.com",
373
+ "sequence": 1
374
+ },
375
+ {
376
+ "kind": "calendar#event",
377
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
378
+ "id": "20141031_60o30dr4cko30c1g60o30dr4ck",
379
+ "status": "confirmed",
380
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDEwMzFfNjBvMzBkcjRja28zMGMxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
381
+ "created": "2014-02-25T20:48:35.000Z",
382
+ "updated": "2014-02-25T20:48:35.000Z",
383
+ "summary": "Halloween",
384
+ "creator": {
385
+ "email": "usa__en@holiday.calendar.google.com",
386
+ "displayName": "Holidays in United States",
387
+ "self": true
388
+ },
389
+ "organizer": {
390
+ "email": "usa__en@holiday.calendar.google.com",
391
+ "displayName": "Holidays in United States",
392
+ "self": true
393
+ },
394
+ "start": {
395
+ "date": "2014-10-31"
396
+ },
397
+ "end": {
398
+ "date": "2014-11-01"
399
+ },
400
+ "visibility": "public",
401
+ "iCalUID": "20141031_60o30dr4cko30c1g60o30dr4ck@google.com",
402
+ "sequence": 1
403
+ },
404
+ {
405
+ "kind": "calendar#event",
406
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
407
+ "id": "20141102_60o30c9o64o30dpj6sqj0dr4ck",
408
+ "status": "confirmed",
409
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDExMDJfNjBvMzBjOW82NG8zMGRwajZzcWowZHI0Y2sgdXNhX19lbkBo",
410
+ "created": "2014-02-25T20:48:35.000Z",
411
+ "updated": "2014-02-25T20:48:35.000Z",
412
+ "summary": "Daylight Saving Time ends",
413
+ "creator": {
414
+ "email": "usa__en@holiday.calendar.google.com",
415
+ "displayName": "Holidays in United States",
416
+ "self": true
417
+ },
418
+ "organizer": {
419
+ "email": "usa__en@holiday.calendar.google.com",
420
+ "displayName": "Holidays in United States",
421
+ "self": true
422
+ },
423
+ "start": {
424
+ "date": "2014-11-02"
425
+ },
426
+ "end": {
427
+ "date": "2014-11-03"
428
+ },
429
+ "visibility": "public",
430
+ "iCalUID": "20141102_60o30c9o64o30dpj6sqj0dr4ck@google.com",
431
+ "sequence": 1
432
+ },
433
+ {
434
+ "kind": "calendar#event",
435
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
436
+ "id": "20141111_60o30dr568o30c1g60o30dr4ck",
437
+ "status": "confirmed",
438
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDExMTFfNjBvMzBkcjU2OG8zMGMxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
439
+ "created": "2014-02-25T20:48:35.000Z",
440
+ "updated": "2014-02-25T20:48:35.000Z",
441
+ "summary": "Veterans Day",
442
+ "creator": {
443
+ "email": "usa__en@holiday.calendar.google.com",
444
+ "displayName": "Holidays in United States",
445
+ "self": true
446
+ },
447
+ "organizer": {
448
+ "email": "usa__en@holiday.calendar.google.com",
449
+ "displayName": "Holidays in United States",
450
+ "self": true
451
+ },
452
+ "start": {
453
+ "date": "2014-11-11"
454
+ },
455
+ "end": {
456
+ "date": "2014-11-12"
457
+ },
458
+ "visibility": "public",
459
+ "iCalUID": "20141111_60o30dr568o30c1g60o30dr4ck@google.com",
460
+ "sequence": 1
461
+ },
462
+ {
463
+ "kind": "calendar#event",
464
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
465
+ "id": "20141127_60o30dr5cco30e1g60o30dr4ck",
466
+ "status": "confirmed",
467
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDExMjdfNjBvMzBkcjVjY28zMGUxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
468
+ "created": "2014-02-25T20:48:35.000Z",
469
+ "updated": "2014-02-25T20:48:35.000Z",
470
+ "summary": "Thanksgiving Day",
471
+ "creator": {
472
+ "email": "usa__en@holiday.calendar.google.com",
473
+ "displayName": "Holidays in United States",
474
+ "self": true
475
+ },
476
+ "organizer": {
477
+ "email": "usa__en@holiday.calendar.google.com",
478
+ "displayName": "Holidays in United States",
479
+ "self": true
480
+ },
481
+ "start": {
482
+ "date": "2014-11-27"
483
+ },
484
+ "end": {
485
+ "date": "2014-11-28"
486
+ },
487
+ "visibility": "public",
488
+ "iCalUID": "20141127_60o30dr5cco30e1g60o30dr4ck@google.com",
489
+ "sequence": 1
490
+ },
491
+ {
492
+ "kind": "calendar#event",
493
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
494
+ "id": "20141224_60o30dr56ko30c1g60o30dr4ck",
495
+ "status": "confirmed",
496
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDEyMjRfNjBvMzBkcjU2a28zMGMxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
497
+ "created": "2014-02-25T20:48:35.000Z",
498
+ "updated": "2014-02-25T20:48:35.000Z",
499
+ "summary": "Christmas Eve",
500
+ "creator": {
501
+ "email": "usa__en@holiday.calendar.google.com",
502
+ "displayName": "Holidays in United States",
503
+ "self": true
504
+ },
505
+ "organizer": {
506
+ "email": "usa__en@holiday.calendar.google.com",
507
+ "displayName": "Holidays in United States",
508
+ "self": true
509
+ },
510
+ "start": {
511
+ "date": "2014-12-24"
512
+ },
513
+ "end": {
514
+ "date": "2014-12-25"
515
+ },
516
+ "visibility": "public",
517
+ "iCalUID": "20141224_60o30dr56ko30c1g60o30dr4ck@google.com",
518
+ "sequence": 1
519
+ },
520
+ {
521
+ "kind": "calendar#event",
522
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
523
+ "id": "20141225_60o30dr56go30c1g60o30dr4ck",
524
+ "status": "confirmed",
525
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDEyMjVfNjBvMzBkcjU2Z28zMGMxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
526
+ "created": "2014-02-25T20:48:35.000Z",
527
+ "updated": "2014-02-25T20:48:35.000Z",
528
+ "summary": "Christmas Day",
529
+ "creator": {
530
+ "email": "usa__en@holiday.calendar.google.com",
531
+ "displayName": "Holidays in United States",
532
+ "self": true
533
+ },
534
+ "organizer": {
535
+ "email": "usa__en@holiday.calendar.google.com",
536
+ "displayName": "Holidays in United States",
537
+ "self": true
538
+ },
539
+ "start": {
540
+ "date": "2014-12-25"
541
+ },
542
+ "end": {
543
+ "date": "2014-12-26"
544
+ },
545
+ "visibility": "public",
546
+ "iCalUID": "20141225_60o30dr56go30c1g60o30dr4ck@google.com",
547
+ "sequence": 1
548
+ },
549
+ {
550
+ "kind": "calendar#event",
551
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
552
+ "id": "20141231_60o30dr4coo30c1g60o30dr4ck",
553
+ "status": "confirmed",
554
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNDEyMzFfNjBvMzBkcjRjb28zMGMxZzYwbzMwZHI0Y2sgdXNhX19lbkBo",
555
+ "created": "2014-02-25T20:48:35.000Z",
556
+ "updated": "2014-02-25T20:48:35.000Z",
557
+ "summary": "New Year's Eve",
558
+ "creator": {
559
+ "email": "usa__en@holiday.calendar.google.com",
560
+ "displayName": "Holidays in United States",
561
+ "self": true
562
+ },
563
+ "organizer": {
564
+ "email": "usa__en@holiday.calendar.google.com",
565
+ "displayName": "Holidays in United States",
566
+ "self": true
567
+ },
568
+ "start": {
569
+ "date": "2014-12-31"
570
+ },
571
+ "end": {
572
+ "date": "2015-01-01"
573
+ },
574
+ "visibility": "public",
575
+ "iCalUID": "20141231_60o30dr4coo30c1g60o30dr4ck@google.com",
576
+ "sequence": 1
577
+ },
578
+ {
579
+ "kind": "calendar#event",
580
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
581
+ "id": "20150101_60o30dr46oo30c1g60o30dr4co",
582
+ "status": "confirmed",
583
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNTAxMDFfNjBvMzBkcjQ2b28zMGMxZzYwbzMwZHI0Y28gdXNhX19lbkBo",
584
+ "created": "2014-02-25T20:48:35.000Z",
585
+ "updated": "2014-02-25T20:48:35.000Z",
586
+ "summary": "New Year's Day",
587
+ "creator": {
588
+ "email": "usa__en@holiday.calendar.google.com",
589
+ "displayName": "Holidays in United States",
590
+ "self": true
591
+ },
592
+ "organizer": {
593
+ "email": "usa__en@holiday.calendar.google.com",
594
+ "displayName": "Holidays in United States",
595
+ "self": true
596
+ },
597
+ "start": {
598
+ "date": "2015-01-01"
599
+ },
600
+ "end": {
601
+ "date": "2015-01-02"
602
+ },
603
+ "visibility": "public",
604
+ "iCalUID": "20150101_60o30dr46oo30c1g60o30dr4co@google.com",
605
+ "sequence": 1
606
+ },
607
+ {
608
+ "kind": "calendar#event",
609
+ "etag": "\"-kteSF26GsdKQ5bfmcd4H3_-u3g/MTM5MzM2MTMxNTAwMDAwMA\"",
610
+ "id": "20150119_60o30dr56oo30e1g60o30dr4co",
611
+ "status": "confirmed",
612
+ "htmlLink": "https://www.google.com/calendar/event?eid=MjAxNTAxMTlfNjBvMzBkcjU2b28zMGUxZzYwbzMwZHI0Y28gdXNhX19lbkBo",
613
+ "created": "2014-02-25T20:48:35.000Z",
614
+ "updated": "2014-02-25T20:48:35.000Z",
615
+ "summary": "Martin Luther King Day",
616
+ "creator": {
617
+ "email": "usa__en@holiday.calendar.google.com",
618
+ "displayName": "Holidays in United States",
619
+ "self": true
620
+ },
621
+ "organizer": {
622
+ "email": "usa__en@holiday.calendar.google.com",
623
+ "displayName": "Holidays in United States",
624
+ "self": true
625
+ },
626
+ "start": {
627
+ "date": "2015-01-19"
628
+ },
629
+ "end": {
630
+ "date": "2015-01-20"
631
+ },
632
+ "visibility": "public",
633
+ "iCalUID": "20150119_60o30dr56oo30e1g60o30dr4co@google.com",
634
+ "sequence": 1
635
+ }
636
+ ]
637
+ }
638
+ http_version:
639
+ recorded_at: Wed, 29 Jan 2014 18:00:00 GMT
640
+ recorded_with: VCR 2.8.0