diff options
-rw-r--r-- | ChangeLog | 20 | ||||
-rw-r--r-- | lib/rss/maker/dublincore.rb | 4 | ||||
-rw-r--r-- | test/rss/rss-assertions.rb | 10 | ||||
-rw-r--r-- | test/rss/test_maker_dc.rb | 54 |
4 files changed, 81 insertions, 7 deletions
@@ -1,3 +1,14 @@ +Thu Apr 7 11:49:53 2005 Kouhei Sutou <kou@cozmixng.org> + + * lib/rss/maker/dublincore.rb: _really_ supported multiple Dublin + Core items. + + * test/rss/rss-assertions.rb (assert_multiple_dublin_core): added + an assertion for testing multiple Dublin Core items. + + * test/rss/test_maker_dc.rb (test_rss10_multiple): added a test + for making multiple Dublin Core items. + Wed Apr 6 16:06:30 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp> * test/ruby/test_env.rb (test_key): should test ENV.key instead of @@ -20,7 +31,7 @@ Tue Apr 5 15:45:33 2005 Kouhei Sutou <kou@cozmixng.org> Tue Apr 5 15:15:26 2005 Kouhei Sutou <kou@cozmixng.org> - * lib/rss/dublincore.rb: supported multiple DublinCore items. + * lib/rss/dublincore.rb: supported multiple Dublin Core items. * lib/rss/parser.rb: added class name registry for complex model elements. (ex. have childlen elements, have some attributes and @@ -28,9 +39,10 @@ Tue Apr 5 15:15:26 2005 Kouhei Sutou <kou@cozmixng.org> * lib/rss/maker/base.rb: added default current_element implementation. - * lib/rss/maker/dublincore.rb: supported multiple DublinCore items. + * lib/rss/maker/dublincore.rb: supported multiple Dublin Core + items. - * lib/rss/maker/image.rb: supproted new DublinCore API. + * lib/rss/maker/image.rb: supproted new Dublin Core API. * lib/rss/trackback.rb (RSS::TrackBackUtils.new_with_value_if_need): @@ -53,7 +65,7 @@ Tue Apr 5 15:15:26 2005 Kouhei Sutou <kou@cozmixng.org> * test/test_dublincore.rb: added tests for plural accessor and - multiple DublinCore items. + multiple Dublin Core items. * test/test_setup_maker_1.0.rb: fixed swapped actual and expected values. diff --git a/lib/rss/maker/dublincore.rb b/lib/rss/maker/dublincore.rb index 948c45941..1876ec36c 100644 --- a/lib/rss/maker/dublincore.rb +++ b/lib/rss/maker/dublincore.rb @@ -83,12 +83,14 @@ EOC plural_name ||= "#{name}s" klass_name = Utils.to_class_name(name) plural_klass_name = "DublinCore#{Utils.to_class_name(plural_name)}" + full_klass_name = "DublinCore#{klass_name}" klass.module_eval(<<-EOC, *Utils.get_file_and_line_from_caller(1)) class #{plural_klass_name} < #{plural_klass_name}Base class #{klass_name} < #{klass_name}Base def to_rss(rss, current) if value and current.respond_to?(:dc_#{name}) - current.dc_#{name} = value + new_item = current.class::#{full_klass_name}.new(value) + current.dc_#{plural_name} << new_item end end end diff --git a/test/rss/rss-assertions.rb b/test/rss/rss-assertions.rb index 569e9621d..263606251 100644 --- a/test/rss/rss-assertions.rb +++ b/test/rss/rss-assertions.rb @@ -394,6 +394,16 @@ module RSS end end + def assert_multiple_dublin_core(elems, target) + _wrap_assertion do + elems.each do |name, values, plural| + plural ||= "#{name}s" + actual = target.__send__("dc_#{plural}").collect{|x| x.value} + assert_equal(values, actual) + end + end + end + def assert_syndication(elems, target) _wrap_assertion do elems.each do |name, value| diff --git a/test/rss/test_maker_dc.rb b/test/rss/test_maker_dc.rb index 0a4a4d42c..92ae4055d 100644 --- a/test/rss/test_maker_dc.rb +++ b/test/rss/test_maker_dc.rb @@ -56,16 +56,66 @@ module RSS assert_dublin_core(@elements, rss.textinput) end + def test_rss10_multiple + elems = [] + @elements.each do |name, value| + plural = name.to_s + (name == :rights ? "es" : "s") + values = [value] + if name == :date + values << value + 60 + else + values << value * 2 + end + elems << [name, values, plural] + end + + rss = RSS::Maker.make("1.0") do |maker| + setup_dummy_channel(maker) + set_multiple_elements(maker.channel, elems) + + setup_dummy_image(maker) + set_multiple_elements(maker.image, elems) + + setup_dummy_item(maker) + item = maker.items.last + elems.each do |name, values, plural| + dc_elems = item.__send__("dc_#{plural}") + values.each do |value| + elem = dc_elems.__send__("new_#{name}") + elem.value = value + end + end + + setup_dummy_textinput(maker) + set_multiple_elements(maker.textinput, elems) + end + assert_multiple_dublin_core(elems, rss.channel) + assert_multiple_dublin_core(elems, rss.image) + assert_multiple_dublin_core(elems, rss.items.last) + assert_multiple_dublin_core(elems, rss.textinput) + end + private def accessor_name(name) "dc_#{name}" end - def set_elements(target) - @elements.each do |name, value| + def set_elements(target, elems=@elements) + elems.each do |name, value| target.__send__("#{accessor_name(name)}=", value) end end + def set_multiple_elements(target, elems) + elems.each do |name, values, plural| + plural ||= "#{name}s" + dc_elems = target.__send__("dc_#{plural}") + values.each do |value| + new_dc_elem = dc_elems.__send__("new_#{name}") + new_dc_elem.value = value + end + end + end + end end |