40 votes

Où placer / accéder au fichier de configuration dans gem?

Je suis en train d'écrire mon premier bijou et je voudrais des options spécifiques pour être récupérée et définie par l'utilisateur par le biais d'une config.fichier yml.

Où ce fichier doit être placé à l'intérieur de mon joyau de la structure du fichier et comment quelqu'un de modifier le fichier lors de l'installation de mon bijou? Je devine qu'ils peuvent passer à des options spécifiques lors de l'installation de la gemme, et ces options peuvent être mappées à la config.fichier yml, mais comment est-ce possible?

Aussi, est la meilleure façon de récupérer le fichier par l'intermédiaire de YAML.load_file?

J'ai regardé de Ryan railcasts sur la création d'un gem via le système de regroupement, mais il ne couvre pas ce thème.

53voto

Nicholas B. Points 306

Je suis de sauter sur celui-ci un peu en retard mais je vous laisse un exemple de mise en œuvre de la façon dont je manipulent généralement ce, pour référence future.

Comme il a été mentionné, vous aurez généralement à permettre la configuration par le biais à la fois des fichiers et des tables de hachage. C'est assez facile et léger à inclure à la fois, de sorte que vous devriez le faire.

Quelque chose comme cela fonctionne pour moi, dans la plupart des scénarios:

require 'yaml'

module MyGem
  # Configuration defaults
  @config = {
              :log_level => "verbose",
              :min => 0,
              :max => 99 
            }

  @valid_config_keys = @config.keys

  # Configure through hash
  def self.configure(opts = {})
    opts.each {|k,v| @config[k.to_sym] = v if @valid_config_keys.include? k.to_sym}
  end

  # Configure through yaml file
  def self.configure_with(path_to_yaml_file)
    begin
      config = YAML::load(IO.read(path_to_yaml_file))
    rescue Errno::ENOENT
      log(:warning, "YAML configuration file couldn't be found. Using defaults."); return
    rescue Psych::SyntaxError
      log(:warning, "YAML configuration file contains invalid syntax. Using defaults."); return
    end

    configure(config)
  end

  def self.config
    @config
  end
end

Un ajout de la meilleure pratique serait d'avoir des valeurs par défaut pour toutes vos clés de configuration(comme dans l'exemple ci-dessus). De cette façon, vous êtes offrant à l'utilisateur une liberté dans la façon dont ils peuvent configurer votre bibliothèque.

5voto

Iain Wilson Points 151

Si votre gem inclut une commande qui peut être exécutée de manière interactive par l'utilisateur, il serait préférable de demander les détails nécessaires lors de la première exécution. Un bon endroit pour enregistrer la configuration serait dans le répertoire personnel de l'utilisateur sous forme de fichier à points.

Si votre gem est uniquement destiné à être utilisé dans un autre code en tant que bibliothèque, la configuration doit être autorisée à être transmise sous forme de hachage ou similaire.

2voto

Alex Wayne Points 58113

En tant que joyau, vous devez permettre aux gens de s'interfacer avec eux comme ils le souhaitent. Vous ne pouvez pas assumer n'importe quelle structure d'application. Au lieu de cela, exposez une API qui permet au développeur de passer un hachage d'options ou un chemin d'accès à leur propre fichier YAML que vous pouvez lire et analyser.

Mais essayer d'établir une convention de dénomination de fichier à partir d'une gemme n'est probablement pas ce que vous voulez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X