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

ruby-changes:6159

From: kou <ko1@a...>
Date: Sun, 29 Jun 2008 17:34:59 +0900 (JST)
Subject: [ruby-changes:6159] Ruby:r17671 (trunk): * lib/rss/maker/base.rb, lib/rss/maker/itunes.rb: don't use

kou	2008-06-29 17:34:40 +0900 (Sun, 29 Jun 2008)

  New Revision: 17671

  Modified files:
    trunk/ChangeLog
    trunk/lib/rss/maker/base.rb
    trunk/lib/rss/maker/itunes.rb

  Log:
    * lib/rss/maker/base.rb, lib/rss/maker/itunes.rb: don't use
      instance_eval to initialize variables. (speed up)


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/rss/maker/itunes.rb?r1=17671&r2=17670&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=17671&r2=17670&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/rss/maker/base.rb?r1=17671&r2=17670&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 17670)
+++ ChangeLog	(revision 17671)
@@ -1,3 +1,8 @@
+Sun Jun 29 17:33:34 2008  Kouhei Sutou  <kou@c...>
+
+	* lib/rss/maker/base.rb, lib/rss/maker/itunes.rb: don't use
+	instance_eval to initialize variables. (speed up)
+
 Sun Jun 29 17:31:15 2008  Kouhei Sutou  <kou@c...>
 
 	* lib/rss/rss.rb, test/rss/test_version.rb (RSS::VERSION):
Index: lib/rss/maker/itunes.rb
===================================================================
--- lib/rss/maker/itunes.rb	(revision 17670)
+++ lib/rss/maker/itunes.rb	(revision 17671)
@@ -176,7 +176,7 @@
 
         %w(hour minute second).each do |name|
           attr_reader(name)
-          add_need_initialize_variable(name, '0')
+          add_need_initialize_variable(name, 0)
         end
 
         def content=(content)
Index: lib/rss/maker/base.rb
===================================================================
--- lib/rss/maker/base.rb	(revision 17670)
+++ lib/rss/maker/base.rb	(revision 17671)
@@ -31,7 +31,9 @@
           self::OTHER_ELEMENTS << variable_name
         end
 
-        def add_need_initialize_variable(variable_name, init_value="nil")
+        def add_need_initialize_variable(variable_name, init_value=nil,
+                                         &init_block)
+          init_value ||= init_block
           self::NEED_INITIALIZE_VARIABLES << [variable_name, init_value]
         end
 
@@ -45,7 +47,7 @@
           def_delegators("@#{plural}", :push, :pop, :shift, :unshift)
           def_delegators("@#{plural}", :each, :size, :empty?, :clear)
 
-          add_need_initialize_variable(plural, "[]")
+          add_need_initialize_variable(plural) {[]}
 
           module_eval(<<-EOC, __FILE__, __LINE__ + 1)
             def new_#{name}
@@ -74,7 +76,9 @@
         def def_classed_element_without_accessor(name, class_name=nil)
           class_name ||= Utils.to_class_name(name)
           add_other_element(name)
-          add_need_initialize_variable(name, "make_#{name}")
+          add_need_initialize_variable(name) do |object|
+            object.send("make_#{name}")
+          end
           module_eval(<<-EOC, __FILE__, __LINE__ + 1)
             private
             def setup_#{name}(feed, current)
@@ -185,7 +189,19 @@
       private
       def initialize_variables
         self.class.need_initialize_variables.each do |variable_name, init_value|
-          instance_eval("@#{variable_name} = #{init_value}", __FILE__, __LINE__)
+          if init_value.nil?
+            value = nil
+          else
+            if init_value.respond_to?(:call)
+              value = init_value.call(self)
+            elsif init_value.is_a?(String)
+              # just for backward compatibility
+              value = instance_eval(init_value, __FILE__, __LINE__)
+            else
+              value = init_value
+            end
+          end
+          instance_variable_set("@#{variable_name}", value)
         end
       end
 
@@ -238,7 +254,8 @@
 
       def variables
         self.class.need_initialize_variables.find_all do |name, init|
-          "nil" == init
+          # init == "nil" is just for backward compatibility
+          init.nil? or init == "nil"
         end.collect do |name, init|
           name
         end
@@ -364,7 +381,9 @@
 
       %w(xml_stylesheets channel image items textinput).each do |element|
         attr_reader element
-        add_need_initialize_variable(element, "make_#{element}")
+        add_need_initialize_variable(element) do |object|
+          object.send("make_#{element}")
+        end
         module_eval(<<-EOC, __FILE__, __LINE__)
           private
           def setup_#{element}(feed)

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

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