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