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/