先日の投稿でHash
クラスを拡張したHashie
というクラスを見ていきましたが、実はこのHashie
は他にも様々な機能があります。今回の投稿ではYAMLファイルをloadしたオブジェクトをいい感じにしてくれる(Hash
のキー名でアクセサーを定義してくれる)機能があることがドキュメントに記載されていたので、実際に試してみようと思います。
準備
事前に適当なYAMLファイルを用意します。
今回はrails
にcommitされている.travis.yml
を検証対象とすることにしました。
以下のように、wget
でsample.yml
として保存します。
$ wget https://raw.githubusercontent.com/rails/rails/master/.travis.yml -O _snippets/sample.yml
以下がsample.yml
の内容です。
language: ruby
sudo: false
script: 'ci/travis.rb'
before_install:
- gem install bundler
- "rm ${BUNDLE_GEMFILE}.lock"
- curl -L https://github.com/kr/beanstalkd/archive/v1.10.tar.gz | tar xz -C /tmp
- cd /tmp/beanstalkd-1.10/
- make
- ./beanstalkd &
- cd $TRAVIS_BUILD_DIR
# 以下省略
普通にYAMLファイルをloadする
普通にYAMLファイルをloadするには、Rubyの標準ライブラリYAML
を使用することになるかと思います。
require 'yaml'
yaml = YAML.load_file("_snippets/sample.yml")
yaml.class # => Hash
yaml["language"] # => "ruby"
yaml.language
# => NoMethodError: undefined method `language' for #<Hash:0x007fd97d6def08>
上述のように、loadしたYAMLファイルはHash
オブジェクトになります。そしてキーを指定して値を取り出せます。
当然ながら、キーをアクセサ(上述の例でいうと、language
メソッド)として呼んでも誰もそのようなメソッドは定義してくれてはいないのでNoMethodError
となります。
HashieでYAMLファイルをloadする
次に、Hashie
でYAMLをloadし、同様にlanguage
メソッドで値が取れるかを検証してみます。
require 'hashie'
yaml = Hashie::Mash.load("_snippets/sample.yml")
yaml["language"] # => "ruby"
yaml.language # => "ruby"
yaml.notifications.irc.on_success # => "change"
ご覧ください。
user-friendlyに値を取得することができました。
Hashie
を使えば括弧([]
)やダブルクォーテーション(""
)の入力の手間が省略できるので、YAMLをご使用の際はHashieを是非検討してみてください。
最後に
大変お忙しい中、私の投稿を最後まで読んで頂き有難うございました😊
現在、Udemyというオンライン学習プラットフォームでGraphQLやReactが学べるコースを公開しており、有り難いことに大変ご好評頂いております。
下記のリンクからだと95%オフの価格で購入できますので、もしご興味がありましたらご覧頂けると大変嬉しいです😊
- 「GraphQL with React入門 - QueryとMutationを学びPaginationの実装にチャレンジ!」
- 「フロントエンドエンジニアのためのReact・Reduxアプリケーション開発入門」
それでは今日も皆様にとってハッピーなハッキングライフを!!!😋
Dive into Hacking!!!🤩
はむ