在这篇博文中,他给出了一个Ruby配置文件的例子。
config do
allow ['server.com', `hostname`.strip]
vhost 'api.server.com' do
path ‘/usr/local/api’
end
vhost 'www.server.com' do
path '/usr/local/web'
end
%w{wiki blog support}.each do |host|
vhost "#{host}.server.com" do
path "/usr/local/#{host}"
end
end
end
我认为在配置文件加载后的散列,但也许这不是这种类型的配置的目的…
如果我执行它,我得到
$ ruby config.rb
config.rb:2:in `<main>': undefined method `config' for main:Object (NoMethodError)
需要什么Ruby代码来解析和转储这个配置文件的内容?
这个配置示例不是直接可加载的,如果我对博客文章作者的理解正确的话,它不是这样的,所以没有简单的方法来加载/解析这个示例。
关键部分是在他的博客文章中,他说"构建简单的dsl来设计语义上健壮的配置文件,而不让底层ruby的引人注目"(我的重点)。我认为"底层ruby"是指支持DSL元素的代码,如"config"one_answers"vhost"。你最初的问题是,然而,什么代码需要加载配置-下面是一个例子的东西将工作,完全实现取决于你,虽然我很确定有更干净,"更好"的方式做同样的。
class AppConfig
attr_accessor :hosts
def allow(hosts)
@hosts = hosts
end
def vhost(hostname)
end
def process_config(&block)
instance_eval(&block)
end
end
def config(&block)
config = AppConfig.new
config.process_config &block
puts "Hosts are: #{config.hosts}"
end
load 'config.rb'