calendar-assistant 0.10.0 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -9
- data/Rakefile +9 -9
- data/bin/calendar-assistant +1 -0
- data/lib/calendar_assistant.rb +1 -3
- data/lib/calendar_assistant/cli/commands.rb +2 -1
- data/lib/calendar_assistant/cli/config.rb +3 -3
- data/lib/calendar_assistant/event.rb +4 -0
- data/lib/calendar_assistant/event_repository.rb +2 -2
- data/lib/calendar_assistant/extensions/launchy_extensions.rb +5 -2
- data/lib/calendar_assistant/version.rb +1 -1
- metadata +29 -49
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e569594cdc40d761ee7eca41c960efc4d435508e7fa22571497f9693914a6c0
|
4
|
+
data.tar.gz: f8488f08e8db4e2b1e1a037a307781faf5c3dad73242fe206e9b70670ee16298
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a0c5da7676bca3b1f21f8793f42c75007f38f108e5f3a85145074d28e9eb3f508cdea487857ed239e8cdeb378cf0f94c9e7f26d9304b650d9bb482b185241cb
|
7
|
+
data.tar.gz: ac39130b3c7be61f0b6718cee82441deb9ffb00fefc7adb7db7c24ff0a303cb13466946a1656c3e6bb4a03d332e15f1733bfe8a5f4ecb0c5eed3b3b52c7a0876
|
data/README.md
CHANGED
@@ -10,9 +10,10 @@
|
|
10
10
|
- book (and re-book) one-on-ones and other meetings automatically
|
11
11
|
|
12
12
|
[![Gem Version](https://badge.fury.io/rb/calendar-assistant.svg)](https://badge.fury.io/rb/calendar-assistant)
|
13
|
-
[![
|
13
|
+
[![Test suite](https://github.com/flavorjones/calendar-assistant/actions/workflows/test-suite.yml/badge.svg)](https://github.com/flavorjones/calendar-assistant/actions/workflows/test-suite.yml)
|
14
14
|
[![Maintainability](https://api.codeclimate.com/v1/badges/3525792e1feeccfd8875/maintainability)](https://codeclimate.com/github/flavorjones/calendar-assistant/maintainability)
|
15
15
|
[![Test Coverage](https://api.codeclimate.com/v1/badges/3525792e1feeccfd8875/test_coverage)](https://codeclimate.com/github/flavorjones/calendar-assistant/test_coverage)
|
16
|
+
[![Join the chat at https://gitter.im/flavorjones/calendar-assistant](https://badges.gitter.im/flavorjones/calendar-assistant.svg)](https://gitter.im/flavorjones/calendar-assistant?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
16
17
|
|
17
18
|
## Contents
|
18
19
|
|
@@ -161,8 +162,8 @@ Options:
|
|
161
162
|
# Default: true
|
162
163
|
|
163
164
|
Description:
|
164
|
-
This command will walk you through setting up a Google Cloud Project, enabling the Google Calendar API, and saving
|
165
|
-
credentials necessary to access the API on behalf of users.
|
165
|
+
This command will walk you through setting up a Google Cloud Project, enabling the Google Calendar API, and saving
|
166
|
+
the credentials necessary to access the API on behalf of users.
|
166
167
|
|
167
168
|
If you already have downloaded client credentials, you don't need to run this command. Instead, rename the downloaded
|
168
169
|
JSON file to `/home/user/.calendar-assistant.client`
|
@@ -184,11 +185,11 @@ Options:
|
|
184
185
|
Description:
|
185
186
|
Create and authorize a named profile (e.g., "work", "home", "flastname@company.tld") to access your calendar.
|
186
187
|
|
187
|
-
When setting up a profile, you'll be asked to visit a URL to authenticate, grant authorization, and generate and
|
188
|
-
an access token.
|
188
|
+
When setting up a profile, you'll be asked to visit a URL to authenticate, grant authorization, and generate and
|
189
|
+
persist an access token.
|
189
190
|
|
190
|
-
In order for this to work, you'll need to have set up your API client credentials. Run `calendar-assistant help
|
191
|
-
for instructions.
|
191
|
+
In order for this to work, you'll need to have set up your API client credentials. Run `calendar-assistant help
|
192
|
+
setup` for instructions.
|
192
193
|
</pre>
|
193
194
|
|
194
195
|
|
@@ -571,7 +572,6 @@ The output is TOML, which is suitable for dumping into `~/.calendar-assistant` a
|
|
571
572
|
|
572
573
|
<pre>
|
573
574
|
<b>$</b> calendar-assistant config
|
574
|
-
|
575
575
|
[settings]
|
576
576
|
end-of-day = "6pm"
|
577
577
|
location-icon = "🌎"
|
@@ -619,7 +619,7 @@ bundle exec rake # Default task runs both feature and non feature tests
|
|
619
619
|
|
620
620
|
### Continuous Integration
|
621
621
|
|
622
|
-
CI is running in
|
622
|
+
CI is running in [Github Actions](https://github.com/flavorjones/calendar-assistant/actions/workflows/test-suite.yml).
|
623
623
|
|
624
624
|
|
625
625
|
### Code Quality
|
data/Rakefile
CHANGED
@@ -1,15 +1,9 @@
|
|
1
1
|
#require "bundler/gem_tasks"
|
2
2
|
require "rspec/core/rake_task"
|
3
|
-
require "concourse"
|
4
3
|
require "license_finder"
|
5
4
|
require "tempfile"
|
6
5
|
require "rainbow"
|
7
6
|
|
8
|
-
#
|
9
|
-
# concourse
|
10
|
-
#
|
11
|
-
Concourse.new("calendar-assistant", fly_target: "calendar-assistants").create_tasks!
|
12
|
-
|
13
7
|
#
|
14
8
|
# spec tasks
|
15
9
|
#
|
@@ -53,15 +47,17 @@ end
|
|
53
47
|
|
54
48
|
#
|
55
49
|
# docker docker docker
|
50
|
+
# keep in mind that we have a Github Action to generate this weekly
|
56
51
|
#
|
52
|
+
CALENDAR_ASSISTANT_TEST_IMAGE = "ghcr.io/flavorjones/calendar-assistant-test"
|
57
53
|
desc "Build a docker image for testing"
|
58
54
|
task "docker:build" do
|
59
|
-
sh "docker build -t
|
55
|
+
sh "docker build -t #{CALENDAR_ASSISTANT_TEST_IMAGE} -f ci/Dockerfile ."
|
60
56
|
end
|
61
57
|
|
62
58
|
desc "Push a docker image for testing"
|
63
59
|
task "docker:push" do
|
64
|
-
sh "docker push
|
60
|
+
sh "docker push #{CALENDAR_ASSISTANT_TEST_IMAGE}"
|
65
61
|
end
|
66
62
|
|
67
63
|
desc "Build and push a docker image for testing"
|
@@ -79,4 +75,8 @@ end
|
|
79
75
|
# default
|
80
76
|
#
|
81
77
|
desc "Run unit specs, feature specs, license finder, and check the README"
|
82
|
-
task "default" => [
|
78
|
+
task "default" => [
|
79
|
+
"spec",
|
80
|
+
"readme:check",
|
81
|
+
"license_finder", # last because it modifies bundle env
|
82
|
+
]
|
data/bin/calendar-assistant
CHANGED
@@ -8,6 +8,7 @@ Encoding.default_internal = Encoding::UTF_8
|
|
8
8
|
Rainbow.enabled = true
|
9
9
|
|
10
10
|
begin
|
11
|
+
require "calendar_assistant/cli"
|
11
12
|
CalendarAssistant::CLI::Commands.start ARGV
|
12
13
|
rescue Google::Apis::AuthorizationError, CalendarAssistant::BaseException => e
|
13
14
|
printf "ERROR: %s\n", e
|
data/lib/calendar_assistant.rb
CHANGED
@@ -14,7 +14,7 @@ autoload :Chronic, "chronic"
|
|
14
14
|
autoload :ChronicDuration, "chronic_duration"
|
15
15
|
autoload :Google, "calendar_assistant/extensions/google_apis_extensions"
|
16
16
|
autoload :Launchy, "calendar_assistant/extensions/launchy_extensions"
|
17
|
-
autoload :
|
17
|
+
autoload :TomlRB, "toml-rb"
|
18
18
|
autoload :Thor, "thor"
|
19
19
|
require "calendar_assistant/extensions/rainbow_extensions" # Rainbow() doesn't trigger autoload
|
20
20
|
require "active_support/time" # Time doesn't trigger autoload
|
@@ -42,5 +42,3 @@ class CalendarAssistant
|
|
42
42
|
autoload :PredicateCollection, "calendar_assistant/predicate_collection"
|
43
43
|
autoload :LocationConfigValidator, "calendar_assistant/location_config_validator"
|
44
44
|
end
|
45
|
-
|
46
|
-
require "calendar_assistant/cli"
|
@@ -66,7 +66,8 @@ class CalendarAssistant
|
|
66
66
|
def config
|
67
67
|
return if handle_help_args
|
68
68
|
settings = CalendarAssistant::CLI::Config.new.settings
|
69
|
-
|
69
|
+
filtered_settings = settings.reject { |k, v| v.nil? }
|
70
|
+
command_service.out.puts TomlRB.dump({ CalendarAssistant::Config::Keys::SETTINGS => filtered_settings })
|
70
71
|
end
|
71
72
|
|
72
73
|
desc "setup",
|
@@ -18,9 +18,9 @@ class CalendarAssistant
|
|
18
18
|
user_config = if File.exist? config_file_path
|
19
19
|
begin
|
20
20
|
FileUtils.chmod 0600, config_file_path
|
21
|
-
|
21
|
+
TomlRB.load_file config_file_path
|
22
22
|
rescue Exception => e
|
23
|
-
raise TomlParseFailure, "could not parse #{config_file_path}: #{e}"
|
23
|
+
raise TomlParseFailure, "could not parse TOML file '#{config_file_path}': #{e}"
|
24
24
|
end
|
25
25
|
else
|
26
26
|
Hash.new
|
@@ -39,7 +39,7 @@ class CalendarAssistant
|
|
39
39
|
raise NoConfigFileToPersist, "Cannot persist config when there's no config file"
|
40
40
|
end
|
41
41
|
|
42
|
-
content =
|
42
|
+
content = TomlRB.dump(user_config)
|
43
43
|
|
44
44
|
File.open(config_file_path, "w") do |f|
|
45
45
|
f.write content
|
@@ -192,6 +192,10 @@ class CalendarAssistant
|
|
192
192
|
|
193
193
|
def av_uri
|
194
194
|
@av_uri ||= begin
|
195
|
+
if conference_data && conference_data.conference_solution.name == "Zoom Meeting"
|
196
|
+
return conference_data.entry_points.detect{|d| d.entry_point_type == "video" }.uri
|
197
|
+
end
|
198
|
+
|
195
199
|
description_link = CalendarAssistant::StringHelpers.find_uri_for_domain(description, "zoom.us")
|
196
200
|
return description_link if description_link
|
197
201
|
|
@@ -35,7 +35,7 @@ class CalendarAssistant
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def new(event_attributes)
|
38
|
-
event = Google::Apis::CalendarV3::Event.new
|
38
|
+
event = Google::Apis::CalendarV3::Event.new(**DateHelpers.cast_dates(event_attributes))
|
39
39
|
event.visibility ||= config.event_visibility
|
40
40
|
CalendarAssistant::Event.new(event, config: config)
|
41
41
|
end
|
@@ -52,7 +52,7 @@ class CalendarAssistant
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def update(event, attributes)
|
55
|
-
event.update!
|
55
|
+
event.update!(**DateHelpers.cast_dates(attributes))
|
56
56
|
updated_event = @service.update_event @calendar_id, event.id, event
|
57
57
|
CalendarAssistant::Event.new(updated_event, config: config)
|
58
58
|
end
|
@@ -12,7 +12,7 @@ require "launchy"
|
|
12
12
|
#
|
13
13
|
class CalendarAssistant
|
14
14
|
class ZoomLaunchy < Launchy::Application::Browser
|
15
|
-
ZOOM_URI_REGEXP = %r(https?://\w+.zoom.us/j/(\d+))
|
15
|
+
ZOOM_URI_REGEXP = %r(https?://\w+.zoom.us/j/(\d+)(\?(.*))?)
|
16
16
|
|
17
17
|
def self.handles?(uri)
|
18
18
|
return true if ZOOM_URI_REGEXP.match(uri)
|
@@ -31,8 +31,11 @@ class CalendarAssistant
|
|
31
31
|
if command.nil?
|
32
32
|
super uri, options
|
33
33
|
else
|
34
|
-
|
34
|
+
matches = ZOOM_URI_REGEXP.match(uri)
|
35
|
+
confno = matches[1]
|
36
|
+
params = matches[3]
|
35
37
|
url = "zoommtg://zoom.us/join?confno=#{confno}"
|
38
|
+
url += "&#{params}" if params
|
36
39
|
run command, [url]
|
37
40
|
end
|
38
41
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: calendar-assistant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Dalessio
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-05-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -17,28 +17,28 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: '6.1'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
27
|
+
version: '6.1'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: business_time
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 0.
|
34
|
+
version: '0.10'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 0.
|
41
|
+
version: '0.10'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: chronic
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -68,25 +68,19 @@ dependencies:
|
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: 0.10.0
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
|
-
name: google-
|
71
|
+
name: google-apis-calendar_v3
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
74
|
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: '0
|
77
|
-
- - "<"
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
version: '0.29'
|
76
|
+
version: '0'
|
80
77
|
type: :runtime
|
81
78
|
prerelease: false
|
82
79
|
version_requirements: !ruby/object:Gem::Requirement
|
83
80
|
requirements:
|
84
81
|
- - ">="
|
85
82
|
- !ruby/object:Gem::Version
|
86
|
-
version: '0
|
87
|
-
- - "<"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0.29'
|
83
|
+
version: '0'
|
90
84
|
- !ruby/object:Gem::Dependency
|
91
85
|
name: launchy
|
92
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -121,126 +115,112 @@ dependencies:
|
|
121
115
|
requirements:
|
122
116
|
- - "~>"
|
123
117
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
118
|
+
version: 1.1.0
|
125
119
|
type: :runtime
|
126
120
|
prerelease: false
|
127
121
|
version_requirements: !ruby/object:Gem::Requirement
|
128
122
|
requirements:
|
129
123
|
- - "~>"
|
130
124
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
125
|
+
version: 1.1.0
|
132
126
|
- !ruby/object:Gem::Dependency
|
133
|
-
name: toml
|
127
|
+
name: toml-rb
|
134
128
|
requirement: !ruby/object:Gem::Requirement
|
135
129
|
requirements:
|
136
130
|
- - "~>"
|
137
131
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
132
|
+
version: 2.0.1
|
139
133
|
type: :runtime
|
140
134
|
prerelease: false
|
141
135
|
version_requirements: !ruby/object:Gem::Requirement
|
142
136
|
requirements:
|
143
137
|
- - "~>"
|
144
138
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
139
|
+
version: 2.0.1
|
146
140
|
- !ruby/object:Gem::Dependency
|
147
141
|
name: thor_repl
|
148
142
|
requirement: !ruby/object:Gem::Requirement
|
149
143
|
requirements:
|
150
144
|
- - "~>"
|
151
145
|
- !ruby/object:Gem::Version
|
152
|
-
version: 0.1.
|
146
|
+
version: 0.1.4
|
153
147
|
type: :runtime
|
154
148
|
prerelease: false
|
155
149
|
version_requirements: !ruby/object:Gem::Requirement
|
156
150
|
requirements:
|
157
151
|
- - "~>"
|
158
152
|
- !ruby/object:Gem::Version
|
159
|
-
version: 0.1.
|
153
|
+
version: 0.1.4
|
160
154
|
- !ruby/object:Gem::Dependency
|
161
155
|
name: aruba
|
162
156
|
requirement: !ruby/object:Gem::Requirement
|
163
157
|
requirements:
|
164
158
|
- - "~>"
|
165
159
|
- !ruby/object:Gem::Version
|
166
|
-
version: 0.
|
160
|
+
version: 1.0.0
|
167
161
|
type: :development
|
168
162
|
prerelease: false
|
169
163
|
version_requirements: !ruby/object:Gem::Requirement
|
170
164
|
requirements:
|
171
165
|
- - "~>"
|
172
166
|
- !ruby/object:Gem::Version
|
173
|
-
version: 0.
|
167
|
+
version: 1.0.0
|
174
168
|
- !ruby/object:Gem::Dependency
|
175
169
|
name: bundler
|
176
170
|
requirement: !ruby/object:Gem::Requirement
|
177
171
|
requirements:
|
178
172
|
- - "~>"
|
179
173
|
- !ruby/object:Gem::Version
|
180
|
-
version: 2.
|
174
|
+
version: '2.2'
|
181
175
|
type: :development
|
182
176
|
prerelease: false
|
183
177
|
version_requirements: !ruby/object:Gem::Requirement
|
184
178
|
requirements:
|
185
179
|
- - "~>"
|
186
180
|
- !ruby/object:Gem::Version
|
187
|
-
version: 2.
|
188
|
-
- !ruby/object:Gem::Dependency
|
189
|
-
name: concourse
|
190
|
-
requirement: !ruby/object:Gem::Requirement
|
191
|
-
requirements:
|
192
|
-
- - ">="
|
193
|
-
- !ruby/object:Gem::Version
|
194
|
-
version: '0'
|
195
|
-
type: :development
|
196
|
-
prerelease: false
|
197
|
-
version_requirements: !ruby/object:Gem::Requirement
|
198
|
-
requirements:
|
199
|
-
- - ">="
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: '0'
|
181
|
+
version: '2.2'
|
202
182
|
- !ruby/object:Gem::Dependency
|
203
183
|
name: faker
|
204
184
|
requirement: !ruby/object:Gem::Requirement
|
205
185
|
requirements:
|
206
186
|
- - "~>"
|
207
187
|
- !ruby/object:Gem::Version
|
208
|
-
version: '1
|
188
|
+
version: '2.1'
|
209
189
|
type: :development
|
210
190
|
prerelease: false
|
211
191
|
version_requirements: !ruby/object:Gem::Requirement
|
212
192
|
requirements:
|
213
193
|
- - "~>"
|
214
194
|
- !ruby/object:Gem::Version
|
215
|
-
version: '1
|
195
|
+
version: '2.1'
|
216
196
|
- !ruby/object:Gem::Dependency
|
217
197
|
name: license_finder
|
218
198
|
requirement: !ruby/object:Gem::Requirement
|
219
199
|
requirements:
|
220
200
|
- - "~>"
|
221
201
|
- !ruby/object:Gem::Version
|
222
|
-
version: '
|
202
|
+
version: '6.0'
|
223
203
|
type: :development
|
224
204
|
prerelease: false
|
225
205
|
version_requirements: !ruby/object:Gem::Requirement
|
226
206
|
requirements:
|
227
207
|
- - "~>"
|
228
208
|
- !ruby/object:Gem::Version
|
229
|
-
version: '
|
209
|
+
version: '6.0'
|
230
210
|
- !ruby/object:Gem::Dependency
|
231
211
|
name: rake
|
232
212
|
requirement: !ruby/object:Gem::Requirement
|
233
213
|
requirements:
|
234
214
|
- - "~>"
|
235
215
|
- !ruby/object:Gem::Version
|
236
|
-
version: '
|
216
|
+
version: '13.0'
|
237
217
|
type: :development
|
238
218
|
prerelease: false
|
239
219
|
version_requirements: !ruby/object:Gem::Requirement
|
240
220
|
requirements:
|
241
221
|
- - "~>"
|
242
222
|
- !ruby/object:Gem::Version
|
243
|
-
version: '
|
223
|
+
version: '13.0'
|
244
224
|
- !ruby/object:Gem::Dependency
|
245
225
|
name: rspec
|
246
226
|
requirement: !ruby/object:Gem::Requirement
|
@@ -275,14 +255,14 @@ dependencies:
|
|
275
255
|
requirements:
|
276
256
|
- - "~>"
|
277
257
|
- !ruby/object:Gem::Version
|
278
|
-
version: '0.
|
258
|
+
version: '0.21'
|
279
259
|
type: :development
|
280
260
|
prerelease: false
|
281
261
|
version_requirements: !ruby/object:Gem::Requirement
|
282
262
|
requirements:
|
283
263
|
- - "~>"
|
284
264
|
- !ruby/object:Gem::Version
|
285
|
-
version: '0.
|
265
|
+
version: '0.21'
|
286
266
|
description: A command-line tool to help manage your Google Calendar.
|
287
267
|
email:
|
288
268
|
- mike.dalessio@gmail.com
|
@@ -350,7 +330,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
350
330
|
- !ruby/object:Gem::Version
|
351
331
|
version: '0'
|
352
332
|
requirements: []
|
353
|
-
rubygems_version: 3.
|
333
|
+
rubygems_version: 3.1.4
|
354
334
|
signing_key:
|
355
335
|
specification_version: 4
|
356
336
|
summary: A command-line tool to help manage your Google Calendar.
|