summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog20
-rw-r--r--lib/rss/maker/dublincore.rb4
-rw-r--r--test/rss/rss-assertions.rb10
-rw-r--r--test/rss/test_maker_dc.rb54
4 files changed, 81 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 2a84d6b4c..b38c5a4d8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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