Fastlane 设置选项自动值

Roy*_*ris 3 fastlane

我想提交带有可选选项的车道。例如车道:

lane :mylane do |options|
  mailgun(
      to: "#{options[:mailto]}"
      ....
    )
end
Run Code Online (Sandbox Code Playgroud)

我如何给出:mailto默认值?所以如果我跑fastlane mylane它会自动设置:mailto为mail@example.com。

但是如果我运行fastlane mylane mailto:"secondmail@example.com"它会使用那个值

shi*_*him 17

正如 Lyndsey Ferguson 在对此答案的评论中指出的那样,以下是最简单的:

mail_addr = options.fetch(:mailto, 'mail@example.com')
Run Code Online (Sandbox Code Playgroud)

其中第一个参数fetch是要获取的选项,第二个参数是默认值(如果未传入该选项)。

我只是想补充一点,这比其他建议要好得多:

options[:mailto] || 'mail@example.com'
Run Code Online (Sandbox Code Playgroud)

处理布尔选项时。

Fastlane(或者可能是 Ruby)将truefalseyes和解释no为布尔值而不是字符串(也许还有其他值,尽管我尝试过NnNO、 并且FALSE它们被视为字符串),所以如果在您的 Lane 实现中您有:

options[:my_option] || true
Run Code Online (Sandbox Code Playgroud)

或者

(options[:my_option] || 'true') == 'true'
Run Code Online (Sandbox Code Playgroud)

你会得到意想不到的行为。

myOption如果您根本没有传入,这将默认true为您所期望的。如果你传入,true它也会返回true。但如果你传入,false这将变成true,这当然是你不想要的。

使用options.fetch(:myOption, true)与上面提到的布尔标志一起使用效果很好,因此一般情况下使用似乎更好。

如果您想自己测试一下,这是一个非常全面的示例:

lane :my_lane do |options|
    puts("You passed in #{options[:my_option]}")

    my_option = options[:my_option] || true
    if my_option
        puts('Using options[:my_option], the result is true')
    else
        puts('Using options[:my_option] the result is false')
    end

    my_option_fetched = options.fetch(:my_option, true)
    if my_option_fetched
        puts('Using fetched, the result is true')
    else
        puts('Using fetched, the result is false')
    end
end
Run Code Online (Sandbox Code Playgroud)

输出:

fastlane my_lane my_option:true

你传入 true
使用 options[:my_option],结果为 true
使用 fetched,结果为 true

fastlane my_lane my_option:false

你传入了 false
使用 options[:my_option],结果为 true
使用 fetched,结果为 false

fastlane my_lane my_option:no

你传入了 false
使用 options[:my_option],结果为 true
使用 fetched,结果为 false

请注意,例如FALSE将默认为,true因为它没有被解释为布尔值,这对我来说似乎是合理的。

(快车道 1.77.0,红宝石 2.7.2)

编辑:值得注意的是,如果您传递空字符串而不是无/空,您将不会从该fetch方法中获得默认值。


Jim*_*Dee 6

我不确定有没有办法让 Fastlane 通过默认设置。处理很简单:

https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/command_line_handler.rb#L10

但是你可以在你的 Fastfile 中轻松地做到这一点:

lane :mylane do |options|
  mail_addr = options[:mailto] || "mail@example.com"
  mailgun(
      to: "#{mail_addr}"
      ....
    )
end
Run Code Online (Sandbox Code Playgroud)

  • 我建议你使用 `mail_addr = options.fetch(:mailto, 'mail@example.com')`,如果 `options` 中不存在 `:mailto` 键,你将获得默认值。它更简单一些。 (3认同)