2017-01-05 6 views
1

モジュール内のクラスにあるメソッドを絞り込みたいのですが、クラスを改良しようとしているにもかかわらず、洗練されたコードを実行することはできません:モジュール内のクラスからメソッドを絞り込む方法

module App 
    module Entities 
    class User 
     def self.name(name) 
     puts "Original name: #{name}" 
     end 
    end 
    end 
end 

module RefinedUser 
    refine App::Entities::User do 
    def self.name(name) 
     puts "Refined name: #{name}" 
    end 
    end 
end 

class Runner 
    def original 
    App::Entities::User.name('Forest') 
    end 

    using RefinedUser 

    def refined 
    App::Entities::User.name('Forest') 
    end 
end 

r = Runner.new 
r.original 
r.refined 

出力: Original name: Forest Original name: Forest

答えて

1

アプリ::彼singleton_classとエンティティ::ユーザを洗練する必要があります。 nameはクラスメソッドです。

App::Entities::User is ok. 

module RefinedUser 
    refine App::Entities::User.singleton_class do 
    def name(name) 
     puts "Refined name: #{name}" 
    end 
    end 
end 

using RefinedUser 

class Runner 
    def refined 
    App::Entities::User.name('Forest') 
    end 
end 

r = Runner.new 
r.refined 
=>Refined name: Forest 
+0

コードを実行しようとしましたか? –

+0

いいえ、しかし私は前と同じ状況を見ました。 –

+1

私の間違った答えが更新されました。 –

関連する問題