2004-01-27 22:46:13 -05:00
|
|
|
require "rss/0.9"
|
|
|
|
|
|
|
|
module RSS
|
|
|
|
|
2004-10-16 00:51:15 -04:00
|
|
|
class Rss
|
2004-01-27 22:46:13 -05:00
|
|
|
|
2004-10-16 00:51:15 -04:00
|
|
|
class Channel
|
2004-01-27 22:46:13 -05:00
|
|
|
|
2005-11-24 22:43:48 -05:00
|
|
|
[
|
|
|
|
["generator"],
|
|
|
|
["ttl", :integer],
|
|
|
|
].each do |name, type|
|
|
|
|
install_text_element(name, type)
|
2005-04-05 03:03:43 -04:00
|
|
|
install_model(name, '?')
|
2004-10-16 00:51:15 -04:00
|
|
|
end
|
2004-01-27 22:46:13 -05:00
|
|
|
|
2004-11-19 03:25:25 -05:00
|
|
|
[
|
|
|
|
%w(category categories),
|
|
|
|
].each do |name, plural_name|
|
|
|
|
install_have_children_element(name, plural_name)
|
|
|
|
install_model(name, '*')
|
|
|
|
end
|
|
|
|
|
2004-10-16 00:51:15 -04:00
|
|
|
[
|
|
|
|
["image", "?"],
|
|
|
|
["language", "?"],
|
2005-04-05 03:03:43 -04:00
|
|
|
].each do |name, occurs|
|
|
|
|
install_model(name, occurs)
|
2004-10-16 00:51:15 -04:00
|
|
|
end
|
2004-01-27 22:46:13 -05:00
|
|
|
|
2005-02-02 08:00:31 -05:00
|
|
|
def other_element(need_convert, indent)
|
2004-10-16 00:51:15 -04:00
|
|
|
rv = <<-EOT
|
2005-02-02 08:00:31 -05:00
|
|
|
#{category_elements(need_convert, indent)}
|
|
|
|
#{generator_element(need_convert, indent)}
|
|
|
|
#{ttl_element(need_convert, indent)}
|
2004-01-27 22:46:13 -05:00
|
|
|
EOT
|
2004-10-16 00:51:15 -04:00
|
|
|
rv << super
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
alias children09 children
|
|
|
|
def children
|
2004-11-19 03:25:25 -05:00
|
|
|
children09 + @category.compact
|
2004-10-16 00:51:15 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
alias _tags09 _tags
|
|
|
|
def _tags
|
2005-04-05 03:03:43 -04:00
|
|
|
rv = %w(generator ttl).delete_if do |name|
|
2005-11-23 04:49:02 -05:00
|
|
|
__send__(name).nil?
|
2004-10-16 00:51:15 -04:00
|
|
|
end.collect do |elem|
|
|
|
|
[nil, elem]
|
|
|
|
end + _tags09
|
2004-11-19 03:25:25 -05:00
|
|
|
|
|
|
|
@category.each do
|
|
|
|
rv << [nil, "category"]
|
|
|
|
end
|
|
|
|
|
|
|
|
rv
|
2004-10-16 00:51:15 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
Category = Item::Category
|
|
|
|
|
|
|
|
class Item
|
|
|
|
|
|
|
|
[
|
|
|
|
["comments", "?"],
|
|
|
|
["author", "?"],
|
2005-04-05 03:03:43 -04:00
|
|
|
].each do |name, occurs|
|
|
|
|
install_text_element(name)
|
|
|
|
install_model(name, occurs)
|
2004-10-16 00:51:15 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
[
|
|
|
|
["pubDate", '?'],
|
2005-04-05 03:03:43 -04:00
|
|
|
].each do |name, occurs|
|
|
|
|
install_date_element(name, 'rfc822')
|
|
|
|
install_model(name, occurs)
|
2004-10-16 00:51:15 -04:00
|
|
|
end
|
2005-02-13 09:21:21 -05:00
|
|
|
alias date pubDate
|
|
|
|
alias date= pubDate=
|
2004-10-16 00:51:15 -04:00
|
|
|
|
|
|
|
[
|
|
|
|
["guid", '?'],
|
2005-04-05 03:03:43 -04:00
|
|
|
].each do |name, occurs|
|
|
|
|
install_have_child_element(name)
|
|
|
|
install_model(name, occurs)
|
2004-10-16 00:51:15 -04:00
|
|
|
end
|
|
|
|
|
2005-02-02 08:00:31 -05:00
|
|
|
def other_element(need_convert, indent)
|
2004-11-19 03:25:25 -05:00
|
|
|
rv = [
|
|
|
|
super,
|
|
|
|
*%w(author comments pubDate guid).collect do |name|
|
|
|
|
__send__("#{name}_element", false, indent)
|
|
|
|
end
|
|
|
|
].reject do |value|
|
|
|
|
/\A\s*\z/.match(value)
|
|
|
|
end
|
|
|
|
rv.join("\n")
|
2004-10-16 00:51:15 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
alias children09 children
|
|
|
|
def children
|
|
|
|
children09 + [@guid].compact
|
|
|
|
end
|
|
|
|
|
|
|
|
alias _tags09 _tags
|
|
|
|
def _tags
|
2005-04-05 03:03:43 -04:00
|
|
|
%w(comments author pubDate guid).delete_if do |name|
|
2005-11-23 04:49:02 -05:00
|
|
|
__send__(name).nil?
|
2004-10-16 00:51:15 -04:00
|
|
|
end.collect do |elem|
|
|
|
|
[nil, elem]
|
|
|
|
end + _tags09
|
|
|
|
end
|
|
|
|
|
2004-11-27 03:47:28 -05:00
|
|
|
alias _setup_maker_element setup_maker_element
|
|
|
|
def setup_maker_element(item)
|
|
|
|
_setup_maker_element(item)
|
|
|
|
@guid.setup_maker(item) if @guid
|
|
|
|
end
|
|
|
|
|
2004-10-16 00:51:15 -04:00
|
|
|
class Guid < Element
|
|
|
|
|
|
|
|
include RSS09
|
|
|
|
|
|
|
|
[
|
2005-11-24 22:43:48 -05:00
|
|
|
["isPermaLink", nil, false, :boolean]
|
|
|
|
].each do |name, uri, required, type|
|
|
|
|
install_get_attribute(name, uri, required, type)
|
2004-10-16 00:51:15 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
content_setup
|
|
|
|
|
|
|
|
def initialize(isPermaLink=nil, content=nil)
|
|
|
|
super()
|
2005-11-24 22:43:48 -05:00
|
|
|
self.isPermaLink = isPermaLink
|
|
|
|
self.content = content
|
|
|
|
end
|
|
|
|
|
|
|
|
alias_method :_PermaLink?, :PermaLink?
|
|
|
|
private :_PermaLink?
|
|
|
|
def PermaLink?
|
|
|
|
perma = _PermaLink?
|
|
|
|
perma or perma.nil?
|
2004-10-16 00:51:15 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
def _attrs
|
|
|
|
[
|
|
|
|
["isPermaLink", false]
|
|
|
|
]
|
|
|
|
end
|
|
|
|
|
2004-11-27 03:47:28 -05:00
|
|
|
def maker_target(item)
|
|
|
|
item.guid
|
|
|
|
end
|
|
|
|
|
|
|
|
def setup_maker_attributes(guid)
|
|
|
|
guid.isPermaLink = isPermaLink
|
|
|
|
guid.content = content
|
|
|
|
end
|
2004-10-16 00:51:15 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
2005-04-05 03:03:43 -04:00
|
|
|
RSS09::ELEMENTS.each do |name|
|
|
|
|
BaseListener.install_get_text_element(nil, name, "#{name}=")
|
2004-10-16 00:51:15 -04:00
|
|
|
end
|
2004-01-27 22:46:13 -05:00
|
|
|
|
|
|
|
end
|