class CalInvite::Providers::Google
Google Calendar provider for generating event URLs. This provider generates URLs that open the Google Calendar event creation page with pre-filled event details.
@example Creating a regular event URL event = CalInvite::Event.new( title: “Team Meeting”, start_time: Time.now, end_time: Time.now + 3600 ) google = CalInvite::Providers::Google.new(event) url = google.generate
@example Creating an all-day event URL event = CalInvite::Event.new( title: “Company Holiday”, all_day: true, start_time: Date.today, end_time: Date.today + 1 ) url = CalInvite::Providers::Google.new(event).generate
Public Instance Methods
Source
# File lib/cal_invite/providers/google.rb 34 def generate 35 if event.all_day 36 generate_all_day_event 37 else 38 generate_single_event 39 end 40 end
Generates a Google Calendar URL for the event. Handles both regular and all-day events appropriately.
@return [String] The generated Google Calendar URL @see generate_all_day_event @see generate_single_event
Private Instance Methods
Source
# File lib/cal_invite/providers/google.rb 106 def add_optional_params(params) 107 description_parts = [] 108 description_parts << format_description if format_description 109 description_parts << "Virtual Meeting URL: #{format_url}" if format_url 110 params[:details] = url_encode(description_parts.join("\n\n")) if description_parts.any? 111 params[:location] = url_encode(format_location) if format_location 112 params[:ctz] = url_encode(event.timezone) if event.timezone 113 params[:add] = url_encode(attendee_emails.join(',')) if attendee_emails.any? 114 params[:recur] = url_encode("RRULE:#{event.rrule}") if event.rrule 115 params[:crm] = event.busy ? 'BUSY' : 'AVAILABLE' unless event.busy.nil? 116 params 117 end
Adds optional parameters to the URL parameters hash. Handles description, virtual meeting URL, and location.
@param params [Hash] The parameters hash to update @return [Hash] The updated parameters hash with optional parameters added
Source
# File lib/cal_invite/providers/google.rb 123 def build_url(params) 124 query = params.map { |k, v| "#{k}=#{v}" }.join('&') 125 "https://calendar.google.com/calendar/render?#{query}" 126 end
Source
# File lib/cal_invite/providers/google.rb 79 def format_all_day_dates 80 start_date = event.start_time || Time.now 81 end_date = event.end_time || (start_date + 86400) # Add one day if no end_time 82 83 "#{start_date.strftime('%Y%m%d')}/#{end_date.strftime('%Y%m%d')}" 84 end
Formats dates for an all-day event according to Google Calendar’s requirements. If start_time is not specified, uses current date. If end_time is not specified, adds one day to start_time.
@return [String] Date range in format ‘YYYYMMDD/YYYYMMDD’
Source
# File lib/cal_invite/providers/google.rb 91 def format_dates 92 raise ArgumentError, "Start time is required" unless event.start_time 93 raise ArgumentError, "End time is required" unless event.end_time 94 95 start_time = event.start_time 96 end_time = event.end_time 97 98 "#{start_time.utc.strftime('%Y%m%dT%H%M%SZ')}/#{end_time.utc.strftime('%Y%m%dT%H%M%SZ')}" 99 end
Formats dates and times according to Google Calendar’s requirements. Times are converted to UTC and formatted appropriately.
@return [String] Date/time range in format ‘YYYYMMDDTHHmmSSZ/YYYYMMDDTHHmmSSZ’ @raise [ArgumentError] If either start_time or end_time is missing
Source
# File lib/cal_invite/providers/google.rb 49 def generate_all_day_event 50 params = { 51 action: 'TEMPLATE', 52 text: url_encode(event.title), 53 dates: format_all_day_dates 54 } 55 add_optional_params(params) 56 build_url(params) 57 end
Generates a URL for an all-day event. Uses a simpler date format without time components.
@return [String] The Google Calendar URL for an all-day event @see format_all_day_dates
Source
# File lib/cal_invite/providers/google.rb 64 def generate_single_event 65 params = { 66 action: 'TEMPLATE', 67 text: url_encode(event.title), 68 dates: format_dates 69 } 70 add_optional_params(params) 71 build_url(params) 72 end
Generates a URL for a regular (time-specific) event.
@return [String] The Google Calendar URL for a regular event @raise [ArgumentError] If start_time or end_time is missing @see format_dates