diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | lib/date/format.rb | 19 |
2 files changed, 15 insertions, 10 deletions
@@ -1,3 +1,9 @@ +Wed Feb 14 16:48:56 2007 Yukihiro Matsumoto <matz@ruby-lang.org> + + * lib/date/format.rb (Date::Format::Bag::method_missing): need not + to use instance variables corresponding each method; use Hash + instead. + Wed Feb 14 13:12:06 2007 Yukihiro Matsumoto <matz@ruby-lang.org> * re.c (reg_operand): allow symbols to be operands for regular diff --git a/lib/date/format.rb b/lib/date/format.rb index 0a4869e3a1..7a4633a638 100644 --- a/lib/date/format.rb +++ b/lib/date/format.rb @@ -95,24 +95,23 @@ class Date end class Bag # :nodoc: + def initialize + @_dict = {} + end def method_missing(t, *args, &block) - t = t.to_s - set = t.chomp!('=') - t = '@v' + t - if set - instance_variable_set(t, *args) + if /=$/ =~ t + t = t.to_s.chomp('=').to_sym + @_dict[t] = args[0] else - if instance_variables.include?(t) - instance_variable_get(t) + if @_dict.key?(t) + @_dict[t] end end end def to_hash - instance_variables. - select{|n| !instance_variable_get(n).nil?}.grep(/\A@v[^_]/). - inject({}){|r, n| r[n[2..-1].intern] = instance_variable_get(n); r} + @_dict.reject{|k,v| /^_/ =~ k} end end |