Show
Ignore:
Timestamp:
10/05/07 02:45:20 (4 years ago)
Author:
cho45
Message:

lang/ruby/module-pluggable/test/module-pluggable_test.rb,
lang/ruby/module-pluggable/lib/module/pluggable.rb:

pluggable なクラスを継承してもバグらないようにクラス変数をつかう

Location:
lang/ruby/module-pluggable
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/ruby/module-pluggable/lib/module/pluggable.rb

    r367 r368  
    1414                opts = DEFAULT_OPTS.merge(o) 
    1515                opts[:search_path] = name ? name.to_s : opts[:name].to_s unless opts[:search_path] 
    16                  
    17                 self.instance_eval do 
    18                         (@opts ||= {})[name] = opts 
    19                 end 
     16 
    2017                class_eval <<-EOS 
    2118                        def #{name} 
    22                                 @#{name} ||= Module::Pluggable::Plugins.new(self.class.instance_variable_get(:@opts)[:#{name}]) 
     19                                @#{name} ||= Module::Pluggable::Plugins.new(@@pluggable_opts[:#{name}]) 
     20                        end 
     21 
     22                        def self.set_pluggable_opts(name, opts) 
     23                                (@@pluggable_opts ||= {})[name] = opts 
    2324                        end 
    2425                EOS 
     26                self.set_pluggable_opts(name, opts) 
     27                (class << self; self; end).instance_eval do 
     28                        remove_method(:set_pluggable_opts) 
     29                end 
    2530        end 
    2631 
  • lang/ruby/module-pluggable/test/module-pluggable_test.rb

    r367 r368  
    3939 
    4040                assert_equal "This is test plugin.", test.plugins.description["Test"] 
     41 
     42                # inherit test 
     43                test = Class.new(test.class).new 
     44                assert test.plugins["Test"] 
     45                assert_equal "This is test plugin.", test.plugins.call(:description)["Test"] 
    4146 
    4247                test = Class.new {