创建可配置的 RubyGems

在 Ruby 开发中,有以下常见的配置模式:

Papago.configure do |config|
  config.api_key = ENV['PAPAGO_API_KEY']
end

papago 是一个简单的命令行翻译器。

从语法可以看出,Papago#configure 方法接收一个代码块。

module Papago
  def self.configure
    yield configuration
  end

  def self.configuration
  end
end

代码中 #configuration 需要返回一个可以用作数据容器的对象。

module Papago
+ class Configuration
+ end

  def self.configuration
+   @configuration ||= Configuration.new
  end
end

其中,@configuration 作为模块的实例变量,#configuration 始终持有同一个 Configuration 实例。

最后,@configuration 需要响应 api_keyapi_key=

module Papago
  class Configuration
    attr_accessor :api_key
  end
end
2