1require "rss/rss" 2 3module RSS 4 ## 5 # 6 # Provides a set of builders for various RSS objects 7 # 8 # * Feeds 9 # * RSS 0.91 10 # * RSS 1.0 11 # * RSS 2.0 12 # * Atom 1.0 13 # 14 # * Elements 15 # * Atom::Entry 16 17 module Maker 18 19 # Collection of supported makers 20 MAKERS = {} 21 22 class << self 23 # Builder for an RSS object 24 # Creates an object of the type passed in +args+ 25 # 26 # Executes the +block+ to populate elements of the created RSS object 27 def make(version, &block) 28 self[version].make(&block) 29 end 30 31 # Returns the maker for the +version+ 32 def [](version) 33 maker_info = maker(version) 34 raise UnsupportedMakerVersionError.new(version) if maker_info.nil? 35 maker_info[:maker] 36 end 37 38 # Adds a maker to the set of supported makers 39 def add_maker(version, normalized_version, maker) 40 MAKERS[version] = {:maker => maker, :version => normalized_version} 41 end 42 43 # Returns collection of supported maker versions 44 def versions 45 MAKERS.keys.uniq.sort 46 end 47 48 # Returns collection of supported makers 49 def makers 50 MAKERS.values.collect { |info| info[:maker] }.uniq 51 end 52 53 # Returns true if the version is supported 54 def supported?(version) 55 versions.include?(version) 56 end 57 58 private 59 # Can I remove this method? 60 def maker(version) 61 MAKERS[version] 62 end 63 end 64 end 65end 66 67require "rss/maker/1.0" 68require "rss/maker/2.0" 69require "rss/maker/feed" 70require "rss/maker/entry" 71require "rss/maker/content" 72require "rss/maker/dublincore" 73require "rss/maker/slash" 74require "rss/maker/syndication" 75require "rss/maker/taxonomy" 76require "rss/maker/trackback" 77require "rss/maker/image" 78require "rss/maker/itunes" 79