9
def self.append_features(klass)
12
klass.install_must_call_validator('', "")
19
include RootElementMixin
21
%w(channel).each do |name|
22
install_have_child_element(name, "", nil)
25
attr_accessor :rss_version, :version, :encoding, :standalone
27
def initialize(rss_version, version=nil, encoding=nil, standalone=nil)
55
def setup_maker_elements(maker)
58
item.setup_maker(maker.items)
65
["version", true, "rss_version"],
69
class Channel < Element
74
["title", nil, :text],
76
["description", nil, :text],
77
["language", nil, :text],
78
["copyright", "?", :text],
79
["managingEditor", "?", :text],
80
["webMaster", "?", :text],
81
["rating", "?", :text],
82
["pubDate", "?", :date, :rfc822],
83
["lastBuildDate", "?", :date, :rfc822],
85
["cloud", "?", :have_attribute],
86
["skipDays", "?", :have_child],
87
["skipHours", "?", :have_child],
88
["image", nil, :have_child],
89
["item", "*", :have_children],
90
["textInput", "?", :have_child],
91
].each do |name, occurs, type, *args|
92
__send__("install_#{type}_element", name, "", occurs, name, *args)
98
def maker_target(maker)
102
def setup_maker_elements(channel)
107
].each do |skip, key|
109
skip.__send__("#{key}s").each do |val|
110
target_skips = channel.__send__("skip#{key.capitalize}s")
111
new_target = target_skips.__send__("new_#{key}")
112
new_target.content = val.content
118
def not_need_to_call_setup_maker_variables
122
class SkipDays < Element
127
].each do |name, occurs|
128
install_have_children_element(name, "", occurs)
136
def initialize(*args)
137
if Utils.element_initialize_arguments?(args)
141
self.content = args[0]
149
class SkipHours < Element
154
].each do |name, occurs|
155
install_have_children_element(name, "", occurs)
161
content_setup(:integer)
163
def initialize(*args)
164
if Utils.element_initialize_arguments?(args)
168
self.content = args[0]
175
class Image < Element
179
%w(url title link).each do |name|
180
install_text_element(name, "", nil)
184
["height", :integer],
186
].each do |name, type|
187
install_text_element(name, "", "?", name, type)
190
def initialize(*args)
191
if Utils.element_initialize_arguments?(args)
199
self.height = args[4]
200
self.description = args[5]
205
def maker_target(maker)
210
class Cloud < Element
215
["domain", "", true],
216
["port", "", true, :integer],
218
["registerProcedure", "", true],
219
["protocol", "", true],
220
].each do |name, uri, required, type|
221
install_get_attribute(name, uri, required, type)
224
def initialize(*args)
225
if Utils.element_initialize_arguments?(args)
229
self.domain = args[0]
232
self.registerProcedure = args[3]
233
self.protocol = args[4]
243
["title", '?', :text],
244
["link", '?', :text],
245
["description", '?', :text],
246
["category", '*', :have_children, "categories"],
247
["source", '?', :have_child],
248
["enclosure", '?', :have_child],
249
].each do |tag, occurs, type, *args|
250
__send__("install_#{type}_element", tag, "", occurs, tag, *args)
254
def maker_target(items)
255
if items.respond_to?("items")
256
# For backward compatibility
262
def setup_maker_element(item)
264
@enclosure.setup_maker(item) if @enclosure
265
@source.setup_maker(item) if @source
268
class Source < Element
274
].each do |name, uri, required|
275
install_get_attribute(name, uri, required)
280
def initialize(*args)
281
if Utils.element_initialize_arguments?(args)
286
self.content = args[1]
291
def maker_target(item)
295
def setup_maker_attributes(source)
297
source.content = content
301
class Enclosure < Element
307
["length", "", true, :integer],
309
].each do |name, uri, required, type|
310
install_get_attribute(name, uri, required, type)
313
def initialize(*args)
314
if Utils.element_initialize_arguments?(args)
319
self.length = args[1]
325
def maker_target(item)
329
def setup_maker_attributes(enclosure)
331
enclosure.length = length
332
enclosure.type = type
336
class Category < Element
341
["domain", "", false]
342
].each do |name, uri, required|
343
install_get_attribute(name, uri, required)
348
def initialize(*args)
349
if Utils.element_initialize_arguments?(args)
353
self.domain = args[0]
354
self.content = args[1]
359
def maker_target(item)
363
def setup_maker_attributes(category)
364
category.domain = domain
365
category.content = content
372
class TextInput < Element
376
%w(title description name link).each do |name|
377
install_text_element(name, "", nil)
380
def initialize(*args)
381
if Utils.element_initialize_arguments?(args)
386
self.description = args[1]
393
def maker_target(maker)
402
RSS09::ELEMENTS.each do |name|
403
BaseListener.install_get_text_element("", name, "#{name}=")
408
def start_rss(tag_name, prefix, attrs, ns)
409
check_ns(tag_name, prefix, ns, "")
411
@rss = Rss.new(attrs['version'], @version, @encoding, @standalone)
412
@rss.do_validate = @do_validate
413
@rss.xml_stylesheets = @xml_stylesheets
415
@proc_stack.push Proc.new { |text, tags|
416
@rss.validate_for_stream(tags, @ignore_unknown_element) if @do_validate