2011-10-19 18 views
8

Ho un'estensione Buildr che sto confezionando come un gioiello. Ho una collezione di script che voglio aggiungere a un pacchetto. Attualmente, ho questi script memorizzati come un grande blocco di testo che sto scrivendo per file. Preferirei avere singoli file che posso copiare direttamente o leggere/scrivere di nuovo. Vorrei che questi file fossero impacchettati nella gemma. Non ho problemi a confezionarli (basta inserirli nel file system prima del rake install) ma non riesco a capire come accedervi. Esiste un tipo di pacchetto Gem Resources?Accesso ai file impacchettati in Ruby Gem

risposta

16

Ci sono fondamentalmente due modi,

1) È possibile caricare le risorse relative a un file Ruby in vostro gioiello utilizzando __FILE__:

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

2) È possibile aggiungere i percorsi arbitrari dal Gem al $LOAD_PATH variabile e poi a piedi il $LOAD_PATH per trovare le risorse, ad esempio,

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 

e poi,

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

Primo uno ha funzionato come un fascino. :) – Drew

+0

Utilizzare Gem.data_dir per trovare il percorso corretto. – ch2500