mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/rss/rss.rb:
- cleanup validation mechanism. Now, #XXX_validation is needless. - changed internal variable name RSS::Element::MODEL to RSS::Element::MODELS. - RSS::Element.install_model requires uri. * lib/rss/0.9.rb: followed new validation API. * lib/rss/1.0.rb: ditto. * lib/rss/2.0.rb: ditto. * lib/rss/content.rb: ditto. * lib/rss/dublincore.rb: ditto. * lib/rss/image.rb: ditto. * lib/rss/syndication.rb: ditto. * lib/rss/taxonomy.rb: ditto. * lib/rss/trackback.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10334 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
eb41c8d2e3
commit
b60b8361fd
11 changed files with 109 additions and 198 deletions
19
ChangeLog
19
ChangeLog
|
@ -1,3 +1,22 @@
|
|||
Tue Jun 20 01:06:57 2006 Kouhei Sutou <kou@cozmixng.org>
|
||||
|
||||
* lib/rss/rss.rb:
|
||||
- cleanup validation mechanism. Now, #XXX_validation is
|
||||
needless.
|
||||
- changed internal variable name RSS::Element::MODEL to
|
||||
RSS::Element::MODELS.
|
||||
- RSS::Element.install_model requires uri.
|
||||
|
||||
* lib/rss/0.9.rb: followed new validation API.
|
||||
* lib/rss/1.0.rb: ditto.
|
||||
* lib/rss/2.0.rb: ditto.
|
||||
* lib/rss/content.rb: ditto.
|
||||
* lib/rss/dublincore.rb: ditto.
|
||||
* lib/rss/image.rb: ditto.
|
||||
* lib/rss/syndication.rb: ditto.
|
||||
* lib/rss/taxonomy.rb: ditto.
|
||||
* lib/rss/trackback.rb: ditto.
|
||||
|
||||
Mon Jun 19 23:40:59 2006 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* ext/nkf/lib/kconv.rb: remove default -m0 and fix document.
|
||||
|
|
|
@ -22,7 +22,7 @@ module RSS
|
|||
[
|
||||
["channel", nil],
|
||||
].each do |tag, occurs|
|
||||
install_model(tag, occurs)
|
||||
install_model(tag, "", occurs)
|
||||
end
|
||||
|
||||
%w(channel).each do |name|
|
||||
|
@ -109,7 +109,7 @@ module RSS
|
|||
["textInput", "?", :have_child],
|
||||
].each do |name, occurs, type, *args|
|
||||
__send__("install_#{type}_element", name, *args)
|
||||
install_model(name, occurs)
|
||||
install_model(name, "", occurs)
|
||||
end
|
||||
alias date pubDate
|
||||
alias date= pubDate=
|
||||
|
@ -179,7 +179,7 @@ module RSS
|
|||
["day", "*"]
|
||||
].each do |name, occurs|
|
||||
install_have_children_element(name)
|
||||
install_model(name, occurs)
|
||||
install_model(name, "", occurs)
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -218,7 +218,7 @@ module RSS
|
|||
["hour", "*"]
|
||||
].each do |name, occurs|
|
||||
install_have_children_element(name)
|
||||
install_model(name, occurs)
|
||||
install_model(name, "", occurs)
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -255,7 +255,7 @@ module RSS
|
|||
|
||||
%w(url title link).each do |name|
|
||||
install_text_element(name)
|
||||
install_model(name, nil)
|
||||
install_model(name, "", nil)
|
||||
end
|
||||
[
|
||||
["width", :integer],
|
||||
|
@ -263,7 +263,7 @@ module RSS
|
|||
["description"],
|
||||
].each do |name, type|
|
||||
install_text_element(name, type)
|
||||
install_model(name, "?")
|
||||
install_model(name, "", "?")
|
||||
end
|
||||
|
||||
def initialize(*args)
|
||||
|
@ -335,7 +335,7 @@ module RSS
|
|||
["enclosure", '?', :have_child],
|
||||
].each do |tag, occurs, type, *args|
|
||||
__send__("install_#{type}_element", tag, *args)
|
||||
install_model(tag, occurs)
|
||||
install_model(tag, "", occurs)
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -486,7 +486,7 @@ module RSS
|
|||
|
||||
%w(title description name link).each do |name|
|
||||
install_text_element(name)
|
||||
install_model(name, nil)
|
||||
install_model(name, "", nil)
|
||||
end
|
||||
|
||||
def initialize(*args)
|
||||
|
|
|
@ -41,7 +41,7 @@ module RSS
|
|||
["item", "+"],
|
||||
["textinput", "?"],
|
||||
].each do |tag, occurs|
|
||||
install_model(tag, occurs)
|
||||
install_model(tag, ::RSS::URI, occurs)
|
||||
if occurs == "+"
|
||||
install_have_children_element(tag)
|
||||
else
|
||||
|
@ -121,7 +121,7 @@ module RSS
|
|||
@tag_name = 'Seq'
|
||||
|
||||
install_have_children_element("li")
|
||||
|
||||
install_model("li", URI, "*")
|
||||
install_must_call_validator('rdf', ::RSS::RDF::URI)
|
||||
|
||||
def initialize(*args)
|
||||
|
@ -148,10 +148,6 @@ module RSS
|
|||
@li
|
||||
end
|
||||
|
||||
def rdf_validate(ignore_unknown_element, tags, uri)
|
||||
_validate(ignore_unknown_element, tags, uri, [["li", '*']])
|
||||
end
|
||||
|
||||
def _tags
|
||||
rv = []
|
||||
@li.each do |li|
|
||||
|
@ -176,7 +172,7 @@ module RSS
|
|||
@tag_name = 'Bag'
|
||||
|
||||
install_have_children_element("li")
|
||||
|
||||
install_model("li", URI, "*")
|
||||
install_must_call_validator('rdf', ::RSS::RDF::URI)
|
||||
|
||||
def initialize(*args)
|
||||
|
@ -203,10 +199,6 @@ module RSS
|
|||
@li
|
||||
end
|
||||
|
||||
def rdf_validate(ignore_unknown_element, tags, uri)
|
||||
_validate(ignore_unknown_element, tags, uri, [["li", '*']])
|
||||
end
|
||||
|
||||
def _tags
|
||||
rv = []
|
||||
@li.each do |li|
|
||||
|
@ -251,7 +243,7 @@ module RSS
|
|||
['items', nil],
|
||||
['textinput', '?'],
|
||||
].each do |tag, occurs|
|
||||
install_model(tag, occurs)
|
||||
install_model(tag, ::RSS::URI, occurs)
|
||||
end
|
||||
|
||||
def initialize(*args)
|
||||
|
@ -362,8 +354,8 @@ module RSS
|
|||
end
|
||||
|
||||
install_have_child_element("Seq")
|
||||
|
||||
install_must_call_validator('rdf', ::RSS::RDF::URI)
|
||||
install_model("Seq", URI, nil)
|
||||
install_must_call_validator('rdf', URI)
|
||||
|
||||
def initialize(*args)
|
||||
if Utils.element_initialize_arguments?(args)
|
||||
|
@ -395,10 +387,6 @@ module RSS
|
|||
rv << [URI, 'Seq'] unless @Seq.nil?
|
||||
rv
|
||||
end
|
||||
|
||||
def rdf_validate(ignore_unknown_element, tags, uri)
|
||||
_validate(ignore_unknown_element, tags, uri, [["Seq", nil]])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -430,7 +418,7 @@ module RSS
|
|||
['url', nil],
|
||||
['link', nil],
|
||||
].each do |tag, occurs|
|
||||
install_model(tag, occurs)
|
||||
install_model(tag, ::RSS::URI, occurs)
|
||||
end
|
||||
|
||||
def initialize(*args)
|
||||
|
@ -487,7 +475,7 @@ module RSS
|
|||
["link", nil],
|
||||
["description", "?"],
|
||||
].each do |tag, occurs|
|
||||
install_model(tag, occurs)
|
||||
install_model(tag, ::RSS::URI, occurs)
|
||||
end
|
||||
|
||||
def initialize(*args)
|
||||
|
@ -548,7 +536,7 @@ module RSS
|
|||
["name", nil],
|
||||
["link", nil],
|
||||
].each do |tag, occurs|
|
||||
install_model(tag, occurs)
|
||||
install_model(tag, ::RSS::URI, occurs)
|
||||
end
|
||||
|
||||
def initialize(*args)
|
||||
|
|
|
@ -11,21 +11,21 @@ module RSS
|
|||
["ttl", :integer],
|
||||
].each do |name, type|
|
||||
install_text_element(name, type)
|
||||
install_model(name, '?')
|
||||
install_model(name, "", '?')
|
||||
end
|
||||
|
||||
[
|
||||
%w(category categories),
|
||||
].each do |name, plural_name|
|
||||
install_have_children_element(name, plural_name)
|
||||
install_model(name, '*')
|
||||
install_model(name, "", '*')
|
||||
end
|
||||
|
||||
[
|
||||
["image", "?"],
|
||||
["language", "?"],
|
||||
].each do |name, occurs|
|
||||
install_model(name, occurs)
|
||||
install_model(name, "", occurs)
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -58,14 +58,14 @@ module RSS
|
|||
["author", "?"],
|
||||
].each do |name, occurs|
|
||||
install_text_element(name)
|
||||
install_model(name, occurs)
|
||||
install_model(name, "", occurs)
|
||||
end
|
||||
|
||||
[
|
||||
["pubDate", '?'],
|
||||
].each do |name, occurs|
|
||||
install_date_element(name, 'rfc822')
|
||||
install_model(name, occurs)
|
||||
install_model(name, "", occurs)
|
||||
end
|
||||
alias date pubDate
|
||||
alias date= pubDate=
|
||||
|
@ -74,7 +74,7 @@ module RSS
|
|||
["guid", '?'],
|
||||
].each do |name, occurs|
|
||||
install_have_child_element(name)
|
||||
install_model(name, occurs)
|
||||
install_model(name, "", occurs)
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -16,29 +16,12 @@ module RSS
|
|||
def self.append_features(klass)
|
||||
super
|
||||
|
||||
klass.module_eval(<<-EOC, *get_file_and_line_from_caller(1))
|
||||
klass.install_must_call_validator(CONTENT_PREFIX, CONTENT_URI)
|
||||
%w(encoded).each do |name|
|
||||
install_text_element("\#{CONTENT_PREFIX}_\#{name}")
|
||||
end
|
||||
EOC
|
||||
end
|
||||
|
||||
def content_validate(ignore_unknown_element, tags, uri)
|
||||
counter = {}
|
||||
ELEMENTS.each do |name|
|
||||
counter[name] = 0
|
||||
end
|
||||
|
||||
tags.each do |tag|
|
||||
key = "#{CONTENT_PREFIX}_#{tag}"
|
||||
if !ignore_unknown_element and !counter.has_key?(key)
|
||||
raise UnknownTagError.new(tag, CONTENT_URI)
|
||||
end
|
||||
counter[key] += 1
|
||||
raise TooMuchTagError.new(tag, tag_name) if counter[key] > 1
|
||||
klass.install_text_element("#{CONTENT_PREFIX}_#{name}")
|
||||
klass.install_model(name, CONTENT_URI, "?")
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class RDF
|
||||
|
|
|
@ -17,10 +17,10 @@ module RSS
|
|||
full_name = "#{DC_PREFIX}_#{name}"
|
||||
full_plural_name = "#{DC_PREFIX}_#{plural}"
|
||||
klass_name = "DublinCore#{Utils.to_class_name(name)}"
|
||||
klass.install_must_call_validator(DC_PREFIX, DC_URI)
|
||||
klass.install_model(name, DC_URI, "*")
|
||||
klass.install_have_children_element(full_name, full_plural_name)
|
||||
klass.module_eval(<<-EOC, *get_file_and_line_from_caller(0))
|
||||
install_have_children_element(#{full_name.dump},
|
||||
#{full_plural_name.dump})
|
||||
|
||||
remove_method :#{full_name}
|
||||
remove_method :#{full_name}=
|
||||
remove_method :set_#{full_name}
|
||||
|
@ -133,17 +133,6 @@ module RSS
|
|||
end
|
||||
EOC
|
||||
end
|
||||
|
||||
def dc_validate(ignore_unknown_element, tags, uri)
|
||||
tags.each do |tag|
|
||||
key = "#{DC_PREFIX}_#{tag}"
|
||||
if !ignore_unknown_element and
|
||||
!DublinCoreModel::ELEMENTS.include?(key)
|
||||
raise UnknownTagError.new(tag, DC_URI)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
# For backward compatibility
|
||||
|
|
|
@ -34,10 +34,8 @@ module RSS
|
|||
super
|
||||
|
||||
klass.install_have_child_element("#{IMAGE_PREFIX}_item")
|
||||
end
|
||||
|
||||
def image_validate(ignore_unknown_element, tags, uri)
|
||||
validate_one_tag_name(ignore_unknown_element, "item", tags)
|
||||
klass.install_must_call_validator(IMAGE_PREFIX, IMAGE_URI)
|
||||
klass.install_model("item", IMAGE_URI, "?")
|
||||
end
|
||||
|
||||
class ImageItem < Element
|
||||
|
@ -56,6 +54,8 @@ module RSS
|
|||
end
|
||||
end
|
||||
|
||||
install_must_call_validator(IMAGE_PREFIX, IMAGE_URI)
|
||||
|
||||
[
|
||||
["about", ::RSS::RDF::URI, true],
|
||||
["resource", ::RSS::RDF::URI, false],
|
||||
|
@ -120,13 +120,11 @@ module RSS
|
|||
|
||||
unless klass.class == Module
|
||||
klass.install_have_child_element("#{IMAGE_PREFIX}_favicon")
|
||||
klass.install_must_call_validator(IMAGE_PREFIX, IMAGE_URI)
|
||||
klass.install_model("favicon", IMAGE_URI, "?")
|
||||
end
|
||||
end
|
||||
|
||||
def image_validate(ignore_unknown_element, tags, uri)
|
||||
validate_one_tag_name(ignore_unknown_element, "favicon", tags)
|
||||
end
|
||||
|
||||
class ImageFavicon < Element
|
||||
include RSS10
|
||||
include DublinCoreModel
|
||||
|
|
|
@ -391,7 +391,7 @@ EOC
|
|||
INDENT = " "
|
||||
|
||||
MUST_CALL_VALIDATORS = {}
|
||||
MODEL = []
|
||||
MODELS = []
|
||||
GET_ATTRIBUTES = []
|
||||
HAVE_CHILDREN_ELEMENTS = []
|
||||
TO_ELEMENT_METHODS = []
|
||||
|
@ -403,8 +403,8 @@ EOC
|
|||
def must_call_validators
|
||||
MUST_CALL_VALIDATORS
|
||||
end
|
||||
def model
|
||||
MODEL
|
||||
def models
|
||||
MODELS
|
||||
end
|
||||
def get_attributes
|
||||
GET_ATTRIBUTES
|
||||
|
@ -425,7 +425,7 @@ EOC
|
|||
|
||||
def inherited(klass)
|
||||
klass.const_set("MUST_CALL_VALIDATORS", {})
|
||||
klass.const_set("MODEL", [])
|
||||
klass.const_set("MODELS", [])
|
||||
klass.const_set("GET_ATTRIBUTES", [])
|
||||
klass.const_set("HAVE_CHILDREN_ELEMENTS", [])
|
||||
klass.const_set("TO_ELEMENT_METHODS", [])
|
||||
|
@ -442,8 +442,8 @@ EOC
|
|||
def self.must_call_validators
|
||||
super.merge(MUST_CALL_VALIDATORS)
|
||||
end
|
||||
def self.model
|
||||
MODEL + super
|
||||
def self.models
|
||||
MODELS + super
|
||||
end
|
||||
def self.get_attributes
|
||||
GET_ATTRIBUTES + super
|
||||
|
@ -466,11 +466,11 @@ EOC
|
|||
MUST_CALL_VALIDATORS[uri] = prefix
|
||||
end
|
||||
|
||||
def self.install_model(tag, occurs=nil)
|
||||
if m = MODEL.find {|t, o| t == tag}
|
||||
m[1] = occurs
|
||||
def self.install_model(tag, uri, occurs=nil)
|
||||
if m = MODELS.find {|t, u, o| t == tag and u == uri}
|
||||
m[2] = occurs
|
||||
else
|
||||
MODEL << [tag, occurs]
|
||||
MODELS << [tag, uri, occurs]
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -783,18 +783,14 @@ EOC
|
|||
must_call_validators = self.class.must_call_validators
|
||||
tags = tag_filter(tags.dup)
|
||||
p tags if DEBUG
|
||||
self.class::NSPOOL.each do |prefix, uri|
|
||||
if tags.has_key?(uri) and !must_call_validators.has_key?(uri)
|
||||
must_call_validators.each do |uri, prefix|
|
||||
_validate(ignore_unknown_element, tags[uri], uri)
|
||||
meth = "#{prefix}_validate"
|
||||
if respond_to?(meth, true)
|
||||
__send__(meth, ignore_unknown_element, tags[uri], uri)
|
||||
end
|
||||
end
|
||||
end
|
||||
must_call_validators.each do |uri, prefix|
|
||||
__send__("#{prefix}_validate", ignore_unknown_element, tags[uri], uri)
|
||||
end
|
||||
end
|
||||
|
||||
def validate_attribute
|
||||
_attrs.each do |a_name, required, alias_name|
|
||||
|
@ -804,23 +800,25 @@ EOC
|
|||
end
|
||||
end
|
||||
|
||||
def _validate(ignore_unknown_element, tags, uri, model=self.class.model)
|
||||
def _validate(ignore_unknown_element, tags, uri, models=self.class.models)
|
||||
count = 1
|
||||
do_redo = false
|
||||
not_shift = false
|
||||
tag = nil
|
||||
element_names = model.collect {|elem| elem[0]}
|
||||
models = models.find_all {|model| model[1] == uri}
|
||||
element_names = models.collect {|model| model[0]}
|
||||
if tags
|
||||
tags_size = tags.size
|
||||
tags = tags.sort_by {|x| element_names.index(x) || tags_size}
|
||||
end
|
||||
|
||||
model.each_with_index do |elem, i|
|
||||
models.each_with_index do |model, i|
|
||||
name, model_uri, occurs = model
|
||||
|
||||
if DEBUG
|
||||
p "before"
|
||||
p tags
|
||||
p elem
|
||||
p model
|
||||
end
|
||||
|
||||
if not_shift
|
||||
|
@ -834,41 +832,41 @@ EOC
|
|||
p count
|
||||
end
|
||||
|
||||
case elem[1]
|
||||
case occurs
|
||||
when '?'
|
||||
if count > 2
|
||||
raise TooMuchTagError.new(elem[0], tag_name)
|
||||
raise TooMuchTagError.new(name, tag_name)
|
||||
else
|
||||
if elem[0] == tag
|
||||
if name == tag
|
||||
do_redo = true
|
||||
else
|
||||
not_shift = true
|
||||
end
|
||||
end
|
||||
when '*'
|
||||
if elem[0] == tag
|
||||
if name == tag
|
||||
do_redo = true
|
||||
else
|
||||
not_shift = true
|
||||
end
|
||||
when '+'
|
||||
if elem[0] == tag
|
||||
if name == tag
|
||||
do_redo = true
|
||||
else
|
||||
if count > 1
|
||||
not_shift = true
|
||||
else
|
||||
raise MissingTagError.new(elem[0], tag_name)
|
||||
raise MissingTagError.new(name, tag_name)
|
||||
end
|
||||
end
|
||||
else
|
||||
if elem[0] == tag
|
||||
if model[i+1] and model[i+1][0] != elem[0] and
|
||||
tags and tags.first == elem[0]
|
||||
raise TooMuchTagError.new(elem[0], tag_name)
|
||||
if name == tag
|
||||
if models[i+1] and models[i+1][0] != name and
|
||||
tags and tags.first == name
|
||||
raise TooMuchTagError.new(name, tag_name)
|
||||
end
|
||||
else
|
||||
raise MissingTagError.new(elem[0], tag_name)
|
||||
raise MissingTagError.new(name, tag_name)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -16,17 +16,20 @@ module RSS
|
|||
def self.append_features(klass)
|
||||
super
|
||||
|
||||
klass.module_eval(<<-EOC, *get_file_and_line_from_caller(1))
|
||||
klass.install_must_call_validator(SY_PREFIX, SY_URI)
|
||||
klass.module_eval do
|
||||
[
|
||||
["updatePeriod"],
|
||||
["updateFrequency", :positive_integer]
|
||||
].each do |name, type|
|
||||
install_text_element("\#{SY_PREFIX}_\#{name}", type,
|
||||
"\#{SY_PREFIX}:\#{name}")
|
||||
install_text_element("#{SY_PREFIX}_#{name}", type,
|
||||
"#{SY_PREFIX}:#{name}")
|
||||
install_model(name, SY_URI, "?")
|
||||
end
|
||||
|
||||
%w(updateBase).each do |name|
|
||||
install_date_element("\#{SY_PREFIX}_\#{name}", 'w3cdtf', name)
|
||||
install_date_element("#{SY_PREFIX}_#{name}", 'w3cdtf', name)
|
||||
install_model(name, SY_URI, "?")
|
||||
end
|
||||
|
||||
alias_method(:_sy_updatePeriod=, :sy_updatePeriod=)
|
||||
|
@ -35,22 +38,6 @@ module RSS
|
|||
validate_sy_updatePeriod(new_value) if @do_validate
|
||||
self._sy_updatePeriod = new_value
|
||||
end
|
||||
EOC
|
||||
end
|
||||
|
||||
def sy_validate(ignore_unknown_element, tags, uri)
|
||||
counter = {}
|
||||
ELEMENTS.each do |name|
|
||||
counter[name] = 0
|
||||
end
|
||||
|
||||
tags.each do |tag|
|
||||
key = "#{SY_PREFIX}_#{tag}"
|
||||
if ignore_unknown_element and !counter.has_key?(key)
|
||||
raise UnknownTagError.new(tag, SY_URI)
|
||||
end
|
||||
counter[key] += 1
|
||||
raise TooMuchTagError.new(tag, tag_name) if counter[key] > 1
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -28,22 +28,10 @@ module RSS
|
|||
def self.append_features(klass)
|
||||
super
|
||||
|
||||
var_name = "#{TAXO_PREFIX}_topics"
|
||||
klass.install_have_child_element(var_name)
|
||||
end
|
||||
|
||||
def taxo_validate(ignore_unknown_element, tags, uri)
|
||||
found_topics = false
|
||||
tags.each do |tag|
|
||||
if tag == "topics"
|
||||
if found_topics
|
||||
raise TooMuchTagError.new(tag, tag_name)
|
||||
else
|
||||
found_topics = true
|
||||
end
|
||||
elsif !ignore_unknown_element
|
||||
raise UnknownTagError.new(tag, TAXO_URI)
|
||||
end
|
||||
klass.install_must_call_validator(TAXO_PREFIX, TAXO_URI)
|
||||
%w(topics).each do |name|
|
||||
klass.install_have_child_element("#{TAXO_PREFIX}_#{name}")
|
||||
klass.install_model(name, TAXO_URI, "?")
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -65,8 +53,8 @@ module RSS
|
|||
@tag_name = "topics"
|
||||
|
||||
install_have_child_element("Bag")
|
||||
|
||||
install_must_call_validator('rdf', ::RSS::RDF::URI)
|
||||
install_model("Bag", RDF::URI, nil)
|
||||
install_must_call_validator('rdf', RDF::URI)
|
||||
|
||||
def initialize(*args)
|
||||
if Utils.element_initialize_arguments?(args)
|
||||
|
@ -103,13 +91,9 @@ module RSS
|
|||
|
||||
def _tags
|
||||
rv = []
|
||||
rv << [::RSS::RDF::URI, 'Bag'] unless @Bag.nil?
|
||||
rv << [RDF::URI, 'Bag'] unless @Bag.nil?
|
||||
rv
|
||||
end
|
||||
|
||||
def rdf_validate(ignore_unknown_element, tags, uri)
|
||||
_validate(ignore_unknown_element, tags, uri, [["Bag", nil]])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -122,14 +106,6 @@ module RSS
|
|||
klass.install_have_children_element(var_name)
|
||||
end
|
||||
|
||||
def taxo_validate(ignore_unknown_element, tags, uri)
|
||||
tags.each do |tag|
|
||||
if !ignore_unknown_element and tag != "topic"
|
||||
raise UnknownTagError.new(tag, TAXO_URI)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class TaxonomyTopic < Element
|
||||
include RSS10
|
||||
|
||||
|
@ -165,21 +141,6 @@ module RSS
|
|||
tag_name_with_prefix(TAXO_PREFIX)
|
||||
end
|
||||
|
||||
def taxo_validate(ignore_unknown_element, tags, uri)
|
||||
elements = %w(link topics)
|
||||
counter = {}
|
||||
|
||||
tags.each do |tag|
|
||||
if elements.include?(tag)
|
||||
counter[tag] ||= 0
|
||||
counter[tag] += 1
|
||||
raise TooMuchTagError.new(tag, tag_name) if counter[tag] > 1
|
||||
elsif !ignore_unknown_element
|
||||
raise UnknownTagError.new(tag, TAXO_URI)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def maker_target(target)
|
||||
target.new_taxo_topic
|
||||
end
|
||||
|
|
|
@ -12,24 +12,9 @@ module RSS
|
|||
module TrackBackUtils
|
||||
private
|
||||
def trackback_validate(ignore_unknown_element, tags, uri)
|
||||
counter = {}
|
||||
%w(ping about).each do |name|
|
||||
counter["#{TRACKBACK_PREFIX}_#{name}"] = 0
|
||||
end
|
||||
|
||||
tags.each do |tag|
|
||||
key = "#{TRACKBACK_PREFIX}_#{tag}"
|
||||
if !ignore_unknown_element and !counter.has_key?(key)
|
||||
raise UnknownTagError.new(tag, TRACKBACK_URI)
|
||||
end
|
||||
counter[key] += 1
|
||||
if tag != "about" and counter[key] > 1
|
||||
raise TooMuchTagError.new(tag, tag_name)
|
||||
end
|
||||
end
|
||||
|
||||
if counter["#{TRACKBACK_PREFIX}_ping"].zero? and
|
||||
counter["#{TRACKBACK_PREFIX}_about"].nonzero?
|
||||
return if tags.nil?
|
||||
if tags.find {|tag| tag == "about"} and
|
||||
!tags.find {|tag| tag == "ping"}
|
||||
raise MissingTagError.new("#{TRACKBACK_PREFIX}:ping", tag_name)
|
||||
end
|
||||
end
|
||||
|
@ -45,10 +30,12 @@ module RSS
|
|||
unless klass.class == Module
|
||||
klass.module_eval {include TrackBackUtils}
|
||||
|
||||
klass.install_must_call_validator(TRACKBACK_PREFIX, TRACKBACK_URI)
|
||||
%w(ping).each do |name|
|
||||
var_name = "#{TRACKBACK_PREFIX}_#{name}"
|
||||
klass_name = "TrackBack#{Utils.to_class_name(name)}"
|
||||
klass.install_have_child_element(var_name)
|
||||
klass.install_model(name, TRACKBACK_URI, "?")
|
||||
klass.module_eval(<<-EOC, __FILE__, __LINE__)
|
||||
remove_method :#{var_name}
|
||||
def #{var_name}
|
||||
|
@ -66,6 +53,7 @@ module RSS
|
|||
var_name = "#{TRACKBACK_PREFIX}_#{name}"
|
||||
klass_name = "TrackBack#{Utils.to_class_name(name)}"
|
||||
klass.install_have_children_element(var_name)
|
||||
klass.install_model(name, TRACKBACK_URI, "*")
|
||||
klass.module_eval(<<-EOC, __FILE__, __LINE__)
|
||||
remove_method :#{var_name}
|
||||
def #{var_name}(*args)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue