【发布时间】:2015-06-02 16:10:02
【问题描述】:
我对 Ruby 还很陌生,正在做一个小项目。我想从 iCalendar(*.ics 文件)事件中打印出一些详细信息。要处理 ics 文件,我使用 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
【问题讨论】:
-
你在
currentOnDuty对象中得到了什么? -
currentOnDuty 是一组 Icalendar::Event 对象。因为我只需要一个事件,所以我使用 currentOnDuty.first。
-
您是否介意尝试
puts currentOnDuty.first.attendee.inspect并分享输出。另外,试试puts currentOnDuty.first.attendee.cn。 -
attendee.inspect 打印出
[#<URI::MailTo mailto:Jon.Doe@acme.com>],attendee.cn 给我一个undefined method 'cn' -
另外两个建议:打印出
...attendee.class并尝试...attendee['cn']、...attendee['CN']和...attendee[:cn]。