summaryrefslogtreecommitdiff
path: root/lib/rss/maker/base.rb
diff options
context:
space:
mode:
authorkou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-06-29 08:34:40 +0000
committerkou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-06-29 08:34:40 +0000
commitf6c7804c16e019bda446bebc17f32049880277cd (patch)
treef131b9810b00a7e7d68ff37dff5f753da109adce /lib/rss/maker/base.rb
parentb9f895e9c8e5d27922ba8883dad622a3ef8a44ca (diff)
* lib/rss/maker/base.rb, lib/rss/maker/itunes.rb: don't use
instance_eval to initialize variables. (speed up) git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@17671 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rss/maker/base.rb')
-rw-r--r--lib/rss/maker/base.rb31
1 files changed, 25 insertions, 6 deletions
diff --git a/lib/rss/maker/base.rb b/lib/rss/maker/base.rb
index 56bf04657e..907451cc38 100644
--- a/lib/rss/maker/base.rb
+++ b/lib/rss/maker/base.rb
@@ -31,7 +31,9 @@ module RSS
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 @@ module RSS
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 @@ module RSS
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 @@ module RSS
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 @@ module RSS
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 @@ module RSS
%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)