Dopo averne compreso le enormi potenzialità vediamo come creare un pacchetto gem contente una nostra libreria. Innanzitutto i sorgenti e tutti i file accessori vanno disposti in una struttura coerente. Ad esempio nella directory radice possiamo creare le seguenti directory:
lib/
contiene le applicazioni, e le librerie, Ruby vere e proprie
ext/
contiene eventuali estensioni Ruby scritte in C
bin/
contiene gli script necessari in fase di installazione
data/
contiene i file dati che accompagnano l'applicazione
conf/
contiene tutti i file di configurazione
man/
contiene le pagine del manuale
test/
contiene i test
Il primo passo consiste nel creare un file di specifica gemspec
che conterrà una serie di metadati utilizzati da gem per svolgere le sue operazioni. Un esempio è il seguente:
require 'rubygems' SPEC = Gem::Specification.new do |spec| spec.name = "ProvaGem" spec.version = "1.0.0" spec.author = "Foo Bar" spec.email = "foo@bar.net" spec.homepage = "http://qualchesito.net/ProvaGem" spec.platform = Gem::Platform::RUBY spec.summary = "Qui ci va una breve descrizione" candidates = Dir.glob("{bin, lib, test}/**/*") spec.files = candidates.delete_if do |item| item.include?("CVS") || item.include?("rdoc") end spec.test_file = "test/ts_prova.rb" spec.has_rdoc = true spec.require_path = "lib" spec.extra_rdoc_files = ["README", "ChangeLog"] spec.add_dependency "QualcheLibreria", ">=1.0" end
Commentiamo questo codice. All'inizio ci sono alcune informazioni relative al pacchetto e all'autore. Segue poi platform che indica il tipo di piattaforma dove può essere installata la gemma, ad esempio Gem::Platform::Ruby se si tratta di puro Ruby, Gem::Platform::Win32 per applicazioni Windows e così via.
Scegliamo quindi i file da includere attraverso
candidates = Dir.glob("{bin, lib, test}/**/*") spec.files = candidates.delete_if do |item| item.include?("CVS") || item.include?("rdoc") end
pescandoli nelle directory bin, lib e test ed escludendo i file relativi al repository e la documentazione rdoc. In alternativa, in modo più semplice, avremmo potuto scrivere qualcosa tipo
spec.files = Dir['lib/**/*.rb'] + Dir['bin/*']
raccattando tutto quello presente nelle directory lib e bin. E per escludere alcuni tipi di file l'alternativa è:
spec.files.reject! { |f| f.include? "RDoc" }
Seguono poi altre opzioni che riguardano i test, la documentazione e le dipendenze. L'elenco completo è visualizzabile sull'homepage del progetto.
Fatto questo non ci resta che salvare il file, ad esempio come Provagem.gemspec, ed eseguire gem col comando build
:
$ gem build ProvaGem.gemspec Successfully built RubyGem Name: ProvaGem Version: 1.0.0 File: ProvaGem-1.0.0.gem
Dopo questo comando nella directory corrente troveremo un pacchetto gem contenente tutto quello che serve per l'installazione della nostra libreria.
Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto: