From 74a0bc896bef6dd84b93efef87c3d0e8ebadd909 Mon Sep 17 00:00:00 2001 From: kou Date: Mon, 19 Jun 2006 13:37:18 +0000 Subject: * 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 --- lib/rss/rss.rb | 89 +++++++++++++++++++++++++++++++--------------------------- 1 file changed, 47 insertions(+), 42 deletions(-) (limited to 'lib/rss/rss.rb') 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) -- cgit v1.2.3