Class: FeedNormalizer::FeedNormalizer

Inherits:
Object
  • Object
show all
Defined in:
lib/feed-normalizer.rb

Class Method Summary collapse

Class Method Details

.parse(xml, opts = {}) ⇒ Object

Parses the given xml and attempts to return a normalized Feed object. Setting force_parser to a suitable parser will mean that parser is used first, and if try_others is false, it is the only parser used, otherwise all parsers in the ParserRegistry are attempted, in order of priority.

Available options

  • :force_parser - instruct feed-normalizer to try the specified parser first. Takes a class, such as RubyRssParser, or SimpleRssParser.

  • :try_others - true or false, defaults to true. If true, other parsers will be used as described above. The option is useful if combined with force_parser to only use a single parser.

  • :loose - true or false, defaults to false.

    Specifies parsing should be done loosely. This means that when feed-normalizer would usually throw away data in order to meet the requirement of keeping resulting feed outputs the same regardless of the underlying parser, the data will instead be kept. This currently affects the following items:

    • Categories: RSS allows for multiple categories per feed item.

      • Limitation: SimpleRSS can only return the first category for an item.

      • Result: When loose is true, the extra categories are kept, of course, only if the parser is not SimpleRSS.



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/feed-normalizer.rb', line 117

def self.parse(xml, opts = {})

  # Get a string ASAP, as multiple read()'s will start returning nil..
  xml = xml.respond_to?(:read) ? xml.read : xml.to_s

  if opts[:force_parser]
    result = opts[:force_parser].parse(xml, opts[:loose])

    return result if result
    return nil if opts[:try_others] == false
  end

  ParserRegistry.parsers.each do |parser|
    result = parser.parse(xml, opts[:loose])
    return result if result
  end

  # if we got here, no parsers worked.
  return nil
end