class CalInvite::Providers::Yahoo
Yahoo Calendar provider for generating calendar event URLs. This provider generates URLs that open the Yahoo Calendar with a pre-filled event creation form. Supports all-day events, regular events, and multi-day sessions with proper timezone handling.
Note: Yahoo Calendar handles multi-day sessions differently from other providers, generating separate event URLs for each session.
@example Creating a regular event URL event = CalInvite::Event.new( title: “Team Meeting”, start_time: Time.now, end_time: Time.now + 3600, description: “Weekly team sync”, timezone: “America/New_York” ) yahoo = CalInvite::Providers::Yahoo.new(event) url = yahoo.generate
@example Creating a multi-day event URL event = CalInvite::Event.new( title: “Conference”, multi_day_sessions: [ { start_time: Time.parse(“2024-04-01 09:00”), end_time: Time.parse(“2024-04-01 17:00”) }, { start_time: Time.parse(“2024-04-02 09:00”), end_time: Time.parse(“2024-04-02 17:00”) } ] ) urls = CalInvite::Providers::Yahoo.new(event).generate # Returns multiple URLs
Constants
- BASE_URL
-
Base URL for
YahooCalendar
Public Instance Methods
Source
# File lib/cal_invite/providers/yahoo.rb 44 def generate 45 if event.all_day 46 generate_all_day_event 47 elsif event.multi_day_sessions.any? 48 generate_multi_day_event 49 else 50 generate_single_event 51 end 52 end
Generates Yahoo Calendar URL(s) for the event. Handles all event types: all-day, regular, and multi-day sessions.
@return [String] A single URL for regular or all-day events, or multiple URLs (separated by newlines) for multi-day sessions @raise [ArgumentError] If required time fields are missing for non-all-day events
Private Instance Methods
Source
# File lib/cal_invite/providers/yahoo.rb 136 def format_date(time) 137 time.strftime("%Y%m%d") 138 end
Formats a time object as a date string for Yahoo Calendar.
@param time [Time] The time to format @return [String] The formatted date (YYYYMMDD)
Source
# File lib/cal_invite/providers/yahoo.rb 145 def format_time(time) 146 # Always use UTC format for the URL, timezone is passed separately 147 time.utc.strftime("%Y%m%dT%H%M%SZ") 148 end
Source
# File lib/cal_invite/providers/yahoo.rb 60 def generate_all_day_event 61 start_date = event.start_time || Time.now 62 end_date = event.end_time || (start_date + 86400) 63 64 params = { 65 v: 60, 66 view: 'd', 67 type: 20, 68 title: event.title, 69 st: format_date(start_date), 70 et: format_date(end_date), 71 desc: format_description, 72 in_loc: format_location, 73 crnd: event.timezone, 74 allday: 'true' 75 } 76 77 "#{BASE_URL}/?#{URI.encode_www_form(params)}" 78 end
Generates a URL for an all-day event. Uses simplified date format and sets the allday flag.
@return [String] The Yahoo Calendar URL for an all-day event
Source
# File lib/cal_invite/providers/yahoo.rb 112 def generate_multi_day_event 113 sessions = event.multi_day_sessions.map do |session| 114 params = { 115 v: 60, 116 view: 'd', 117 type: 20, 118 title: event.title, 119 st: format_time(session[:start_time]), 120 et: format_time(session[:end_time]), 121 desc: format_description, 122 in_loc: format_location, 123 crnd: event.timezone 124 } 125 126 "#{BASE_URL}/?#{URI.encode_www_form(params)}" 127 end 128 129 sessions.join("\n") 130 end
Source
# File lib/cal_invite/providers/yahoo.rb 85 def generate_single_event 86 raise ArgumentError, "Start time is required" unless event.start_time 87 raise ArgumentError, "End time is required" unless event.end_time 88 89 description_parts = [] 90 description_parts << format_description if format_description 91 description_parts << "Virtual Meeting URL: #{format_url}" if format_url 92 93 params = { 94 v: 60, 95 view: 'd', 96 type: 20, 97 title: event.title, 98 st: format_time(event.start_time), 99 et: format_time(event.end_time), 100 desc: description_parts.join("\n\n"), 101 in_loc: format_location, 102 crnd: event.timezone 103 } 104 105 "#{BASE_URL}/?#{URI.encode_www_form(params)}" 106 end
Generates a URL for a regular (time-specific) event. Includes specific start and end times with timezone information.
@return [String] The Yahoo Calendar URL for a regular event @raise [ArgumentError] If start_time or end_time is missing