Rubygems optionale Abhängigkeiten

8

Wie füge ich optionale Abhängigkeiten zu rubygems hinzu, da dies nicht unterstützt wird?

Anwendungsfälle:

  • Ich habe eine Bibliothek, die entweder auf Backports, Extlib, Facetten oder ActiveSupport angewiesen ist. In der Vergangenheit habe ich einfach keine dieser Abhängigkeiten hinzugefügt, da die Leute wählen könnten (lies: es würde gut mit dem funktionieren, was sie benutzen), aber die Leute haben sich viel darüber beschwert, dass die Bibliothek nicht funktioniert, oder sie würden es glauben es hängt von ActiveSupport ab (was in manchen Fällen für einige Leute nicht möglich ist). Im Moment kommt es auf Backports an, da es minimal ist. Obwohl das bedeutet, dass Leute Backports installieren werden, wenn sie meine Bibliothek installieren, obwohl sie sie möglicherweise nicht zur Laufzeit verwenden.
  • Ich möchte abhängig von der Umgebung auf verschiedene Edelsteine ​​angewiesen sein (z. B. Johnson auf MRI / Rubinius, TheRubyRhino auf JRuby, Lyndon auf MacRuby).

Ein Ansatz, über den ich nachdenke, ist Highjacking extconf.rb . Ich könnte dort Systemchecks machen. Das fühlt sich jedoch falsch an. Wenn dies der einzige Weg ist, wie gehe ich darüber hinaus? Wie löse ich die Installation zusätzlicher Edelsteine ​​von dort aus aus? system 'gem install ...' ?

    
Konstantin Haase 07.06.2010, 21:34
quelle

2 Antworten

4

Haben Sie versucht, informative Fehlermeldungen für unerfüllte Abhängigkeiten zu geben, um diese Missverständnisse auszuräumen? Mit Zombie-Chaser mache ich Gosu keine Abhängigkeit, aber wenn Leute versuchen, die grafische Version ohne Gosu zu benutzen, informiere ich sie, dass sie Gosu installieren müssen.

    
Andrew Grimm 07.06.2010, 23:11
quelle
2

Ich kenne einige Edelsteine, die den Ansatz "Hijacking extconf.rb " verwenden:

  • pertools.rb hat eine Abhängigkeit, wenn es auf 1.9 steht, aber erfordert nicht diese Abhängigkeit von 1.8.
  • ruby-debug-ide hängt von ruby-debug-base unter 1.8 ab , ruby-debug-base19 on 1.9.

Beide benutzen Gem::DependencyInstaller#install , um die Installation durchzuführen, was wahrscheinlich besser ist als system 'gem install ...' .

Siehe auch diese Rubygems-Feature-Anforderung: spezifizieren Abhängigkeiten pro Ruby-Version .

    
John 22.08.2011 22:24
quelle

Tags und Links