如何从 Ruby 中的 icalendar 事件中提取参数?
How to extract parameter from icalendar event in Ruby?
我是 Ruby 的新手,正在做一个小项目。我想打印出 iCalendar(*.ics 文件)事件的一些详细信息。为了处理 ics-File,我使用 icalendar gem.
到目前为止,我已经设法提取了正确的事件,但我还需要打印出与会者。我的问题:ATTENDEE 字段使用了多个参数。这是一个例子:
BEGIN:VEVENT
DTSTAMP:20150527T074021Z
DTSTART;VALUE=DATE:20150525
DTEND;VALUE=DATE:20150530
SUMMARY:OnCall Duty
UID:1234
DESCRIPTION:
CREATED:20150512T063102Z
LAST-MODIFIED:20150512T063102Z
ATTENDEE;X-MYUSER-KEY=dfdfdf;CN=Jon
Doe;CUTYPE=INDIVIDUAL:mailto:Jon.Doe@acme.com
SEQUENCE:1
X-CONFLUENCE-SUBCALENDAR-TYPE:other
TRANSP:TRANSPARENT
STATUS:CONFIRMED
END:VEVENT
目前我的代码是这样的:
require 'icalendar'
require 'active_support/all'
require 'open-uri'
ics_file = File.open("ops.ics")
cal = Icalendar.parse(ics_file).first
events = cal.events
now = DateTime.now
currentOnDuty = events.select{ |e| e.summary == "OnCall Duty" && e.dtstart.to_time >= now.beginning_of_week && e.dtend.to_time <= now.end_of_week }
puts "User: #{currentOnDuty.first.attendee}"
创建以下输出:
[#<URI::MailTo Jon.Doe@acme.com>]
我更需要的是 ATTENDEE 的 "CN" 参数。所以我想得到输出:
User: Jon Doe
文档中只有几个使用参数创建事件的示例,但到目前为止我还不知道如何提取某个参数。
关于如何从 ATTENDEE 字段中提取 "CN" 参数的任何提示?
解决方案:
currentOnDuty.first.attendee.ical_params[:cn].first
Icalendar
用 values 包装 ical
,因此:
▶ cal.first.events.first.attendee.first.class
#⇒ Icalendar::Values::CalAddress < Icalendar::Values::Uri
此 class 已公开 ical_params
属性:
▶ cal.first.events.first.attendee.first.ical_params[:cn]
#⇒ [ [0] "John Doe" ]
所以(您可能想检查此属性是否存在):
▶ cal.first.events.first.attendee.first.ical_params[:cn].first
#⇒ "John Doe"
希望对您有所帮助。
我是 Ruby 的新手,正在做一个小项目。我想打印出 iCalendar(*.ics 文件)事件的一些详细信息。为了处理 ics-File,我使用 icalendar gem.
到目前为止,我已经设法提取了正确的事件,但我还需要打印出与会者。我的问题:ATTENDEE 字段使用了多个参数。这是一个例子:
BEGIN:VEVENT
DTSTAMP:20150527T074021Z
DTSTART;VALUE=DATE:20150525
DTEND;VALUE=DATE:20150530
SUMMARY:OnCall Duty
UID:1234
DESCRIPTION:
CREATED:20150512T063102Z
LAST-MODIFIED:20150512T063102Z
ATTENDEE;X-MYUSER-KEY=dfdfdf;CN=Jon
Doe;CUTYPE=INDIVIDUAL:mailto:Jon.Doe@acme.com
SEQUENCE:1
X-CONFLUENCE-SUBCALENDAR-TYPE:other
TRANSP:TRANSPARENT
STATUS:CONFIRMED
END:VEVENT
目前我的代码是这样的:
require 'icalendar'
require 'active_support/all'
require 'open-uri'
ics_file = File.open("ops.ics")
cal = Icalendar.parse(ics_file).first
events = cal.events
now = DateTime.now
currentOnDuty = events.select{ |e| e.summary == "OnCall Duty" && e.dtstart.to_time >= now.beginning_of_week && e.dtend.to_time <= now.end_of_week }
puts "User: #{currentOnDuty.first.attendee}"
创建以下输出:
[#<URI::MailTo Jon.Doe@acme.com>]
我更需要的是 ATTENDEE 的 "CN" 参数。所以我想得到输出:
User: Jon Doe
文档中只有几个使用参数创建事件的示例,但到目前为止我还不知道如何提取某个参数。
关于如何从 ATTENDEE 字段中提取 "CN" 参数的任何提示?
解决方案:
currentOnDuty.first.attendee.ical_params[:cn].first
Icalendar
用 values 包装 ical
,因此:
▶ cal.first.events.first.attendee.first.class
#⇒ Icalendar::Values::CalAddress < Icalendar::Values::Uri
此 class 已公开 ical_params
属性:
▶ cal.first.events.first.attendee.first.ical_params[:cn]
#⇒ [ [0] "John Doe" ]
所以(您可能想检查此属性是否存在):
▶ cal.first.events.first.attendee.first.ical_params[:cn].first
#⇒ "John Doe"
希望对您有所帮助。