Это похоже на стратегию, которая используется для настройки атрибутов в классе. Примерно так:
class Foo
class << self
attr_accessor :config
def configure()
self.config ||= Configuration.new
yield(config)
end
end
class Configuration
attr_accessor :hostname
def initialize
@hostname = 'www.example.com'
end
end
end
Этот код позволит вам настроить инициализатор, который может выглядеть следующим образом:
Foo.config do |config|
config.hostname = "www.sometestsite.com"
end
Затем вы можете использовать экземпляр config в вашем классе для создания метода:
class Foo
...
def self.foo
puts "this method is crawling: #{Foo.config.hostname}"
end
...
end
Это похоже на # {Rails.root} /config/environments/development.rb:
ApplicationName::Application.configure do
...
...
end