2009-10-25 19 views
5

E 'possibile aggiungere una dipendenza gemma solo se la persona sta usando una certa versione di ruby?Come si aggiungono i requisiti del rubygem condizionale a una specifica della gemma?

Sfondo: Sto lavorando a un fork of a project che utilizza Test :: Unità :: Autorunner e simili. Fanno parte della libreria standard in Ruby 1.8, ma non fanno parte della libreria standard in 1.9.1, ed è invece nella gemma "test-unit". Voglio aggiungere una dipendenza che dice che se qualcuno usa Ruby 1.9.1 o successivo, installa la gemma "test-unit", ma se sta usando 1.8 o precedenti, non ha bisogno di installare nulla.

risposta

0

fieno ... sono una specie di principiante rubino ... se questo è il modo migliore per farlo.

in qualsiasi modo ... vorrei poterlo fare usando solo Ruby .... anche se puoi usare la shell del tuo sistema operativo per farlo, usando questo nel programma di installazione del tuo programma, esegui solo (funziona per il funzionamento basato su Linux sistemi):

$ruby --version 

(u può eseguire che da un file di installazione rubino, proprio come: ruby --version) e mettere una possibilità in base alla potenza, se si tratta di 1.9.1 aggiungere una riga in più per eseguire:

$ sudo gem install gem_name 

altro, lascia stare.

-1

Non è possibile. È necessario costruire due gemme, di cui una con

spec.required_ruby_version = '~> 1.8.6' 

e uno con

spec.required_ruby_version = '~> 1.9.1' 
spec.add_dependency 'test-unit', '~> 2.0.5' 
+1

-1 Si prega di non farlo. Questo rovina tutti i tipi di strumenti di dipendenza. –

+0

@Bob Aman: sai cosa dovrebbe essere fatto? –

-1

Gemspecs sono file di solo rubino in ogni caso, in modo da poter eseguire qualsiasi codice rubino al loro interno, in modo da:

spec.add_dependency = 'test-unit', '>= 2.0' if RUBY_VERSION =~ '1.9' 

MODIFICA: le specifiche vengono eseguite solo sulla macchina del costruttore.

+0

Dove viene eseguito il codice ruby? Sulla macchina della gemma creatrice o sul computer dell'installatore? –

+0

Dimenticalo. Funzionerà solo sulla macchina del creatore. Per non generare un enorme problema di manutenzione, è possibile presentare un messaggio di installazione post o utilizzare i ganci pre_install o post_intall per ottenere l'installazione gem. Ho modificato la risposta. – Mereghost

1

Ho fatto questa cosa esatta per un progetto. Il trucco è aggiungere lo script come un'estensione, che verrà eseguita al momento dell'installazione sul computer dell'utente.

Qui ci sono frammenti di codice e link al nostro github:

In primo luogo, quando nella gemspec (in realtà stiamo utilizzando un Rakefile per generare esso, ma il risultato finisce per lo stesso) source

# This file *needs* to be named this, there are other files 
# for other extension processors 
s.extensions << 'ext/mkrf_conf.rb' 

e poi le linee pertinenti che mkrf_conf.rb source

require 'rubygems/dependency_installer.rb' 
inst = Gem::DependencyInstaller.new 
inst.install "test-unit" if RUBY_VERSION > "1.9" 
+0

Sto provando a farlo, ma quando provo a installare gem con questa estensione tramite l'installazione in bundle, la gemma condizionale non è affatto installata. – wawka

+0

È installato. Semplicemente non stampato in uscita. Prova a richiedere la tua gemma in 'irb'. – hlcs

Problemi correlati