lib/feedjira.rb in feedjira-2.2.0 vs lib/feedjira.rb in feedjira-3.0.0.beta1

- old
+ new

@@ -1,47 +1,75 @@ -require 'zlib' -require 'faraday' -require 'faraday_middleware' -require 'sax-machine' -require 'loofah' -require 'logger' +require "zlib" +require "sax-machine" +require "loofah" +require "logger" +require "json" -require 'feedjira/core_ext' -require 'feedjira/configuration' -require 'feedjira/date_time_utilities/date_time_epoch_parser' -require 'feedjira/date_time_utilities/date_time_language_parser' -require 'feedjira/date_time_utilities/date_time_pattern_parser' -require 'feedjira/date_time_utilities' -require 'feedjira/date_time_utilities' -require 'feedjira/feed_entry_utilities' -require 'feedjira/feed_utilities' -require 'feedjira/feed' -require 'feedjira/parser' -require 'feedjira/parser/rss_entry' -require 'feedjira/parser/rss_image' -require 'feedjira/parser/rss' -require 'feedjira/parser/atom_entry' -require 'feedjira/parser/atom' -require 'feedjira/preprocessor' -require 'feedjira/version' +require "feedjira/core_ext" +require "feedjira/configuration" +require "feedjira/date_time_utilities/date_time_epoch_parser" +require "feedjira/date_time_utilities/date_time_language_parser" +require "feedjira/date_time_utilities/date_time_pattern_parser" +require "feedjira/date_time_utilities" +require "feedjira/date_time_utilities" +require "feedjira/feed_entry_utilities" +require "feedjira/feed_utilities" +require "feedjira/feed" +require "feedjira/parser" +require "feedjira/parser/rss_entry" +require "feedjira/parser/rss_image" +require "feedjira/parser/rss" +require "feedjira/parser/atom_entry" +require "feedjira/parser/atom" +require "feedjira/preprocessor" +require "feedjira/version" -require 'feedjira/parser/rss_feed_burner_entry' -require 'feedjira/parser/rss_feed_burner' -require 'feedjira/parser/podlove_chapter' -require 'feedjira/parser/itunes_rss_owner' -require 'feedjira/parser/itunes_rss_category' -require 'feedjira/parser/itunes_rss_item' -require 'feedjira/parser/itunes_rss' -require 'feedjira/parser/atom_feed_burner_entry' -require 'feedjira/parser/atom_feed_burner' -require 'feedjira/parser/google_docs_atom_entry' -require 'feedjira/parser/google_docs_atom' -require 'feedjira/parser/atom_youtube_entry' -require 'feedjira/parser/atom_youtube' +require "feedjira/parser/rss_feed_burner_entry" +require "feedjira/parser/rss_feed_burner" +require "feedjira/parser/podlove_chapter" +require "feedjira/parser/itunes_rss_owner" +require "feedjira/parser/itunes_rss_category" +require "feedjira/parser/itunes_rss_item" +require "feedjira/parser/itunes_rss" +require "feedjira/parser/atom_feed_burner_entry" +require "feedjira/parser/atom_feed_burner" +require "feedjira/parser/google_docs_atom_entry" +require "feedjira/parser/google_docs_atom" +require "feedjira/parser/atom_youtube_entry" +require "feedjira/parser/atom_youtube" +require "feedjira/parser/json_feed" +require "feedjira/parser/json_feed_item" # Feedjira module Feedjira - class NoParserAvailable < StandardError; end - class FetchFailure < StandardError; end + NoParserAvailable = Class.new(StandardError) extend Configuration + + # Parse XML with first compatible parser + # + # @example + # xml = HTTParty.get("http://example.com").body + # Feedjira.parse(xml) + def parse(xml, parser: nil, &block) + parser ||= parser_for_xml(xml) + + if parser.nil? + raise NoParserAvailable, "No valid parser for XML." + end + + parser.parse(xml, &block) + end + module_function :parse + + # Find compatible parser for given XML + # + # @example + # xml = HTTParty.get("http://example.com").body + # parser = Feedjira.parser_for_xml(xml) + # parser.parse(xml) + def parser_for_xml(xml) + start_of_doc = xml.slice(0, 2000) + Feedjira.parsers.detect { |klass| klass.able_to_parse?(start_of_doc) } + end + module_function :parser_for_xml end