Ich stehe gerade vor folgendem Problem (1), bei dem ich gern Meinungen gehört hätte, wie man solche Situationen vielleicht vermeiden könnte (falls überhaupt möglich).
Ich habe ein Gem geschrieben, welches mechanize benutzt. Mechanize hatte früher für die HTML-Parsing Geschichten das gem hpricot benutzt, in der Version 0.9.0 wurde, das aber wohl jetzt durch nokogiri ersetzt.
Ich habe jetzt allerdings das Problem, daß, wenn jemand die neueste mechanize Version bei sich installiert, plötzlich mein Gem nicht mehr funktioniert, weil dort die Methode 'inner_html' verwendet wird, die, man ahnt es vielleicht schon, zwar von hpricot verwendet wurde, aber im neuen nokogiri anscheinend nicht mehr vorhanden ist.
Was kann man gegen solche Unverträglichkeiten "durch die Hintertür" tun, außer den Entwickler von mechanize anzuschnauzen?
Gibt es da weitere Möglichkeiten?
Eine Möglichkeit wäre ja, als Abhängigkeit, eine mechanize Version <0.9.0 anzugeben. Dann würde zwar mein Gem zunächst mal funktionieren, leider wäre man damit aber von weiteren Neuerungen/Bugfixes bei mechanize ausgeschlossen. Ebenso wäre es etwas fatal, falls irgendwann einmal diese ältere Version nicht mehr zur Verfügung steht. Zumindest könnte man aber auf diese Weise das Problem etwas hinauszögern. Diese Lösung gefällt mir aber nicht so sehr.
(1) das Problem mit der falschen Methode läßt sich wahrscheinlich relativ leicht lösen, in dem man eine entsprechende Methode aus nokogiri statt dessen einsetzt, aber mir ging es um die Problematik die außen herum damit zusammenhängt. Beispielsweise hätte ich das selbst nie bemerkt, wenn ich nicht auch das gem mechanize upgedatet hätte.
Make: Talk 008 – Kyle Machulis, Kinect Hacker
Vor 4 Stunden
Hab' den Fehler inzwischen korrigiert: es mußte 'inner_text' anstatt 'inner_html' heißen.
AntwortenLöschenich muß mich noch mal selbst kommentieren: Der Autor hat inzwischen auf meine Fehlermeldung bei Rubyforge reagiert: Er will die fehlende Funktion noch implementieren (vermutlich in der Absicht, Abwärtskompatibilität sicherzustellen).
AntwortenLöschen