ruby / ruby/optparse

Default Value support

Ouverte
#67 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Ruby
Étoiles
71
Forks
27
Merge moyen
3 h 3 min
PR mergées (30 j)
2

Description

Hi,

Thanks a lot for this gem!

I wrote a little hacky class that adds support for default values. So you can do:

parser.on('-m', '--tracing-mode MODE', 'Define the category of events traced', default: 'default')

I have no idea if you can find it interesting, but I use it quite often in my project, so I share it with you. Putting the default values into the into for me to duplicate the key (one into the the on and one into the into. I lead from some silly mistake due to a typo).

If you are interested, maybe I can try to do a cleaner PR. If you are not, please feel free to close this issue.

Thanks a lot!

require 'optparse'
class OptionParserWithDefaultAndValidation < OptionParser
  def initialize
    # Dictionary to save the default values passed by `on`
    @defaults = {}
    super
  end

  def parse!(argv = default_argv, into: nil)
    # Merge the default value with the `into` dict
    into.merge!(@defaults) unless into.nil?
    # This will populate the `into` dict (overwriting our default if needed)
    super
  end

  def define(*opts, &block)
    switch = super
    @defaults[switch.switch_name] = @tmp_default unless @tmp_default.nil?
    switch
  end

  def on(*opts, default, &block)
    # Save the default, which will be used in `refine.`
    @tmp_default = default
    # Default can contain Array (or Set).
    # We cannot use the [a].flatten trick.
    # So we use the respond_to one
    #   irb(main):028:0> default = Set[-1,2]
    #   => #<Set: {-1, 2}>
    #   irb(main):029:0> [default].flatten.join(',')
    #   => "#<Set: {-1, 2}>"
    #   irb(main):030:0> default.respond_to?(:flatten)? default.flatten.join(',') : default
    #   => "-1,2"
    opts << "Default: #{default.respond_to?(:flatten) ? default.flatten.join(',') : default}" unless default.nil?
    super(*opts, &block)
  end
end

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par les points d’entrée OptionParser#on, #define et #parse! présentés dans la sous-classe proposée, et examinez comment l’argument existant into est renseigné. Confirmez le comportement attendu pour les valeurs par défaut avec et sans into, puis localisez les tests OptionParser existants et utilisez-les pour définir les critères d’achèvement.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
ruby
Domaine
cli
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.