11require "time"
22require "google/apis/calendar_v3"
3+ require "signet"
34require_relative "base"
45require_relative "../../models/calendar"
56require_relative "../../models/event"
@@ -8,65 +9,89 @@ module Rcal
89 module Adapters
910 module Calendar
1011 class Google < Base
12+ AUTH_ERROR_MESSAGE = "Authentication expired or revoked. Run 'rcal init' to re-authenticate."
13+
1114 def initialize ( service :)
1215 @service = service
1316 end
1417
1518 def list_calendars
16- response = @service . list_calendar_lists
17- items = response . items || [ ]
19+ with_auth_handling do
20+ response = @service . list_calendar_lists
21+ items = response . items || [ ]
1822
19- items . map { |cal | build_calendar ( cal ) }
23+ items . map { |cal | build_calendar ( cal ) }
24+ end
2025 end
2126
2227 def get_calendar ( calendar_id :)
23- google_calendar = @service . get_calendar ( calendar_id )
24- build_calendar ( google_calendar )
28+ with_auth_handling do
29+ google_calendar = @service . get_calendar ( calendar_id )
30+ build_calendar ( google_calendar )
31+ end
2532 end
2633
2734 def list_events ( calendar_id :, time_min :, time_max :)
28- response = @service . list_events (
29- calendar_id ,
30- time_min : time_min . iso8601 ,
31- time_max : time_max . iso8601 ,
32- single_events : true ,
33- order_by : "startTime"
34- )
35+ with_auth_handling do
36+ response = @service . list_events (
37+ calendar_id ,
38+ time_min : time_min . iso8601 ,
39+ time_max : time_max . iso8601 ,
40+ single_events : true ,
41+ order_by : "startTime"
42+ )
3543
36- items = response . items || [ ]
44+ items = response . items || [ ]
3745
38- items . map { |evt | build_event ( evt , calendar_id : calendar_id ) }
46+ items . map { |evt | build_event ( evt , calendar_id : calendar_id ) }
47+ end
3948 end
4049
4150 def get_event ( calendar_id :, event_id :)
42- google_event = @service . get_event ( calendar_id , event_id )
43- build_event ( google_event , calendar_id : calendar_id )
51+ with_auth_handling do
52+ google_event = @service . get_event ( calendar_id , event_id )
53+ build_event ( google_event , calendar_id : calendar_id )
54+ end
4455 end
4556
4657 def create_event ( calendar_id :, event :)
47- google_event = build_google_event ( event )
48- response = @service . insert_event ( calendar_id , google_event )
49- build_event ( response , calendar_id : calendar_id )
58+ with_auth_handling do
59+ google_event = build_google_event ( event )
60+ response = @service . insert_event ( calendar_id , google_event )
61+ build_event ( response , calendar_id : calendar_id )
62+ end
5063 end
5164
5265 def update_event ( calendar_id :, event_id :, event :)
53- google_event = build_google_event ( event )
54- response = @service . update_event ( calendar_id , event_id , google_event )
55- build_event ( response , calendar_id : calendar_id )
66+ with_auth_handling do
67+ google_event = build_google_event ( event )
68+ response = @service . update_event ( calendar_id , event_id , google_event )
69+ build_event ( response , calendar_id : calendar_id )
70+ end
5671 end
5772
5873 def delete_event ( calendar_id :, event_id :)
59- @service . delete_event ( calendar_id , event_id )
60- true
74+ with_auth_handling do
75+ @service . delete_event ( calendar_id , event_id )
76+ true
77+ end
6178 end
6279
6380 def quick_add ( calendar_id :, text :)
64- response = @service . quick_add_event ( calendar_id , text )
65- build_event ( response , calendar_id : calendar_id )
81+ with_auth_handling do
82+ response = @service . quick_add_event ( calendar_id , text )
83+ build_event ( response , calendar_id : calendar_id )
84+ end
6685 end
6786
6887 private
6988
89+ def with_auth_handling
90+ yield
91+ rescue ::Google ::Apis ::AuthorizationError , Signet ::AuthorizationError
92+ raise CLI ::Kit ::Abort , AUTH_ERROR_MESSAGE
93+ end
94+
7095 def build_calendar ( google_calendar )
7196 Rcal ::Calendar . new (
7297 id : google_calendar . id ,
0 commit comments