Packen einer schreibgeschützten Datendatei mit einem Ruby-Juwel

8

Ich arbeite an einer Ruby-Anwendung, die als Schmuckstück bereitgestellt wird. Ich möchte eine schreibgeschützte Datei mit dem Juwel einschließen und bin mir nicht sicher, wie / wo das verpackt werden sollte

Für einen kleinen Hintergrund behandelt diese Anwendung die MIDI-Spezifikation, die Hunderte von konstanten Werten enthält. Zum Beispiel wird Controller "Channel Volume" immer durch den Wert 7 identifiziert. "Sustain" wird durch 64 identifiziert. Etc etc ... In der Vergangenheit haben Leute diese Werte als eine große Menge von Konstanten in ihren Code aufgenommen. Das ist in Ordnung, aber es erscheint mir angemessener, diese in ein sprachunabhängiges Format wie yaml einzubinden.

Die Verwendung von GEM_PATH zum Auffinden der YAML-Datei ist hässlich und würde auch nicht funktionieren, wenn die Bibliothek in einer Nicht-GEM-Bereitstellung verwendet wird.

Danke für Ihre Hilfe

    
Ari Russo 25.05.2011, 17:39
quelle

4 Antworten

11

Ich glaube nicht, dass RubyGems Behauptungen darüber aufstellt, wo solche Dateien gespeichert werden sollten. Ich würde es unter lib/ setzen und wie @mkrmr sagt. Ich würde jedoch File.expand_path verwenden, weil es weniger tippt und einige gelegentliche Probleme mit symbolischen Links und beweglichen Dateien behebt: YAML.load_file(File.expand_path('../../midi_codes.yml', __FILE__))

    
Ian 25.05.2011 23:05
quelle
7

Wenn Sie diese Datei irgendwo im Quellbaum Ihres Gems platzieren, können Sie einen relativen Pfad verwenden, um sie zu laden. Von wo Sie es lesen möchten, können Sie den Pfad wie folgt definieren: File.dirname(__FILE__) + "/here/is/my/file.txt"

Sie können den Pfadmodifikator verwenden. Wie bei der Shell, um nach einem Verzeichnis zu suchen.

    
mkrmr 25.05.2011 19:22
quelle
6

Es gibt einen bestimmten Speicherort für diese Dateien.

  1. Erstellen Sie einen Ordner mit dem Namen <gemdir>/data in Ihrem Juwel
  2. Verwenden Sie die Gem.datadir -Methode, um dieses Verzeichnis zu finden.

Dies scheint ein Verzeichnis zu erstellen, das öffentlich sein soll.

Wenn Sie möchten, dass diese Datei privat ist, dann wird das mit dem File.dirname(__FILE__) + "/path" Trick erledigt.

    
Michael Bishop 14.10.2014 14:21
quelle
0

Der Rubygems-Paketmanager hat seine statischen Dateien im Verzeichnis lib abgelegt. Beispielsweise werden Zertifikate ( *.pem ) in lib/rubygems/ssl_certs gespeichert. Ich glaube, dass sie als die maßgebendste Quelle angesehen werden können, daher empfehle ich Ihnen, dasselbe zu tun.

    
skalee 28.03.2017 01:29
quelle

Tags und Links