class OpmlReader::OpmlReader
Attributes
categories[R]
uncategorized_name[R]
xml[R]
Public Class Methods
new(filepath, uncategorized_name = "")
click to toggle source
# File lib/opml_reader.rb, line 11 def initialize(filepath, uncategorized_name = "") @uncategoriezed_name = uncategorized_name @categories = [] @xml = File.open(filepath, &:read) end
read(filepath, uncategorized_name = "uncategorized")
click to toggle source
# File lib/opml_reader.rb, line 17 def self.read(filepath, uncategorized_name = "uncategorized") reader = new(filepath, uncategorized_name) reader.parse reader end
Public Instance Methods
category()
click to toggle source
# File lib/opml_reader.rb, line 44 def category @categories.map do |category| category.name end end
exists_category?(name)
click to toggle source
# File lib/opml_reader.rb, line 31 def exists_category?(name) category = @categories.select do |category| category.name == name end true if category.length > 0 end
get_category(name)
click to toggle source
# File lib/opml_reader.rb, line 23 def get_category(name) @categories << Category.new(name) unless exists_category?(name) categories = @categories.select do |category| category.name == name end categories[0] end
parse()
click to toggle source
# File lib/opml_reader.rb, line 50 def parse # type=rss is rss get_element(read_outlines(@xml)).each do |outline| if rss_node?(outline) get_argument(outline) else make_rss_with_category(outline) end end end
rss()
click to toggle source
# File lib/opml_reader.rb, line 38 def rss @categories.map do |category| category.rss end end
Private Instance Methods
add_rss(title, html_url, xml_url, category_name = @uncategorized_name)
click to toggle source
# File lib/opml_reader.rb, line 62 def add_rss(title, html_url, xml_url, category_name = @uncategorized_name) category = get_category(category_name) rss = RSS.new(title, html_url, xml_url, category_name) category.add_rss(rss) end
get_argument(outline, category = @uncategoriezed_name)
click to toggle source
# File lib/opml_reader.rb, line 68 def get_argument(outline, category = @uncategoriezed_name) add_rss(outline.attribute("title").value, outline.attribute("htmlUrl").value, outline.attribute("xmlUrl").value, category) end
get_element(nodes)
click to toggle source
# File lib/opml_reader.rb, line 81 def get_element(nodes) nodes.select do |outline| outline.class == Oga::XML::Element end end
make_rss_with_category(category_node)
click to toggle source
# File lib/opml_reader.rb, line 94 def make_rss_with_category(category_node) category = category_node.attribute("text").value get_element(category_node.children).each do |node| get_argument(node, category) if rss_node?(node) end end
read_outlines(xml)
click to toggle source
# File lib/opml_reader.rb, line 75 def read_outlines(xml) # outline is category or rss document = Oga.parse_xml(xml) document.xpath("//body/outline") end
rss_node?(node)
click to toggle source
# File lib/opml_reader.rb, line 87 def rss_node?(node) return false if node.attributes.length.zero? type = node.attribute("type") return false if type.nil? true if type.value == "rss" end