Module: Selene::Parser

Defined in:
lib/selene/parser.rb

Class Method Summary collapse

Class Method Details

.builder(component) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/selene/parser.rb', line 15

def self.builder(component)
  case component.downcase
  when 'vcalendar' then CalendarBuilder
  when 'vtimezone' then TimeZoneBuilder
  when 'daylight' then DaylightSavingsTimeBuilder
  when 'standard' then StandardTimeBuilder
  when 'vevent' then EventBuilder
  when 'valarm' then AlarmBuilder
  else ComponentBuilder
  end
end

.parse(string) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/selene/parser.rb', line 27

def self.parse(string)
  stack = []
  stack << builder('feed').new
  Line.split(string).each do |line|
    if line.begin_component?
      builder = builder(line.value).new
      stack[-1].add(line.value, builder) unless stack.empty?
      stack << builder
    elsif line.end_component?
      stack.pop
    else
      stack[-1].parse(line)
    end
  end
  stack[-1].component
end