2017-05-18 1 views
0

Wenn ich eine Klasse in Ruby und ein Gemfile tausend Zeilen lang habe, was ist der beste Weg, um die class => gem Beziehung zu lösen?Wie trägst du eine Klasse zurück zu einer Bibliothek/einem Juwel, von der sie geladen wurde?

+1

Wenn die Klasse keine native Implementierung hat, ist "Klass.method (: initialize) .source_location" wahrscheinlich der beste Kandidat. – mudasobwa

+0

Das ist eigentlich unmöglich. Ruby hat ein Konzept namens "offene Klassen", was bedeutet, dass eine Klasse stückweise in mehreren verschiedenen Dateien in mehreren verschiedenen Edelsteinen definiert werden kann. Mit anderen Worten, es gibt keine "Klassendefinition" (Singular) und es gibt keine Klasse → Gem-Beziehung. –

Antwort

1

ein Gemfile zu haben, die 1000 Zeilen lange ist wahrscheinlich eine große Quelle von Schmerz sein wird, vor allem, wenn Bibliotheken Upgrade - das ist eine riesigen Liste der Abhängigkeiten !!

Es ist oft offensichtlich, welches Juwel die Quelle ist, nur durch die Namenskonventionen. Aber in Fällen, wenn nicht, können Sie es aufzuspüren mit Method#source_location:

> puts method(:mystery_method).source_location 
> puts MysteryClass.method(:initialize).source_location 

Wenn Sie pry verwenden, dann gibt es auch einen bequemen Befehl zum Anzeigen des Quellcodes einer Klasse/Methode (mit dem show-method Befehl, oder $ kurz):

(pry) > $ mystery_method 
(pry) > $ MysteryClass 

erwähnens~~POS=TRUNC wert~~POS=HEADCOMP ist auch Method#super_method - die nützlich sein können, wenn das Verhalten von komplexen Vererbungs Aufspüren/Mixins.

+1

Danke, obwohl ich zugeben, dass ich 1000 für den dramatischen Effekt verwendet habe, um Punkt zu veranschaulichen – joslinm

Verwandte Themen