2016-08-01 37 views
0

Ich versuche, eine Methode zu überschreiben, die sich in zwei Modulen aus einer Third-Party-Bibliothek befindet.Override-Methode in einem Drittanbietermodul

Es sieht wie folgt aus:

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 

Diese Methode wird von anderen Funktionen aus dieser Bibliothek verwendet wird. Ich muss es komplett außer Kraft setzen.

Ich versuchte viel Lösung durch andere stackoverflow Thread, aber bisher funktioniert nichts.

Hier ist, was ich habe jetzt:

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

include Omnigollum 
Omnigollum.module_eval { include OmnigollumOverride } 

ich nur einige Zeilen drucken zu testen, ob das Verfahren korrekt überschrieben wird.

Antwort

0

Statt:

include Omnigollum 
Omnigollum.module_eval { include OmnigollumOverride } 

nennen dies einmal:

Omnigollum::Helpers.prepend OmnigollumOverride::Helpers 

Voranstellen-Modul legt es auf der Vererbungshierarchie. Ob Sie das ursprüngliche Verhalten erneut verwenden möchten, können Sie folgendermaßen ausführen:

def kick_back 
    return super if SOME_CONDITION # call original method 

    puts '=-=-=-=-=-=-=-=-=-==-=-' 
    puts '=-=-=-=-=-=-=-=-=-==-=-' 
end