gemでよくある設定内容を上書きする書き方
[14] pry(main)> RUBY_VERSION => "2.1.0"
module Rspec def self.configure(&block) yield(config) end def self.config @config ||= Config.new end class Config attr_accessor :verstion, :unko def initialize @verstion = '2' @unko = 'yamada' end end end # gemがクラスロードする段階で呼ばれている p Rspec.config.verstion # => '2' # #{Rails.root}/config/application.rb とかで実行される Rspec.configure do |config| config.verstion = '3' end p Rspec.config.verstion # => '3'
yieldあんま使わないマンなのでなるほどという感じ。
というかmoduleにインスタンス変数をセットできるんだ....。
[9] pry(main)> module Hoge; end => nil [10] pry(main)> Hoge.class_eval { @config = 1 } => 1 [11] pry(main)> Hoge.class_eval { @config } => 1 [12] pry(main)> Hoge.class_variables => [] [13] pry(main)> Hoge.instance_variables => [:@config]
ということがここに書いてた。