source: extensions/gsdl-video/trunk/installed/cmdline/lib/ruby/1.8/rss/maker/dublincore.rb@ 18425

Last change on this file since 18425 was 18425, checked in by davidb, 15 years ago

Video extension to Greenstone

File size: 4.8 KB
Line 
1require 'rss/dublincore'
2require 'rss/maker/1.0'
3
4module RSS
5 module Maker
6 module DublinCoreModel
7 def self.append_features(klass)
8 super
9
10 ::RSS::DublinCoreModel::ELEMENT_NAME_INFOS.each do |name, plural_name|
11 plural_name ||= "#{name}s"
12 full_name = "#{RSS::DC_PREFIX}_#{name}"
13 full_plural_name = "#{RSS::DC_PREFIX}_#{plural_name}"
14 klass_name = Utils.to_class_name(name)
15 plural_klass_name = "DublinCore#{Utils.to_class_name(plural_name)}"
16 full_plural_klass_name = "self.class::#{plural_klass_name}"
17 full_klass_name = "#{full_plural_klass_name}::#{klass_name}"
18 klass.add_need_initialize_variable(full_plural_name,
19 "make_#{full_plural_name}")
20 klass.add_other_element(full_plural_name)
21 klass.module_eval(<<-EOC, __FILE__, __LINE__+1)
22 attr_accessor :#{full_plural_name}
23 def make_#{full_plural_name}
24 #{full_plural_klass_name}.new(@maker)
25 end
26
27 def setup_#{full_plural_name}(rss, current)
28 @#{full_plural_name}.to_rss(rss, current)
29 end
30
31 def #{full_name}
32 @#{full_plural_name}[0] and @#{full_plural_name}[0].value
33 end
34
35 def #{full_name}=(new_value)
36 @#{full_plural_name}[0] = #{full_klass_name}.new(self)
37 @#{full_plural_name}[0].value = new_value
38 end
39EOC
40 end
41 end
42
43 ::RSS::DublinCoreModel::ELEMENT_NAME_INFOS.each do |name, plural_name|
44 plural_name ||= "#{name}s"
45 klass_name = Utils.to_class_name(name)
46 plural_klass_name = "DublinCore#{Utils.to_class_name(plural_name)}"
47 module_eval(<<-EOC, __FILE__, __LINE__)
48 class #{plural_klass_name}Base
49 include Base
50
51 def_array_element(#{plural_name.dump})
52
53 def new_#{name}
54 #{name} = self.class::#{klass_name}.new(self)
55 @#{plural_name} << #{name}
56 if block_given?
57 yield #{name}
58 else
59 #{name}
60 end
61 end
62
63 def to_rss(rss, current)
64 @#{plural_name}.each do |#{name}|
65 #{name}.to_rss(rss, current)
66 end
67 end
68
69 class #{klass_name}Base
70 include Base
71
72 attr_accessor :value
73 add_need_initialize_variable("value")
74 alias_method(:content, :value)
75 alias_method(:content=, :value=)
76
77 def have_required_values?
78 @value
79 end
80 end
81 end
82 EOC
83 end
84
85 def self.install_dublin_core(klass)
86 ::RSS::DublinCoreModel::ELEMENT_NAME_INFOS.each do |name, plural_name|
87 plural_name ||= "#{name}s"
88 klass_name = Utils.to_class_name(name)
89 plural_klass_name = "DublinCore#{Utils.to_class_name(plural_name)}"
90 full_klass_name = "DublinCore#{klass_name}"
91 klass.module_eval(<<-EOC, *Utils.get_file_and_line_from_caller(1))
92 class #{plural_klass_name} < #{plural_klass_name}Base
93 class #{klass_name} < #{klass_name}Base
94 def to_rss(rss, current)
95 if value and current.respond_to?(:dc_#{name})
96 new_item = current.class::#{full_klass_name}.new(value)
97 current.dc_#{plural_name} << new_item
98 end
99 end
100 end
101 end
102EOC
103 end
104 end
105 end
106
107 class ChannelBase
108 include DublinCoreModel
109
110 remove_method(:date)
111 remove_method(:date=)
112 alias_method(:date, :dc_date)
113 alias_method(:date=, :dc_date=)
114 end
115
116 class ImageBase; include DublinCoreModel; end
117 class ItemsBase
118 class ItemBase
119 include DublinCoreModel
120
121 remove_method(:date)
122 remove_method(:date=)
123 alias_method(:date, :dc_date)
124 alias_method(:date=, :dc_date=)
125 end
126 end
127 class TextinputBase; include DublinCoreModel; end
128
129 class RSS10
130 class Channel
131 DublinCoreModel.install_dublin_core(self)
132 end
133
134 class Image
135 DublinCoreModel.install_dublin_core(self)
136 end
137
138 class Items
139 class Item
140 DublinCoreModel.install_dublin_core(self)
141 end
142 end
143
144 class Textinput
145 DublinCoreModel.install_dublin_core(self)
146 end
147 end
148
149 class RSS09
150 class Channel
151 DublinCoreModel.install_dublin_core(self)
152 end
153
154 class Image
155 DublinCoreModel.install_dublin_core(self)
156 end
157
158 class Items
159 class Item
160 DublinCoreModel.install_dublin_core(self)
161 end
162 end
163
164 class Textinput
165 DublinCoreModel.install_dublin_core(self)
166 end
167 end
168 end
169end
Note: See TracBrowser for help on using the repository browser.