2010-08-31 13 views
4

Je suis sur le point d'extraire des fonctionnalités majeures d'un projet plus important dans une gemme de rubis.Ruby Gems avec des dépendances flexibles gem?

Le petit cadre que je créé utilise quelques gemmes supplémentaires, pour différentes options d'import/export. C'est à dire.

  • FasterCSV (pour Ruby 1.8) pour l'importation csv/export
  • Nokogiri pour l'importation csv/export
  • GraphViz pour le graphique ...
  • PDF
  • ...

Je ne veux pas que les utilisateurs de la gemme installent et chargent toutes les gemmes quand elles n'en ont pas besoin.

Est-ce possible?

+0

pensez-vous de graphviz comme une gemme? – rogerdpack

+0

graphviz comme dans ruby-graphviz gem. pas le meilleur exemple – seb

Répondre

0

Le code dans votre initialiseur est juste code ... vous pourriez avoir passer votre utilisateur petit bijou grâce à un ensemble d'options de configuration et effectuez les dépendances config.gem chargent uniquement si ces options sont présentes. une façon de le faire serait de les amener à mettre en place des valeurs globales dans la configuration environemtn par exemple dans config/environment.rb:

CSV_EXPORTS = XML_EXPORTS = true 
PDF_EXPORTS = false 

Ensuite, dans votre propre bijou, vous écririez:

config.gem 'fastercsv' if defined?(CSV_EXPORTS) 
config.gem 'nokogiri' if defined?(XML_EXPORTS) 
if defined?(PDF_EXPORTS) 
    config.gem 'prawn' 
    config.gem 'prawn-layout' 
end 
# etc 

utilisez "defined?" de sorte que s'ils n'en mettent pas du tout, les gemmes n'essaieront pas de charger. Cela signifie également que vous pouvez par défaut à ce que vous voulez.