2011-10-19 9 views
8

Mam rozszerzenie Buildr, które pakuję jako klejnot. Mam kolekcję skryptów, które chcę dodać do pakietu. Obecnie mam te skrypty przechowywane jako duży blok tekstowy, który piszę do pliku. Wolałbym mieć pojedyncze pliki, które mogę albo skopiować bezpośrednio, albo odczytać/zapisać z powrotem. Chciałbym, żeby te pliki zostały zapakowane w klejnot. Nie mam problemu z zapakowaniem ich (po prostu przykleić je do systemu plików przed rake install), ale nie wiem, jak uzyskać do nich dostęp. Czy jest coś w rodzaju pakietu zasobów Gem?Uzyskiwanie dostępu do plików spakowanych w klejnot Ruby

Odpowiedz

16

Istnieją dwa sposoby,

1) można załadować zasobów w stosunku do pliku Ruby w swojej gem wykorzystujące __FILE__:

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

2) Można dodawać dowolne ścieżki z Gem do $LOAD_PATH zmienna, a następnie chodzić $LOAD_PATH znaleźć środki, np

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 

a następnie

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

Pierwszy działał jak czar. :) – Drew

+0

Proszę użyć Gem.data_dir do znalezienia właściwej ścieżki. – ch2500

Powiązane problemy