summaryrefslogtreecommitdiff
path: root/ruby_1_8_5/lib/rss/maker/trackback.rb
blob: 4ae6164f6856484d2f630adca254b5819c1f2076 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
require 'rss/trackback'
require 'rss/maker/1.0'
require 'rss/maker/2.0'

module RSS
  module Maker
    module TrackBackModel
      def self.append_features(klass)
        super

        name = "#{RSS::TRACKBACK_PREFIX}_ping"
        klass.add_need_initialize_variable(name)
        klass.add_other_element(name)
        klass.module_eval(<<-EOC, __FILE__, __LINE__+1)
          attr_accessor :#{name}
          def setup_#{name}(rss, current)
            if #{name} and current.respond_to?(:#{name}=)
              current.#{name} = #{name}
            end
          end
        EOC

        name = "#{RSS::TRACKBACK_PREFIX}_abouts"
        klass.add_need_initialize_variable(name, "make_#{name}")
        klass.add_other_element(name)
        klass.module_eval(<<-EOC, __FILE__, __LINE__+1)
          attr_accessor :#{name}
          def make_#{name}
            self.class::TrackBackAbouts.new(self)
          end

          def setup_#{name}(rss, current)
            @#{name}.to_rss(rss, current)
          end
        EOC
      end

      class TrackBackAboutsBase
        include Base

        def_array_element("abouts")
        
        def new_about
          about = self.class::TrackBackAbout.new(@maker)
          @abouts << about
          if block_given?
            yield about
          else
            about
          end
        end

        def to_rss(rss, current)
          @abouts.each do |about|
            about.to_rss(rss, current)
          end
        end
        
        class TrackBackAboutBase
          include Base

          attr_accessor :value
          add_need_initialize_variable("value")
          
          alias_method(:resource, :value)
          alias_method(:resource=, :value=)
          alias_method(:content, :value)
          alias_method(:content=, :value=)
        
          def have_required_values?
            @value
          end
          
        end
      end
    end

    class ItemsBase
      class ItemBase; include TrackBackModel; end
    end

    class RSS10
      class Items
        class Item
          class TrackBackAbouts < TrackBackAboutsBase
            class TrackBackAbout < TrackBackAboutBase
              def to_rss(rss, current)
                if resource
                  about = ::RSS::TrackBackModel10::TrackBackAbout.new(resource)
                  current.trackback_abouts << about
                end
              end
            end
          end
        end
      end
    end

    class RSS09
      class Items
        class Item
          class TrackBackAbouts < TrackBackAboutsBase
            def to_rss(*args)
            end
            class TrackBackAbout < TrackBackAboutBase
            end
          end
        end
      end
    end
    
    class RSS20
      class Items
        class Item
          class TrackBackAbouts < TrackBackAboutsBase
            class TrackBackAbout < TrackBackAboutBase
              def to_rss(rss, current)
                if content
                  about = ::RSS::TrackBackModel20::TrackBackAbout.new(content)
                  current.trackback_abouts << about
                end
              end
            end
          end
        end
      end
    end
    
  end
end