Accès aux fichiers emballés dans un Ruby Gem
Question
J'ai une extension Buildr que j'emballage comme un bijou. J'ai une collection de scripts que je veux ajouter à un package. À l'heure actuelle, j'ai ces scripts stockés comme un grand bloc de texte que je vous écris au dossier. Je préférerais avoir des fichiers individuels que je peux copier soit directement ou à l'arrière lecture / écriture sur. Je voudrais que ces fichiers soient emballés dans la gemme. Je n'ai pas un problème d'emballage dans les (il suffit de les coller dans le système de fichiers avant rake install
) mais je ne peux pas comprendre comment y accéder. Y at-il une chose de type bundle ressources Gem?
La solution
Il existe essentiellement deux façons,
1) Vous pouvez charger des ressources par rapport à un fichier Ruby dans votre bijou en utilisant __FILE__
:
def path_to_resources
File.join(File.dirname(File.expand_path(__FILE__)), '../path/to/resources')
end
2) Vous pouvez ajouter des chemins arbitraires de votre bijou à la variable $LOAD_PATH
puis marcher le $LOAD_PATH
de trouver des ressources, par exemple.
Gem::Specification.new do |spec|
spec.name = 'the-name-of-your-gem'
spec.version ='0.0.1'
# this is important - it specifies which files to include in the gem.
spec.files = Dir.glob("lib/**/*") + %w{History.txt Manifest.txt} +
Dir.glob("path/to/resources/**/*")
# If you have resources in other directories than 'lib'
spec.require_paths << 'path/to/resources'
# optional, but useful to your users
spec.summary = "A more longwinded description of your gem"
spec.author = 'Your Name'
spec.email = 'you@yourdomain.com'
spec.homepage = 'http://www.yourpage.com'
# you did document with RDoc, right?
spec.has_rdoc = true
# if you have any dependencies on other gems, list them thusly
spec.add_dependency('hpricot')
spec.add_dependency('log4r', '>= 1.0.5')
end
et
$LOAD_PATH.each { |dir| ... look for resources relative to dir ... }