summaryrefslogtreecommitdiff
path: root/lib/rss/trackback.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rss/trackback.rb')
-rw-r--r--lib/rss/trackback.rb252
1 files changed, 118 insertions, 134 deletions
diff --git a/lib/rss/trackback.rb b/lib/rss/trackback.rb
index e276305ec1..5cbf652406 100644
--- a/lib/rss/trackback.rb
+++ b/lib/rss/trackback.rb
@@ -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,24 +40,78 @@ 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
+ klass.__send__(:include, TrackBackUtils)
+
%w(ping).each do |x|
- klass.install_have_child_element("#{TRACKBACK_PREFIX}_#{x}")
+ var_name = "#{TRACKBACK_PREFIX}_#{x}"
+ klass_name = x.capitalize
+ klass.install_have_child_element(var_name)
+ klass.module_eval(<<-EOC, __FILE__, __LINE__)
+ undef #{var_name}
+ def #{var_name}
+ @#{var_name} and @#{var_name}.value
+ end
+
+ undef #{var_name}=
+ def #{var_name}=(value)
+ @#{var_name} = new_with_value_if_need(#{klass_name}, value)
+ end
+ EOC
end
- %w(about).each do |x|
- klass.install_have_children_element("#{TRACKBACK_PREFIX}_#{x}")
+ [%w(about s)].each do |x, postfix|
+ var_name = "#{TRACKBACK_PREFIX}_#{x}"
+ klass_name = x.capitalize
+ klass.install_have_children_element(var_name)
+ klass.module_eval(<<-EOC, __FILE__, __LINE__)
+ undef #{var_name}
+ def #{var_name}(*args)
+ if args.empty?
+ @#{var_name}.first and @#{var_name}.first.value
+ else
+ ret = @#{var_name}.send("[]", *args)
+ if ret.is_a?(Array)
+ ret.collect {|x| x.value}
+ else
+ ret.value
+ end
+ end
+ end
+
+ undef #{var_name}=
+ undef set_#{var_name}
+ def #{var_name}=(*args)
+ if args.size == 1
+ 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_value_if_need(#{klass_name}, val)
+ end
+ else
+ new_val = new_with_value_if_need(#{klass_name}, new_val)
+ end
+ @#{var_name}.send("[]=", *(args[0..-2] + [new_val]))
+ end
+ end
+ alias set_#{var_name} #{var_name}=
+ EOC
end
end
end
+ end
+
+ module TrackBackModel10
+ extend BaseModel
+ extend BaseTrackBackModel
class Ping < Element
include RSS10
@@ -71,26 +134,28 @@ module RSS
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)
- 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
+ rv = tag(indent)
+ rv = @converter.convert(rv) if convert and @converter
+ rv
end
private
def _attrs
[
- ["resource", true],
+ ["#{::RSS::RDF::PREFIX}:resource", true, "resource"],
]
end
@@ -117,26 +182,28 @@ module RSS
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)
- 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
+ rv = tag(indent)
+ rv = @converter.convert(rv) if convert and @converter
+ rv
end
private
def _attrs
[
- ["resource", true],
+ ["#{::RSS::RDF::PREFIX}:resource", true, "resource"],
]
end
@@ -144,91 +211,8 @@ module RSS
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.install_have_child_element(var_name)
- klass.module_eval(<<-EOC)
- alias _#{var_name} #{var_name}
- def #{var_name}
- @#{var_name} and @#{var_name}.content
- end
-
- alias _#{var_name}= #{var_name}=
- def #{var_name}=(content)
- @#{var_name} = new_with_content_if_need(#{x.capitalize}, content)
- end
- EOC
- end
-
- [%w(about s)].each do |x, postfix|
- var_name = "#{TRACKBACK_PREFIX}_#{x}"
- 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}
- def #{var_name}(*args)
- if args.empty?
- @#{var_name}.first and @#{var_name}.first.content
- else
- ret = @#{var_name}.send("[]", *args)
- if ret.is_a?(Array)
- ret.collect {|x| x.content}
- else
- ret.content
- end
- end
- end
-
- alias _#{var_name}= #{var_name}=
- alias _set_#{var_name} set_#{var_name}
- def #{var_name}=(*args)
- if args.size == 1
- item = new_with_content_if_need(#{x.capitalize}, 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)
- end
- else
- new_val = new_with_content_if_need(#{x.capitalize}, new_val)
- end
- @#{var_name}.send("[]=", *(args[0..-2] + [new_val]))
- end
- end
- alias set_#{var_name} #{var_name}=
- EOC
- end
- end
- end
-
- private
- def new_with_content(klass, content)
- obj = klass.new
- obj.content = content
- obj
- end
-
- def new_with_content_if_need(klass, content)
- if content.is_a?(klass)
- content
- else
- new_with_content(klass, content)
- end
- end
-
+ extend BaseTrackBackModel
class Ping < Element
include RSS09
@@ -247,18 +231,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 +261,19 @@ module RSS
end
end
+
+ alias_method(:value, :content)
+ alias_method(:value=, :content=)
+
+ def initialize(content=nil)
+ super()
+ @content = content
+ 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
+ def full_name
+ tag_name_with_prefix(TRACKBACK_PREFIX)
end
-
+
end
end