【发布时间】:2019-09-20 16:02:21
【问题描述】:
所以这可能看起来很奇怪,我已经做了很多谷歌搜索,但是,我并不是真正的程序员,(系统操作员)并试图弄清楚如何以所需的格式将数据传递给 AWS API,这似乎有点奇怪。
因此,在 AWS 中使用资源时,我需要传递作为键和值的标签。键是一个字符串。该值是一个逗号分隔的字符串,位于数组的第一个元素中。所以用 Ruby 术语来说,看起来像这样。
{env => ["stage,qa,dev"]}
而不是
{env => ["stage","qa","dev"]}
无可否认,我是被创造出来的。不是一个非常漂亮的小应用程序,它允许我在 aws 中的目标实例上运行 ssm 文档。
我可以使用我创建的这个类将字符串放入数组元素中
class Tags
attr_accessor :tags
def initialize
@tags = {"env" => nil ,"os" => nil ,"group" => nil }
end
def set_values()
puts "please enter value/s for the following keys, using spaces or commas for multiple values"
@tags.each { |key,value|
print "enter #{key} value/s: "
@tags[key] = [gets.strip.chomp]
@tags[key] = Validate.multi_value(tags[key])
}
end
end
然后我调用这个 Validate.multi_value 并传入创建的数组,但它会返回一个包含我的字符串值的数组。
class Validate
def self.multi_value(value)
if value.any?{ |sub_string| sub_string.include?(",") || sub_string.include?(" ") }
value = value[0].split(/[,\s]+/)
return value
else
return value
end
end
end
使用 pry,我看到它得到例如 ["stage dev qa"] 然后 if 语句确实有效,然后它吐出 ["stage","dev","qa"]。
我需要它来输出["stage,dev,qa"],但为了我的一生,我无法让它工作。
我希望这很清楚。
如果您有任何建议,我将不胜感激。
我在 ruby 方面的经验并不丰富,可能是我错过的类方法。
【问题讨论】:
-
附带说明,请参阅Ruby style guide 了解多行块语法,
@tags.each { |key,value|应为@tags.each do |key,value|并在最后一行以end结尾。