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]

ということがここに書いてた。