使YAML在红宝石中干燥

使YAML在红宝石中干燥,yaml,Yaml,在下面的示例中,我尝试使配置文件尽可能干燥,而不依赖目标源中的eval。第一种说法给出了预期的结果,第二种说法则不是,它也应该给出“秘密”。 知道如何在YAML文件中为密钥别名吗 require 'yaml' CONFIG = YAML.load DATA puts CONFIG['org2']['ldappassword'] # Secret puts CONFIG['org3']['ldappassword'] #<<:*DEFAULT['ldappassword'] sho

在下面的示例中,我尝试使配置文件尽可能干燥,而不依赖目标源中的eval。第一种说法给出了预期的结果,第二种说法则不是,它也应该给出“秘密”。 知道如何在YAML文件中为密钥别名吗

require 'yaml'

CONFIG = YAML.load DATA
puts CONFIG['org2']['ldappassword'] # Secret
puts CONFIG['org3']['ldappassword']  #<<:*DEFAULT['ldappassword'] should be Secret

__END__
org1: &DEFAULT
  treebase: 'DC=Organisation,DC=be'
  ldaphost: 9.9.9.9
  ldapusername: ORG\999999
  ldappassword: Secret
  port: 389

org2:
  <<: *DEFAULT

org3:
  treebase: 'OU=Employees,OU=Accounts,OU=Organiationname,OU=Departments,DC=otherorganisation,DC=be'
  ldaphost: 8.8.8.8
  ldapusername: ORG\999998
  ldappassword: <<:*DEFAULT['ldappassword']
  port: 389 
需要“yaml”
CONFIG=YAML.load数据
将配置['org2']['ldappassword']#设置为机密
放置配置['org3']['ldappassword'].您应该像这样“重写”默认值

org1: &DEFAULT
  treebase: 'DC=Organisation,DC=be'
  ldaphost: 9.9.9.9
  ldapusername: ORG\999999
  ldappassword: Secret
  port: 389

org2:
  <<: *DEFAULT

org3:
  <<: *DEFAULT
  treebase: 'OU=Employees,OU=Accounts,OU=Organiationname,OU=Departments,DC=otherorganisation,DC=be'
  ldaphost: 8.8.8.8
  ldapusername: ORG\999998
  port: 389 
org1:&DEFAULT
树状结构:“DC=Organization,DC=be”
LDA邮件:9.9.9.9
ldapusername:ORG\999999
ldappassword:秘密
港口:389
org2:

工作原理是这样的,但这是一个小问题,你不能像那样引用子键值,这是YAML约束