mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 08:33:58 +02:00
* lib/rss, test/rss, sample/rss: backported from CVS HEAD.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@7509 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
67c5b057e6
commit
bcf72db844
30 changed files with 1967 additions and 990 deletions
|
@ -9,7 +9,16 @@ module RSS
|
|||
RDF.install_ns(TRACKBACK_PREFIX, TRACKBACK_URI)
|
||||
Rss.install_ns(TRACKBACK_PREFIX, TRACKBACK_URI)
|
||||
|
||||
module BaseTrackBackModel
|
||||
module TrackBackUtils
|
||||
private
|
||||
def new_with_value_if_need(klass, value)
|
||||
if value.is_a?(klass)
|
||||
value
|
||||
else
|
||||
klass.new(value)
|
||||
end
|
||||
end
|
||||
|
||||
def trackback_validate(tags)
|
||||
counter = {}
|
||||
%w(ping about).each do |x|
|
||||
|
@ -31,179 +40,64 @@ module RSS
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
module TrackBackModel10
|
||||
extend BaseModel
|
||||
include BaseTrackBackModel
|
||||
|
||||
def self.append_features(klass)
|
||||
|
||||
module BaseTrackBackModel
|
||||
def append_features(klass)
|
||||
super
|
||||
|
||||
unless klass.class == Module
|
||||
%w(ping).each do |x|
|
||||
klass.install_have_child_element("#{TRACKBACK_PREFIX}_#{x}")
|
||||
end
|
||||
|
||||
%w(about).each do |x|
|
||||
klass.install_have_children_element("#{TRACKBACK_PREFIX}_#{x}")
|
||||
end
|
||||
end
|
||||
end
|
||||
klass.__send__(:include, TrackBackUtils)
|
||||
|
||||
class Ping < Element
|
||||
include RSS10
|
||||
|
||||
class << self
|
||||
|
||||
def required_prefix
|
||||
TRACKBACK_PREFIX
|
||||
end
|
||||
|
||||
def required_uri
|
||||
TRACKBACK_URI
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
[
|
||||
["resource", ::RSS::RDF::URI, true]
|
||||
].each do |name, uri, required|
|
||||
install_get_attribute(name, uri, required)
|
||||
end
|
||||
|
||||
def initialize(resource=nil)
|
||||
super()
|
||||
@resource = resource
|
||||
end
|
||||
|
||||
def to_s(convert=true, indent=calc_indent)
|
||||
if @resource
|
||||
rv = %Q[#{indent}<#{TRACKBACK_PREFIX}:ping ]
|
||||
rv << %Q[#{::RSS::RDF::PREFIX}:resource="#{h @resource}"/>]
|
||||
rv = @converter.convert(rv) if convert and @converter
|
||||
rv
|
||||
else
|
||||
''
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def _attrs
|
||||
[
|
||||
["resource", true],
|
||||
]
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class About < Element
|
||||
include RSS10
|
||||
|
||||
class << self
|
||||
|
||||
def required_prefix
|
||||
TRACKBACK_PREFIX
|
||||
end
|
||||
|
||||
def required_uri
|
||||
TRACKBACK_URI
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
[
|
||||
["resource", ::RSS::RDF::URI, true]
|
||||
].each do |name, uri, required|
|
||||
install_get_attribute(name, uri, required)
|
||||
end
|
||||
|
||||
def initialize(resource=nil)
|
||||
super()
|
||||
@resource = resource
|
||||
end
|
||||
|
||||
def to_s(convert=true, indent=calc_indent)
|
||||
if @resource
|
||||
rv = %Q[#{indent}<#{TRACKBACK_PREFIX}:about ]
|
||||
rv << %Q[#{::RSS::RDF::PREFIX}:resource="#{h @resource}"/>]
|
||||
rv = @converter.convert(rv) if convert and @converter
|
||||
rv
|
||||
else
|
||||
''
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def _attrs
|
||||
[
|
||||
["resource", true],
|
||||
]
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
module TrackBackModel20
|
||||
include BaseTrackBackModel
|
||||
extend BaseModel
|
||||
|
||||
def self.append_features(klass)
|
||||
super
|
||||
|
||||
unless klass.class == Module
|
||||
%w(ping).each do |x|
|
||||
var_name = "#{TRACKBACK_PREFIX}_#{x}"
|
||||
klass_name = x.capitalize
|
||||
klass.install_have_child_element(var_name)
|
||||
klass.module_eval(<<-EOC)
|
||||
alias _#{var_name} #{var_name}
|
||||
klass.module_eval(<<-EOC, __FILE__, __LINE__)
|
||||
remove_method :#{var_name}
|
||||
def #{var_name}
|
||||
@#{var_name} and @#{var_name}.content
|
||||
@#{var_name} and @#{var_name}.value
|
||||
end
|
||||
|
||||
alias _#{var_name}= #{var_name}=
|
||||
def #{var_name}=(content)
|
||||
@#{var_name} = new_with_content_if_need(#{x.capitalize}, content)
|
||||
remove_method :#{var_name}=
|
||||
def #{var_name}=(value)
|
||||
@#{var_name} = new_with_value_if_need(#{klass_name}, value)
|
||||
end
|
||||
EOC
|
||||
end
|
||||
|
||||
[%w(about s)].each do |x, postfix|
|
||||
var_name = "#{TRACKBACK_PREFIX}_#{x}"
|
||||
[%w(about s)].each do |name, postfix|
|
||||
var_name = "#{TRACKBACK_PREFIX}_#{name}"
|
||||
klass_name = name.capitalize
|
||||
klass.install_have_children_element(var_name)
|
||||
klass.module_eval(<<-EOC)
|
||||
alias _#{var_name}#{postfix} #{var_name}#{postfix}
|
||||
def #{var_name}#{postfix}
|
||||
@#{var_name}.collect {|x| x.content}
|
||||
end
|
||||
|
||||
alias _#{var_name} #{var_name}
|
||||
klass.module_eval(<<-EOC, __FILE__, __LINE__)
|
||||
remove_method :#{var_name}
|
||||
def #{var_name}(*args)
|
||||
if args.empty?
|
||||
@#{var_name}.first and @#{var_name}.first.content
|
||||
@#{var_name}.first and @#{var_name}.first.value
|
||||
else
|
||||
ret = @#{var_name}.send("[]", *args)
|
||||
if ret.is_a?(Array)
|
||||
ret.collect {|x| x.content}
|
||||
ret.collect {|x| x.value}
|
||||
else
|
||||
ret.content
|
||||
ret.value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
alias _#{var_name}= #{var_name}=
|
||||
alias _set_#{var_name} set_#{var_name}
|
||||
remove_method :#{var_name}=
|
||||
remove_method :set_#{var_name}
|
||||
def #{var_name}=(*args)
|
||||
if args.size == 1
|
||||
item = new_with_content_if_need(#{x.capitalize}, args[0])
|
||||
item = new_with_value_if_need(#{klass_name}, args[0])
|
||||
@#{var_name}.push(item)
|
||||
else
|
||||
new_val = args.last
|
||||
if new_val.is_a?(Array)
|
||||
new_val = new_value.collect do |val|
|
||||
new_with_content_if_need(#{x.capitalize}, val)
|
||||
new_with_value_if_need(#{klass_name}, val)
|
||||
end
|
||||
else
|
||||
new_val = new_with_content_if_need(#{x.capitalize}, new_val)
|
||||
new_val = new_with_value_if_need(#{klass_name}, new_val)
|
||||
end
|
||||
@#{var_name}.send("[]=", *(args[0..-2] + [new_val]))
|
||||
end
|
||||
|
@ -213,22 +107,120 @@ module RSS
|
|||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def new_with_content(klass, content)
|
||||
obj = klass.new
|
||||
obj.content = content
|
||||
obj
|
||||
end
|
||||
module TrackBackModel10
|
||||
extend BaseModel
|
||||
extend BaseTrackBackModel
|
||||
|
||||
class Ping < Element
|
||||
include RSS10
|
||||
|
||||
class << self
|
||||
|
||||
def required_prefix
|
||||
TRACKBACK_PREFIX
|
||||
end
|
||||
|
||||
def required_uri
|
||||
TRACKBACK_URI
|
||||
end
|
||||
|
||||
def new_with_content_if_need(klass, content)
|
||||
if content.is_a?(klass)
|
||||
content
|
||||
else
|
||||
new_with_content(klass, content)
|
||||
end
|
||||
|
||||
[
|
||||
["resource", ::RSS::RDF::URI, true]
|
||||
].each do |name, uri, required|
|
||||
install_get_attribute(name, uri, required)
|
||||
end
|
||||
|
||||
alias_method(:value, :resource)
|
||||
alias_method(:value=, :resource=)
|
||||
|
||||
def initialize(resource=nil)
|
||||
super()
|
||||
@resource = resource
|
||||
end
|
||||
|
||||
def full_name
|
||||
tag_name_with_prefix(TRACKBACK_PREFIX)
|
||||
end
|
||||
|
||||
def to_s(convert=true, indent=calc_indent)
|
||||
rv = tag(indent)
|
||||
rv = @converter.convert(rv) if convert and @converter
|
||||
rv
|
||||
end
|
||||
|
||||
private
|
||||
def _attrs
|
||||
[
|
||||
["#{::RSS::RDF::PREFIX}:resource", true, "resource"],
|
||||
]
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class About < Element
|
||||
include RSS10
|
||||
|
||||
class << self
|
||||
|
||||
def required_prefix
|
||||
TRACKBACK_PREFIX
|
||||
end
|
||||
|
||||
def required_uri
|
||||
TRACKBACK_URI
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
[
|
||||
["resource", ::RSS::RDF::URI, true]
|
||||
].each do |name, uri, required|
|
||||
install_get_attribute(name, uri, required)
|
||||
end
|
||||
|
||||
alias_method(:value, :resource)
|
||||
alias_method(:value=, :resource=)
|
||||
|
||||
def initialize(resource=nil)
|
||||
super()
|
||||
@resource = resource
|
||||
end
|
||||
|
||||
def full_name
|
||||
tag_name_with_prefix(TRACKBACK_PREFIX)
|
||||
end
|
||||
|
||||
def to_s(convert=true, indent=calc_indent)
|
||||
rv = tag(indent)
|
||||
rv = @converter.convert(rv) if convert and @converter
|
||||
rv
|
||||
end
|
||||
|
||||
private
|
||||
def _attrs
|
||||
[
|
||||
["#{::RSS::RDF::PREFIX}:resource", true, "resource"],
|
||||
]
|
||||
end
|
||||
|
||||
def maker_target(abouts)
|
||||
abouts.new_about
|
||||
end
|
||||
|
||||
def setup_maker_attributes(about)
|
||||
about.resource = self.resource
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
module TrackBackModel20
|
||||
extend BaseModel
|
||||
extend BaseTrackBackModel
|
||||
|
||||
class Ping < Element
|
||||
include RSS09
|
||||
|
@ -247,18 +239,18 @@ module RSS
|
|||
|
||||
end
|
||||
|
||||
def to_s(convert=true, indent=calc_indent)
|
||||
if @content
|
||||
rv = %Q[#{indent}<#{TRACKBACK_PREFIX}:ping>]
|
||||
rv << h(@content)
|
||||
rv << %Q[</#{TRACKBACK_PREFIX}:ping>]
|
||||
rv = @converter.convert(rv) if convert and @converter
|
||||
rv
|
||||
else
|
||||
''
|
||||
end
|
||||
end
|
||||
alias_method(:value, :content)
|
||||
alias_method(:value=, :content=)
|
||||
|
||||
def initialize(content=nil)
|
||||
super()
|
||||
@content = content
|
||||
end
|
||||
|
||||
def full_name
|
||||
tag_name_with_prefix(TRACKBACK_PREFIX)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class About < Element
|
||||
|
@ -277,19 +269,19 @@ module RSS
|
|||
end
|
||||
|
||||
end
|
||||
|
||||
def to_s(convert=true, indent=calc_indent)
|
||||
if @content
|
||||
rv = %Q[#{indent}<#{TRACKBACK_PREFIX}:about>]
|
||||
rv << h(@content)
|
||||
rv << %Q[</#{TRACKBACK_PREFIX}:about>]
|
||||
rv = @converter.convert(rv) if convert and @converter
|
||||
rv
|
||||
else
|
||||
''
|
||||
end
|
||||
end
|
||||
|
||||
alias_method(:value, :content)
|
||||
alias_method(:value=, :content=)
|
||||
|
||||
def initialize(content=nil)
|
||||
super()
|
||||
@content = content
|
||||
end
|
||||
|
||||
def full_name
|
||||
tag_name_with_prefix(TRACKBACK_PREFIX)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue