2018-01-26

dry-configurable

今年はdry-rbシリーズを触ってくぞということで、dry-rbの初期から存在するというdry-configurableから触った。これはかなりシンプルで、設定情報を持つクラスを作れるというもの。要はRubyで設定ファイルを書くという要望を満たせる。

require 'dry-configurable'

class App
  extend Dry::Configurable

  setting :database do
    setting :dsn, 'sqlite:memory'
  end
  setting :adaptor
  setting(:path, 'test') { |value| Pathname(value) }
  setting :pool, 5, reader: true
  setting :uploader, reader: true do
    setting :bucket, 'dev'
  end
end

pp App.config.database.dsn
App.configure do |config|
  config.database.dsn = 'jdbc:sqlite:memory'
end
pp App.config.database.dsn
pp App.config.adaptor
pp App.config.path
pp App.pool
pp App.uploader.bucket
pp App.settings

App.freeze
App.configure do |config|
  config.database.dsn = 'aa'
end

実行するとこうなる。

"sqlite:memory"
"jdbc:sqlite:memory"
nil
#<Pathname:test>
5
"dev"
[:database, :adaptor, :path, :pool, :uploader]
Traceback (most recent call last):
        2: from app.rb:28:in `<main>'
        1: from /path/to/vendor/bundle/ruby/2.5.0/gems/dry-configurable-0.7.0/lib/dry/configurable.rb:69:in `configure'
/path/to/vendor/bundle/ruby/2.5.0/gems/dry-configurable-0.7.0/lib/dry/configurable.rb:167:in `raise_frozen_config': Cannot modify frozen config (Dry::Configurable::FrozenConfig)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です