1require 'rss/trackback'
2require 'rss/maker/1.0'
3require 'rss/maker/2.0'
4
5module RSS
6  module Maker
7    module TrackBackModel
8      def self.append_features(klass)
9        super
10
11        klass.def_other_element("#{RSS::TRACKBACK_PREFIX}_ping")
12        klass.def_classed_elements("#{RSS::TRACKBACK_PREFIX}_about", "value",
13                                   "TrackBackAbouts")
14      end
15
16      class TrackBackAboutsBase < Base
17        def_array_element("about", nil, "TrackBackAbout")
18
19        class TrackBackAboutBase < Base
20          attr_accessor :value
21          add_need_initialize_variable("value")
22
23          alias_method(:resource, :value)
24          alias_method(:resource=, :value=)
25          alias_method(:content, :value)
26          alias_method(:content=, :value=)
27
28          def have_required_values?
29            @value
30          end
31
32          def to_feed(feed, current)
33            if current.respond_to?(:trackback_abouts) and have_required_values?
34              about = current.class::TrackBackAbout.new
35              setup_values(about)
36              setup_other_elements(about)
37              current.trackback_abouts << about
38            end
39          end
40        end
41      end
42    end
43
44    class ItemsBase
45      class ItemBase; include TrackBackModel; end
46    end
47
48    makers.each do |maker|
49      maker.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
50        class Items
51          class Item
52            class TrackBackAbouts < TrackBackAboutsBase
53              class TrackBackAbout < TrackBackAboutBase
54              end
55            end
56          end
57        end
58      EOC
59    end
60  end
61end
62