Class: SanUltari::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/sanultari/config.rb,
lib/sanultari/config/store.rb

Overview

Author:

  • Jeong, Jiung

Direct Known Subclasses

GlobalConfig

Defined Under Namespace

Classes: Store

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name = nil) ⇒ Config

생성자

Parameters:

  • name (String) (defaults to: nil)

    설정 Key의 이름. 넘기지 않으면 nil이 설정된다.



14
15
16
17
18
19
# File 'lib/sanultari/config.rb', line 14

def initialize name = nil
  @name = name || nil
  @path = File.expand_path '.'
  @store_class = Class.new SanUltari::Config::Store
  @store = @store_class.new
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args, &block) ⇒ Object

존재하지 않는 메소드 처리를 위한 핸들러



104
105
106
# File 'lib/sanultari/config.rb', line 104

def method_missing(method_name, *args, &block)
  @store.public_send method_name, *args, &block
end

Instance Attribute Details

#nameObject

Returns the value of attribute name.



9
10
11
# File 'lib/sanultari/config.rb', line 9

def name
  @name
end

#pathObject

Returns the value of attribute path.



9
10
11
# File 'lib/sanultari/config.rb', line 9

def path
  @path
end

#storeObject

Returns the value of attribute store.



9
10
11
# File 'lib/sanultari/config.rb', line 9

def store
  @store
end

Instance Method Details

#from_hash(hash) ⇒ Object

Config 객체를 Ruby Hash로부터 생성한다.

Parameters:

Raises:

  • (Exception)

See Also:

  • Hash


63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/sanultari/config.rb', line 63

def from_hash hash
  raise Exception.new unless hash.instance_of?(Hash)

  hash.each_pair do |key, value|
    t_value = value
    if value.instance_of? Hash
      t_value = Config.new key
      t_value.from_hash value
    end

    @store.send("#{key}=".to_sym, t_value)
  end
end

#init!(path = nil, default = nil) ⇒ Object

Config 객체 초기화

Parameters:

  • path (String) (defaults to: nil)

    읽어 들일 설정 파일의 위치. 넘기지 않으면 아무것도 설정하지 않는다.



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/sanultari/config.rb', line 24

def init! path = nil, default = nil
  @default = default unless default == nil

  load_defaults if default_available?

  return nil if path == nil
  if @name == nil
    @name = File.basename path, '.yml'
    @path = File.expand_path File.dirname(path), @path
  end

  if File.exist? path
    abs_path = make_path
    config_hash = YAML.load_file(abs_path)
    from_hash(config_hash)
  end
ensure
  self.save path unless path == nil
end

#make_path(path = nil) ⇒ Object

현재 패스로부터 적절한 YAML 파일 경로를 만들어낸다.

Parameters:

  • path (String) (defaults to: nil)

    YAML 파일의 위치. 지정되지 않으면, #name, #path로부터 기본 패스를 만들어낸다.



94
95
96
97
98
99
100
101
# File 'lib/sanultari/config.rb', line 94

def make_path path = nil
  return File.expand_path "#{@name}.yml", @path if path == nil
  if path.start_with?('/', '\\')
    return path
  else
    return File.expand_path(path, @path)
  end
end

#save(path = nil) ⇒ Object

Config 객체를 지정된 위치에 YAML 포맷으로 덤프한다.

Parameters:

  • path (String) (defaults to: nil)

    기록할 파일의 위치. 넘기지 않을 경우 기본값이 셋팅된다. #init!을 통해 파일을 읽은 경우에는 읽었던 파일의 위치. 그렇지 않으면 현재 디렉토리내의 config.yml을 대상으로 한다. #path=가 설정된 경우에는 #path하위에 config.yml을 만든다.

See Also:



50
51
52
53
54
55
56
57
# File 'lib/sanultari/config.rb', line 50

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

#to_hashSanUltari::Config

현재 Config 객체를 Ruby Hash로 변환한다.

Returns:

See Also:

  • Hash


81
82
83
84
85
86
87
88
89
# File 'lib/sanultari/config.rb', line 81

def to_hash
  hash = {}
  @store.keys.each do |key|
    value = @store.send key.to_sym
    value = value.to_hash if value.instance_of? SanUltari::Config
    hash[key] = value
  end
  hash
end