【问题标题】:Check command line argument in Ruby code is present检查 Ruby 代码中的命令行参数是否存在
【发布时间】:2019-01-30 21:42:53
【问题描述】:

如果存在命令行参数,我想执行 Ruby 代码:

ruby sanity_checks.rb --trx-request -e staging_psp -g all

Ruby 代码:

def execute
    command_options = CommandOptionsProcessor.parse_command_options
    request_type    = command_options[:env]
    tested_env      = command_options[:trx-request]   // check here if flag is present
    tested_gateways = gateway_names(env: tested_env, gateway_list: command_options[:gateways])
    error_logs      = []

   if(request_type.nil?)
    tested_gateways.each do |gateway|
      ........
    end
   end

    raise error_logs.join("\n") if error_logs.any?
  end

如何获取参数--trx-request 并检查它是否存在?

编辑:

命令解析器:

class CommandOptionsProcessor

  def self.parse_command_options
    command_options = {}
    opt_parser = OptionParser.new do |opt|
      opt.banner = 'Usage: ruby sanity_checks.rb [OPTIONS]'
      opt.separator  "Options:"

      opt.on('-e TEST_ENV', '--env TEST_ENV','Set tested environment (underscored).') do |setting|
        command_options[:env] = setting
      end

      opt.on('-g X,Y,Z', '--gateways X,Y,Z', Array, 'Set tested gateways (comma separated, no spaces).') do |setting|
        command_options[:gateways] = setting
      end
    end

    opt_parser.parse!(ARGV)

    command_options
  end
end

你能建议吗?

【问题讨论】:

  • command_options[:trx_request](注意下划线)应该可以工作。
  • 什么是CommandOptionsProcessor
  • @PeterPenzov 请发布您的OptionParser (CommandOptionsProcessor) 没有完整的上下文很难提供帮助
  • @engineersmnky 帖子已更新。

标签: ruby


【解决方案1】:

您需要像这样向OptionParser 添加一个布尔开关选项

opt.on('-t','--[no-]trx-request','Signifies a TRX Request') do |v|
  # note we used an underscore rather than a hyphen to make this symbol 
  # easier to access
  command_options[:trx_request] = v 
end

然后在你的execute 方法中你可以访问它

command_options[:trx_request]

如果您需要一个默认值,您可以在parse_command_options 方法中添加一个,方法是在OptionParser 之外将其设置为command_options[:trx_request] = false

【讨论】:

  • 顺便问一下,如果缺少参数--trx-request 会发生什么?我可以用 trx_request.present 检查它吗?
  • @PeterPenzov present? 是一个rails 方法,所以除非你使用rails no。如果标志丢失,使用Hash#[] 将导致nil(这是错误的,在大多数情况下都有效)。如果您需要明确的false,请将其设置为我的回答中提到的默认选项。
猜你喜欢
  • 2016-04-15
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 2015-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
相关资源
最近更新 更多