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

ruby-changes:5265

From: knu <ko1@a...>
Date: Tue, 3 Jun 2008 10:19:07 +0900 (JST)
Subject: [ruby-changes:5265] Ruby:r16764 (ruby_1_8_7): * lib/erb.rb (ERB::Compiler::TrimScanner#scan_line): Fix a bug

knu	2008-06-03 10:18:47 +0900 (Tue, 03 Jun 2008)

  New Revision: 16764

  Modified files:
    branches/ruby_1_8_7/ChangeLog
    branches/ruby_1_8_7/lib/erb.rb
    branches/ruby_1_8_7/test/erb/test_erb.rb
    branches/ruby_1_8_7/version.h

  Log:
    * lib/erb.rb (ERB::Compiler::TrimScanner#scan_line): Fix a bug
      where tokens are not yilelded one by one.
      (ERB::Compiler::TrimScanner#explicit_trim_line): Fix without-
      strscan problems. [ruby_core:17028].
    
    * test/erb/test_erb.rb (TestERBCore#_test_01)
      (TestERBCore#test_02_safe_04): The expected value should come
      first for assert_equal().
      (TestERBCoreWOStrScan): Add test class for without-strscan.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8_7/ChangeLog?r1=16764&r2=16763&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8_7/test/erb/test_erb.rb?r1=16764&r2=16763&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8_7/version.h?r1=16764&r2=16763&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8_7/lib/erb.rb?r1=16764&r2=16763&diff_format=u

Index: ruby_1_8_7/ChangeLog
===================================================================
--- ruby_1_8_7/ChangeLog	(revision 16763)
+++ ruby_1_8_7/ChangeLog	(revision 16764)
@@ -1,3 +1,15 @@
+Tue Jun  3 10:16:40 2008  Akinori MUSHA  <knu@i...>
+
+	* lib/erb.rb (ERB::Compiler::TrimScanner#scan_line): Fix a bug
+	  where tokens are not yilelded one by one.
+	  (ERB::Compiler::TrimScanner#explicit_trim_line): Fix without-
+	  strscan problems. [ruby_core:17028].
+
+	* test/erb/test_erb.rb (TestERBCore#_test_01)
+	  (TestERBCore#test_02_safe_04): The expected value should come
+	  first for assert_equal().
+	  (TestERBCoreWOStrScan): Add test class for without-strscan.
+
 Mon Jun  2 19:47:16 2008  Akinori MUSHA  <knu@i...>
 
 	* lib/delegate.rb (DelegateClass, Delegator#respond_to?):
Index: ruby_1_8_7/version.h
===================================================================
--- ruby_1_8_7/version.h	(revision 16763)
+++ ruby_1_8_7/version.h	(revision 16764)
@@ -1,15 +1,15 @@
 #define RUBY_VERSION "1.8.7"
-#define RUBY_RELEASE_DATE "2008-06-02"
+#define RUBY_RELEASE_DATE "2008-06-03"
 #define RUBY_VERSION_CODE 187
-#define RUBY_RELEASE_CODE 20080602
-#define RUBY_PATCHLEVEL 1
+#define RUBY_RELEASE_CODE 20080603
+#define RUBY_PATCHLEVEL 2
 
 #define RUBY_VERSION_MAJOR 1
 #define RUBY_VERSION_MINOR 8
 #define RUBY_VERSION_TEENY 7
 #define RUBY_RELEASE_YEAR 2008
 #define RUBY_RELEASE_MONTH 6
-#define RUBY_RELEASE_DAY 2
+#define RUBY_RELEASE_DAY 3
 
 #ifdef RUBY_EXTERN
 RUBY_EXTERN const char ruby_version[];
Index: ruby_1_8_7/lib/erb.rb
===================================================================
--- ruby_1_8_7/lib/erb.rb	(revision 16763)
+++ ruby_1_8_7/lib/erb.rb	(revision 16764)
@@ -327,16 +327,18 @@
       end
 
       def scan_line(line)
-        line.scan(/(.*?)(<%%|%%>|<%=|<%#|<%|%>|\n|\z)/m) do |token|
-	  next if token.empty?
-	  yield(token)
+        line.scan(/(.*?)(<%%|%%>|<%=|<%#|<%|%>|\n|\z)/m) do |tokens|
+          tokens.each do |token|
+            next if token.empty?
+            yield(token)
+          end
 	end
       end
 
       def trim_line1(line)
         line.scan(/(.*?)(<%%|%%>|<%=|<%#|<%|%>\n|%>|\n|\z)/m) do |tokens|
           tokens.each do |token|
-	  next if token.empty?
+            next if token.empty?
             if token == "%>\n"
               yield('%>')
               yield(:cr)
@@ -355,7 +357,7 @@
             head = token unless head
             if token == "%>\n"
               yield('%>')
-              if  is_erb_stag?(head)
+              if is_erb_stag?(head)
                 yield(:cr)
               else
                 yield("\n")
@@ -369,21 +371,22 @@
 	end
       end
 
-      ExplicitTrimRegexp = /(^[ \t]*<%-)|(-%>\n?\z)|(<%-)|(-%>)|(<%%)|(%%>)|(<%=)|(<%#)|(<%)|(%>)|(\n)/
       def explicit_trim_line(line)
-	line.split(ExplicitTrimRegexp).each do |token|
-	  next if token.empty?
-	  if @stag.nil? && /[ \t]*<%-/ =~ token
-	    yield('<%')
-	  elsif @stag && /-%>\n/ =~ token
-	    yield('%>')
-	    yield(:cr)
-	  elsif @stag && token == '-%>'
-	    yield('%>')
-	  else
-	    yield(token)
-	  end
-	end
+        line.scan(/(.*?)(^[ \t]*<%\-|<%\-|<%%|%%>|<%=|<%#|<%|-%>\n|-%>|%>|\z)/m) do |tokens|
+          tokens.each do |token|
+            next if token.empty?
+            if @stag.nil? && /[ \t]*<%-/ =~ token
+              yield('<%')
+            elsif @stag && token == "-%>\n"
+              yield('%>')
+              yield(:cr)
+            elsif @stag && token == '-%>'
+              yield('%>')
+            else
+              yield(token)
+            end
+          end
+        end
       end
 
       ERB_STAG = %w(<%= <%# <%)
Index: ruby_1_8_7/test/erb/test_erb.rb
===================================================================
--- ruby_1_8_7/test/erb/test_erb.rb	(revision 16763)
+++ ruby_1_8_7/test/erb/test_erb.rb	(revision 16764)
@@ -44,26 +44,26 @@
     @erb = ERB
   end
 
-  def test_01
-    _test_01(nil)
-    _test_01(0)
-    _test_01(1)
-    _test_01(2)
-    _test_01(3)
+  def test_core
+    _test_core(nil)
+    _test_core(0)
+    _test_core(1)
+    _test_core(2)
+    _test_core(3)
   end
 
-  def _test_01(safe)
+  def _test_core(safe)
     erb = @erb.new("hello")
-    assert_equal(erb.result, "hello")
+    assert_equal("hello", erb.result)
 
     erb = @erb.new("hello", safe, 0)
-    assert_equal(erb.result, "hello")
+    assert_equal("hello", erb.result)
 
     erb = @erb.new("hello", safe, 1)
-    assert_equal(erb.result, "hello")
+    assert_equal("hello", erb.result)
 
     erb = @erb.new("hello", safe, 2)
-    assert_equal(erb.result, "hello")
+    assert_equal("hello", erb.result)
 
     src = <<EOS
 %% hi
@@ -157,14 +157,14 @@
     assert_equal(ans, erb.result)
   end
 
-  def test_02_safe_04
+  def test_safe_04
     erb = @erb.new('<%=$SAFE%>', 4)
-    assert_equal(erb.result(TOPLEVEL_BINDING.taint), '4')
+    assert_equal('4', erb.result(TOPLEVEL_BINDING.taint))
   end
 
   class Foo; end
 
-  def test_03_def_class
+  def test_def_class
     erb = @erb.new('hello')
     cls = erb.def_class
     assert_equal(Object, cls.superclass)
@@ -177,7 +177,7 @@
     assert(cls.new.respond_to?('erb'))
   end
 
-  def test_04_percent
+  def test_percent
     src = <<EOS
 %n = 1
 <%= n%>
@@ -218,26 +218,24 @@
     assert_equal(ans, ERB.new(src, nil, '%').result)
   end
 
-  class Bar; end
-
-  def test_05_def_method
-    assert(! Bar.new.respond_to?('hello'))
-    Bar.module_eval do
+  def test_def_method
+    klass = Class.new
+    klass.module_eval do
       extend ERB::DefMethod
       fname = File.join(File.dirname(File.expand_path(__FILE__)), 'hello.erb')
       def_erb_method('hello', fname)
     end
-    assert(Bar.new.respond_to?('hello'))
+    assert(klass.new.respond_to?('hello'))
 
-    assert(! Bar.new.respond_to?('hello_world'))
+    assert(! klass.new.respond_to?('hello_world'))
     erb = @erb.new('hello, world')
-    Bar.module_eval do
+    klass.module_eval do
       def_erb_method('hello_world', erb)
     end
-    assert(Bar.new.respond_to?('hello_world'))    
+    assert(klass.new.respond_to?('hello_world'))    
   end
 
-  def test_06_escape
+  def test_escape
     src = <<EOS
 1.<%% : <%="<%%"%>
 2.%%> : <%="%%>"%>
@@ -274,7 +272,7 @@
     assert_equal(ans, ERB.new(src, nil, '%').result)
   end
 
-  def test_07_keep_lineno
+  def test_keep_lineno
     src = <<EOS
 Hello, 
 % x = "World"
@@ -378,7 +376,7 @@
     end
   end
 
-  def test_08_explicit
+  def test_explicit
     src = <<EOS
 <% x = %w(hello world) -%>
 NotSkip <%- y = x -%> NotSkip
@@ -411,3 +409,16 @@
    assert_equal(ans, ERB.new(src, nil, '-%').result)
   end
 end
+
+class TestERBCoreWOStrScan < TestERBCore
+  def setup
+    @save_map = ERB::Compiler::Scanner.instance_variable_get('@scanner_map')
+    map = {[nil, false]=>ERB::Compiler::SimpleScanner}
+    ERB::Compiler::Scanner.instance_variable_set('@scanner_map', map)
+    super
+  end
+
+  def teardown
+    ERB::Compiler::Scanner.instance_variable_set('@scanner_map', @save_map)
+  end
+end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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