diff options
author | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-06-19 13:37:18 +0000 |
---|---|---|
committer | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-06-19 13:37:18 +0000 |
commit | 74a0bc896bef6dd84b93efef87c3d0e8ebadd909 (patch) | |
tree | 3532dcafb72f429b8d178cc307147f9ec131b675 | |
parent | 0976e9e32f2b92038da4c7b11bb94bbae6284362 (diff) |
* lib/rss/rss.rb:
- provided default #to_s as RSS::Element#to_s.
- removed RSS::Element#other_element.
- RSS::Element#tag requires attributes as Hash instead of Array.
* lib/rss/0.9.rb: removed #to_s to use RSS::Element#to_s.
* lib/rss/1.0.rb: ditto.
* lib/rss/image.rb: ditto.
* lib/rss/taxonomy.rb: ditto.
* lib/rss/trackback.rb: ditto.
* lib/rss/2.0.rb: removed #other_element.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10327 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | lib/rss/0.9.rb | 207 | ||||
-rw-r--r-- | lib/rss/1.0.rb | 126 | ||||
-rw-r--r-- | lib/rss/2.0.rb | 21 | ||||
-rw-r--r-- | lib/rss/image.rb | 20 | ||||
-rw-r--r-- | lib/rss/rss.rb | 89 | ||||
-rw-r--r-- | lib/rss/taxonomy.rb | 17 | ||||
-rw-r--r-- | lib/rss/trackback.rb | 12 |
8 files changed, 94 insertions, 413 deletions
@@ -1,3 +1,18 @@ +Mon Jun 19 22:31:59 2006 Kouhei Sutou <kou@cozmixng.org> + + * lib/rss/rss.rb: + - provided default #to_s as RSS::Element#to_s. + - removed RSS::Element#other_element. + - RSS::Element#tag requires attributes as Hash instead of Array. + + * lib/rss/0.9.rb: removed #to_s to use RSS::Element#to_s. + * lib/rss/1.0.rb: ditto. + * lib/rss/image.rb: ditto. + * lib/rss/taxonomy.rb: ditto. + * lib/rss/trackback.rb: ditto. + + * lib/rss/2.0.rb: removed #other_element. + Mon Jun 19 22:09:16 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp> * ext/win32ole/win32ole.c(ole_invoke): support some kind of diff --git a/lib/rss/0.9.rb b/lib/rss/0.9.rb index 4bb6a6e4b3..d69e807d30 100644 --- a/lib/rss/0.9.rb +++ b/lib/rss/0.9.rb @@ -58,17 +58,6 @@ module RSS nil end end - - def to_s(need_convert=true, indent='') - rv = tag(indent, ns_declarations) do |next_indent| - [ - channel_element(false, next_indent), - other_element(false, next_indent), - ] - end - rv = convert(rv) if need_convert - rv - end def setup_maker_elements(maker) super @@ -101,81 +90,30 @@ module RSS include RSS09 [ - ["title", nil], - ["link", nil], - ["description", nil], - ["language", nil], - ["copyright", "?"], - ["managingEditor", "?"], - ["webMaster", "?"], - ["rating", "?"], - ["docs", "?"], - ].each do |name, occurs| - install_text_element(name) - install_model(name, occurs) - end - - [ - ["pubDate", "?"], - ["lastBuildDate", "?"], - ].each do |name, occurs| - install_date_element(name, 'rfc822') + ["title", nil, :text], + ["link", nil, :text], + ["description", nil, :text], + ["language", nil, :text], + ["copyright", "?", :text], + ["managingEditor", "?", :text], + ["webMaster", "?", :text], + ["rating", "?", :text], + ["pubDate", "?", :date, 'rfc822'], + ["lastBuildDate", "?", :date, 'rfc822'], + ["docs", "?", :text], + ["cloud", "?", :have_attribute], + ["skipDays", "?", :have_child], + ["skipHours", "?", :have_child], + ["image", nil, :have_child], + ["item", "*", :have_children], + ["textInput", "?", :have_child], + ].each do |name, occurs, type, *args| + __send__("install_#{type}_element", name, *args) install_model(name, occurs) end alias date pubDate alias date= pubDate= - [ - ["skipDays", "?"], - ["skipHours", "?"], - ["image", nil], - ["textInput", "?"], - ].each do |name, occurs| - install_have_child_element(name) - install_model(name, occurs) - end - - [ - ["cloud", "?"] - ].each do |name, occurs| - install_have_attribute_element(name) - install_model(name, occurs) - end - - [ - ["item", "*"] - ].each do |name, occurs| - install_have_children_element(name) - install_model(name, occurs) - end - - def to_s(need_convert=true, indent='') - rv = tag(indent) do |next_indent| - [ - title_element(false, next_indent), - link_element(false, next_indent), - description_element(false, next_indent), - language_element(false, next_indent), - copyright_element(false, next_indent), - managingEditor_element(false, next_indent), - webMaster_element(false, next_indent), - rating_element(false, next_indent), - pubDate_element(false, next_indent), - lastBuildDate_element(false, next_indent), - docs_element(false, next_indent), - cloud_element(false, next_indent), - skipDays_element(false, next_indent), - skipHours_element(false, next_indent), - image_element(false, next_indent), - item_elements(false, next_indent), - textInput_element(false, next_indent), - other_element(false, next_indent), - ] - end - rv = convert(rv) if need_convert - rv - end - private def children [@skipDays, @skipHours, @image, @textInput, @cloud, *@item] @@ -244,16 +182,6 @@ module RSS install_model(name, occurs) end - def to_s(need_convert=true, indent='') - rv = tag(indent) do |next_indent| - [ - day_elements(false, next_indent) - ] - end - rv = convert(rv) if need_convert - rv - end - private def children @day @@ -293,16 +221,6 @@ module RSS install_model(name, occurs) end - def to_s(need_convert=true, indent='') - rv = tag(indent) do |next_indent| - [ - hour_elements(false, next_indent) - ] - end - rv = convert(rv) if need_convert - rv - end - private def children @hour @@ -362,22 +280,6 @@ module RSS end end - def to_s(need_convert=true, indent='') - rv = tag(indent) do |next_indent| - [ - url_element(false, next_indent), - title_element(false, next_indent), - link_element(false, next_indent), - width_element(false, next_indent), - height_element(false, next_indent), - description_element(false, next_indent), - other_element(false, next_indent), - ] - end - rv = convert(rv) if need_convert - rv - end - private def _tags %w(url title link width height description).delete_if do |name| @@ -418,59 +320,24 @@ module RSS self.protocol = args[4] end end - - def to_s(need_convert=true, indent='') - rv = tag(indent) - rv = convert(rv) if need_convert - rv - end end class Item < Element include RSS09 - %w(title link description).each do |name| - install_text_element(name) - end - - %w(source enclosure).each do |name| - install_have_child_element(name) - end - - [ - %w(category categories), - ].each do |name, plural_name| - install_have_children_element(name, plural_name) - end - [ - ["title", '?'], - ["link", '?'], - ["description", '?'], - ["category", '*'], - ["source", '?'], - ["enclosure", '?'], - ].each do |tag, occurs| + ["title", '?', :text], + ["link", '?', :text], + ["description", '?', :text], + ["category", '*', :have_children, "categories"], + ["source", '?', :have_child], + ["enclosure", '?', :have_child], + ].each do |tag, occurs, type, *args| + __send__("install_#{type}_element", tag, *args) install_model(tag, occurs) end - def to_s(need_convert=true, indent='') - rv = tag(indent) do |next_indent| - [ - title_element(false, next_indent), - link_element(false, next_indent), - description_element(false, next_indent), - category_elements(false, next_indent), - source_element(false, next_indent), - enclosure_element(false, next_indent), - other_element(false, next_indent), - ] - end - rv = convert(rv) if need_convert - rv - end - private def children [@source, @enclosure, *@category].compact @@ -565,12 +432,6 @@ module RSS end end - def to_s(need_convert=true, indent='') - rv = tag(indent) - rv = convert(rv) if need_convert - rv - end - private def maker_target(item) item.enclosure @@ -640,20 +501,6 @@ module RSS end end - def to_s(need_convert=true, indent='') - rv = tag(indent) do |next_indent| - [ - title_element(false, next_indent), - description_element(false, next_indent), - name_element(false, next_indent), - link_element(false, next_indent), - other_element(false, next_indent), - ] - end - rv = convert(rv) if need_convert - rv - end - private def _tags %w(title description name link).each do |name| diff --git a/lib/rss/1.0.rb b/lib/rss/1.0.rb index 9410fceb6a..060de8ff30 100644 --- a/lib/rss/1.0.rb +++ b/lib/rss/1.0.rb @@ -42,14 +42,13 @@ module RSS ["textinput", "?"], ].each do |tag, occurs| install_model(tag, occurs) + if occurs == "+" + install_have_children_element(tag) + else + install_have_child_element(tag) + end end - %w(channel image textinput).each do |name| - install_have_child_element(name) - end - - install_have_children_element("item") - attr_accessor :rss_version, :version, :encoding, :standalone def initialize(version=nil, encoding=nil, standalone=nil) @@ -59,20 +58,6 @@ module RSS def full_name tag_name_with_prefix(PREFIX) end - - def to_s(need_convert=true, indent='') - rv = tag(indent, ns_declarations) do |next_indent| - [ - channel_element(false, next_indent), - image_element(false, next_indent), - item_elements(false, next_indent), - textinput_element(false, next_indent), - other_element(false, next_indent), - ] - end - rv = convert(rv) if need_convert - rv - end private def children @@ -119,12 +104,6 @@ module RSS def full_name tag_name_with_prefix(PREFIX) end - - def to_s(need_convert=true, indent='') - rv = tag(indent) - rv = convert(rv) if need_convert - rv - end end class Seq < Element @@ -153,15 +132,6 @@ module RSS @li = args[0] if args[0] end end - - def to_s(need_convert=true, indent='') - tag(indent) do |next_indent| - [ - li_elements(need_convert, next_indent), - other_element(need_convert, next_indent), - ] - end - end def full_name tag_name_with_prefix(PREFIX) @@ -217,15 +187,6 @@ module RSS @li = args[0] if args[0] end end - - def to_s(need_convert=true, indent='') - tag(indent) do |next_indent| - [ - li_elements(need_convert, next_indent), - other_element(need_convert, next_indent), - ] - end - end def full_name tag_name_with_prefix(PREFIX) @@ -302,22 +263,6 @@ module RSS end end - def to_s(need_convert=true, indent='') - rv = tag(indent) do |next_indent| - [ - title_element(false, next_indent), - link_element(false, next_indent), - description_element(false, next_indent), - image_element(false, next_indent), - items_element(false, next_indent), - textinput_element(false, next_indent), - other_element(false, next_indent), - ] - end - rv = convert(rv) if need_convert - rv - end - private def children [@image, @items, @textinput] @@ -371,12 +316,6 @@ module RSS self.resource = args[0] end end - - def to_s(need_convert=true, indent='') - rv = tag(indent) - rv = convert(rv) if need_convert - rv - end end class Textinput < Element @@ -406,12 +345,6 @@ module RSS self.resource = args[0] end end - - def to_s(need_convert=true, indent='') - rv = tag(indent) - rv = convert(rv) if need_convert - rv - end end class Items < Element @@ -441,15 +374,6 @@ module RSS end self.Seq ||= Seq.new end - - def to_s(need_convert=true, indent='') - rv = tag(indent) do |next_indent| - [ - Seq_element(need_convert, next_indent), - other_element(need_convert, next_indent), - ] - end - end def resources if @Seq @@ -518,19 +442,6 @@ module RSS end end - def to_s(need_convert=true, indent='') - rv = tag(indent) do |next_indent| - [ - title_element(false, next_indent), - url_element(false, next_indent), - link_element(false, next_indent), - other_element(false, next_indent), - ] - end - rv = convert(rv) if need_convert - rv - end - private def _tags [ @@ -588,19 +499,6 @@ module RSS end end - def to_s(need_convert=true, indent='') - rv = tag(indent) do |next_indent| - [ - title_element(false, next_indent), - link_element(false, next_indent), - description_element(false, next_indent), - other_element(false, next_indent), - ] - end - rv = convert(rv) if need_convert - rv - end - private def _tags [ @@ -662,20 +560,6 @@ module RSS end end - def to_s(need_convert=true, indent='') - rv = tag(indent) do |next_indent| - [ - title_element(false, next_indent), - description_element(false, next_indent), - name_element(false, next_indent), - link_element(false, next_indent), - other_element(false, next_indent), - ] - end - rv = convert(rv) if need_convert - rv - end - private def _tags [ diff --git a/lib/rss/2.0.rb b/lib/rss/2.0.rb index 5f8da1f4f7..5b3feab300 100644 --- a/lib/rss/2.0.rb +++ b/lib/rss/2.0.rb @@ -28,15 +28,6 @@ module RSS install_model(name, occurs) end - def other_element(need_convert, indent) - rv = <<-EOT -#{category_elements(need_convert, indent)} -#{generator_element(need_convert, indent)} -#{ttl_element(need_convert, indent)} -EOT - rv << super - end - private alias children09 children def children @@ -85,18 +76,6 @@ EOT install_have_child_element(name) install_model(name, occurs) end - - def other_element(need_convert, indent) - 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") - end private alias children09 children diff --git a/lib/rss/image.rb b/lib/rss/image.rb index e4557bfeb9..325b751187 100644 --- a/lib/rss/image.rb +++ b/lib/rss/image.rb @@ -89,16 +89,6 @@ module RSS def full_name tag_name_with_prefix(IMAGE_PREFIX) end - - def to_s(need_convert=true, indent='') - rv = tag(indent) do |next_indent| - [ - other_element(false, next_indent), - ] - end - rv = convert(rv) if need_convert - rv - end private def _tags @@ -191,16 +181,6 @@ module RSS def full_name tag_name_with_prefix(IMAGE_PREFIX) end - - def to_s(need_convert=true, indent='') - rv = tag(indent) do |next_indent| - [ - other_element(false, next_indent), - ] - end - rv = convert(rv) if need_convert - rv - end private def maker_target(target) diff --git a/lib/rss/rss.rb b/lib/rss/rss.rb index ab4dd1d87a..3dc9999e6f 100644 --- a/lib/rss/rss.rb +++ b/lib/rss/rss.rb @@ -231,11 +231,13 @@ EOC private def install_element(name, postfix="") elem_name = name.sub('_', ':') + method_name = "#{name}_element#{postfix}" + add_to_element_method(method_name) module_eval(<<-EOC, *get_file_and_line_from_caller(2)) - def #{name}_element#{postfix}(need_convert=true, indent='') + def #{method_name}(need_convert=true, indent='') #{yield(name, elem_name)} end - private :#{name}_element#{postfix} + private :#{method_name} EOC end @@ -379,23 +381,6 @@ EOC alias_method(:set_#{accessor_name}, :#{accessor_name}=) EOC end - - def def_content_only_to_s - module_eval(<<-EOC, *get_file_and_line_from_caller(2)) - def to_s(need_convert=true, indent='') - if @content - rv = tag(indent) do |next_indent| - h(@content) - end - rv = convert(rv) if need_convert - rv - else - "" - end - end -EOC - end - end class Element @@ -409,6 +394,7 @@ EOC MODEL = [] GET_ATTRIBUTES = [] HAVE_CHILDREN_ELEMENTS = [] + TO_ELEMENT_METHODS = [] NEED_INITIALIZE_VARIABLES = [] PLURAL_FORMS = {} @@ -426,6 +412,9 @@ EOC def have_children_elements HAVE_CHILDREN_ELEMENTS end + def to_element_methods + TO_ELEMENT_METHODS + end def need_initialize_variables NEED_INITIALIZE_VARIABLES end @@ -439,6 +428,7 @@ EOC klass.const_set("MODEL", []) klass.const_set("GET_ATTRIBUTES", []) klass.const_set("HAVE_CHILDREN_ELEMENTS", []) + klass.const_set("TO_ELEMENT_METHODS", []) klass.const_set("NEED_INITIALIZE_VARIABLES", []) klass.const_set("PLURAL_FORMS", {}) @@ -461,6 +451,9 @@ EOC def self.have_children_elements HAVE_CHILDREN_ELEMENTS + super end + def self.to_element_methods + TO_ELEMENT_METHODS + super + end def self.need_initialize_variables NEED_INITIALIZE_VARIABLES + super end @@ -511,7 +504,6 @@ EOC def self.content_setup(type=nil) def_corresponded_attr_writer "content", type convert_attr_reader :content - def_content_only_to_s @have_content = true end @@ -523,6 +515,10 @@ EOC HAVE_CHILDREN_ELEMENTS << [variable_name, plural_name] end + def self.add_to_element_method(method_name) + TO_ELEMENT_METHODS << method_name + end + def self.add_need_initialize_variable(variable_name) NEED_INITIALIZE_VARIABLES << variable_name end @@ -607,7 +603,24 @@ EOC setup_maker_elements(target) end end - + + def to_s(need_convert=true, indent='') + if self.class.have_content? + return "" unless @content + rv = tag(indent) do |next_indent| + h(@content) + end + else + rv = tag(indent) do |next_indent| + self.class.to_element_methods.collect do |method_name| + __send__(method_name, false, next_indent) + end + end + end + rv = convert(rv) if need_convert + rv + end + private def initialize_variables(attrs) normalized_attrs = {} @@ -632,13 +645,13 @@ EOC end end - def tag(indent, additional_attrs=[], &block) + def tag(indent, additional_attrs={}, &block) next_indent = indent + INDENT attrs = collect_attrs return "" if attrs.nil? - attrs += additional_attrs + attrs.update(additional_attrs) start_tag = make_start_tag(indent, next_indent, attrs) if block @@ -675,13 +688,15 @@ EOC end def collect_attrs - _attrs.collect do |name, required, alias_name| + attrs = {} + _attrs.each do |name, required, alias_name| value = __send__(alias_name || name) return nil if required and value.nil? - [name, value] - end.reject do |name, value| - value.nil? + next if value.nil? + return nil if attrs.has_key?(name) + attrs[name] = value end + attrs end def tag_name_with_prefix(prefix) @@ -789,18 +804,6 @@ EOC end end - def other_element(need_convert, indent='') - rv = [] - private_methods.each do |meth| - if /\A([^_]+)_[^_]+_elements?\z/ =~ meth and - self.class::NSPOOL.has_key?($1) - res = __send__(meth, need_convert, indent) - rv << res if /\A\s*\z/ !~ res - end - end - rv.join("\n") - end - def _validate(ignore_unknown_element, tags, uri, model=self.class.model) count = 1 do_redo = false @@ -947,9 +950,9 @@ EOC end private - def tag(indent, attrs, &block) + def tag(indent, attrs={}, &block) rv = xmldecl + xml_stylesheet_pi - rv << super(indent, attrs, &block) + rv << super(indent, ns_declarations.merge(attrs), &block) rv end @@ -964,10 +967,12 @@ EOC end def ns_declarations + decls = {} self.class::NSPOOL.collect do |prefix, uri| prefix = ":#{prefix}" unless prefix.empty? - ["xmlns#{prefix}", uri] + decls["xmlns#{prefix}"] = uri end + decls end def setup_maker_elements(maker) diff --git a/lib/rss/taxonomy.rb b/lib/rss/taxonomy.rb index 7dd22707f7..d788976d92 100644 --- a/lib/rss/taxonomy.rb +++ b/lib/rss/taxonomy.rb @@ -85,15 +85,6 @@ module RSS def maker_target(target) target.taxo_topics end - - def to_s(need_convert=true, indent='') - rv = tag(indent) do |next_indent| - [ - Bag_element(need_convert, next_indent), - other_element(need_convert, next_indent), - ] - end - end def resources if @Bag @@ -173,14 +164,6 @@ module RSS def full_name tag_name_with_prefix(TAXO_PREFIX) end - - def to_s(need_convert=true, indent='') - rv = tag(indent) do |next_indent| - [ - other_element(need_convert, next_indent), - ] - end - end def taxo_validate(ignore_unknown_element, tags, uri) elements = %w(link topics) diff --git a/lib/rss/trackback.rb b/lib/rss/trackback.rb index 277bb738d5..e7983b8a6f 100644 --- a/lib/rss/trackback.rb +++ b/lib/rss/trackback.rb @@ -148,12 +148,6 @@ module RSS def full_name tag_name_with_prefix(TRACKBACK_PREFIX) end - - def to_s(need_convert=true, indent='') - rv = tag(indent) - rv = convert(rv) if need_convert - rv - end end class TrackBackAbout < Element @@ -195,12 +189,6 @@ module RSS def full_name tag_name_with_prefix(TRACKBACK_PREFIX) end - - def to_s(need_convert=true, indent='') - rv = tag(indent) - rv = convert(rv) if need_convert - rv - end private def maker_target(abouts) |