feedjira/feedjira

View on GitHub
lib/feedjira/parser/itunes_rss_item.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

module Feedjira
  module Parser
    # iTunes extensions to the standard RSS2.0 item
    # Source: http://www.apple.com/itunes/whatson/podcasts/specs.html
    class ITunesRSSItem
      include SAXMachine
      include FeedEntryUtilities
      include RSSEntryUtilities

      sax_config.top_level_elements["enclosure"].clear

      # If author is not present use author tag on the item
      element :"itunes:author", as: :itunes_author
      element :"itunes:block", as: :itunes_block
      element :"itunes:duration", as: :itunes_duration
      element :"itunes:explicit", as: :itunes_explicit
      element :"itunes:keywords", as: :itunes_keywords
      element :"itunes:subtitle", as: :itunes_subtitle
      element :"itunes:image", value: :href, as: :itunes_image
      element :"itunes:isClosedCaptioned", as: :itunes_closed_captioned
      element :"itunes:order", as: :itunes_order
      element :"itunes:season", as: :itunes_season
      element :"itunes:episode", as: :itunes_episode
      element :"itunes:title", as: :itunes_title
      element :"itunes:episodeType", as: :itunes_episode_type

      # If summary is not present, use the description tag
      element :"itunes:summary", as: :itunes_summary
      element :enclosure, value: :length, as: :enclosure_length
      element :enclosure, value: :type, as: :enclosure_type
      element :enclosure, value: :url, as: :enclosure_url
      elements "psc:chapter", as: :raw_chapters, class: Feedjira::Parser::PodloveChapter

      # Podlove requires clients to re-order by start time in the
      # event the publisher doesn't provide them in that
      # order. SAXMachine doesn't have any sort capability afaik, so
      # we have to sort chapters manually.
      def chapters
        raw_chapters.sort_by(&:start)
      end
    end
  end
end