[前][次][番号順一覧][スレッド一覧]

ruby-changes:2314

From: ko1@a...
Date: 2 Nov 2007 20:58:19 +0900
Subject: [ruby-changes:2314] kou - Ruby:r13805 (trunk): * lib/rss/content.rb, lib/rss/content/, lib/rss/maker/content.rb,

kou	2007-11-02 20:58:03 +0900 (Fri, 02 Nov 2007)

  New Revision: 13805

  Added directories:
    trunk/lib/rss/content/
  Added files:
    trunk/lib/rss/content/1.0.rb
    trunk/lib/rss/content/2.0.rb
  Modified files:
    trunk/ChangeLog
    trunk/lib/rss/content.rb
    trunk/lib/rss/maker/content.rb
    trunk/lib/rss/rss.rb
    trunk/test/rss/rss-testcase.rb
    trunk/test/rss/test_content.rb
    trunk/test/rss/test_maker_content.rb

  Log:
    * lib/rss/content.rb, lib/rss/content/, lib/rss/maker/content.rb,
      test/rss/test_content.rb, test/rss/test_maker_content.rb,
      test/rss/rss-testcase.rb (RSS::TestCase): supported
      content:encoded with RSS 2.0.
      Suggested by Sam Lown. Thanks.

  Added: trunk/lib/rss/content/

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/rss/maker/content.rb?r1=13805&r2=13804
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/rss/rss-testcase.rb?r1=13805&r2=13804
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/rss/content/2.0.rb?revision=13805&view=markup
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/rss/test_maker_content.rb?r1=13805&r2=13804
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/rss/rss.rb?r1=13805&r2=13804
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/rss/content/1.0.rb?revision=13805&view=markup
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13805&r2=13804
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/rss/content.rb?r1=13805&r2=13804
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/rss/test_content.rb?r1=13805&r2=13804

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 13804)
+++ ChangeLog	(revision 13805)
@@ -1,3 +1,11 @@
+Fri Nov  2 20:55:49 2007  Kouhei Sutou  <kou@c...>
+
+	* lib/rss/content.rb, lib/rss/content/, lib/rss/maker/content.rb,
+	  test/rss/test_content.rb, test/rss/test_maker_content.rb,
+	  test/rss/rss-testcase.rb (RSS::TestCase): supported
+	  content:encoded with RSS 2.0.
+	  Suggested by Sam Lown. Thanks.
+
 Fri Nov  2 20:47:04 2007  Kouhei Sutou  <kou@c...>
 
 	* lib/rss/rss.rb, test/rss/test_version.rb: 0.2.0 -> 0.2.1.
Index: lib/rss/maker/content.rb
===================================================================
--- lib/rss/maker/content.rb	(revision 13804)
+++ lib/rss/maker/content.rb	(revision 13805)
@@ -1,5 +1,6 @@
 require 'rss/content'
 require 'rss/maker/1.0'
+require 'rss/maker/2.0'
 
 module RSS
   module Maker
Index: lib/rss/rss.rb
===================================================================
--- lib/rss/rss.rb	(revision 13804)
+++ lib/rss/rss.rb	(revision 13805)
@@ -208,7 +208,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: lib/rss/content/1.0.rb
===================================================================
--- lib/rss/content/1.0.rb	(revision 0)
+++ lib/rss/content/1.0.rb	(revision 13805)
@@ -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: lib/rss/content/2.0.rb
===================================================================
--- lib/rss/content/2.0.rb	(revision 0)
+++ lib/rss/content/2.0.rb	(revision 13805)
@@ -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: lib/rss/content.rb
===================================================================
--- lib/rss/content.rb	(revision 13804)
+++ lib/rss/content.rb	(revision 13805)
@@ -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: test/rss/rss-testcase.rb
===================================================================
--- test/rss/rss-testcase.rb	(revision 13804)
+++ test/rss/rss-testcase.rb	(revision 13805)
@@ -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: test/rss/test_maker_content.rb
===================================================================
--- test/rss/test_maker_content.rb	(revision 13804)
+++ test/rss/test_maker_content.rb	(revision 13805)
@@ -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: test/rss/test_content.rb
===================================================================
--- test/rss/test_content.rb	(revision 13804)
+++ test/rss/test_content.rb	(revision 13805)
@@ -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

[前][次][番号順一覧][スレッド一覧]