2015-06-02 1 views
0

Я довольно новичок в Ruby и работаю над небольшим проектом. Я хотел бы распечатать некоторые детали из события iCalendar (* .ics). Для обработки файла ics я использую icalendar gem.Как извлечь параметр из события icalendar в Ruby?

До сих пор мне удалось извлечь правильное событие, но мне также нужно распечатать участника. Моя проблема: поле 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:[email protected] 
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 [email protected]>] 

То, что я скорее нужно, это параметр "CN" для Attendee. Так что я хотел бы получить выход:

User: Jon Doe 

Документов есть только несколько примеров для создания события с параметрами, но до сих пор я не мог понять, как извлечь определенный параметр.

Любые подсказки о том, как извлечь «CN» -параметр из поля ATTENDEE?


Решение:

currentOnDuty.first.attendee.ical_params [: сп] .Первый

+0

Что вы получаете в объекте 'currentOnDuty'? –

+0

currentOnDuty - это массив объектов Icalendar :: Event. Поскольку мне нужно только одно событие, я использую currentOnDuty.first. – Lemmy

+0

Не могли бы вы попробовать «puts currentOnDuty.first.attendee.inspect» и поделиться выходом, пожалуйста. Плюс, попробуйте 'puts currentOnDuty.first.attendee.cn'. – mudasobwa

ответ

0

Icalendar обертывания ical с values, так что:

▶ cal.first.events.first.attendee.first.class 
#⇒ Icalendar::Values::CalAddress < Icalendar::Values::Uri 

Этот класс имеет 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" 

Надеется, что это помогает.

+0

Это был последний намек! Большое спасибо. – Lemmy

+0

Добро пожаловать. – mudasobwa