0

Ruby アプリケーションから yaml で構成をオーバーライドします。オーバーライドしたいのですが、既存の nil と false が混乱しています。私の期待は以下です(優先度:特定> default_company> default_base):

default_base = YAML.safe_load_file('default_base.yaml')
default = YAML.safe_load_file('default_company.yaml') if File.exist?('default_company.yaml')
specific = YAML.safe_load_file('specific.yaml')

#expect
name = specific['name'] || default['name'] || default_base['name']
#=> my name
company = specific['company'] || default['company'] || default_base['company']
#=> my company
port = specific['port'] || default['port'] || default_base['port']
#=> 80

default_base.yaml (in gem)
  name:
    example
  company:
    example
  port:
    80

default_company.yaml(in user app)
  name:
    my company
  company:
    my company

specific.yaml (in user app)
  name:
    my name

次に、実際:

specific['company']
NoMethodError: undefined method `[]' for false:FalseClass
specific.try(:company)
NoMethodError: undefined method `try' for false:FalseClass

Object#try と activesupport の方が良いですか? ハシー?私のアプリケーションは非常に小さいです。可能であれば、hashie または小さなソリューションを使用したいと考えています (アクティブサポートではありません)。

または別の解決策を知っていますか?

4

1 に答える 1