ruby-changes:2563
From: ko1@a...
Date: 30 Nov 2007 21:58:52 +0900
Subject: [ruby-changes:2563] kou - Ruby:r14054 (ruby_1_8): * lib/rss/rss.rb, test/rss/test_version.rb: 0.2.0 -> 0.2.1.
kou 2007-11-30 21:56:33 +0900 (Fri, 30 Nov 2007) New Revision: 14054 Added directories: branches/ruby_1_8/lib/rss/content/ Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/NEWS branches/ruby_1_8/lib/rss/content.rb branches/ruby_1_8/lib/rss/maker/content.rb branches/ruby_1_8/lib/rss/rss.rb branches/ruby_1_8/test/rss/rss-testcase.rb branches/ruby_1_8/test/rss/test_content.rb branches/ruby_1_8/test/rss/test_maker_content.rb branches/ruby_1_8/test/rss/test_version.rb Log: * lib/rss/rss.rb, test/rss/test_version.rb: 0.2.0 -> 0.2.1. * lib/rss/content.rb, lib/rss/content/1.0.rb, lib/rss/content/2.0.rb, lib/rss/maker/content.rb, test/rss/rss-testcase.rb, test/rss/test_content.rb, test/rss/test_maker_content.rb: supported content:encoded with RSS 2.0. Suggested by Sam Lown. Thanks. * NEWS: added the above changes. Added: branches/ruby_1_8/lib/rss/content/ http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/test/rss/rss-testcase.rb?r1=14054&r2=14053 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/lib/rss/content.rb?r1=14054&r2=14053 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/lib/rss/maker/content.rb?r1=14054&r2=14053 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=14054&r2=14053 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/test/rss/test_version.rb?r1=14054&r2=14053 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/test/rss/test_content.rb?r1=14054&r2=14053 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/lib/rss/content http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/test/rss/test_maker_content.rb?r1=14054&r2=14053 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/lib/rss/rss.rb?r1=14054&r2=14053 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/NEWS?r1=14054&r2=14053 Index: ruby_1_8/NEWS =================================================================== --- ruby_1_8/NEWS (revision 14053) +++ ruby_1_8/NEWS (revision 14054) @@ -82,7 +82,7 @@ * rss - * 0.1.6 -> 0.2.0 + * 0.1.6 -> 0.2.1 * Fix image module URI @@ -92,6 +92,8 @@ * Slash module support + * content:encoded with RSS 2.0 support + === Compatibility issues (excluding feature bug fixes) * tempfile Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 14053) +++ ruby_1_8/ChangeLog (revision 14054) @@ -1,3 +1,16 @@ +Fri Nov 30 21:53:28 2007 Kouhei Sutou <kou@c...> + + * lib/rss/rss.rb, test/rss/test_version.rb: 0.2.0 -> 0.2.1. + + * lib/rss/content.rb, lib/rss/content/1.0.rb, + lib/rss/content/2.0.rb, lib/rss/maker/content.rb, + test/rss/rss-testcase.rb, test/rss/test_content.rb, + test/rss/test_maker_content.rb: supported content:encoded with RSS + 2.0. + Suggested by Sam Lown. Thanks. + + * NEWS: added the above changes. + Thu Nov 29 16:59:10 2007 Nobuyoshi Nakada <nobu@r...> * parse.y (stmt): remove unnecessary NODE_BEGIN. [ruby-core:13814] Index: ruby_1_8/lib/rss/maker/content.rb =================================================================== --- ruby_1_8/lib/rss/maker/content.rb (revision 14053) +++ ruby_1_8/lib/rss/maker/content.rb (revision 14054) @@ -1,5 +1,6 @@ require 'rss/content' require 'rss/maker/1.0' +require 'rss/maker/2.0' module RSS module Maker Index: ruby_1_8/lib/rss/rss.rb =================================================================== --- ruby_1_8/lib/rss/rss.rb (revision 14053) +++ ruby_1_8/lib/rss/rss.rb (revision 14054) @@ -52,7 +52,7 @@ module RSS - VERSION = "0.2.0" + VERSION = "0.2.1" URI = "http://purl.org/rss/1.0/" @@ -207,7 +207,7 @@ disp_name=nil) name ||= tag_name disp_name ||= name - self::ELEMENTS << name + self::ELEMENTS << name unless self::ELEMENTS.include?(name) add_need_initialize_variable(name) install_model(tag_name, uri, occurs, name) Index: ruby_1_8/lib/rss/content/1.0.rb =================================================================== --- ruby_1_8/lib/rss/content/1.0.rb (revision 0) +++ ruby_1_8/lib/rss/content/1.0.rb (revision 14054) @@ -0,0 +1,10 @@ +require 'rss/1.0' +require 'rss/content' + +module RSS + RDF.install_ns(CONTENT_PREFIX, CONTENT_URI) + + class RDF + class Item; include ContentModel; end + end +end Index: ruby_1_8/lib/rss/content/2.0.rb =================================================================== --- ruby_1_8/lib/rss/content/2.0.rb (revision 0) +++ ruby_1_8/lib/rss/content/2.0.rb (revision 14054) @@ -0,0 +1,12 @@ +require "rss/2.0" +require "rss/content" + +module RSS + Rss.install_ns(CONTENT_PREFIX, CONTENT_URI) + + class Rss + class Channel + class Item; include ContentModel; end + end + end +end Index: ruby_1_8/lib/rss/content.rb =================================================================== --- ruby_1_8/lib/rss/content.rb (revision 14053) +++ ruby_1_8/lib/rss/content.rb (revision 14054) @@ -1,38 +1,31 @@ -require "rss/1.0" +require "rss/rss" module RSS - CONTENT_PREFIX = 'content' CONTENT_URI = "http://purl.org/rss/1.0/modules/content/" - RDF.install_ns(CONTENT_PREFIX, CONTENT_URI) - module ContentModel - extend BaseModel - ELEMENTS = [] + ELEMENTS = ["#{CONTENT_PREFIX}_encoded"] def self.append_features(klass) super klass.install_must_call_validator(CONTENT_PREFIX, CONTENT_URI) - %w(encoded).each do |name| - klass.install_text_element(name, CONTENT_URI, "?", - "#{CONTENT_PREFIX}_#{name}") + ELEMENTS.each do |full_name| + name = full_name[(CONTENT_PREFIX.size + 1)..-1] + klass.install_text_element(name, CONTENT_URI, "?", full_name) end end end - class RDF - class Item; include ContentModel; end - end - prefix_size = CONTENT_PREFIX.size + 1 - ContentModel::ELEMENTS.uniq! ContentModel::ELEMENTS.each do |full_name| name = full_name[prefix_size..-1] BaseListener.install_get_text_element(CONTENT_URI, name, full_name) end - end + +require 'rss/content/1.0' +require 'rss/content/2.0' Index: ruby_1_8/test/rss/rss-testcase.rb =================================================================== --- ruby_1_8/test/rss/rss-testcase.rb (revision 14053) +++ ruby_1_8/test/rss/rss-testcase.rb (revision 14054) @@ -326,11 +326,18 @@ attrs_str = attrs.collect do |name, value| "#{h name}='#{h value}'" end.join(" ") - contents_str = contents.collect do |name, value| - "#{Element::INDENT}<#{h name}>#{h value}</#{h name}>" - end.join("\n") + attrs_str = " #{attrs_str}" unless attrs_str.empty? - "<#{h elem_name} #{attrs_str}>\n#{contents_str}\n</#{h elem_name}>" + if contents.is_a?(String) + contents_str = h(contents) + else + contents_str = contents.collect do |name, value| + "#{Element::INDENT}<#{h name}>#{h value}</#{h name}>" + end.join("\n") + contents_str = "\n#{contents_str}\n" + end + + "<#{h elem_name}#{attrs_str}>#{contents_str}</#{h elem_name}>" end def xmlns_container(xmlns_decls, content) Index: ruby_1_8/test/rss/test_version.rb =================================================================== --- ruby_1_8/test/rss/test_version.rb (revision 14053) +++ ruby_1_8/test/rss/test_version.rb (revision 14054) @@ -3,7 +3,7 @@ module RSS class TestVersion < TestCase def test_version - assert_equal("0.2.0", ::RSS::VERSION) + assert_equal("0.2.1", ::RSS::VERSION) end end end Index: ruby_1_8/test/rss/test_maker_content.rb =================================================================== --- ruby_1_8/test/rss/test_maker_content.rb (revision 14053) +++ ruby_1_8/test/rss/test_maker_content.rb (revision 14054) @@ -26,6 +26,19 @@ assert_content(@elements, rss.items.last) end + def test_rss20 + rss = RSS::Maker.make("2.0") do |maker| + setup_dummy_channel(maker) + + setup_dummy_item(maker) + item = maker.items.last + @elements.each do |name, value| + item.__send__("#{accessor_name(name)}=", value) + end + end + assert_content(@elements, rss.items.last) + end + private def accessor_name(name) "content_#{name}" Index: ruby_1_8/test/rss/test_content.rb =================================================================== --- ruby_1_8/test/rss/test_content.rb (revision 14053) +++ ruby_1_8/test/rss/test_content.rb (revision 14054) @@ -3,18 +3,14 @@ require "rss-testcase" -require "rss/1.0" require "rss/content" module RSS class TestContent < TestCase - def setup @prefix = "content" @uri = "http://purl.org/rss/1.0/modules/content/" - @parents = %w(item) - @elems = { :encoded => "<em>ATTENTION</em>", } @@ -23,63 +19,79 @@ "<#{@prefix}:#{name}>#{CGI.escapeHTML(value.to_s)}</#{@prefix}:#{name}>" end.join("\n") - @rss_source = make_RDF(<<-EOR, {@prefix => @uri}) + @rss10_source = make_RDF(<<-EOR, {@prefix => @uri}) #{make_channel()} #{make_image()} #{make_item(@content_nodes)} #{make_textinput()} EOR - @rss = Parser.parse(@rss_source) + @rss10 = Parser.parse(@rss10_source) + + + @rss20_source = make_rss20(<<-EOR, {@prefix => @uri}) +#{make_channel20(make_item20(@content_nodes))} +EOR + + @rss20 = Parser.parse(@rss20_source) end - + def test_parser + assert_nothing_raised do + Parser.parse(@rss10_source) + end assert_nothing_raised do - Parser.parse(@rss_source) + Parser.parse(@rss20_source) end - + @elems.each do |tag, value| + tag_name = "#{@prefix}:#{tag}" + content_encodes = make_element(tag_name, {}, value) * 2 + assert_too_much_tag(tag.to_s, "item") do Parser.parse(make_RDF(<<-EOR, {@prefix => @uri})) -#{make_channel()} -#{make_item(("<" + @prefix + ":" + tag.to_s + ">" + - CGI.escapeHTML(value.to_s) + - "</" + @prefix + ":" + tag.to_s + ">") * 2)} +#{make_channel} +#{make_item(content_encodes)} EOR end + + assert_too_much_tag(tag.to_s, "item") do + Parser.parse(make_rss20(<<-EOR, {@prefix => @uri})) +#{make_channel20(make_item20(content_encodes))} +EOR + end end + end - end - def test_accessor - new_value = { :encoded => "<![CDATA[<it>hoge</it>]]>", } @elems.each do |name, value| - @parents.each do |parent| + [@rss10, @rss20].each do |rss| meth = "#{RSS::CONTENT_PREFIX}_#{name}" - assert_equal(value, @rss.__send__(parent).__send__(meth)) - @rss.__send__(parent).__send__("#{meth}=", new_value[name].to_s) - assert_equal(new_value[name], @rss.__send__(parent).__send__(meth)) + parent = rss.items.last + assert_equal(value, parent.__send__(meth)) + parent.__send__("#{meth}=", new_value[name].to_s) + assert_equal(new_value[name], parent.__send__(meth)) end end - end def test_to_s @elems.each do |name, value| - excepted = "<#{@prefix}:#{name}>#{CGI.escapeHTML(value)}</#{@prefix}:#{name}>" - @parents.each do |parent| - meth = "#{RSS::CONTENT_PREFIX}_#{name}_element" - assert_equal(excepted, @rss.__send__(parent).__send__(meth)) + excepted = make_element("#{@prefix}:#{name}", {}, value) + meth = "#{RSS::CONTENT_PREFIX}_#{name}_element" + [@rss10, @rss20].each do |rss| + assert_equal(excepted, rss.items.last.__send__(meth)) end end - REXML::Document.new(@rss_source).root.each_element do |parent| - if @parents.include?(parent.name) + [@rss10_source, @rss20_source].each do |source| + REXML::Document.new(source).root.each_element do |parent| + next unless parent.name != "item" parent.each_element do |elem| if elem.namespace == @uri assert_equal(elem.text, @elems[elem.name.intern].to_s) @@ -87,8 +99,6 @@ end end end - end - end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml