2016-08-01 7 views
0

サードパーティライブラリの2つのモジュールの中にあるメソッドをオーバーライドしようとしています。第三者モジュールのオーバーライドメソッド

それは次のようになります。

module Omnigollum 
    module Helpers 
    def kick_back 
     redirect !request.referrer.nil? && request.referrer !~ /#{Regexp.escape(settings.send(:omnigollum)[:route_prefix])}\/.*/ ? 
     request.referrer: 
     '/' 
     halt 
    end 
    end 
end 

このメソッドは、このライブラリから他の関数​​で使用されています。私はそれを完全に無効にする必要があります。

私は他のstackoverflowスレッドによって与えられた解決策をたくさん試しましたが、これまでのところ何も動作しません。ここで

は、私が今持っているものです。

module OmnigollumOverride 
    module Helpers 
    def kick_back 
     puts '=-=-=-=-=-=-=-=-=-==-=-' 
     puts '=-=-=-=-=-=-=-=-=-==-=-' 
    end 
    end 
end 

include Omnigollum 
Omnigollum.module_eval { include OmnigollumOverride } 

私はちょうど方法が正しくオーバーライドされるかどうかをテストするためにいくつかの行を印刷します。

答えて

0

の代わりに:この度

include Omnigollum 
Omnigollum.module_eval { include OmnigollumOverride } 

コール:モジュールを付加

Omnigollum::Helpers.prepend OmnigollumOverride::Helpers 

は、継承階層の一番上に置きます。元の動作を再利用する場合は、次の操作を行います。

def kick_back 
    return super if SOME_CONDITION # call original method 

    puts '=-=-=-=-=-=-=-=-=-==-=-' 
    puts '=-=-=-=-=-=-=-=-=-==-=-' 
end 
関連する問題