class Feedjira::Feed

Public Class Methods

add_common_feed_element(element_tag, options = {}) click to toggle source
# File lib/feedjira/feed.rb, line 35
def self.add_common_feed_element(element_tag, options = {})
  feed_classes.each do |k|
    k.element element_tag, options
  end
end
add_common_feed_elements(element_tag, options = {}) click to toggle source
# File lib/feedjira/feed.rb, line 41
def self.add_common_feed_elements(element_tag, options = {})
  feed_classes.each do |k|
    k.elements element_tag, options
  end
end
add_common_feed_entry_element(element_tag, options = {}) click to toggle source
# File lib/feedjira/feed.rb, line 47
def self.add_common_feed_entry_element(element_tag, options = {})
  call_on_each_feed_entry :element, element_tag, options
end
add_common_feed_entry_elements(element_tag, options = {}) click to toggle source
# File lib/feedjira/feed.rb, line 51
def self.add_common_feed_entry_elements(element_tag, options = {})
  call_on_each_feed_entry :elements, element_tag, options
end
add_feed_class(klass) click to toggle source
# File lib/feedjira/feed.rb, line 20
def self.add_feed_class(klass)
  feed_classes.unshift klass
end
call_on_each_feed_entry(method, *parameters) click to toggle source
# File lib/feedjira/feed.rb, line 55
def self.call_on_each_feed_entry(method, *parameters)
  feed_classes.each do |k|
    k.sax_config.collection_elements.each_value do |vl|
      vl.find_all{|v| (v.accessor == 'entries') && (v.data_class.class == Class)}.each do |v|
          v.data_class.send(method, *parameters)
      end
    end
  end
end
connection(url) click to toggle source
# File lib/feedjira/feed.rb, line 79
def self.connection(url)
  Faraday.new(url: url) do |conn|
    conn.use FaradayMiddleware::FollowRedirects, limit: 3
    conn.adapter :net_http
  end
end
determine_feed_parser_for_xml(xml) click to toggle source
# File lib/feedjira/feed.rb, line 15
def self.determine_feed_parser_for_xml(xml)
  start_of_doc = xml.slice(0, 2000)
  feed_classes.detect {|klass| klass.able_to_parse?(start_of_doc)}
end
feed_classes() click to toggle source
# File lib/feedjira/feed.rb, line 24
def self.feed_classes
  @feed_classes ||= [
    Feedjira::Parser::RSSFeedBurner,
    Feedjira::Parser::GoogleDocsAtom,
    Feedjira::Parser::AtomFeedBurner,
    Feedjira::Parser::Atom,
    Feedjira::Parser::ITunesRSS,
    Feedjira::Parser::RSS
  ]
end
fetch_and_parse(url) click to toggle source
# File lib/feedjira/feed.rb, line 65
def self.fetch_and_parse(url)
  response = connection(url).get
  raise FetchFailure.new("Fetch failed - #{response.status}") unless response.success?
  xml = response.body
  parser_klass = determine_feed_parser_for_xml xml
  raise NoParserAvailable.new("No valid parser for XML.") unless parser_klass

  feed = parse_with parser_klass, xml
  feed.feed_url = url
  feed.etag = response.headers['etag'].to_s.gsub(/"/, '')
  feed.last_modified = response.headers['last-modified']
  feed
end
parse(xml, &block) click to toggle source
# File lib/feedjira/feed.rb, line 7
def self.parse(xml, &block)
  if parser = determine_feed_parser_for_xml(xml)
    parse_with parser, xml, &block
  else
    raise NoParserAvailable.new("No valid parser for XML.")
  end
end
parse_with(parser, xml, &block) click to toggle source
# File lib/feedjira/feed.rb, line 3
def self.parse_with(parser, xml, &block)
  parser.parse xml, &block
end