diff options
author | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-04-05 06:42:03 +0000 |
---|---|---|
committer | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-04-05 06:42:03 +0000 |
commit | d12dff187a86d0f21ad1628472cd797505ddeabe (patch) | |
tree | 006f7ea1d0995dfc481a63601cc5e19a58d5baba /lib/rss/rss.rb | |
parent | 5ddcd35cf12613969b27c06cf3ca1b57ce68a3f0 (diff) | |
download | ruby-d12dff187a86d0f21ad1628472cd797505ddeabe.tar.gz |
* lib/rss/dublincore.rb: supported multiple DublinCore items.
* lib/rss/parser.rb: added class name registry for complex model
elements. (ex. have childlen elements, have some attributes and
a child element and so on.)
* lib/rss/maker/base.rb: added default current_element implementation.
* lib/rss/maker/dublincore.rb: supported multiple DublinCore items.
* lib/rss/maker/image.rb: supproted new DublinCore API.
* lib/rss/trackback.rb (RSS::TrackBackUtils.new_with_value_if_need):
moved to RSS::Utils.
* lib/rss/utils.rb (RSS::Utils.new_with_value_if_need):
moved from RSS::TrackBackUtils.
* lib/rss/maker/image.rb: fixed invalid argument of
add_need_initialize_variable bug.
* lib/rss/maker/trackback.rb: ditto.
* lib/rss/rss.rb (Hash#merge): added for ruby 1.6.
* lib/rss/rss.rb (RSS::BaseModel.date_writer): changed to accept nil
for date value.
* test/test_dublincore.rb: added tests for plural accessor and
multiple DublinCore items.
* test/test_setup_maker_1.0.rb: fixed swapped actual and expected
values.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@8252 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rss/rss.rb')
-rw-r--r-- | lib/rss/rss.rb | 81 |
1 files changed, 47 insertions, 34 deletions
diff --git a/lib/rss/rss.rb b/lib/rss/rss.rb index 848fbd7b79..f9740a1c33 100644 --- a/lib/rss/rss.rb +++ b/lib/rss/rss.rb @@ -51,6 +51,14 @@ module Enumerable end end +class Hash + unless instance_methods.include?("merge") + def merge(other) + dup.update(other) + end + end +end + require "English" require "rss/utils" require "rss/converter" @@ -222,38 +230,7 @@ EOC # accessor convert_attr_reader name - module_eval(<<-EOC, *get_file_and_line_from_caller(2)) - def #{name}=(new_value) - if new_value.kind_of?(Time) - @#{name} = new_value - else - if @do_validate - begin - @#{name} = Time.send('#{type}', new_value) - rescue ArgumentError - raise NotAvailableValueError.new('#{disp_name}', new_value) - end - else - @#{name} = nil - if /\\A\\s*\\z/ !~ new_value.to_s - begin - @#{name} = Time.parse(new_value) - rescue ArgumentError - end - end - end - end - - # Is it need? - if @#{name} - class << @#{name} - undef_method(:to_s) - alias_method(:to_s, :#{type}) - end - end - - end -EOC + date_writer(name, type, disp_name) install_element(name) do |n, elem_name| <<-EOC @@ -301,6 +278,41 @@ EOC end end + def date_writer(name, type, disp_name=name) + module_eval(<<-EOC, *get_file_and_line_from_caller(2)) + def #{name}=(new_value) + if new_value.nil? or new_value.kind_of?(Time) + @#{name} = new_value + else + if @do_validate + begin + @#{name} = Time.send('#{type}', new_value) + rescue ArgumentError + raise NotAvailableValueError.new('#{disp_name}', new_value) + end + else + @#{name} = nil + if /\\A\\s*\\z/ !~ new_value.to_s + begin + @#{name} = Time.parse(new_value) + rescue ArgumentError + end + end + end + end + + # Is it need? + if @#{name} + class << @#{name} + undef_method(:to_s) + alias_method(:to_s, :#{type}) + end + end + + end +EOC + end + def def_children_accessor(accessor_name, plural_name) module_eval(<<-EOC, *get_file_and_line_from_caller(2)) def #{plural_name} @@ -660,8 +672,9 @@ EOC klass = next_element.class prefix = "" prefix << "#{klass.required_prefix}_" if klass.required_prefix - if self.class.plural_forms.has_key?(tag_name) - ary = __send__("#{prefix}#{self.class.plural_forms[tag_name]}") + key = "#{prefix}#{tag_name}" + if self.class.plural_forms.has_key?(key) + ary = __send__("#{self.class.plural_forms[key]}") ary << next_element else __send__("#{prefix}#{tag_name}=", next_element) |