calendar-assistant 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -27,11 +27,6 @@ class CalendarAssistant
27
27
  PRIVATE = "private"
28
28
  end
29
29
 
30
- #
31
- # constants describing behavior
32
- #
33
- LOCATION_EVENT_REGEX = /^#{CalendarAssistant::EMOJI_WORLDMAP}/
34
-
35
30
  #
36
31
  # class methods
37
32
  #
@@ -42,13 +37,23 @@ class CalendarAssistant
42
37
  #
43
38
  # instance methods
44
39
  #
40
+ attr_reader :location_event_regex
41
+
42
+ def initialize(obj, config: CalendarAssistant::Config.new)
43
+
44
+ super(obj)
45
+ @location_icons = config[CalendarAssistant::Config::Keys::Settings::LOCATION_ICONS]
46
+
47
+ @location_event_regex = /^#{@location_icons.join("|")}/
48
+ end
49
+
45
50
  def update **args
46
51
  update!(**args)
47
52
  self
48
53
  end
49
54
 
50
55
  def location_event?
51
- !! (summary =~ LOCATION_EVENT_REGEX)
56
+ !! (summary =~ location_event_regex)
52
57
  end
53
58
 
54
59
  def all_day?
@@ -176,12 +181,6 @@ class CalendarAssistant
176
181
  end
177
182
  end
178
183
 
179
- def view_summary
180
- return "(private)" if private? && (summary.nil? || summary.blank?)
181
- return "(no title)" if summary.nil? || summary.blank?
182
- summary
183
- end
184
-
185
184
  def duration
186
185
  if all_day?
187
186
  days = (end_date - start_date).to_i
@@ -200,6 +199,11 @@ class CalendarAssistant
200
199
  Event.duration_in_seconds start_time, end_time
201
200
  end
202
201
 
202
+ def other_human_attendees
203
+ return nil if attendees.nil?
204
+ attendees.select { |a| ! a.resource && ! a.self }
205
+ end
206
+
203
207
  def human_attendees
204
208
  return nil if attendees.nil?
205
209
  attendees.select { |a| ! a.resource }
@@ -1,11 +1,15 @@
1
1
  class CalendarAssistant
2
2
  class EventRepository
3
- attr_reader :calendar, :calendar_id
3
+ attr_reader :calendar, :calendar_id, :config
4
4
 
5
- def initialize(service, calendar_id)
5
+ def initialize(service, calendar_id, config: CalendarAssistant::Config.new)
6
6
  @service = service
7
+ @config = config
7
8
  @calendar_id = calendar_id
8
9
  @calendar = @service.get_calendar @calendar_id
10
+ rescue Google::Apis::ClientError => e
11
+ raise BaseException, "Calendar for #{@calendar_id} not found" if e.status_code == 404
12
+ raise
9
13
  end
10
14
 
11
15
  def in_tz &block
@@ -14,7 +18,7 @@ class CalendarAssistant
14
18
  end
15
19
  end
16
20
 
17
- def find time_range
21
+ def find time_range, predicates: {}
18
22
  events = @service.list_events(@calendar_id,
19
23
  time_min: time_range.first.iso8601,
20
24
  time_max: time_range.last.iso8601,
@@ -22,15 +26,20 @@ class CalendarAssistant
22
26
  single_events: true,
23
27
  max_results: 2000,
24
28
  )
25
- if events.nil? || events.items.nil?
26
- return CalendarAssistant::EventSet.new self, Array.new
29
+ events = events.items.map { |e| CalendarAssistant::Event.new(e, config: config) }
30
+
31
+ unless predicates.empty?
32
+ events = events.select do |event|
33
+ predicates.all? { |predicate, value| event.public_send(predicate) == value }
34
+ end
27
35
  end
28
- CalendarAssistant::EventSet.new self, events.items.map { |e| CalendarAssistant::Event.new(e) }
36
+
37
+ CalendarAssistant::EventSet.new self, events
29
38
  end
30
39
 
31
40
  def new event_attributes
32
41
  event = Google::Apis::CalendarV3::Event.new DateHelpers.cast_dates(event_attributes)
33
- CalendarAssistant::Event.new(event)
42
+ CalendarAssistant::Event.new(event, config: config)
34
43
  end
35
44
 
36
45
  def create event_attributes
@@ -46,7 +55,7 @@ class CalendarAssistant
46
55
  def update(event, attributes)
47
56
  event.update! DateHelpers.cast_dates(attributes)
48
57
  updated_event = @service.update_event @calendar_id, event.id, event
49
- CalendarAssistant::Event.new(updated_event)
58
+ CalendarAssistant::Event.new(updated_event, config: config)
50
59
  end
51
60
 
52
61
  def available_block start_time, end_time
@@ -55,7 +64,7 @@ class CalendarAssistant
55
64
  end: Google::Apis::CalendarV3::EventDateTime.new(date_time: end_time.in_time_zone(calendar.time_zone).to_datetime),
56
65
  summary: "available"
57
66
  )
58
- CalendarAssistant::Event.new e
67
+ CalendarAssistant::Event.new e, config: config
59
68
  end
60
69
  end
61
70
  end
@@ -1,7 +1,7 @@
1
1
  class CalendarAssistant
2
2
  class EventRepositoryFactory
3
- def self.new_event_repository service, calendar_id
4
- EventRepository.new service, calendar_id
3
+ def self.new_event_repository service, calendar_id, config: CalendarAssistant::Config.new
4
+ EventRepository.new service, calendar_id, config: config
5
5
  end
6
6
  end
7
7
  end
@@ -1,3 +1,3 @@
1
1
  class CalendarAssistant
2
- VERSION = "0.6.0"
2
+ VERSION = "0.7.0"
3
3
  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.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Dalessio
@@ -9,22 +9,36 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-01-02 00:00:00.000000000 Z
12
+ date: 2019-01-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: google-api-client
15
+ name: activesupport
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: 5.2.1
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: 5.2.1
28
+ - !ruby/object:Gem::Dependency
29
+ name: business_time
16
30
  requirement: !ruby/object:Gem::Requirement
17
31
  requirements:
18
32
  - - "~>"
19
33
  - !ruby/object:Gem::Version
20
- version: 0.24.0
34
+ version: 0.9.0
21
35
  type: :runtime
22
36
  prerelease: false
23
37
  version_requirements: !ruby/object:Gem::Requirement
24
38
  requirements:
25
39
  - - "~>"
26
40
  - !ruby/object:Gem::Version
27
- version: 0.24.0
41
+ version: 0.9.0
28
42
  - !ruby/object:Gem::Dependency
29
43
  name: chronic
30
44
  requirement: !ruby/object:Gem::Requirement
@@ -54,33 +68,39 @@ dependencies:
54
68
  - !ruby/object:Gem::Version
55
69
  version: 0.10.0
56
70
  - !ruby/object:Gem::Dependency
57
- name: thor
71
+ name: google-api-client
58
72
  requirement: !ruby/object:Gem::Requirement
59
73
  requirements:
60
- - - "~>"
74
+ - - ">="
61
75
  - !ruby/object:Gem::Version
62
- version: 0.20.0
76
+ version: '0.24'
77
+ - - "<"
78
+ - !ruby/object:Gem::Version
79
+ version: '0.28'
63
80
  type: :runtime
64
81
  prerelease: false
65
82
  version_requirements: !ruby/object:Gem::Requirement
66
83
  requirements:
67
- - - "~>"
84
+ - - ">="
68
85
  - !ruby/object:Gem::Version
69
- version: 0.20.0
86
+ version: '0.24'
87
+ - - "<"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.28'
70
90
  - !ruby/object:Gem::Dependency
71
- name: business_time
91
+ name: launchy
72
92
  requirement: !ruby/object:Gem::Requirement
73
93
  requirements:
74
94
  - - "~>"
75
95
  - !ruby/object:Gem::Version
76
- version: 0.9.0
96
+ version: '2.4'
77
97
  type: :runtime
78
98
  prerelease: false
79
99
  version_requirements: !ruby/object:Gem::Requirement
80
100
  requirements:
81
101
  - - "~>"
82
102
  - !ruby/object:Gem::Version
83
- version: 0.9.0
103
+ version: '2.4'
84
104
  - !ruby/object:Gem::Dependency
85
105
  name: rainbow
86
106
  requirement: !ruby/object:Gem::Requirement
@@ -96,19 +116,19 @@ dependencies:
96
116
  - !ruby/object:Gem::Version
97
117
  version: '3.0'
98
118
  - !ruby/object:Gem::Dependency
99
- name: launchy
119
+ name: thor
100
120
  requirement: !ruby/object:Gem::Requirement
101
121
  requirements:
102
122
  - - "~>"
103
123
  - !ruby/object:Gem::Version
104
- version: '2.4'
124
+ version: 0.20.0
105
125
  type: :runtime
106
126
  prerelease: false
107
127
  version_requirements: !ruby/object:Gem::Requirement
108
128
  requirements:
109
129
  - - "~>"
110
130
  - !ruby/object:Gem::Version
111
- version: '2.4'
131
+ version: 0.20.0
112
132
  - !ruby/object:Gem::Dependency
113
133
  name: toml
114
134
  requirement: !ruby/object:Gem::Requirement
@@ -124,19 +144,33 @@ dependencies:
124
144
  - !ruby/object:Gem::Version
125
145
  version: 0.2.0
126
146
  - !ruby/object:Gem::Dependency
127
- name: activesupport
147
+ name: aruba
128
148
  requirement: !ruby/object:Gem::Requirement
129
149
  requirements:
130
150
  - - "~>"
131
151
  - !ruby/object:Gem::Version
132
- version: 5.2.1
133
- type: :runtime
152
+ version: '0.14'
153
+ type: :development
134
154
  prerelease: false
135
155
  version_requirements: !ruby/object:Gem::Requirement
136
156
  requirements:
137
157
  - - "~>"
138
158
  - !ruby/object:Gem::Version
139
- version: 5.2.1
159
+ version: '0.14'
160
+ - !ruby/object:Gem::Dependency
161
+ name: bundler
162
+ requirement: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '1.16'
167
+ type: :development
168
+ prerelease: false
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '1.16'
140
174
  - !ruby/object:Gem::Dependency
141
175
  name: concourse
142
176
  requirement: !ruby/object:Gem::Requirement
@@ -152,47 +186,47 @@ dependencies:
152
186
  - !ruby/object:Gem::Version
153
187
  version: '0'
154
188
  - !ruby/object:Gem::Dependency
155
- name: bundler
189
+ name: faker
156
190
  requirement: !ruby/object:Gem::Requirement
157
191
  requirements:
158
192
  - - "~>"
159
193
  - !ruby/object:Gem::Version
160
- version: '1.16'
194
+ version: '1.9'
161
195
  type: :development
162
196
  prerelease: false
163
197
  version_requirements: !ruby/object:Gem::Requirement
164
198
  requirements:
165
199
  - - "~>"
166
200
  - !ruby/object:Gem::Version
167
- version: '1.16'
201
+ version: '1.9'
168
202
  - !ruby/object:Gem::Dependency
169
- name: rake
203
+ name: license_finder
170
204
  requirement: !ruby/object:Gem::Requirement
171
205
  requirements:
172
206
  - - "~>"
173
207
  - !ruby/object:Gem::Version
174
- version: '10.0'
208
+ version: '5.5'
175
209
  type: :development
176
210
  prerelease: false
177
211
  version_requirements: !ruby/object:Gem::Requirement
178
212
  requirements:
179
213
  - - "~>"
180
214
  - !ruby/object:Gem::Version
181
- version: '10.0'
215
+ version: '5.5'
182
216
  - !ruby/object:Gem::Dependency
183
- name: faker
217
+ name: rake
184
218
  requirement: !ruby/object:Gem::Requirement
185
219
  requirements:
186
220
  - - "~>"
187
221
  - !ruby/object:Gem::Version
188
- version: 1.9.1
222
+ version: '12.3'
189
223
  type: :development
190
224
  prerelease: false
191
225
  version_requirements: !ruby/object:Gem::Requirement
192
226
  requirements:
193
227
  - - "~>"
194
228
  - !ruby/object:Gem::Version
195
- version: 1.9.1
229
+ version: '12.3'
196
230
  - !ruby/object:Gem::Dependency
197
231
  name: rspec
198
232
  requirement: !ruby/object:Gem::Requirement
@@ -213,28 +247,28 @@ dependencies:
213
247
  requirements:
214
248
  - - "~>"
215
249
  - !ruby/object:Gem::Version
216
- version: 0.9.0
250
+ version: '0.9'
217
251
  type: :development
218
252
  prerelease: false
219
253
  version_requirements: !ruby/object:Gem::Requirement
220
254
  requirements:
221
255
  - - "~>"
222
256
  - !ruby/object:Gem::Version
223
- version: 0.9.0
257
+ version: '0.9'
224
258
  - !ruby/object:Gem::Dependency
225
- name: license_finder
259
+ name: simplecov
226
260
  requirement: !ruby/object:Gem::Requirement
227
261
  requirements:
228
262
  - - "~>"
229
263
  - !ruby/object:Gem::Version
230
- version: 5.5.0
264
+ version: '0.16'
231
265
  type: :development
232
266
  prerelease: false
233
267
  version_requirements: !ruby/object:Gem::Requirement
234
268
  requirements:
235
269
  - - "~>"
236
270
  - !ruby/object:Gem::Version
237
- version: 5.5.0
271
+ version: '0.16'
238
272
  description: A command-line tool to help manage your Google Calendar.
239
273
  email:
240
274
  - mike.dalessio@gmail.com
@@ -251,10 +285,17 @@ files:
251
285
  - Rakefile
252
286
  - bin/calendar-assistant
253
287
  - lib/calendar_assistant.rb
254
- - lib/calendar_assistant/authorizer.rb
255
288
  - lib/calendar_assistant/calendar_assistant.rb
256
289
  - lib/calendar_assistant/cli.rb
257
- - lib/calendar_assistant/cli_helpers.rb
290
+ - lib/calendar_assistant/cli/authorizer.rb
291
+ - lib/calendar_assistant/cli/commands.rb
292
+ - lib/calendar_assistant/cli/config.rb
293
+ - lib/calendar_assistant/cli/event_presenter.rb
294
+ - lib/calendar_assistant/cli/event_set_presenter.rb
295
+ - lib/calendar_assistant/cli/helpers.rb
296
+ - lib/calendar_assistant/cli/linter_event_presenter.rb
297
+ - lib/calendar_assistant/cli/linter_event_set_presenter.rb
298
+ - lib/calendar_assistant/cli/printer.rb
258
299
  - lib/calendar_assistant/config.rb
259
300
  - lib/calendar_assistant/config/token_store.rb
260
301
  - lib/calendar_assistant/date_helpers.rb
@@ -287,8 +328,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
287
328
  - !ruby/object:Gem::Version
288
329
  version: '0'
289
330
  requirements: []
290
- rubyforge_project:
291
- rubygems_version: 2.7.8
331
+ rubygems_version: 3.0.1
292
332
  signing_key:
293
333
  specification_version: 4
294
334
  summary: A command-line tool to help manage your Google Calendar.
@@ -1,86 +0,0 @@
1
- #
2
- # code in this file is inspired by
3
- #
4
- # https://github.com/gsuitedevs/ruby-samples/blob/master/calendar/quickstart/quickstart.rb
5
- #
6
- # Copyright 2018 Google LLC
7
- #
8
- # Licensed under the Apache License, Version 2.0 (the "License");
9
- # you may not use this file except in compliance with the License.
10
- # You may obtain a copy of the License at
11
- #
12
- # https://www.apache.org/licenses/LICENSE-2.0
13
- #
14
- # Unless required by applicable law or agreed to in writing, software
15
- # distributed under the License is distributed on an "AS IS" BASIS,
16
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
- # See the License for the specific language governing permissions and
18
- # limitations under the License.
19
-
20
- class CalendarAssistant
21
- class Authorizer
22
- class NoCredentials < CalendarAssistant::BaseException ; end
23
- class UnauthorizedError < CalendarAssistant::BaseException ; end
24
-
25
- OOB_URI = 'urn:ietf:wg:oauth:2.0:oob'.freeze
26
- APPLICATION_NAME = "Flavorjones Calendar Assistant".freeze
27
- CREDENTIALS_PATH = File.join ENV["HOME"], ".calendar-assistant.client"
28
- SCOPE = Google::Apis::CalendarV3::AUTH_CALENDAR
29
-
30
- attr_reader :profile_name, :config_token_store
31
-
32
- def initialize profile_name, config_token_store
33
- @profile_name = profile_name
34
- @config_token_store = config_token_store
35
- end
36
-
37
- def authorize
38
- credentials || prompt_user_for_authorization
39
- end
40
-
41
- def service
42
- if credentials.nil?
43
- raise UnauthorizedError, "Not authorized. Please run `calendar-assistant authorize #{profile_name}`"
44
- end
45
-
46
- Google::Apis::CalendarV3::CalendarService.new.tap do |service|
47
- service.client_options.application_name = APPLICATION_NAME
48
- service.authorization = credentials
49
- end
50
- end
51
-
52
- private
53
-
54
- def credentials
55
- @credentials ||= authorizer.get_credentials profile_name
56
- end
57
-
58
- def prompt_user_for_authorization
59
- url = authorizer.get_authorization_url(base_url: OOB_URI)
60
-
61
- puts Rainbow("Please open this URL in your browser:").bold
62
- puts
63
- puts " " + url
64
- puts
65
-
66
- puts Rainbow("Then authorize '#{APPLICATION_NAME}' to manage your calendar and copy/paste the resulting code here:").bold
67
- puts
68
- print "> "
69
- code = STDIN.gets
70
-
71
- authorizer.get_and_store_credentials_from_code(user_id: profile_name, code: code, base_url: OOB_URI)
72
- end
73
-
74
- def authorizer
75
- @authorizer ||= begin
76
- if ! File.exists?(CREDENTIALS_PATH)
77
- raise NoCredentials, "No credentials found. Please run `calendar-assistant help setup` for instructions"
78
- end
79
-
80
- FileUtils.chmod 0600, CREDENTIALS_PATH
81
- client_id = Google::Auth::ClientId.from_file(CREDENTIALS_PATH)
82
- Google::Auth::UserAuthorizer.new(client_id, SCOPE, config_token_store)
83
- end
84
- end
85
- end
86
- end