Тор читает yaml-файл конфигурации, чтобы переопределить параметры

Я пытаюсь создать исполняемый скрипт ruby ​​с помощью Thor.

Я определил параметры для моей задачи. Пока у меня что-то вроде этого

class Command < Thor

  desc "csv2strings CSV_FILENAME", "convert CSV file to '.strings' file"
  method_option :langs, :type => :hash, :required => true, :aliases => "-L", :desc => "languages to convert"
  ...
  def csv2strings(filename)
    ...
  end

  ...
  def config
    args = options.dup
    args[:file] ||= '.csvconverter.yaml'

    config = YAML::load File.open(args[:file], 'r')
  end
end

Когда csv2strings вызывается без аргументов, я бы хотел, чтобы была вызвана задача конфигурации, которая установила бы параметр :langs.

Я еще не нашел хороший способ сделать это.

Любая помощь будет оценена.


person netbe    schedule 27.06.2013    source источник


Ответы (1)


Я думаю, вы ищете способ установить параметры конфигурации с помощью командной строки и файла конфигурации.

Вот пример из бриджа мастера.

  def options
    original_options = super
    return original_options unless File.exists?(".foreman")
    defaults = ::YAML::load_file(".foreman") || {}
    Thor::CoreExt::HashWithIndifferentAccess.new(defaults.merge(original_options))
  end

Он переопределяет метод options и объединяет значения из файла конфигурации с исходным хэшем параметров.

В вашем случае может сработать следующее:

def csv2strings(name)
  # do something with options
end

private
  def options
    original_options = super
    filename = original_options[:file] || '.csvconverter.yaml'
    return original_options unless File.exists?(filename)
    defaults = ::YAML::load_file(filename) || {}
    defaults.merge(original_options)
    # alternatively, set original_options[:langs] and then return it
  end

(Недавно я написал в своем блоге сообщение о Формане, в котором объясняется это подробнее.)

person James Lim    schedule 31.07.2013
comment
Спасибо, это сработало! Однако мне пришлось обрабатывать необходимые параметры в методе параметров метода csv2strings, который был вызван после требуемой проверки. Поэтому, если у вас есть какое-либо решение для улучшения, просто дайте мне знать - person netbe; 04.09.2013