lib/sanultari/config.rb in sanultari-config-0.2.0 vs lib/sanultari/config.rb in sanultari-config-0.2.1
- old
+ new
@@ -19,18 +19,28 @@
end
# Config 객체 초기화
#
# @param [String] path 읽어 들일 설정 파일의 위치. 넘기지 않으면 아무것도 설정하지 않는다.
- def init! path = nil
+ def init! path = nil, default = nil
+ @default = default unless default == nil
+
return nil if path == nil
if @name == nil
@name = File.basename path, '.yml'
@path = File.expand_path File.dirname(path), @path
end
- config_hash = YAML.load_file make_path
- from_hash(config_hash)
+
+ load_defaults if default_available?
+
+ if File.exist? path
+ abs_path = make_path
+ config_hash = YAML.load_file(abs_path)
+ from_hash(config_hash)
+ end
+ ensure
+ self.save path
end
# Config 객체를 지정된 위치에 YAML 포맷으로 덤프한다.
#
# @param [String] path 기록할 파일의 위치. 넘기지 않을 경우 기본값이 셋팅된다. {#init!}을 통해 파일을 읽은 경우에는 읽었던 파일의 위치. 그렇지 않으면 현재 디렉토리내의 config.yml을 대상으로 한다. {#path=}가 설정된 경우에는 {#path}하위에 config.yml을 만든다.
@@ -38,11 +48,11 @@
# @see SanUltari::Config#path=
# @see SanUltari::Config#path
def save path = nil
@name = 'config' if @name == nil
path = make_path if path == nil
-
+
File.open(make_path(path), 'w') do |f|
YAML.dump(to_hash, f)
end
end
@@ -55,13 +65,13 @@
hash.each_pair do |key, value|
t_value = value
if value.instance_of? Hash
t_value = Config.new key
- t_value.from_hash value
+ t_value.from_hash value
end
-
+
@store.send("#{key}=".to_sym, t_value)
end
end
# 현재 Config 객체를 {Hash Ruby Hash}로 변환한다.
@@ -92,7 +102,21 @@
# 존재하지 않는 메소드 처리를 위한 핸들러
def method_missing(method_name, *args, &block)
@store.public_send method_name, *args, &block
end
+
+ def load_defaults
+ return unless default_available?
+ default_hash = @default.to_hash
+ default_hash.keys.each do |key|
+ self.public_send "#{key}=".to_sym, default_hash[key]
+ end
+ end
+
+ def default_available?
+ @default != nil
+ end
+
+ private :load_defaults, :default_available?
end
end