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