123456789_123456789_123456789_123456789_123456789_

Class: RSS::Parser

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Forwardable
Inherits: Object
Defined in: lib/rss/parser.rb

Class Attribute Summary

Class Method Summary

Instance Method Summary

Constructor Details

.new(rss, parser_class = self.class.default_parser) ⇒ Parser

[ GitHub ]

  
# File 'lib/rss/parser.rb', line 88

def initialize(rss, parser_class=self.class.default_parser)
  @parser = parser_class.new(normalize_rss(rss))
end

Class Attribute Details

.default_parser (rw)

[ GitHub ]

  
# File 'lib/rss/parser.rb', line 60

def default_parser
  @@default_parser || AVAILABLE_PARSERS.first
end

.default_parser=(new_value) (rw)

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

[ GitHub ]

  
# File 'lib/rss/parser.rb', line 66

def default_parser=(new_value)
  if AVAILABLE_PARSERS.include?(new_value)
    @@default_parser = new_value
  else
    raise NotValidXMLParser.new(new_value)
  end
end

Class Method Details

.parse(rss, do_validate = true, ignore_unknown_element = true, parser_class = default_parser)

[ GitHub ]

  
# File 'lib/rss/parser.rb', line 74

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

Instance Method Details

#maybe_xml?(source) ⇒ Boolean (private)

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

[ GitHub ]

  
# File 'lib/rss/parser.rb', line 112

def maybe_xml?(source)
  source.is_a?(String) and /</ =~ source
end

#normalize_rss(rss) (private)

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,

[ GitHub ]

  
# File 'lib/rss/parser.rb', line 97

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) (private)

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

[ GitHub ]

  
# File 'lib/rss/parser.rb', line 118

def to_uri(rss)
  return rss if rss.is_a?(::URI::Generic)

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