calendar-assistant 0.9.0 → 0.14.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 +2 -1
- data/README.md +44 -22
- data/Rakefile +37 -6
- data/bin/calendar-assistant +3 -1
- data/lib/calendar_assistant.rb +14 -16
- data/lib/calendar_assistant/available_block.rb +1 -1
- data/lib/calendar_assistant/calendar_assistant.rb +21 -25
- data/lib/calendar_assistant/cli.rb +10 -10
- data/lib/calendar_assistant/cli/authorizer.rb +14 -14
- data/lib/calendar_assistant/cli/command_service.rb +2 -2
- data/lib/calendar_assistant/cli/commands.rb +47 -40
- data/lib/calendar_assistant/cli/config.rb +16 -17
- data/lib/calendar_assistant/cli/event_presenter.rb +2 -2
- data/lib/calendar_assistant/cli/event_set_presenter.rb +3 -3
- data/lib/calendar_assistant/cli/helpers.rb +7 -8
- data/lib/calendar_assistant/cli/linter_event_presenter.rb +3 -3
- data/lib/calendar_assistant/cli/linter_event_set_presenter.rb +4 -4
- data/lib/calendar_assistant/cli/printer.rb +15 -15
- data/lib/calendar_assistant/config.rb +11 -11
- data/lib/calendar_assistant/config/token_store.rb +4 -4
- data/lib/calendar_assistant/date_helpers.rb +1 -2
- data/lib/calendar_assistant/event.rb +54 -50
- data/lib/calendar_assistant/event_repository.rb +14 -15
- data/lib/calendar_assistant/event_repository_factory.rb +1 -1
- data/lib/calendar_assistant/event_set.rb +14 -14
- data/lib/calendar_assistant/extensions/google_apis_extensions.rb +1 -1
- data/lib/calendar_assistant/extensions/launchy_extensions.rb +7 -4
- data/lib/calendar_assistant/has_duration.rb +4 -5
- data/lib/calendar_assistant/lint_event_repository.rb +3 -3
- data/lib/calendar_assistant/location_config_validator.rb +3 -3
- data/lib/calendar_assistant/location_event_repository.rb +7 -8
- data/lib/calendar_assistant/predicate_collection.rb +1 -2
- data/lib/calendar_assistant/scheduler.rb +4 -5
- data/lib/calendar_assistant/string_helpers.rb +1 -1
- data/lib/calendar_assistant/version.rb +1 -1
- metadata +38 -30
@@ -1,13 +1,12 @@
|
|
1
1
|
class CalendarAssistant
|
2
2
|
module HasDuration
|
3
|
-
def self.duration_in_seconds
|
3
|
+
def self.duration_in_seconds(start_time, end_time)
|
4
4
|
(end_time.to_datetime - start_time.to_datetime).days.to_i
|
5
|
-
|
6
5
|
end
|
7
6
|
|
8
7
|
def self.cast_datetime(datetime, time_zone = Time.zone.name)
|
9
|
-
|
10
|
-
|
8
|
+
return datetime if datetime.is_a?(Google::Apis::CalendarV3::EventDateTime)
|
9
|
+
Google::Apis::CalendarV3::EventDateTime.new(date_time: datetime.in_time_zone(time_zone).to_datetime)
|
11
10
|
end
|
12
11
|
|
13
12
|
def all_day?
|
@@ -95,7 +94,7 @@ class CalendarAssistant
|
|
95
94
|
HasDuration.duration_in_seconds start_time, end_time
|
96
95
|
end
|
97
96
|
|
98
|
-
def contains?
|
97
|
+
def contains?(time)
|
99
98
|
start_time <= time && time < end_time
|
100
99
|
end
|
101
100
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class CalendarAssistant
|
2
2
|
class LintEventRepository < EventRepository
|
3
|
-
def find
|
4
|
-
super(time,
|
3
|
+
def find(time, predicates: {})
|
4
|
+
super(time, predicates: predicates.merge({ needs_action?: true }))
|
5
5
|
end
|
6
6
|
end
|
7
|
-
end
|
7
|
+
end
|
@@ -1,15 +1,15 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
class CalendarAssistant
|
3
3
|
class LocationConfigValidator
|
4
|
-
class LocationConfigValidationException < CalendarAssistant::BaseException
|
4
|
+
class LocationConfigValidationException < CalendarAssistant::BaseException
|
5
5
|
end
|
6
6
|
|
7
7
|
def self.valid?(config)
|
8
|
-
return if (config.calendar_ids - [
|
8
|
+
return if (config.calendar_ids - [Config::DEFAULT_CALENDAR_ID]).empty?
|
9
9
|
return if !!config[CalendarAssistant::Config::Keys::Settings::NICKNAME]
|
10
10
|
return if !!config[CalendarAssistant::Config::Keys::Options::FORCE]
|
11
11
|
|
12
12
|
raise LocationConfigValidationException, "Managing location across multiple calendars when a nickname is not set is not recommended, use --force to override"
|
13
13
|
end
|
14
14
|
end
|
15
|
-
end
|
15
|
+
end
|
@@ -1,22 +1,21 @@
|
|
1
1
|
class CalendarAssistant
|
2
2
|
class LocationEventRepository < EventRepository
|
3
|
-
def find
|
3
|
+
def find(time, predicates: {})
|
4
4
|
event_set = super time, predicates: predicates
|
5
5
|
event_set.new event_set.events.select { |e| e.location_event? }
|
6
6
|
end
|
7
7
|
|
8
|
-
def create
|
8
|
+
def create(time, location, predicates: {})
|
9
9
|
# find pre-existing events that overlap
|
10
10
|
existing_event_set = find time, predicates: predicates
|
11
11
|
|
12
12
|
# augment event end date appropriately
|
13
13
|
range = CalendarAssistant.date_range_cast time
|
14
14
|
|
15
|
-
|
16
15
|
event = super(
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
transparency: CalendarAssistant::Event::Transparency::TRANSPARENT,
|
17
|
+
start: range.first, end: range.last,
|
18
|
+
summary: "#{Event.location_event_prefix(@config)}#{location}",
|
20
19
|
)
|
21
20
|
|
22
21
|
modify_location_events(event, existing_event_set)
|
@@ -25,13 +24,13 @@ class CalendarAssistant
|
|
25
24
|
private
|
26
25
|
|
27
26
|
def modify_location_events(event, existing_event_set)
|
28
|
-
response = existing_event_set.new({created: [event]})
|
27
|
+
response = existing_event_set.new({ created: [event] })
|
29
28
|
|
30
29
|
existing_event_set.events.each do |existing_event|
|
31
30
|
if event.cover?(existing_event)
|
32
31
|
response[:deleted] << delete(existing_event)
|
33
32
|
elsif event.overlaps_start_of?(existing_event)
|
34
|
-
|
33
|
+
response[:modified] << update(existing_event, start: event.end_date)
|
35
34
|
elsif event.overlaps_end_of?(existing_event)
|
36
35
|
response[:modified] << update(existing_event, end: event.start_date)
|
37
36
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
class CalendarAssistant
|
2
2
|
module PredicateCollection
|
3
|
-
|
4
3
|
def self.build(must_be, must_not_be)
|
5
4
|
predicates = {}
|
6
5
|
Array(must_be).each do |predicate|
|
@@ -18,4 +17,4 @@ class CalendarAssistant
|
|
18
17
|
str.to_s.gsub(/(.*[^?])$/, "\\1?").to_sym
|
19
18
|
end
|
20
19
|
end
|
21
|
-
end
|
20
|
+
end
|
@@ -5,7 +5,7 @@ class CalendarAssistant
|
|
5
5
|
#
|
6
6
|
# class methods
|
7
7
|
#
|
8
|
-
def self.select_busy_events
|
8
|
+
def self.select_busy_events(event_set)
|
9
9
|
dates_events = Hash.new
|
10
10
|
event_set.events.each do |event|
|
11
11
|
if event.private? || event.accepted? || event.self? || (event.all_day? && event.busy?)
|
@@ -17,21 +17,20 @@ class CalendarAssistant
|
|
17
17
|
event_set.new dates_events
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
20
|
#
|
22
21
|
# instance methods
|
23
22
|
#
|
24
|
-
def initialize
|
23
|
+
def initialize(calendar_assistant, event_repositories)
|
25
24
|
@ca = calendar_assistant
|
26
25
|
@ers = Array(event_repositories)
|
27
26
|
end
|
28
27
|
|
29
|
-
def available_blocks
|
28
|
+
def available_blocks(time_range, predicates: {})
|
30
29
|
avail = nil
|
31
30
|
ers.each do |er|
|
32
31
|
event_set = er.find time_range, predicates: predicates # array
|
33
32
|
event_set = Scheduler.select_busy_events event_set # hash
|
34
|
-
event_set.ensure_keys time_range.first.to_date
|
33
|
+
event_set.ensure_keys time_range.first.to_date..time_range.last.to_date, only: true
|
35
34
|
|
36
35
|
length = ChronicDuration.parse(ca.config.setting(Config::Keys::Settings::MEETING_LENGTH))
|
37
36
|
ca.in_env do
|
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.14.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-02-24 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,14 +115,14 @@ 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
127
|
name: toml
|
134
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -143,34 +137,48 @@ dependencies:
|
|
143
137
|
- - "~>"
|
144
138
|
- !ruby/object:Gem::Version
|
145
139
|
version: 0.2.0
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: thor_repl
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - "~>"
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: 0.1.4
|
147
|
+
type: :runtime
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - "~>"
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: 0.1.4
|
146
154
|
- !ruby/object:Gem::Dependency
|
147
155
|
name: aruba
|
148
156
|
requirement: !ruby/object:Gem::Requirement
|
149
157
|
requirements:
|
150
158
|
- - "~>"
|
151
159
|
- !ruby/object:Gem::Version
|
152
|
-
version: 0.
|
160
|
+
version: 1.0.0
|
153
161
|
type: :development
|
154
162
|
prerelease: false
|
155
163
|
version_requirements: !ruby/object:Gem::Requirement
|
156
164
|
requirements:
|
157
165
|
- - "~>"
|
158
166
|
- !ruby/object:Gem::Version
|
159
|
-
version: 0.
|
167
|
+
version: 1.0.0
|
160
168
|
- !ruby/object:Gem::Dependency
|
161
169
|
name: bundler
|
162
170
|
requirement: !ruby/object:Gem::Requirement
|
163
171
|
requirements:
|
164
172
|
- - "~>"
|
165
173
|
- !ruby/object:Gem::Version
|
166
|
-
version: '
|
174
|
+
version: '2.2'
|
167
175
|
type: :development
|
168
176
|
prerelease: false
|
169
177
|
version_requirements: !ruby/object:Gem::Requirement
|
170
178
|
requirements:
|
171
179
|
- - "~>"
|
172
180
|
- !ruby/object:Gem::Version
|
173
|
-
version: '
|
181
|
+
version: '2.2'
|
174
182
|
- !ruby/object:Gem::Dependency
|
175
183
|
name: concourse
|
176
184
|
requirement: !ruby/object:Gem::Requirement
|
@@ -191,42 +199,42 @@ dependencies:
|
|
191
199
|
requirements:
|
192
200
|
- - "~>"
|
193
201
|
- !ruby/object:Gem::Version
|
194
|
-
version: '1
|
202
|
+
version: '2.1'
|
195
203
|
type: :development
|
196
204
|
prerelease: false
|
197
205
|
version_requirements: !ruby/object:Gem::Requirement
|
198
206
|
requirements:
|
199
207
|
- - "~>"
|
200
208
|
- !ruby/object:Gem::Version
|
201
|
-
version: '1
|
209
|
+
version: '2.1'
|
202
210
|
- !ruby/object:Gem::Dependency
|
203
211
|
name: license_finder
|
204
212
|
requirement: !ruby/object:Gem::Requirement
|
205
213
|
requirements:
|
206
214
|
- - "~>"
|
207
215
|
- !ruby/object:Gem::Version
|
208
|
-
version: '
|
216
|
+
version: '6.0'
|
209
217
|
type: :development
|
210
218
|
prerelease: false
|
211
219
|
version_requirements: !ruby/object:Gem::Requirement
|
212
220
|
requirements:
|
213
221
|
- - "~>"
|
214
222
|
- !ruby/object:Gem::Version
|
215
|
-
version: '
|
223
|
+
version: '6.0'
|
216
224
|
- !ruby/object:Gem::Dependency
|
217
225
|
name: rake
|
218
226
|
requirement: !ruby/object:Gem::Requirement
|
219
227
|
requirements:
|
220
228
|
- - "~>"
|
221
229
|
- !ruby/object:Gem::Version
|
222
|
-
version: '
|
230
|
+
version: '13.0'
|
223
231
|
type: :development
|
224
232
|
prerelease: false
|
225
233
|
version_requirements: !ruby/object:Gem::Requirement
|
226
234
|
requirements:
|
227
235
|
- - "~>"
|
228
236
|
- !ruby/object:Gem::Version
|
229
|
-
version: '
|
237
|
+
version: '13.0'
|
230
238
|
- !ruby/object:Gem::Dependency
|
231
239
|
name: rspec
|
232
240
|
requirement: !ruby/object:Gem::Requirement
|
@@ -261,14 +269,14 @@ dependencies:
|
|
261
269
|
requirements:
|
262
270
|
- - "~>"
|
263
271
|
- !ruby/object:Gem::Version
|
264
|
-
version: '0.
|
272
|
+
version: '0.21'
|
265
273
|
type: :development
|
266
274
|
prerelease: false
|
267
275
|
version_requirements: !ruby/object:Gem::Requirement
|
268
276
|
requirements:
|
269
277
|
- - "~>"
|
270
278
|
- !ruby/object:Gem::Version
|
271
|
-
version: '0.
|
279
|
+
version: '0.21'
|
272
280
|
description: A command-line tool to help manage your Google Calendar.
|
273
281
|
email:
|
274
282
|
- mike.dalessio@gmail.com
|
@@ -336,7 +344,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
336
344
|
- !ruby/object:Gem::Version
|
337
345
|
version: '0'
|
338
346
|
requirements: []
|
339
|
-
rubygems_version: 3.
|
347
|
+
rubygems_version: 3.2.3
|
340
348
|
signing_key:
|
341
349
|
specification_version: 4
|
342
350
|
summary: A command-line tool to help manage your Google Calendar.
|