9
votes

Emballage d'un fichier de données en lecture seule avec un gemme rubis

Je travaille sur une application Ruby déployée comme gemme. J'aimerais inclure un fichier de données en lecture seule avec le gemme et je ne suis pas sûr de savoir comment / où cela devrait être emballé

Pour un petit fond, cette application traite de la spécification MIDI qui inclut des centaines de valeurs constantes. Par exemple, le contrôleur "Volume du canal" est toujours identifié par la valeur 7. "Sustain" est identifié par 64. Etc etc ... dans le passé, les gens ont inclus ces valeurs comme un ensemble important de constantes dans leur code. C'est bien, mais il me semble plus approprié d'inclure ceux d'un format agnostique linguistique tel que YAML

Utilisation du gem_path Pour localiser le fichier YAML est laid et ne fonctionnerait pas non plus lorsque vous utilisez la bibliothèque dans un déploiement non-GEM.

Merci pour votre aide


0 commentaires

4 Réponses :


7
votes

Si vous placez ce fichier quelque part dans l'arborescence source de votre gemme, vous pouvez utiliser un chemin relatif pour le charger. D'où vous voulez le lire, vous pouvez définir le chemin comme suit: fichier.dirname (__ file__) + "/Here/is/my/file.txt"

Vous pouvez utiliser le modificateur de chemin .. comme vous le feriez sur la coquille pour monter un répertoire.


2 commentaires

Ah, ça a du sens! Je suppose que je n'ai jamais tout mis ensemble ensemble. Merci beaucoup


Merci à 5 ans et la réponse est toujours très utile.



11
votes

Je ne pense pas que les rubygems rendent les affirmations sur l'endroit où vous devriez stocker des fichiers comme celui-ci. Je le mettrais sous lib / et faire comme @MKRMR dit. J'utiliserais file.expand_path , cependant, car il est moins en tapant et corrige des problèmes occasionnels avec des symboles symboliques et des fichiers mobiles: yaml.load_file (fichier.expand_path ('../../ MIDI_CODES .yml ', __file __))


2 commentaires

Merci. Je vais lire sur expand_path, mais cela ressemble à un bon conseil. Juste hors de curiosité, pourquoi lib /?


S'il s'agissait d'un fichier de configuration ou que l'utilisateur était censé le mettre à jour, je pourrais le mettre à la racine. Je regarde la structure du répertoire GEM en tant qu'interface qui expose des tests, de la documentation, de l'installation et du code GEM via des répertoires. IMHO, ce fichier de données relève le plus de près la catégorie du "code de la GEM" et devrait donc aller dans la lib /. Il dit aux autres "Ne touchez pas ceci à moins que vous codez sur ce joyau." C'est aussi ce que j'ai vu d'autres gemmes.




1
votes

Le gestionnaire de paquets Rubygems a ses fichiers statiques placés dans le répertoire lib . Par exemple, les certificats ( *. PEM ) sont stockés dans LIB / RUBYGEMS / SSL_CERTS . Je crois qu'ils peuvent être considérés comme la source la plus faisant autorité, alors je vous recommande de faire de même.


0 commentaires