calendar-assistant 0.2.1 → 0.3.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 +4 -4
- data/Gemfile +1 -0
- data/README.md +280 -202
- data/Rakefile +9 -1
- data/lib/calendar_assistant.rb +35 -187
- data/lib/calendar_assistant/authorizer.rb +0 -3
- data/lib/calendar_assistant/calendar_assistant.rb +122 -0
- data/lib/calendar_assistant/cli.rb +84 -54
- data/lib/calendar_assistant/cli_helpers.rb +101 -38
- data/lib/calendar_assistant/config.rb +71 -12
- data/lib/calendar_assistant/date_helpers.rb +16 -0
- data/lib/calendar_assistant/event.rb +124 -14
- data/lib/calendar_assistant/event_repository.rb +30 -19
- data/lib/calendar_assistant/event_repository_factory.rb +7 -0
- data/lib/calendar_assistant/event_set.rb +124 -0
- data/lib/calendar_assistant/extensions/{event_date_time_extensions.rb → google_apis_extensions.rb} +5 -6
- data/lib/calendar_assistant/local_service.rb +82 -0
- data/lib/calendar_assistant/scheduler.rb +45 -0
- data/lib/calendar_assistant/string_helpers.rb +0 -2
- data/lib/calendar_assistant/version.rb +1 -1
- metadata +9 -4
- data/lib/calendar_assistant/extensions/event_extensions.rb +0 -71
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98a2b95396339756f78030efdc8bab6106b47f9c09f5363d9a7097736fa2e10a
|
4
|
+
data.tar.gz: b2ce18e6aceeae81a41975bd9126901aede98b272023d625ef1fe63b59c27264
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07b2596d086f9d0a7e87545e22ed287488c53935de4cc5e56b6e3578bd7265b1f2bdd14f974f717b0809e404c86fc95100c106664240aac86e812dfd4845cab7
|
7
|
+
data.tar.gz: e7bb29fb7dfe084cd30ddb5b339722e6204fa460c895c3c4e67f289cc78e69e321e80c645aa415ce96e90313e7f87cc90cd9a32f39093bc06cfe56c13c330ec4
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,32 +1,50 @@
|
|
1
|
-
|
2
1
|
# calendar assistant
|
3
2
|
|
4
|
-
A command-line tool to help
|
3
|
+
A command-line tool to help you manage your Google Calendar.
|
5
4
|
|
6
|
-
- book (and re-book) one-on-ones and other meetings automatically
|
7
|
-
- set up all-day events to let people know your location in the world
|
8
5
|
- easily join the videoconference for your current meeting
|
6
|
+
- see yours and others' "availability" suitable for an email response
|
7
|
+
- set up all-day events to let people know where you are (for frequent travelers)
|
8
|
+
- see views on your calendar events for a date or time range
|
9
|
+
- book (and re-book) one-on-ones and other meetings automatically
|
9
10
|
|
10
11
|
[](https://ci.nokogiri.org/teams/calendar-assistants/pipelines/calendar-assistant)
|
11
12
|
[](https://codeclimate.com/github/flavorjones/calendar-assistant/maintainability)
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
14
|
+
<!-- toc -->
|
15
|
+
|
16
|
+
- [Features](#features)
|
17
|
+
* [Pretty Display in Your Terminal](#pretty-display-in-your-terminal)
|
18
|
+
* [Human-Friendly Date and Time Specification](#human-friendly-date-and-time-specification)
|
19
|
+
* [Human-Friendly Duration Specification](#human-friendly-duration-specification)
|
20
|
+
* [Preferences](#preferences)
|
21
|
+
- [Setup](#setup)
|
22
|
+
* [Installation](#installation)
|
23
|
+
* [Set up a Google Cloud Project with API access](#set-up-a-google-cloud-project-with-api-access)
|
24
|
+
* [Authorize access to your Google Calendar](#authorize-access-to-your-google-calendar)
|
25
|
+
- [Commands](#commands)
|
26
|
+
* [`join`: Join a video call attached to a meeting](#join-join-a-video-call-attached-to-a-meeting)
|
27
|
+
* [`availability`: Find people's availability for meetings](#availability-find-peoples-availability-for-meetings)
|
28
|
+
* [`location-set`: Tell people where you are in the world](#location-set-tell-people-where-you-are-in-the-world)
|
29
|
+
* [`location`: View where you're going to be in the world](#location-view-where-youre-going-to-be-in-the-world)
|
30
|
+
* [`show`: View your calendar events](#show-view-your-calendar-events)
|
31
|
+
* [`config`: View your configuration parameters](#config-view-your-configuration-parameters)
|
32
|
+
- [Development](#development)
|
33
|
+
* [Tests](#tests)
|
34
|
+
* [Generate README](#generate-readme)
|
35
|
+
- [References](#references)
|
36
|
+
- [License](#license)
|
37
|
+
|
38
|
+
<!-- tocstop -->
|
21
39
|
|
22
40
|
## Features
|
23
41
|
|
24
|
-
### Pretty Display
|
42
|
+
### Pretty Display in Your Terminal
|
25
43
|
|
26
|
-
Events are nicely formatted, with faint strikeouts for events you've declined, and some additional attributes listed when present (e.g., "
|
44
|
+
Events are nicely formatted, with faint strikeouts for events you've declined, and some additional attributes listed when present (e.g., "awaiting", "self", "not-busy", "1:1" ...)
|
27
45
|
|
28
46
|
|
29
|
-
### Date and Time Specification
|
47
|
+
### Human-Friendly Date and Time Specification
|
30
48
|
|
31
49
|
All dates and times are interpreted by [Chronic](https://github.com/mojombo/chronic) and so can be fuzzy terms like "tomorrow", "tuesday", "next thursday", and "two days from now" as well as specific dates and times.
|
32
50
|
|
@@ -38,178 +56,98 @@ For a date range or a datetime range, split the start and end with `..` or `...`
|
|
38
56
|
Also note that every command will adopt an intelligent default, which is generally "today" or "now".
|
39
57
|
|
40
58
|
|
41
|
-
### Duration Specification
|
59
|
+
### Human-Friendly Duration Specification
|
42
60
|
|
43
61
|
Some duration-related preferences are interpreted by [ChronicDuration](https://github.com/henrypoydar/chronic_duration) and so can be terms like "10m", "30 minutes", "four hours", etc.
|
44
62
|
|
45
63
|
|
46
64
|
### Preferences
|
47
65
|
|
48
|
-
All tokens and preferences will be stored in `~/.calendar-assistant` which is in TOML format.
|
66
|
+
All tokens and preferences will be stored in `~/.calendar-assistant` which is in TOML format for easy editing.
|
49
67
|
|
50
68
|
|
51
|
-
##
|
52
|
-
|
53
|
-
<pre>
|
54
|
-
<b>$</b> calendar-assistant help
|
55
|
-
Commands:
|
56
|
-
calendar-assistant authorize PROFILE_NAME # create (or validate) a profile named NAME with calendar access
|
57
|
-
calendar-assistant availability [DATE | DATERANGE | TIMERANGE] # Show your availability for a date or range of dates (default 'today')
|
58
|
-
calendar-assistant config # Dump your configuration parameters (merge of defaults and overrides from /home/flavorjones/.calendar-assistant)
|
59
|
-
calendar-assistant help [COMMAND] # Describe available commands or one specific command
|
60
|
-
calendar-assistant join [TIME] # Open the URL for a video call attached to your meeting at time TIME (default 'now')
|
61
|
-
calendar-assistant location [DATE | DATERANGE] # Show your location for a date or range of dates (default 'today')
|
62
|
-
calendar-assistant location-set LOCATION [DATE | DATERANGE] # Set your location to LOCATION for a date or range of dates (default 'today')
|
63
|
-
calendar-assistant show [DATE | DATERANGE | TIMERANGE] # Show your events for a date or range of dates (default 'today')
|
69
|
+
## Setup
|
64
70
|
|
65
|
-
|
66
|
-
-h, -?, [--help], [--no-help]
|
67
|
-
-p, [--profile=PROFILE] # the profile you'd like to use (if different from default)
|
68
|
-
[--debug], [--no-debug] # how dare you suggest there are bugs
|
69
|
-
</pre>
|
71
|
+
### Installation
|
70
72
|
|
73
|
+
Install the gem: `gem install calendar-assistant`.
|
71
74
|
|
72
|
-
### View your configuration parameters
|
73
75
|
|
74
|
-
|
76
|
+
### Set up a Google Cloud Project with API access
|
75
77
|
|
76
78
|
<pre>
|
77
|
-
<b>$</b> calendar-assistant help config
|
78
79
|
Usage:
|
79
|
-
calendar-assistant
|
80
|
+
calendar-assistant setup
|
80
81
|
|
81
82
|
Options:
|
82
83
|
-h, -?, [--help], [--no-help]
|
83
|
-
-p, [--profile=PROFILE] # the profile you'd like to use (if different from default)
|
84
84
|
[--debug], [--no-debug] # how dare you suggest there are bugs
|
85
85
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
The output is TOML, which is suitable for dumping into `~/.calendar-assistant` and editing.
|
90
|
-
|
91
|
-
<pre>
|
92
|
-
<b>$</b> calendar-assistant config
|
86
|
+
Description:
|
87
|
+
This command will walk you through setting up a Google Cloud Project, enabling the Google Calendar
|
88
|
+
API, and saving the credentials necessary to access the API on behalf of users.
|
93
89
|
|
94
|
-
|
95
|
-
|
96
|
-
meeting-length = "30m"
|
97
|
-
profile = "work"
|
98
|
-
start-of-day = "9am"
|
90
|
+
If you already have downloaded client credentials, you don't need to run this command. Instead,
|
91
|
+
rename the downloaded JSON file to `/home/user/.calendar-assistant.client`
|
99
92
|
</pre>
|
100
93
|
|
101
94
|
|
102
95
|
### Authorize access to your Google Calendar
|
103
96
|
|
104
97
|
<pre>
|
105
|
-
<b>$</b> calendar-assistant help authorize
|
106
98
|
Usage:
|
107
99
|
calendar-assistant authorize PROFILE_NAME
|
108
100
|
|
109
101
|
Options:
|
110
102
|
-h, -?, [--help], [--no-help]
|
111
|
-
-p, [--profile=PROFILE] # the profile you'd like to use (if different from default)
|
112
103
|
[--debug], [--no-debug] # how dare you suggest there are bugs
|
113
104
|
|
114
105
|
Description:
|
115
|
-
Create and authorize a named profile (e.g., "work", "home", "
|
116
|
-
|
117
|
-
When setting up a profile, you'll be asked to visit a URL to authenticate, grant authorization, and generate and persist an access token.
|
106
|
+
Create and authorize a named profile (e.g., "work", "home", "flastname@company.tld") to access your
|
107
|
+
calendar.
|
118
108
|
|
119
|
-
|
109
|
+
When setting up a profile, you'll be asked to visit a URL to authenticate, grant authorization, and
|
110
|
+
generate and persist an access token.
|
120
111
|
|
121
|
-
|
122
|
-
|
123
|
-
Namely, the prerequisites are:
|
124
|
-
1. Turn on the Google API for your account
|
125
|
-
2. Create a new Google API Project
|
126
|
-
3. Download the configuration file for the Project, and name it as `credentials.json`
|
112
|
+
In order for this to work, you'll need to have set up your API client credentials. Run
|
113
|
+
`calendar-assistant help setup` for instructions.
|
127
114
|
</pre>
|
128
115
|
|
129
|
-
This command will generate a URL which you should load in your browser while logged in as the Google account you wish to authorize. Generate a token, and paste the token back into `calendar-assistant`.
|
130
|
-
|
131
|
-
Your access token will be stored in `~/.calendar-assistant` in the `[tokens]` section.
|
132
116
|
|
133
|
-
|
134
|
-
### Display your calendar events
|
117
|
+
## Commands
|
135
118
|
|
136
119
|
<pre>
|
137
|
-
|
138
|
-
|
139
|
-
calendar-assistant
|
120
|
+
Commands:
|
121
|
+
calendar-assistant authorize PROFILE_NAME # create (or validate) a profil...
|
122
|
+
calendar-assistant availability [DATE | DATERANGE | TIMERANGE] # Show your availability for a ...
|
123
|
+
calendar-assistant config # Dump your configuration param...
|
124
|
+
calendar-assistant help [COMMAND] # Describe available commands o...
|
125
|
+
calendar-assistant join [TIME] # Open the URL for a video call...
|
126
|
+
calendar-assistant location [DATE | DATERANGE] # Show your location for a date...
|
127
|
+
calendar-assistant location-set LOCATION [DATE | DATERANGE] # Set your location to LOCATION...
|
128
|
+
calendar-assistant setup # Link your local calendar-assi...
|
129
|
+
calendar-assistant show [DATE | DATERANGE | TIMERANGE] # Show your events for a date o...
|
130
|
+
calendar-assistant version # Display the version of calend...
|
140
131
|
|
141
132
|
Options:
|
142
|
-
-
|
143
|
-
|
144
|
-
-p, [--profile=PROFILE] # the profile you'd like to use (if different from default)
|
145
|
-
[--debug], [--no-debug] # how dare you suggest there are bugs
|
146
|
-
|
147
|
-
Show your events for a date or range of dates (default 'today')
|
148
|
-
</pre>
|
149
|
-
|
150
|
-
For example: display all events scheduled for tomorrow:
|
151
|
-
|
152
|
-
<pre>
|
153
|
-
<b>$</b> calendar-assistant show --profile=work 2018-10-01
|
154
|
-
<i>me@example.com (all times in America/New_York)
|
155
|
-
</i>
|
156
|
-
2018-10-01 <b> | 🗺 Mines of Moria </b><i> (not-busy, self)</i>
|
157
|
-
<strike>2018-10-01 03:30 - 05:00 | Generate enterprise portals </strike>
|
158
|
-
<strike>2018-10-01 07:30 - 08:30 | Incentivize wireless functionalities </strike>
|
159
|
-
<strike>2018-10-01 07:30 - 08:30 | Brand end-to-end action-items </strike>
|
160
|
-
2018-10-01 08:00 - 09:00<b> | Grow web-enabled synergies </b><i> (recurring, self)</i>
|
161
|
-
2018-10-01 09:00 - 10:30<b> | Disintermediate integrated web services </b><i> (self)</i>
|
162
|
-
2018-10-01 10:30 - 10:55<b> | Architect sticky synergies </b><i> (1:1, recurring)</i>
|
163
|
-
2018-10-01 11:00 - 11:30<b> | Leverage out-of-the-box supply-chains </b><i> (recurring)</i>
|
164
|
-
2018-10-01 11:30 - 12:00<b> | Architect dot-com portals </b><i> (1:1, recurring)</i>
|
165
|
-
<strike>2018-10-01 11:50 - 12:00 | Grow out-of-the-box convergence </strike>
|
166
|
-
2018-10-01 12:00 - 12:30<b> | Morph leading-edge experiences </b><i> (self)</i>
|
167
|
-
<strike>2018-10-01 12:15 - 12:30 | Revolutionize innovative communities </strike>
|
168
|
-
<strike>2018-10-01 12:30 - 13:30 | Evolve mission-critical e-services </strike>
|
169
|
-
2018-10-01 12:30 - 13:30<b> | Embrace world-class e-tailers </b><i> (recurring)</i>
|
170
|
-
2018-10-01 13:30 - 14:50<b> | Deliver out-of-the-box infomediaries </b><i> (self)</i>
|
171
|
-
<strike>2018-10-01 13:30 - 14:30 | Transform user-centric e-tailers </strike>
|
172
|
-
2018-10-01 15:00 - 15:30<b> | Aggregate magnetic e-business </b><i> (1:1)</i>
|
173
|
-
2018-10-01 16:00 - 17:00<b> | Leverage turn-key e-tailers </b><i> (1:1, recurring)</i>
|
174
|
-
2018-10-01 16:45 - 17:00<b> | Monetize real-time interfaces </b><i> (recurring)</i>
|
175
|
-
2018-10-01 17:00 - 17:30<b> | Generate out-of-the-box technologies </b><i> (recurring)</i>
|
176
|
-
2018-10-01 17:30 - 17:55<b> | Strategize enterprise communities </b><i> (1:1, recurring)</i>
|
177
|
-
<strike>2018-10-01 18:00 - 20:30 | Redefine 24/365 infrastructures </strike>
|
178
|
-
<strike>2018-10-01 18:30 - 19:00 | Innovate vertical e-business </strike>
|
179
|
-
<strike>2018-10-01 19:00 - 19:30 | Repurpose seamless deliverables </strike>
|
180
|
-
</pre>
|
181
|
-
|
182
|
-
Display _only_ the commitments I have to other people using the `-c` option:
|
183
|
-
|
184
|
-
<pre>
|
185
|
-
<b>$</b> calendar-assistant show -c 2018-10-01
|
186
|
-
<i>me@example.com (all times in America/New_York)
|
187
|
-
</i>
|
188
|
-
2018-10-01 10:30 - 10:55<b> | Exploit b2b synergies </b><i> (1:1, recurring)</i>
|
189
|
-
2018-10-01 11:00 - 11:30<b> | Reinvent customized systems </b><i> (recurring)</i>
|
190
|
-
2018-10-01 11:30 - 12:00<b> | Incentivize visionary users </b><i> (1:1, recurring)</i>
|
191
|
-
2018-10-01 12:30 - 13:30<b> | Engineer robust roi </b><i> (recurring)</i>
|
192
|
-
2018-10-01 15:00 - 15:30<b> | Exploit next-generation content </b><i> (1:1)</i>
|
193
|
-
2018-10-01 16:00 - 17:00<b> | Integrate sticky platforms </b><i> (1:1, recurring)</i>
|
194
|
-
2018-10-01 16:45 - 17:00<b> | Enhance intuitive portals </b><i> (recurring)</i>
|
195
|
-
2018-10-01 17:00 - 17:30<b> | Reinvent viral platforms </b><i> (recurring)</i>
|
196
|
-
2018-10-01 17:30 - 17:55<b> | Incubate magnetic interfaces </b><i> (1:1, recurring)</i>
|
133
|
+
-h, -?, [--help], [--no-help]
|
134
|
+
[--debug], [--no-debug] # how dare you suggest there are bugs
|
197
135
|
</pre>
|
198
136
|
|
199
137
|
|
200
|
-
### Join a video call attached to a meeting
|
138
|
+
### `join`: Join a video call attached to a meeting
|
201
139
|
|
202
140
|
<pre>
|
203
|
-
<b>$</b> calendar-assistant help join
|
204
141
|
Usage:
|
205
142
|
calendar-assistant join [TIME]
|
206
143
|
|
207
144
|
Options:
|
208
|
-
[--join], [--no-join]
|
209
|
-
|
210
|
-
-
|
211
|
-
|
212
|
-
|
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
|
213
151
|
|
214
152
|
Open the URL for a video call attached to your meeting at time TIME (default 'now')
|
215
153
|
</pre>
|
@@ -218,33 +156,39 @@ Some examples:
|
|
218
156
|
|
219
157
|
<pre>
|
220
158
|
<b>$</b> calendar-assistant join
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
<
|
226
|
-
|
227
|
-
|
228
|
-
|
159
|
+
<i>me@example.com</i>
|
160
|
+
|
161
|
+
2018-10-01 11:30 - 12:00<b> | Facilitate customized web-readiness </b><i> (1:1, recurring)</i>
|
162
|
+
|
163
|
+
https://pivotal.zoom.us/j/ABC90210 <i># ... and opens the videoconference URL</i>
|
164
|
+
|
165
|
+
|
166
|
+
<b>$</b> calendar-assistant join work 11:30 --no-join
|
167
|
+
<i>me@example.com</i>
|
168
|
+
|
169
|
+
2018-10-01 11:30 - 12:00<b> | Facilitate customized web-readiness </b><i> (1:1, recurring)</i>
|
170
|
+
|
171
|
+
https://pivotal.zoom.us/j/ABC90210 <i># ... and does not open the URL</i>
|
229
172
|
</pre>
|
230
173
|
|
231
174
|
|
232
|
-
### Find
|
175
|
+
### `availability`: Find people's availability for meetings
|
233
176
|
|
234
177
|
This is useful for emailing people your availability. It only considers `accepted` meetings when determining busy/free.
|
235
178
|
|
236
179
|
<pre>
|
237
|
-
<b>$</b> calendar-assistant help availability
|
238
180
|
Usage:
|
239
181
|
calendar-assistant availability [DATE | DATERANGE | TIMERANGE]
|
240
182
|
|
241
183
|
Options:
|
242
|
-
-l, [--meeting-length=LENGTH]
|
243
|
-
-s, [--start-of-day=TIME]
|
244
|
-
-e, [--end-of-day=TIME]
|
245
|
-
-
|
246
|
-
-p, [--profile=PROFILE]
|
247
|
-
[--
|
184
|
+
-l, [--meeting-length=LENGTH] # [default 30m] find chunks of available time at least as long as LENGTH (which is a ChronicDuration string like '30m' or '2h')
|
185
|
+
-s, [--start-of-day=TIME] # [default 9am] find chunks of available time after TIME (which is a BusinessTime string like '9am' or '14:30')
|
186
|
+
-e, [--end-of-day=TIME] # [default 6pm] find chunks of available time before TIME (which is a BusinessTime string like '9am' or '14:30')
|
187
|
+
-a, [--attendees=ATTENDEE1[,ATTENDEE2[,...]]] # [default 'me'] people (email IDs) to whom this command will be applied
|
188
|
+
-p, [--profile=PROFILE] # the profile you'd like to use (if different from default)
|
189
|
+
[--local-store=FILENAME] # Load events from a local file instead of Google Calendar
|
190
|
+
-h, -?, [--help], [--no-help]
|
191
|
+
[--debug], [--no-debug] # how dare you suggest there are bugs
|
248
192
|
|
249
193
|
Show your availability for a date or range of dates (default 'today')
|
250
194
|
</pre>
|
@@ -253,72 +197,93 @@ Show your availability for a date or range of dates (default 'today')
|
|
253
197
|
For example: show me my available time over a chunk of time:
|
254
198
|
|
255
199
|
<pre>
|
256
|
-
<b>$</b> calendar-assistant avail 2018-
|
257
|
-
<i>me@example.com
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
<b>Availability on
|
200
|
+
<b>$</b> calendar-assistant avail 2018-11-05..2018-11-07
|
201
|
+
<i>me@example.com</i>
|
202
|
+
<i>- looking for blocks at least 30 mins long</i>
|
203
|
+
<i>- between 9am and 6pm in America/New_York</i>
|
204
|
+
|
205
|
+
<b>Availability on Monday, November 5:
|
262
206
|
</b>
|
263
|
-
•
|
264
|
-
•
|
265
|
-
•
|
207
|
+
• 9:00am - 10:00am EST<i> (1h)</i>
|
208
|
+
• 1:30pm - 2:30pm EST<i> (1h)</i>
|
209
|
+
• 3:30pm - 5:00pm EST<i> (1h 30m)</i>
|
210
|
+
• 5:30pm - 6:00pm EST<i> (30m)</i>
|
266
211
|
|
267
|
-
<b>Availability on
|
212
|
+
<b>Availability on Tuesday, November 6:
|
268
213
|
</b>
|
269
|
-
•
|
270
|
-
•
|
271
|
-
• 1:55pm - 2:30pm
|
272
|
-
• 2:55pm - 3:30pm
|
214
|
+
• 9:00am - 4:30pm EST<i> (7h 30m)</i>
|
215
|
+
• 4:50pm - 6:00pm EST<i> (1h 10m)</i>
|
273
216
|
|
274
|
-
<b>Availability on
|
217
|
+
<b>Availability on Wednesday, November 7:
|
275
218
|
</b>
|
276
|
-
•
|
219
|
+
• 9:00am - 2:30pm EST<i> (5h 30m)</i>
|
220
|
+
• 5:30pm - 6:00pm EST<i> (30m)</i>
|
221
|
+
</pre>
|
222
|
+
|
223
|
+
|
224
|
+
You can also find times when multiple people are available:
|
225
|
+
|
226
|
+
<pre>
|
227
|
+
<b>$</b> calendar-assistant avail 2018-11-05..2018-11-07 -a me@example.com,other@example.com
|
228
|
+
<i>me@example.com, other@example.com</i>
|
229
|
+
<i>- looking for blocks at least 30 mins long</i>
|
230
|
+
<i>- between 9am and 6pm in America/New_York</i>
|
231
|
+
<i>- between 9am and 6pm in America/Los_Angeles</i>
|
232
|
+
|
233
|
+
<b>Availability on Monday, November 5:
|
234
|
+
</b>
|
235
|
+
• 4:30pm - 5:00pm EST / 1:30pm - 2:00pm PST<i> (30m)</i>
|
236
|
+
|
237
|
+
<b>Availability on Tuesday, November 6:
|
238
|
+
</b>
|
239
|
+
• 12:00pm - 4:30pm EST / 9:00am - 1:30pm PST<i> (4h 30m)</i>
|
240
|
+
• 4:50pm - 6:00pm EST / 1:50pm - 3:00pm PST<i> (1h 10m)</i>
|
241
|
+
|
242
|
+
<b>Availability on Wednesday, November 7:
|
243
|
+
</b>
|
244
|
+
• 12:00pm - 2:30pm EST / 9:00am - 11:30am PST<i> (2h 30m)</i>
|
277
245
|
</pre>
|
278
246
|
|
279
247
|
|
280
248
|
You can also set start and end times for the search, which is useful when looking for overlap with another time zone:
|
281
249
|
|
282
250
|
<pre>
|
283
|
-
<b>$</b> calendar-assistant avail 2018-
|
284
|
-
<i>me@example.com
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
<b>Availability on
|
251
|
+
<b>$</b> calendar-assistant avail 2018-11-05..2018-11-07 -s 12pm -e 7pm
|
252
|
+
<i>me@example.com</i>
|
253
|
+
<i>- looking for blocks at least 30 mins long</i>
|
254
|
+
<i>- between 12pm and 7pm in America/New_York</i>
|
255
|
+
|
256
|
+
<b>Availability on Monday, November 5:
|
289
257
|
</b>
|
290
|
-
•
|
291
|
-
•
|
292
|
-
•
|
293
|
-
• 6:25pm - 7:00pm
|
258
|
+
• 1:30pm - 2:30pm EST<i> (1h)</i>
|
259
|
+
• 3:30pm - 5:00pm EST<i> (1h 30m)</i>
|
260
|
+
• 5:30pm - 7:00pm EST<i> (1h 30m)</i>
|
294
261
|
|
295
|
-
<b>Availability on
|
262
|
+
<b>Availability on Tuesday, November 6:
|
296
263
|
</b>
|
297
|
-
•
|
298
|
-
•
|
299
|
-
• 2:55pm - 3:30pm
|
300
|
-
• 6:00pm - 7:00pm
|
264
|
+
• 12:00pm - 4:30pm EST<i> (4h 30m)</i>
|
265
|
+
• 4:50pm - 7:00pm EST<i> (2h 10m)</i>
|
301
266
|
|
302
|
-
<b>Availability on
|
267
|
+
<b>Availability on Wednesday, November 7:
|
303
268
|
</b>
|
304
|
-
•
|
305
|
-
•
|
269
|
+
• 12:00pm - 2:30pm EST<i> (2h 30m)</i>
|
270
|
+
• 5:30pm - 7:00pm EST<i> (1h 30m)</i>
|
306
271
|
</pre>
|
307
272
|
|
308
273
|
|
309
|
-
### Tell people where you are
|
274
|
+
### `location-set`: Tell people where you are in the world
|
310
275
|
|
311
276
|
Declare your location as an all-day non-busy event:
|
312
277
|
|
313
278
|
<pre>
|
314
|
-
<b>$</b> calendar-assistant help location-set
|
315
279
|
Usage:
|
316
280
|
calendar-assistant location-set LOCATION [DATE | DATERANGE]
|
317
281
|
|
318
282
|
Options:
|
319
|
-
-
|
320
|
-
|
321
|
-
|
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
|
322
287
|
|
323
288
|
Set your location to LOCATION for a date or range of dates (default 'today')
|
324
289
|
</pre>
|
@@ -328,39 +293,39 @@ Set your location to LOCATION for a date or range of dates (default 'today')
|
|
328
293
|
Some examples:
|
329
294
|
|
330
295
|
<pre>
|
331
|
-
|
296
|
+
<i># create an event titled `🗺 WFH` for today</i>
|
332
297
|
<b>$</b> calendar-assistant location set -p home WFH
|
333
298
|
<b>Created:</b>
|
334
299
|
2018-09-03 | <b>🗺 WFH</b> (not-busy, self)
|
335
300
|
|
336
|
-
|
301
|
+
<i># create an event titled `🗺 OOO` for tomorrow</i>
|
337
302
|
<b>$</b> calendar-assistant location-set OOO tomorrow
|
338
303
|
<b>Created:</b>
|
339
304
|
2018-09-04 | <b>🗺 OOO</b> (not-busy, self)
|
340
305
|
|
341
|
-
|
306
|
+
<i># create an event titled `🗺 Spring One` on the days of that conference</i>
|
342
307
|
<b>$</b> calendar-assistant location-set "Spring One" 2018-09-24...2018-09-27
|
343
308
|
<b>Created:</b>
|
344
309
|
2018-09-24 - 2018-09-27 | <b>🗺 Spring One</b> (not-busy, self)
|
345
310
|
|
346
|
-
|
311
|
+
<i># create a vacation event for next week</i>
|
347
312
|
<b>$</b> calendar-assistant location-set "Vacation!" "next monday ... next week friday"
|
348
313
|
<b>Created:</b>
|
349
314
|
2018-09-10 - 2018-09-14 | <b>🗺 Vacation!</b> (not-busy, self)
|
350
315
|
</pre>
|
351
316
|
|
352
317
|
|
353
|
-
###
|
318
|
+
### `location`: View where you're going to be in the world
|
354
319
|
|
355
320
|
<pre>
|
356
|
-
<b>$</b> calendar-assistant help location
|
357
321
|
Usage:
|
358
322
|
calendar-assistant location [DATE | DATERANGE]
|
359
323
|
|
360
324
|
Options:
|
361
|
-
-
|
362
|
-
|
363
|
-
|
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
|
364
329
|
|
365
330
|
Show your location for a date or range of dates (default 'today')
|
366
331
|
</pre>
|
@@ -371,18 +336,131 @@ For example:
|
|
371
336
|
<b>$</b> calendar-assistant location "2018-09-24...2018-09-28"
|
372
337
|
<i>me@example.com (all times in America/New_York)
|
373
338
|
</i>
|
374
|
-
2018-09-24 - 2018-09-
|
375
|
-
2018-09-28 <b> | 🗺
|
339
|
+
2018-09-24 - 2018-09-28 <b> | 🗺 Rivendell</b><i> (not-busy)</i>
|
340
|
+
2018-09-28 <b> | 🗺 Bywater</b><i> (not-busy)</i>
|
341
|
+
</pre>
|
342
|
+
|
343
|
+
|
344
|
+
### `show`: View your calendar events
|
345
|
+
|
346
|
+
<pre>
|
347
|
+
Usage:
|
348
|
+
calendar-assistant show [DATE | DATERANGE | TIMERANGE]
|
349
|
+
|
350
|
+
Options:
|
351
|
+
-c, [--commitments], [--no-commitments] # only show events that you've accepted with another person
|
352
|
+
-p, [--profile=PROFILE] # the profile you'd like to use (if different from default)
|
353
|
+
[--local-store=FILENAME] # Load events from a local file instead of Google Calendar
|
354
|
+
-a, [--attendees=ATTENDEE1[,ATTENDEE2[,...]]] # [default 'me'] people (email IDs) to whom this command will be applied
|
355
|
+
-h, -?, [--help], [--no-help]
|
356
|
+
[--debug], [--no-debug] # how dare you suggest there are bugs
|
357
|
+
|
358
|
+
Show your events for a date or range of dates (default 'today')
|
359
|
+
</pre>
|
360
|
+
|
361
|
+
For example: display all events scheduled for tomorrow:
|
362
|
+
|
363
|
+
<pre>
|
364
|
+
<b>$</b> calendar-assistant show 2018-10-01
|
365
|
+
<i>me@example.com (all times in America/New_York)
|
366
|
+
</i>
|
367
|
+
<strike>2018-10-01 03:30 - 05:00 | Maximize open-source markets</strike>
|
368
|
+
<strike>2018-10-01 07:30 - 08:30 | Incentivize innovative web services</strike>
|
369
|
+
<strike>2018-10-01 07:30 - 08:30 | Reinvent 24/7 niches</strike>
|
370
|
+
2018-10-01 10:30 - 10:55<b> | Engineer collaborative roi</b><i> (1:1, recurring)</i>
|
371
|
+
2018-10-01 11:00 - 11:30<b> | Implement one-to-one schemas</b><i> (recurring)</i>
|
372
|
+
2018-10-01 11:30 - 12:00<b> | Empower extensible vortals</b><i> (1:1, recurring)</i>
|
373
|
+
<strike>2018-10-01 11:50 - 12:00 | Synthesize web-enabled niches</strike>
|
374
|
+
2018-10-01 12:00 - 12:30<b> | Facilitate open-source infomediaries</b><i> (self)</i>
|
375
|
+
<strike>2018-10-01 12:15 - 12:30 | Iterate scalable partnerships</strike>
|
376
|
+
<strike>2018-10-01 12:30 - 13:30 | Unleash web-enabled content</strike>
|
377
|
+
2018-10-01 12:30 - 13:30<b> | Exploit collaborative web services</b><i> (recurring)</i>
|
378
|
+
2018-10-01 13:30 - 14:50<b> | Streamline back-end deliverables</b><i> (self)</i>
|
379
|
+
<strike>2018-10-01 13:30 - 14:30 | Innovate dot-com architectures</strike>
|
380
|
+
2018-10-01 15:00 - 15:30<b> | Optimize robust paradigms</b><i> (1:1)</i>
|
381
|
+
2018-10-01 16:00 - 17:00<b> | Brand 24/365 web services</b><i> (1:1, recurring)</i>
|
382
|
+
2018-10-01 16:45 - 17:00<b> | Extend vertical applications</b><i> (recurring)</i>
|
383
|
+
2018-10-01 17:00 - 17:30<b> | Monetize one-to-one roi</b><i> (recurring)</i>
|
384
|
+
2018-10-01 17:30 - 17:55<b> | Target transparent e-tailers</b><i> (1:1, recurring)</i>
|
385
|
+
<strike>2018-10-01 18:00 - 20:30 | Maximize value-added vortals</strike>
|
386
|
+
<strike>2018-10-01 18:30 - 19:00 | Whiteboard rich applications</strike>
|
387
|
+
<strike>2018-10-01 19:00 - 19:30 | Scale cross-platform portals</strike>
|
388
|
+
2018-10-01 <b> | 🗺 Wilderland</b><i> (not-busy)</i>
|
376
389
|
</pre>
|
377
390
|
|
391
|
+
Display _only_ the commitments I have to other people using the `-c` option:
|
392
|
+
|
393
|
+
<pre>
|
394
|
+
<b>$</b> calendar-assistant show -c 2018-10-01
|
395
|
+
<i>me@example.com (all times in America/New_York)
|
396
|
+
</i>
|
397
|
+
2018-10-01 10:30 - 10:55<b> | Engineer collaborative roi</b><i> (1:1, recurring)</i>
|
398
|
+
2018-10-01 11:00 - 11:30<b> | Implement one-to-one schemas</b><i> (recurring)</i>
|
399
|
+
2018-10-01 11:30 - 12:00<b> | Empower extensible vortals</b><i> (1:1, recurring)</i>
|
400
|
+
2018-10-01 12:30 - 13:30<b> | Exploit collaborative web services</b><i> (recurring)</i>
|
401
|
+
2018-10-01 15:00 - 15:30<b> | Optimize robust paradigms</b><i> (1:1)</i>
|
402
|
+
2018-10-01 16:00 - 17:00<b> | Brand 24/365 web services</b><i> (1:1, recurring)</i>
|
403
|
+
2018-10-01 16:45 - 17:00<b> | Extend vertical applications</b><i> (recurring)</i>
|
404
|
+
2018-10-01 17:00 - 17:30<b> | Monetize one-to-one roi</b><i> (recurring)</i>
|
405
|
+
2018-10-01 17:30 - 17:55<b> | Target transparent e-tailers</b><i> (1:1, recurring)</i>
|
406
|
+
2018-10-01 <b> | 🗺 Wilderland</b><i> (not-busy)</i>
|
407
|
+
</pre>
|
408
|
+
|
409
|
+
|
410
|
+
### `config`: View your configuration parameters
|
411
|
+
|
412
|
+
Calendar Assistant has intelligent defaults, which can be overridden in the TOML file `~/.calendar-assistant`, and further overridden via command-line parameters. Sometimes it's nice to be able to see what defaults Calendar Assistant is using:
|
413
|
+
|
414
|
+
<pre>
|
415
|
+
Usage:
|
416
|
+
calendar-assistant config
|
417
|
+
|
418
|
+
Options:
|
419
|
+
-h, -?, [--help], [--no-help]
|
420
|
+
[--debug], [--no-debug] # how dare you suggest there are bugs
|
421
|
+
|
422
|
+
Dump your configuration parameters (merge of defaults and overrides from /home/user/.calendar-assistant)
|
423
|
+
</pre>
|
424
|
+
|
425
|
+
The output is TOML, which is suitable for dumping into `~/.calendar-assistant` and editing.
|
426
|
+
|
427
|
+
<pre>
|
428
|
+
<b>$</b> calendar-assistant config
|
429
|
+
|
430
|
+
[settings]
|
431
|
+
end-of-day = "6pm"
|
432
|
+
meeting-length = "30m"
|
433
|
+
profile = "work"
|
434
|
+
start-of-day = "9am"
|
435
|
+
</pre>
|
436
|
+
|
437
|
+
## Development
|
438
|
+
|
439
|
+
### Tests
|
440
|
+
|
441
|
+
```bash
|
442
|
+
gem install bundler
|
443
|
+
bundle install
|
444
|
+
|
445
|
+
rake spec
|
446
|
+
```
|
447
|
+
|
448
|
+
### Generate README
|
449
|
+
|
450
|
+
* Requires npm to be installed
|
451
|
+
* Will use a fixture file rather than connecting to a remote calendar. Fixtures can be updated/regenerated in [generate-fixtures](generate-fixtures) script
|
452
|
+
|
453
|
+
```bash
|
454
|
+
./generate-readme
|
455
|
+
```
|
378
456
|
|
379
457
|
## References
|
380
458
|
|
381
459
|
Google Calendar Concepts: https://developers.google.com/calendar/concepts/
|
382
460
|
|
383
|
-
Google
|
461
|
+
Google Calendar API Reference: https://developers.google.com/calendar/v3/reference/
|
384
462
|
|
385
|
-
|
463
|
+
Google Calendar Ruby Client Docs: https://www.rubydoc.info/github/google/google-api-ruby-client/Google/Apis/CalendarV3
|
386
464
|
|
387
465
|
|
388
466
|
## License
|