Con Thor si può usare method_option
per impostare le opzioni per una particolare attività. Per impostare le opzioni per tutte le attività in una classe, è possibile utilizzare class_option
. Ma per quanto riguarda il caso in cui si vogliono alcune attività di una classe, ma non tutte, per condividere le opzioni?Come rendere le due attività Thor condivisioni opzioni?
Nelle seguenti opzioni task1
e task2
condivide ma non condividono tutte le opzioni e non condividono alcuna opzione con task3
.
require 'thor'
class Cli < Thor
desc 'task1', 'Task 1'
method_option :type, :type => :string, :required => true, :default => 'foo'
def task1
end
desc 'task2', 'Task 2'
method_option :type, :type => :string, :required => true, :default => 'foo'
method_option :value, :type => :numeric
def task2
end
desc 'task3', 'Task 3'
method_option :verbose, :type => :boolean, :aliases => '-v'
def task3
end
end
Cli.start(ARGV)
Il problema con affermando method_option :type, :type => :string, :required => true, :default => 'foo'
sia per task1
e task2
è che esso viola the DRY principle. C'è un modo idiomatico di gestirlo?
buona idea, ma possiamo andare oltre e magari definire il metodo di classe shared_options delegando a method_option + unendo l'hash comune? – inger