Настройка параметров конфигурации при написании гема

Я пишу гем, с которым я хотел бы работать как в среде Rails, так и без нее.

У меня есть класс Configuration, позволяющий настраивать гем:

module NameChecker
  class Configuration
    attr_accessor :api_key, :log_level

    def initialize
      self.api_key = nil
      self.log_level = 'info'
    end
  end

  class << self
    attr_accessor :configuration
  end

  def self.configure
    self.configuration ||= Configuration.new
    yield(configuration) if block_given?
  end
end

Теперь его можно использовать следующим образом:

NameChecker.configure do |config|
  config.api_key = 'dfskljkf'
end

Однако, похоже, я не могу получить доступ к своим переменным конфигурации из других классов в моем драгоценном камне. Например, когда я настраиваю гем в своем spec_helper.rbследующим образом:

# spec/spec_helper.rb
require "name_checker"

NameChecker.configure do |config|
  config.api_key = 'dfskljkf'
end

и ссылаюсь на конфигурацию из моего кода:

# lib/name_checker/net_checker.rb
module NameChecker
  class NetChecker
    p NameChecker.configuration.api_key
  end
end

, я получаю ошибку неопределенного метода:

`<class:NetChecker>': undefined method `api_key' for nil:NilClass (NoMethodError)

Что не так с мой код?

14
задан David Tuite 14 May 2012 в 13:49
поделиться