我正在寻找一种通用机制,用于从具有多个部分的配置文件构造配置对象。类似的东西:
db: # key to section-specific config class
adapter: sqlite3 # key to implementation-specific subclass
database: ':memory:' # ┐
pool: 5 # ├ implementation-specific key/value pairs
timeout: 5000 # ┘
source:
protocol: OAI
oai_base_url: http://oai.example.org/oai
metadata_prefix: some_prefix
set: some_set
seconds_granularity: true
index:
adapter: solr
url: http://solr.example.org/
proxy: http://foo:bar@proxy.example.com/
open_timeout: 120
read_timeout: 300
retry_503: 3
retry_after_limit: 20
在阅读此文件时,我们会创建一个DatabaseConfig
(特别是Sqlite3Config
,它是DatabaseConfig
的子类),SourceConfig
(特别是OAIConfig
)和IndexConfig
(特别是SolrConfig
)。
这是一种开箱即用的方法,我不必写一堆case/when
语句来将不同的键映射到不同的类,作为参数传递给YAML.object_maker
?
注意:这是不一个Rails应用程序,但如果Config gem可以做这样的事情而没有太多的跳跃,我会对它开放。