lib/atomic/entry.rb in exempla-atomic-0.0.5 vs lib/atomic/entry.rb in exempla-atomic-0.0.6

- old
+ new

@@ -8,35 +8,55 @@ class << self def parse(data) entry = new - doc = data.kind_of?(Nokogiri::XML::Element) ? data : Nokogiri.XML(data) + doc = data.kind_of?(Nokogiri::XML::Element) ? data : Nokogiri.XML(data, nil, nil, Nokogiri::XML::PARSE_RECOVER + Nokogiri::XML::PARSE_NOBLANKS) +# puts("================================================================") +# puts("XML") +# puts("================================================================") +# puts(doc.inspect) +# puts("================================================================") + + entry_node = doc.xpath('//atom:entry', NAMESPACES).first entry.id = entry_node.xpath('atom:id', NAMESPACES).first.text entry.title = entry_node.xpath('atom:title', NAMESPACES).first.text entry.created_at = entry_node.xpath('atom:published', NAMESPACES).first.text entry.updated_at = entry_node.xpath('atom:updated', NAMESPACES).first.text content_node = entry_node.xpath('atom:content', NAMESPACES).first + entry.content = {:type => content_node['type']} if (content_node['type'] == 'application/xml') - entry.content = {} - announcement_node = content_node.xpath('cirrus:announcement', NAMESPACES).first - unless announcement_node.nil? - entry.content[:message] = announcement_node.xpath('cirrus:message', NAMESPACES).first.text - entry.content[:starts_at] = announcement_node.xpath('cirrus:starts-at', NAMESPACES).first.text - entry.content[:ends_at] = announcement_node.xpath('cirrus:ends-at', NAMESPACES).first.text + content_hash = {} + case content_node.children.first.name + when 'announcement' + announcement_node = content_node.xpath('cirrus:announcement', NAMESPACES).first + unless announcement_node.nil? + content_hash[:message] = announcement_node.xpath('cirrus:message', NAMESPACES).first.text + content_hash[:starts_at] = announcement_node.xpath('cirrus:starts-at', NAMESPACES).first.text + content_hash[:ends_at] = announcement_node.xpath('cirrus:ends-at', NAMESPACES).first.text + end + else + throw("Unknown Content Type: #{content_node.children.first.name}") end + entry.content[:data] = {content_node.children.first.name => content_hash} else - entry.content = content_node.inner_html + entry.content[:data] = content_node.inner_html end entry.categories = [] entry_node.xpath('atom:category', NAMESPACES).each do |category_node| entry.categories << {:term => category_node['term'], :scheme => category_node['scheme']} end + +# puts("================================================================") +# puts("Entry") +# puts("================================================================") +# puts(entry.inspect) +# puts("================================================================") entry end end