In fase di runtime, dopo aver completato la configurazione di bundler e applicato groups, qual è il modo migliore per verificare a livello di programmazione se un dato gem_name
è nel pacchetto?Controlla a livello di programmazione se gem in bundle?
Leggendo la fonte, ho scoperto Bundler.definition
, ad es.
gem_name = 'banana'
Bundler.definition.dependencies.map(&:name).include?(gem_name)
ma incapace di trovare la documentazione , non so se questo è l'utilizzo consigliato.
Aggiornamento: Sembra che Bundler::Definition#dependencies
restituisca tutte le dipendenze, indipendentemente dai gruppi. In alternativa, ho scoperto Bundler::Runtime#dependencies_for
che accetta gruppi come argomenti.
Bundler.load.dependencies_for(:default, Rails.env).map(&:name).include?(gem_name)
Tuttavia, sembra una cattiva idea duplicare le "liste di gruppi" in ogni sito di chiamata. Idealmente, mi piacerebbe un metodo in che non mi imponga di specificare i gruppi attuali.
1 Il sito Web di bundler e la pagina man sono incentrati sull'utilizzo della riga di comando. Non ho trovato alcuna documentazione sull'API pubblica rubino della gemma. Commenti nell'origine sono utili, ma concentrati su tipi di dati, ecc
Anche se è già nel pacchetto, ciò non significa che sia * attualmente * installato. Non penso che tu possa sfuggire al salvataggio di LoadError. –
Un buon punto, ma facciamo finta, per motivi di SCIENCE, che non si tratti di LoadError;) –
È possibile che si desideri esaminare il codice GraphViz di Bundler per il disegno, poiché mostra come una porzione esterna di codice decide cosa è connesso. (Questa è una supposizione, non una risposta) – joelparkerhenderson