ハッシュのみで構成されたyamlにメソッドの様にアクセス出来るクラスを作ってみた

階層化されたハッシュはOpenStructで対応していない様なので作ってみました

RailsのSettingsファイルの様な感じでアクセスできます

 

yaml_settings.rb

require 'yaml'
require 'ostruct'

class YamlSettings
  def initialize dir
    hash = YAML.load_file(dir)
    @hash = conv_hash hash
    @data = OpenStruct.new(@hash)
  end

  def conv_hash hash
    hash.inject({}) do |h, (key, val)|
      if hash[key].class.to_s == 'Hash'
        h[key.to_sym] = OpenStruct.new(conv_hash hash[key])
      else
        h[key.to_sym] = val
      end
      h
    end
  end

  def data
    @data
  end
end

setting = YamlSettings.new("./settings.yml")

setting.spread_sheet.url
setting.spread_sheet.user

settings.yml

spread_sheet:
  url: http://hogehogehoge.com
  user: nitamago