6
TRACKBACK_PREFIX = 'trackback'
7
TRACKBACK_URI = 'http://madskills.com/public/xml/rss/module/trackback/'
9
RDF.install_ns(TRACKBACK_PREFIX, TRACKBACK_URI)
10
Rss.install_ns(TRACKBACK_PREFIX, TRACKBACK_URI)
14
def trackback_validate(ignore_unknown_element, tags, uri)
16
if tags.find {|tag| tag == "about"} and
17
!tags.find {|tag| tag == "ping"}
18
raise MissingTagError.new("#{TRACKBACK_PREFIX}:ping", tag_name)
23
module BaseTrackBackModel
25
ELEMENTS = %w(ping about)
27
def append_features(klass)
30
unless klass.class == Module
31
klass.module_eval {include TrackBackUtils}
33
klass.install_must_call_validator(TRACKBACK_PREFIX, TRACKBACK_URI)
34
%w(ping).each do |name|
35
var_name = "#{TRACKBACK_PREFIX}_#{name}"
36
klass_name = "TrackBack#{Utils.to_class_name(name)}"
37
klass.install_have_child_element(name, TRACKBACK_URI, "?", var_name)
38
klass.module_eval(<<-EOC, __FILE__, __LINE__)
39
remove_method :#{var_name}
41
@#{var_name} and @#{var_name}.value
44
remove_method :#{var_name}=
45
def #{var_name}=(value)
46
@#{var_name} = Utils.new_with_value_if_need(#{klass_name}, value)
51
[%w(about s)].each do |name, postfix|
52
var_name = "#{TRACKBACK_PREFIX}_#{name}"
53
klass_name = "TrackBack#{Utils.to_class_name(name)}"
54
klass.install_have_children_element(name, TRACKBACK_URI, "*",
56
klass.module_eval(<<-EOC, __FILE__, __LINE__)
57
remove_method :#{var_name}
58
def #{var_name}(*args)
60
@#{var_name}.first and @#{var_name}.first.value
62
ret = @#{var_name}.__send__("[]", *args)
64
ret.collect {|x| x.value}
71
remove_method :#{var_name}=
72
remove_method :set_#{var_name}
73
def #{var_name}=(*args)
75
item = Utils.new_with_value_if_need(#{klass_name}, args[0])
76
@#{var_name}.push(item)
79
if new_val.is_a?(Array)
80
new_val = new_value.collect do |val|
81
Utils.new_with_value_if_need(#{klass_name}, val)
84
new_val = Utils.new_with_value_if_need(#{klass_name}, new_val)
86
@#{var_name}.__send__("[]=", *(args[0..-2] + [new_val]))
89
alias set_#{var_name} #{var_name}=
96
module TrackBackModel10
98
extend BaseTrackBackModel
100
class TrackBackPing < Element
118
["resource", ::RSS::RDF::URI, true]
119
].each do |name, uri, required|
120
install_get_attribute(name, uri, required, nil, nil,
121
"#{::RSS::RDF::PREFIX}:#{name}")
124
alias_method(:value, :resource)
125
alias_method(:value=, :resource=)
126
def initialize(*args)
127
if Utils.element_initialize_arguments?(args)
131
self.resource = args[0]
136
tag_name_with_prefix(TRACKBACK_PREFIX)
140
class TrackBackAbout < Element
158
["resource", ::RSS::RDF::URI, true]
159
].each do |name, uri, required|
160
install_get_attribute(name, uri, required, nil, nil,
161
"#{::RSS::RDF::PREFIX}:#{name}")
164
alias_method(:value, :resource)
165
alias_method(:value=, :resource=)
167
def initialize(*args)
168
if Utils.element_initialize_arguments?(args)
172
self.resource = args[0]
177
tag_name_with_prefix(TRACKBACK_PREFIX)
181
def maker_target(abouts)
185
def setup_maker_attributes(about)
186
about.resource = self.resource
192
module TrackBackModel20
194
extend BaseTrackBackModel
196
class TrackBackPing < Element
215
alias_method(:value, :content)
216
alias_method(:value=, :content=)
218
def initialize(*args)
219
if Utils.element_initialize_arguments?(args)
223
self.content = args[0]
228
tag_name_with_prefix(TRACKBACK_PREFIX)
233
class TrackBackAbout < Element
252
alias_method(:value, :content)
253
alias_method(:value=, :content=)
255
def initialize(*args)
256
if Utils.element_initialize_arguments?(args)
260
self.content = args[0]
265
tag_name_with_prefix(TRACKBACK_PREFIX)
272
class Item; include TrackBackModel10; end
277
class Item; include TrackBackModel20; end
281
BaseTrackBackModel::ELEMENTS.each do |name|
282
class_name = Utils.to_class_name(name)
283
BaseListener.install_class_name(TRACKBACK_URI, name,
284
"TrackBack#{class_name}")
287
BaseTrackBackModel::ELEMENTS.collect! {|name| "#{TRACKBACK_PREFIX}_#{name}"}