# class RSS::Parser

### Public Class Methods

default_parser() click to toggle source

    # File lib/rss/parser.rb, line 61
    def default_parser
      @@default_parser || AVAILABLE_PARSERS.first
    end

default_parser=(new_value) click to toggle source

`Set` @@default_parser to new_value if it is one of the available parsers. Else raise `NotValidXMLParser` error.

    # File lib/rss/parser.rb, line 67
    def default_parser=(new_value)
      if AVAILABLE_PARSERS.include?(new_value)
        @@default_parser = new_value
      else
        raise NotValidXMLParser.new(new_value)
      end
    end

new(rss, parser_class=self.class.default_parser) click to toggle source

    # File lib/rss/parser.rb, line 89
    def initialize(rss, parser_class=self.class.default_parser)
      @parser = parser_class.new(normalize_rss(rss))
    end

parse(rss, do_validate=true, ignore_unknown_element=true, parser_class=default_parser) click to toggle source

    # File lib/rss/parser.rb, line 75
    def parse(rss, do_validate=true, ignore_unknown_element=true,
              parser_class=default_parser)
      parser = new(rss, parser_class)
      parser.do_validate = do_validate
      parser.ignore_unknown_element = ignore_unknown_element
      parser.parse
    end

### Private Instance Methods

maybe_xml?(source) click to toggle source

maybe_xml? tests if source is a string that looks like `XML`.

    # File lib/rss/parser.rb, line 113
    def maybe_xml?(source)
      source.is_a?(String) and /</ =~ source
    end

normalize_rss(rss) click to toggle source

Try to get the `XML` associated with `rss`. Return `rss` if it already looks like `XML`, or treat it as a `URI`, or a file to get the `XML`,

    # File lib/rss/parser.rb, line 98
    def normalize_rss(rss)
      return rss if maybe_xml?(rss)

      uri = to_uri(rss)

      if uri.respond_to?(:read)
        uri.read
      elsif !rss.tainted? and File.readable?(rss)
        File.open(rss) {|f| f.read}
      else
        rss
      end
    end

to_uri(rss) click to toggle source

Attempt to convert rss to a `URI`, but just return it if there's a `::URI::Error`

    # File lib/rss/parser.rb, line 119
    def to_uri(rss)
      return rss if rss.is_a?(::URI::Generic)

      begin
        ::URI.parse(rss)
      rescue ::URI::Error
        rss
      end
    end