calendar-assistant 0.6.0 → 0.7.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ffa285171904f085a8a1da0f6aca3655d93b1c069ca2cbe6f1a824f465534d85
4
- data.tar.gz: 7a999ecddc7b16d67744f26df612015b8ead8d76436b123eddf5127441432d90
3
+ metadata.gz: 2e7456770368242baeb04b1645ee98ccf2b4d0c1061df5a2d935903c59c3cbe4
4
+ data.tar.gz: 58c65019e44c91fbe216ff0dd151073cc1113dc73597995553f44f9a5b6bddf6
5
5
  SHA512:
6
- metadata.gz: a13b0ce479a1ad4ccfff06ade3c8d54a028b16c1ea292a1db0fd509d76f566b9632ad0d3d06008d690265a0ee55d78a226cd500708e3ceaef43147bb2013ded0
7
- data.tar.gz: 9e4744b5458ed1cabdbaed5cbc81fd2174954bda3b6b64d0a1b05b0772719442d2e12679606d7612cb5e20d7c9495dc07c0c0392333b0681056ab6222f6730b7
6
+ metadata.gz: 93b5438be7365f06fc0b2cf79258ec491d29dd751d48cbea218a56f505441cf937e1406c7bb8418c6d195ead78ccd0e9453580664a4ebbe4d4a8573ac7bf3bc5
7
+ data.tar.gz: c490f565590ffdebfb3119833bd8b907a8b457644f8c93d2fc9d9902c7869b325c70dbdd8cc9d84deabb459915cb966bd5261c7a9fb674fdfee14b436d124b80
data/README.md CHANGED
@@ -10,6 +10,9 @@ A command-line tool to help you manage your Google Calendar.
10
10
 
11
11
  [![Concourse CI](https://ci.nokogiri.org/api/v1/teams/calendar-assistants/pipelines/calendar-assistant/jobs/rake-spec/badge)](https://ci.nokogiri.org/teams/calendar-assistants/pipelines/calendar-assistant)
12
12
  [![Maintainability](https://api.codeclimate.com/v1/badges/3525792e1feeccfd8875/maintainability)](https://codeclimate.com/github/flavorjones/calendar-assistant/maintainability)
13
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/3525792e1feeccfd8875/test_coverage)](https://codeclimate.com/github/flavorjones/calendar-assistant/test_coverage)
14
+
15
+ ## Contents
13
16
 
14
17
  <!-- toc -->
15
18
 
@@ -28,9 +31,12 @@ A command-line tool to help you manage your Google Calendar.
28
31
  * [`location-set`: Tell people where you are in the world](#location-set-tell-people-where-you-are-in-the-world)
29
32
  * [`location`: View where you're going to be in the world](#location-view-where-youre-going-to-be-in-the-world)
30
33
  * [`show`: View your calendar events](#show-view-your-calendar-events)
34
+ * [`lint`: Calendar events that require action](#lint-calendar-events-that-require-action)
31
35
  * [`config`: View your configuration parameters](#config-view-your-configuration-parameters)
32
36
  - [Development](#development)
33
- * [Tests](#tests)
37
+ * [Running Tests Locally](#running-tests-locally)
38
+ * [Continuous Integration](#continuous-integration)
39
+ * [Code Quality](#code-quality)
34
40
  * [Generate README](#generate-readme)
35
41
  - [References](#references)
36
42
  - [License](#license)
@@ -65,6 +71,11 @@ Some duration-related preferences are interpreted by [ChronicDuration](https://g
65
71
 
66
72
  All tokens and preferences will be stored in `~/.calendar-assistant` which is in TOML format for easy editing.
67
73
 
74
+ The location of `.calendar-assistant` defaults to the user's home directory. This location may be overridden by setting the environment variable `CA_HOME`
75
+
76
+ #### Location Emoji
77
+
78
+ There is a `[settings]` key called `location-icons` that may be set to an array denoting all emoji that indicate a location event. The first icon in the array will be used as the default. The default emoji included are `["🗺 ", "🌎"]` with the map icon first
68
79
 
69
80
  ## Setup
70
81
 
@@ -80,14 +91,16 @@ Usage:
80
91
  calendar-assistant setup
81
92
 
82
93
  Options:
83
- -h, -?, [--help], [--no-help]
84
- [--debug], [--no-debug] # how dare you suggest there are bugs
94
+ -h, -?, [--help], [--no-help]
95
+ [--debug], [--no-debug] # how dare you suggest there are bugs
96
+ [--formatting], [--no-formatting] # Enable Text Formatting
97
+ # Default: true
85
98
 
86
99
  Description:
87
- This command will walk you through setting up a Google Cloud Project, enabling the Google Calendar
100
+ This command will walk you through setting up a Google Cloud Project, enabling the Google Calendar
88
101
  API, and saving the credentials necessary to access the API on behalf of users.
89
102
 
90
- If you already have downloaded client credentials, you don't need to run this command. Instead,
103
+ If you already have downloaded client credentials, you don't need to run this command. Instead,
91
104
  rename the downloaded JSON file to `/home/user/.calendar-assistant.client`
92
105
  </pre>
93
106
 
@@ -99,17 +112,19 @@ Usage:
99
112
  calendar-assistant authorize PROFILE_NAME
100
113
 
101
114
  Options:
102
- -h, -?, [--help], [--no-help]
103
- [--debug], [--no-debug] # how dare you suggest there are bugs
115
+ -h, -?, [--help], [--no-help]
116
+ [--debug], [--no-debug] # how dare you suggest there are bugs
117
+ [--formatting], [--no-formatting] # Enable Text Formatting
118
+ # Default: true
104
119
 
105
120
  Description:
106
- Create and authorize a named profile (e.g., "work", "home", "flastname@company.tld") to access
107
- your calendar.
121
+ Create and authorize a named profile (e.g., "work", "home", "flastname@company.tld") to access your
122
+ calendar.
108
123
 
109
- When setting up a profile, you'll be asked to visit a URL to authenticate, grant authorization,
110
- and generate and persist an access token.
124
+ When setting up a profile, you'll be asked to visit a URL to authenticate, grant authorization, and
125
+ generate and persist an access token.
111
126
 
112
- In order for this to work, you'll need to have set up your API client credentials. Run
127
+ In order for this to work, you'll need to have set up your API client credentials. Run
113
128
  `calendar-assistant help setup` for instructions.
114
129
  </pre>
115
130
 
@@ -123,6 +138,7 @@ Commands:
123
138
  calendar-assistant config # Dump your configuration param...
124
139
  calendar-assistant help [COMMAND] # Describe available commands o...
125
140
  calendar-assistant join [TIME] # Open the URL for a video call...
141
+ calendar-assistant lint [DATE | DATERANGE | TIMERANGE] # Lint your events for a date o...
126
142
  calendar-assistant location [DATE | DATERANGE] # Show your location for a date...
127
143
  calendar-assistant location-set LOCATION [DATE | DATERANGE] # Set your location to LOCATION...
128
144
  calendar-assistant setup # Link your local calendar-assi...
@@ -130,8 +146,10 @@ Commands:
130
146
  calendar-assistant version # Display the version of calend...
131
147
 
132
148
  Options:
133
- -h, -?, [--help], [--no-help]
134
- [--debug], [--no-debug] # how dare you suggest there are bugs
149
+ -h, -?, [--help], [--no-help]
150
+ [--debug], [--no-debug] # how dare you suggest there are bugs
151
+ [--formatting], [--no-formatting] # Enable Text Formatting
152
+ # Default: true
135
153
  </pre>
136
154
 
137
155
 
@@ -142,12 +160,14 @@ Usage:
142
160
  calendar-assistant join [TIME]
143
161
 
144
162
  Options:
145
- [--join], [--no-join] # launch a browser to join the video call URL
146
- # Default: true
147
- -p, [--profile=PROFILE] # the profile you'd like to use (if different from default)
148
- [--local-store=FILENAME] # Load events from a local file instead of Google Calendar
149
- -h, -?, [--help], [--no-help]
150
- [--debug], [--no-debug] # how dare you suggest there are bugs
163
+ [--join], [--no-join] # launch a browser to join the video call URL
164
+ # Default: true
165
+ -p, [--profile=PROFILE] # the profile you'd like to use (if different from default)
166
+ [--local-store=FILENAME] # Load events from a local file instead of Google Calendar
167
+ -h, -?, [--help], [--no-help]
168
+ [--debug], [--no-debug] # how dare you suggest there are bugs
169
+ [--formatting], [--no-formatting] # Enable Text Formatting
170
+ # Default: true
151
171
 
152
172
  Open the URL for a video call attached to your meeting at time TIME (default 'now')
153
173
  </pre>
@@ -189,6 +209,8 @@ Options:
189
209
  [--local-store=FILENAME] # Load events from a local file instead of Google Calendar
190
210
  -h, -?, [--help], [--no-help]
191
211
  [--debug], [--no-debug] # how dare you suggest there are bugs
212
+ [--formatting], [--no-formatting] # Enable Text Formatting
213
+ # Default: true
192
214
 
193
215
  Show your availability for a date or range of dates (default 'today')
194
216
  </pre>
@@ -280,10 +302,12 @@ Usage:
280
302
  calendar-assistant location-set LOCATION [DATE | DATERANGE]
281
303
 
282
304
  Options:
283
- -p, [--profile=PROFILE] # the profile you'd like to use (if different from default)
284
- [--local-store=FILENAME] # Load events from a local file instead of Google Calendar
285
- -h, -?, [--help], [--no-help]
286
- [--debug], [--no-debug] # how dare you suggest there are bugs
305
+ -p, [--profile=PROFILE] # the profile you'd like to use (if different from default)
306
+ [--local-store=FILENAME] # Load events from a local file instead of Google Calendar
307
+ -h, -?, [--help], [--no-help]
308
+ [--debug], [--no-debug] # how dare you suggest there are bugs
309
+ [--formatting], [--no-formatting] # Enable Text Formatting
310
+ # Default: true
287
311
 
288
312
  Set your location to LOCATION for a date or range of dates (default 'today')
289
313
  </pre>
@@ -322,10 +346,12 @@ Usage:
322
346
  calendar-assistant location [DATE | DATERANGE]
323
347
 
324
348
  Options:
325
- -p, [--profile=PROFILE] # the profile you'd like to use (if different from default)
326
- [--local-store=FILENAME] # Load events from a local file instead of Google Calendar
327
- -h, -?, [--help], [--no-help]
328
- [--debug], [--no-debug] # how dare you suggest there are bugs
349
+ -p, [--profile=PROFILE] # the profile you'd like to use (if different from default)
350
+ [--local-store=FILENAME] # Load events from a local file instead of Google Calendar
351
+ -h, -?, [--help], [--no-help]
352
+ [--debug], [--no-debug] # how dare you suggest there are bugs
353
+ [--formatting], [--no-formatting] # Enable Text Formatting
354
+ # Default: true
329
355
 
330
356
  Show your location for a date or range of dates (default 'today')
331
357
  </pre>
@@ -336,8 +362,8 @@ For example:
336
362
  <b>$</b> calendar-assistant location "2018-09-24...2018-09-28"
337
363
  <i>me@example.com (all times in America/New_York)
338
364
  </i>
339
- 2018-09-24 - 2018-09-28 <b> | 🗺 Ravenhill</b><i> (not-busy)</i>
340
- 2018-09-28 <b> | 🗺 Ravenhill</b><i> (not-busy)</i>
365
+ 2018-09-24 - 2018-09-28 <b> | 🗺 Gondolin</b><i> (not-busy)</i>
366
+ 2018-09-28 <b> | 🗺 Rivendell</b><i> (not-busy)</i>
341
367
  </pre>
342
368
 
343
369
 
@@ -354,6 +380,8 @@ Options:
354
380
  -a, [--attendees=ATTENDEE1[,ATTENDEE2[,...]]] # [default 'me'] people (email IDs) to whom this command will be applied
355
381
  -h, -?, [--help], [--no-help]
356
382
  [--debug], [--no-debug] # how dare you suggest there are bugs
383
+ [--formatting], [--no-formatting] # Enable Text Formatting
384
+ # Default: true
357
385
 
358
386
  Show your events for a date or range of dates (default 'today')
359
387
  </pre>
@@ -364,28 +392,28 @@ For example: display all events scheduled for tomorrow:
364
392
  <b>$</b> calendar-assistant show 2018-10-01
365
393
  <i>me@example.com (all times in America/New_York)
366
394
  </i>
367
- <strike>2018-10-01 03:30 - 05:00 | Incubate front-end bandwidth</strike>
368
- <strike>2018-10-01 07:30 - 08:30 | Cultivate dot-com vortals</strike>
369
- <strike>2018-10-01 07:30 - 08:30 | Monetize next-generation eyeballs</strike>
370
- 2018-10-01 10:30 - 10:55<b> | Facilitate out-of-the-box deliverables</b><i> (1:1, recurring)</i>
371
- 2018-10-01 11:00 - 11:30<b> | Syndicate plug-and-play systems</b><i> (recurring)</i>
372
- 2018-10-01 11:30 - 12:00<b> | Facilitate bricks-and-clicks methodologies</b><i> (1:1, recurring)</i>
373
- <strike>2018-10-01 11:50 - 12:00 | Deliver back-end experiences</strike>
374
- 2018-10-01 12:00 - 12:30<b> | Unleash impactful models</b><i> (self)</i>
375
- <strike>2018-10-01 12:15 - 12:30 | Iterate magnetic supply-chains</strike>
376
- <strike>2018-10-01 12:30 - 13:30 | Recontextualize collaborative solutions</strike>
377
- 2018-10-01 12:30 - 13:30<b> | Harness wireless deliverables</b><i> (recurring)</i>
378
- 2018-10-01 13:30 - 14:50<b> | Repurpose virtual channels</b><i> (self)</i>
379
- <strike>2018-10-01 13:30 - 14:30 | Harness front-end infrastructures</strike>
380
- 2018-10-01 15:00 - 15:30<b> | Incentivize best-of-breed e-business</b><i> (1:1)</i>
381
- 2018-10-01 16:00 - 17:00<b> | Expedite cross-media users</b><i> (1:1, recurring)</i>
382
- 2018-10-01 16:45 - 17:00<b> | Leverage proactive channels</b><i> (recurring)</i>
383
- 2018-10-01 17:00 - 17:30<b> | Empower back-end mindshare</b><i> (recurring)</i>
384
- 2018-10-01 17:30 - 17:55<b> | Drive user-centric markets</b><i> (1:1, recurring)</i>
385
- <strike>2018-10-01 18:00 - 20:30 | Generate bleeding-edge supply-chains</strike>
386
- <strike>2018-10-01 18:30 - 19:00 | Redefine bricks-and-clicks e-services</strike>
387
- <strike>2018-10-01 19:00 - 19:30 | Implement enterprise infrastructures</strike>
388
- 2018-10-01 <b> | 🗺 High Pass</b><i> (not-busy)</i>
395
+ <strike>2018-10-01 03:30 - 05:00 | Repurpose end-to-end convergence</strike>
396
+ <strike>2018-10-01 07:30 - 08:30 | Iterate clicks-and-mortar vortals</strike>
397
+ <strike>2018-10-01 07:30 - 08:30 | Grow viral portals</strike>
398
+ 2018-10-01 10:30 - 10:55<b> | Enable rich roi</b><i> (1:1, recurring)</i>
399
+ 2018-10-01 11:00 - 11:30<b> | Leverage rich e-services</b><i> (recurring)</i>
400
+ 2018-10-01 11:30 - 12:00<b> | Grow leading-edge communities</b><i> (1:1, recurring)</i>
401
+ 2018-10-01 11:50 - 12:00<b> | Cultivate revolutionary experiences</b><i> (awaiting)</i>
402
+ 2018-10-01 12:00 - 12:30<b> | Incentivize ubiquitous mindshare</b><i> (self)</i>
403
+ <strike>2018-10-01 12:15 - 12:30 | Disintermediate next-generation niches</strike>
404
+ <strike>2018-10-01 12:30 - 13:30 | Drive viral communities</strike>
405
+ 2018-10-01 12:30 - 13:30<b> | Synergize integrated supply-chains</b><i> (awaiting, recurring)</i>
406
+ 2018-10-01 13:30 - 14:50<b> | Transform revolutionary users</b><i> (self)</i>
407
+ <strike>2018-10-01 13:30 - 14:30 | Enable interactive networks</strike>
408
+ 2018-10-01 15:00 - 15:30<b> | Evolve global applications</b><i> (1:1)</i>
409
+ 2018-10-01 16:00 - 17:00<b> | Implement b2c architectures</b><i> (1:1, recurring)</i>
410
+ 2018-10-01 16:45 - 17:00<b> | Enable rich niches</b><i> (recurring)</i>
411
+ 2018-10-01 17:00 - 17:30<b> | Implement frictionless e-markets</b><i> (recurring)</i>
412
+ 2018-10-01 17:30 - 17:55<b> | Streamline world-class portals</b><i> (1:1, recurring)</i>
413
+ <strike>2018-10-01 18:00 - 20:30 | Recontextualize rich paradigms</strike>
414
+ <strike>2018-10-01 18:30 - 19:00 | Synergize dot-com functionalities</strike>
415
+ 2018-10-01 19:00 - 19:30<b> | Revolutionize transparent e-markets</b><i> (awaiting)</i>
416
+ 2018-10-01 <b> | 🗺 Country Round</b><i> (not-busy)</i>
389
417
  </pre>
390
418
 
391
419
  Display _only_ the commitments I have to other people using the `-c` option:
@@ -394,15 +422,52 @@ Display _only_ the commitments I have to other people using the `-c` option:
394
422
  <b>$</b> calendar-assistant show -c 2018-10-01
395
423
  <i>me@example.com (all times in America/New_York)
396
424
  </i>
397
- 2018-10-01 10:30 - 10:55<b> | Facilitate out-of-the-box deliverables</b><i> (1:1, recurring)</i>
398
- 2018-10-01 11:00 - 11:30<b> | Syndicate plug-and-play systems</b><i> (recurring)</i>
399
- 2018-10-01 11:30 - 12:00<b> | Facilitate bricks-and-clicks methodologies</b><i> (1:1, recurring)</i>
400
- 2018-10-01 12:30 - 13:30<b> | Harness wireless deliverables</b><i> (recurring)</i>
401
- 2018-10-01 15:00 - 15:30<b> | Incentivize best-of-breed e-business</b><i> (1:1)</i>
402
- 2018-10-01 16:00 - 17:00<b> | Expedite cross-media users</b><i> (1:1, recurring)</i>
403
- 2018-10-01 16:45 - 17:00<b> | Leverage proactive channels</b><i> (recurring)</i>
404
- 2018-10-01 17:00 - 17:30<b> | Empower back-end mindshare</b><i> (recurring)</i>
405
- 2018-10-01 17:30 - 17:55<b> | Drive user-centric markets</b><i> (1:1, recurring)</i>
425
+ 2018-10-01 10:30 - 10:55<b> | Enable rich roi</b><i> (1:1, recurring)</i>
426
+ 2018-10-01 11:00 - 11:30<b> | Leverage rich e-services</b><i> (recurring)</i>
427
+ 2018-10-01 11:30 - 12:00<b> | Grow leading-edge communities</b><i> (1:1, recurring)</i>
428
+ 2018-10-01 11:50 - 12:00<b> | Cultivate revolutionary experiences</b><i> (awaiting)</i>
429
+ 2018-10-01 12:30 - 13:30<b> | Synergize integrated supply-chains</b><i> (awaiting, recurring)</i>
430
+ 2018-10-01 15:00 - 15:30<b> | Evolve global applications</b><i> (1:1)</i>
431
+ 2018-10-01 16:00 - 17:00<b> | Implement b2c architectures</b><i> (1:1, recurring)</i>
432
+ 2018-10-01 16:45 - 17:00<b> | Enable rich niches</b><i> (recurring)</i>
433
+ 2018-10-01 17:00 - 17:30<b> | Implement frictionless e-markets</b><i> (recurring)</i>
434
+ 2018-10-01 17:30 - 17:55<b> | Streamline world-class portals</b><i> (1:1, recurring)</i>
435
+ 2018-10-01 19:00 - 19:30<b> | Revolutionize transparent e-markets</b><i> (awaiting)</i>
436
+ </pre>
437
+
438
+
439
+ ### `lint`: Calendar events that require action
440
+
441
+ <pre>
442
+ Usage:
443
+ calendar-assistant lint [DATE | DATERANGE | TIMERANGE]
444
+
445
+ Options:
446
+ -p, [--profile=PROFILE] # the profile you'd like to use (if different from default)
447
+ [--local-store=FILENAME] # Load events from a local file instead of Google Calendar
448
+ -a, [--attendees=ATTENDEE1[,ATTENDEE2[,...]]] # [default 'me'] people (email IDs) to whom this command will be applied
449
+ -h, -?, [--help], [--no-help]
450
+ [--debug], [--no-debug] # how dare you suggest there are bugs
451
+ [--formatting], [--no-formatting] # Enable Text Formatting
452
+ # Default: true
453
+
454
+ Lint your events for a date or range of dates (default 'today')
455
+ </pre>
456
+
457
+ For example: display all events that require action scheduled for tomorrow:
458
+
459
+ <pre>
460
+ <b>$</b> calendar-assistant lint 2018-10-01
461
+ me@example.com
462
+ - looking for events that need attention
463
+ - all times in America/New_York
464
+
465
+ 2018-10-01 11:50 - 12:00<b> | Cultivate revolutionary experiences</b><i> (awaiting)</i>
466
+ attendees: 👍 three@example.com, 🤷 four@example.com
467
+ 2018-10-01 12:30 - 13:30<b> | Synergize integrated supply-chains</b><i> (awaiting, recurring)</i>
468
+ attendees: 👍 three@example.com, 🤷 four@example.com
469
+ 2018-10-01 19:00 - 19:30<b> | Revolutionize transparent e-markets</b><i> (awaiting)</i>
470
+ attendees: 👍 three@example.com, 🤷 four@example.com
406
471
  </pre>
407
472
 
408
473
 
@@ -415,8 +480,10 @@ Usage:
415
480
  calendar-assistant config
416
481
 
417
482
  Options:
418
- -h, -?, [--help], [--no-help]
419
- [--debug], [--no-debug] # how dare you suggest there are bugs
483
+ -h, -?, [--help], [--no-help]
484
+ [--debug], [--no-debug] # how dare you suggest there are bugs
485
+ [--formatting], [--no-formatting] # Enable Text Formatting
486
+ # Default: true
420
487
 
421
488
  Dump your configuration parameters (merge of defaults and overrides from /home/user/.calendar-assistant)
422
489
  </pre>
@@ -428,31 +495,49 @@ The output is TOML, which is suitable for dumping into `~/.calendar-assistant` a
428
495
 
429
496
  [settings]
430
497
  end-of-day = "6pm"
498
+ location-icons = ["🌎","🗺 "]
431
499
  meeting-length = "30m"
432
500
  profile = "work"
433
501
  start-of-day = "9am"
434
502
  </pre>
435
503
 
504
+
436
505
  ## Development
437
506
 
438
- ### Tests
507
+ ### Running Tests Locally
439
508
 
440
509
  ```bash
441
510
  gem install bundler
442
511
  bundle install
443
512
 
444
- rake spec
513
+ bundle exec rake spec # Run all tests except feature tests
514
+ bundle exec rake features # Run only feature tests
515
+ bundle exec rake # Default task runs both feature and non feature tests
445
516
  ```
446
517
 
518
+ **Note:** Feature tests are excluded by default in [.rspec](.rspec)
519
+
520
+
521
+ ### Continuous Integration
522
+
523
+ CI is running in a [Concourse](https://concourse-ci.org) pipeline at [https://ci.nokogiri.org](https://ci.nokogiri.org/teams/calendar-assistants/pipelines/calendar-assistant).
524
+
525
+
526
+ ### Code Quality
527
+
528
+ We're running [Code Climate](https://codeclimate.com/github/flavorjones/calendar-assistant) to monitor code quality and test coverage.
529
+
530
+
447
531
  ### Generate README
448
532
 
449
- * Requires npm to be installed
450
- * Will use a fixture file rather than connecting to a remote calendar. Fixtures can be updated/regenerated in [generate-fixtures](generate-fixtures) script
533
+ * Note that doing this requires npm to be installed
534
+ * Generation will use a fixture file rather than connecting to a remote calendar. Fixtures can be updated/regenerated in [generate-fixtures](generate-fixtures) script
451
535
 
452
536
  ```bash
453
537
  ./generate-readme
454
538
  ```
455
539
 
540
+
456
541
  ## References
457
542
 
458
543
  Google Calendar Concepts: https://developers.google.com/calendar/concepts/
data/Rakefile CHANGED
@@ -5,7 +5,17 @@ require "license_finder"
5
5
 
6
6
  Concourse.new("calendar-assistant").create_tasks!
7
7
 
8
- RSpec::Core::RakeTask.new(:spec)
8
+ RSpec::Core::RakeTask.new(:test)
9
+
10
+ RSpec::Core::RakeTask.new(:spec) do |t|
11
+ t.rspec_opts ||= []
12
+ t.rspec_opts << " --tag=~type:aruba"
13
+ end
14
+
15
+ RSpec::Core::RakeTask.new(:features) do |t|
16
+ t.rspec_opts ||= []
17
+ t.rspec_opts << " --tag=type:aruba"
18
+ end
9
19
 
10
20
  desc "Ensure all dependencies meet license requirements."
11
21
  task :license_finder do
@@ -13,5 +23,5 @@ task :license_finder do
13
23
  LicenseFinder::CLI::Main.start([])
14
24
  end
15
25
 
16
- desc "Run specs and license finder"
17
- task :default => [:spec, :license_finder]
26
+ desc "Run specs, features and license finder"
27
+ task :default => [:test, :license_finder]
@@ -1,11 +1,13 @@
1
1
  #! /usr/bin/env ruby
2
+ libdir = File.join( File.dirname(__FILE__), "..", "lib")
3
+ $LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
2
4
 
3
5
  require "calendar_assistant"
4
6
 
5
7
  Rainbow.enabled = true
6
8
 
7
9
  begin
8
- CalendarAssistant::CLI.start ARGV
10
+ CalendarAssistant::CLI::Commands.start ARGV
9
11
  rescue Google::Apis::AuthorizationError, CalendarAssistant::BaseException => e
10
12
  printf "ERROR: %s\n", e
11
13
  exit 1
@@ -27,7 +27,6 @@ require "calendar_assistant/calendar_assistant"
27
27
  class CalendarAssistant
28
28
  autoload :VERSION, "calendar_assistant/version"
29
29
  autoload :Config, "calendar_assistant/config"
30
- autoload :Authorizer, "calendar_assistant/authorizer"
31
30
  autoload :StringHelpers, "calendar_assistant/string_helpers"
32
31
  autoload :DateHelpers, "calendar_assistant/date_helpers"
33
32
  autoload :Event, "calendar_assistant/event"
@@ -2,17 +2,11 @@
2
2
  class CalendarAssistant
3
3
  class BaseException < RuntimeError ; end
4
4
 
5
- EMOJI_WORLDMAP = "🗺" # U+1F5FA WORLD MAP
6
5
  EMOJI_PLANE = "🛪" # U+1F6EA NORTHEAST-POINTING AIRPLANE
7
6
  EMOJI_1_1 = "👫" # MAN AND WOMAN HOLDING HANDS
8
7
 
9
8
  attr_reader :service, :calendar, :config
10
9
 
11
- def self.authorize profile_name
12
- config = CalendarAssistant::Config.new
13
- Authorizer.new(profile_name, config.token_store).authorize
14
- end
15
-
16
10
  def self.date_range_cast time_range
17
11
  time_range.first.to_date..(time_range.last + 1.day).to_date
18
12
  end
@@ -35,17 +29,16 @@ class CalendarAssistant
35
29
 
36
30
 
37
31
  def initialize config=Config.new,
38
- event_repository_factory: EventRepositoryFactory
32
+ event_repository_factory: EventRepositoryFactory,
33
+ service:
39
34
  @config = config
35
+ @service = service
40
36
 
41
- if filename = config.setting(Config::Keys::Options::LOCAL_STORE)
42
- @service = CalendarAssistant::LocalService.new(file: filename)
43
- else
44
- @service = Authorizer.new(config.profile_name, config.token_store).service
45
- end
46
37
  @calendar = service.get_calendar Config::DEFAULT_CALENDAR_ID
47
38
  @event_repository_factory = event_repository_factory
48
39
  @event_repositories = {} # calendar_id → event_repository
40
+
41
+ @emoji_worldmap = Array(@config.setting(CalendarAssistant::Config::Keys::Settings::LOCATION_ICONS)).first
49
42
  end
50
43
 
51
44
  def in_env &block
@@ -63,6 +56,15 @@ class CalendarAssistant
63
56
  end
64
57
  end
65
58
 
59
+ def lint_events time_range
60
+ calendar_ids = config.attendees
61
+ if calendar_ids.length > 1
62
+ raise BaseException, "CalendarAssistant#lint_events only supports one person (for now)"
63
+ end
64
+
65
+ event_repository(calendar_ids.first).find(time_range, predicates: { needs_action?: true })
66
+ end
67
+
66
68
  def find_events time_range
67
69
  calendar_ids = config.attendees
68
70
  if calendar_ids.length > 1
@@ -94,7 +96,7 @@ class CalendarAssistant
94
96
  deleted_events = []
95
97
  modified_events = []
96
98
 
97
- event = event_repository.create(transparency: CalendarAssistant::Event::Transparency::TRANSPARENT, start: range.first, end: range.last , summary: "#{EMOJI_WORLDMAP} #{location}")
99
+ event = event_repository.create(transparency: CalendarAssistant::Event::Transparency::TRANSPARENT, start: range.first, end: range.last , summary: "#{@emoji_worldmap} #{location}")
98
100
 
99
101
  existing_event_set.events.each do |existing_event|
100
102
  if existing_event.start_date >= event.start_date && existing_event.end_date <= event.end_date
@@ -117,6 +119,6 @@ class CalendarAssistant
117
119
  end
118
120
 
119
121
  def event_repository calendar_id=Config::DEFAULT_CALENDAR_ID
120
- @event_repositories[calendar_id] ||= @event_repository_factory.new_event_repository(@service, calendar_id)
122
+ @event_repositories[calendar_id] ||= @event_repository_factory.new_event_repository(@service, calendar_id, config: config)
121
123
  end
122
124
  end