问题
我正在开发一个简单的Ruby CLI,需要将其配置信息存储在一个平面文件中。我有一个Configurator
类来处理所有数据管理,保存到文件系统等。
尽管随意实例化Configurator
个对象是完全合法的,但我也想提供一个共享实例(这样它在CLI中随处可用)。在Ruby中正确的方式似乎有很多的观点,而且我在游泳中游泳。 :(
我的第一次刺伤
configurator.rb
class Configurator
attr_reader :config_path
def initialize(path)
@config_path = File.expand_path(path)
end
# ... more implementation
end
configuration.rb
module Configuration
@@configuration = nil
def configuration
if @@configuration
@@configuration
else
fail 'Attempted to access `configuration` before ' \
'executing `load_configuration`'
end
def load_configuration(path)
@@configuration = Configurator.new(path)
end
end
了解这一点,我的Configuration
模块可能会以这种方式使用:
include Configuration
# Initialize our shared Configurator.
Configuration.load_configuration('~/.app_config')
# Use it.
p configuration
# => #<Configurator:0x0000010126f8e8 @config_path="/Users/abach/.app_config">
我已经证实这是有效的,但有几个难闻的气味:
Configuration.load_configuration
感觉很奇怪;不知道怎么说。不过,这很可能是我的问题。 :)思考吗
感谢您的帮助!
答案 0 :(得分:1)
您是否为了学习如何做这样的事情而编写了配置管理,或者您只是想解决问题(需要将其配置信息存储在平面文件中的Ruby CLI )?
在后一种情况下,请查看the Ruby Toolbox,尤其是Configuration。