2011-10-19 19 views
8

Tengo una extensión Buildr que estoy empaquetando como una gema. Tengo una colección de scripts que quiero agregar a un paquete. Actualmente, tengo estos scripts almacenados como un gran bloque de texto que estoy escribiendo para archivar. Preferiría tener archivos individuales que pueda copiar directamente o leer/escribir de nuevo. Me gustaría que estos archivos se empaquetaran en la gema. No tengo problemas para empaquetarlos (solo los coloco en el sistema de archivos antes del rake install) pero no puedo entender cómo acceder a ellos. ¿Hay algún tipo de paquete de Gem Resources?Acceso a los archivos empaquetados en una gema Ruby

Respuesta

16

Hay básicamente dos maneras,

1) Puede cargar recursos en relación con un archivo de rubí en su joya utilizando __FILE__:

def path_to_resources 
    File.join(File.dirname(File.expand_path(__FILE__)), '../path/to/resources') 
end 

2) puede añadir rutas arbitrarias de su joya a la $LOAD_PATH variable y luego caminar el $LOAD_PATH para encontrar recursos, por ejemplo,

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 = '[email protected]' 
    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 

y luego,

$LOAD_PATH.each { |dir| ... look for resources relative to dir ... } 
+0

Primero funcionó como un amuleto. :) – Drew

+0

Utilice Gem.data_dir para encontrar la ruta correcta. – ch2500

Cuestiones relacionadas