Class: ZenConfig
- Inherits:
-
Object
show all
- Extended by:
- Forwardable
- Includes:
- Enumerable
- Defined in:
- lib/zen_config.rb,
lib/zen_config/version.rb
Constant Summary
collapse
- VERSION =
"0.0.4"
Instance Method Summary
collapse
Constructor Details
#initialize(hash, allow_modifications = false) ⇒ ZenConfig
Returns a new instance of ZenConfig.
10
11
12
13
14
15
16
17
18
19
20
21
|
# File 'lib/zen_config.rb', line 10
def initialize hash, allow_modifications = false
@allow_modifications = true
@loaded_section = nil
@index = 0
@data = {}
load_hash hash
if allow_modifications
read_only
end
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args) ⇒ Object
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
# File 'lib/zen_config.rb', line 128
def method_missing method, *args
value = args.first
if /\A([a-zA-Z1-9]+)_exists\?\Z/.match method
exists? $1
elsif /\Adelete_([a-zA-Z1-9]+)\Z/.match method
delete $1 if exists? $1
elsif (method[-1] == '=') && @allow_modifications
key = method[0..-2].to_sym
set key, value
elsif (args.count == 0)
method = method[1..-1] if method[0] == '_'
get method
else
super
end
end
|
Instance Method Details
#count ⇒ Object
25
26
27
|
# File 'lib/zen_config.rb', line 25
def count
@count
end
|
#delete(key) ⇒ Object
29
30
31
32
33
34
35
36
37
|
# File 'lib/zen_config.rb', line 29
def delete key
if @allow_modifications
key = key.to_sym
backup = @data[key]
@data.delete key
update_count
return backup
end
end
|
#exists?(key) ⇒ Boolean
39
40
41
|
# File 'lib/zen_config.rb', line 39
def exists? key
@data.has_key? key.to_sym
end
|
#get(key, default = nil) ⇒ Object
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/zen_config.rb', line 43
def get key, default = nil
key = key.to_sym
result = default
if @data.has_key? key
result = @data[key]
end
return result
end
|
#load_hash(hash) ⇒ Object
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/zen_config.rb', line 86
def load_hash hash
if @allow_modifications
hash.each do |key, value|
key = key.to_sym
if value.is_a? Hash
@data[key] = ZenConfig.new value, @allow_modifications
else
@data[key] = value
end
set_key_parent key
end
update_count
end
end
|
#merge(merge) ⇒ Object
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# File 'lib/zen_config.rb', line 104
def merge merge
raise "Merged configuration must be a ZenConfig" unless merge.kind_of? ZenConfig
merge.each do |key, value|
if @data.has_key? key
if (value.kind_of? ZenConfig) && (@data[key].kind_of? ZenConfig)
@data[key] = @data[key].merge(ZenConfig.new value.to_hash, !read_only?)
else
@data[key] = value
end
else
if value.kind_of? ZenConfig
@data[key] = ZenConfig.new value.to_hash, read_only?
else
@data[key] = value
end
end
set_key_parent key
end
return self
end
|
#new(key, force = false) ⇒ Object
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/zen_config.rb', line 54
def new key, force = false
key = key.to_sym
if @allow_modifications
if (!exists? key) || force
@data[key] = ZenConfig.new({}, true)
set_key_parent key
else
raise "'#{key}' key already exists."
end
end
end
|
#parent ⇒ Object
183
184
185
|
# File 'lib/zen_config.rb', line 183
def parent
return @parent
end
|
#read_only ⇒ Object
155
156
157
158
159
160
161
162
|
# File 'lib/zen_config.rb', line 155
def read_only
@allow_modifications = false
@data.each do |key, value|
if value.kind_of? ZenConfig
value.read_only
end
end
end
|
#read_only? ⇒ Boolean
164
165
166
|
# File 'lib/zen_config.rb', line 164
def read_only?
!@allow_modifications
end
|
#set(key, value) ⇒ Object
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/zen_config.rb', line 67
def set key, value
key = key.to_sym
if @allow_modifications
if value.is_a? Hash
@data[key] = self.new value, true
else
@data[key] = value
end
set_key_parent key
update_count
return value
end
end
|
#set_key_parent(key) ⇒ Object
187
188
189
190
191
|
# File 'lib/zen_config.rb', line 187
def set_key_parent key
if @data[key].kind_of? ZenConfig
@data[key].set_parent self
end
end
|
#set_parent(parent) ⇒ Object
193
194
195
196
197
198
199
|
# File 'lib/zen_config.rb', line 193
def set_parent parent
if parent.kind_of? ZenConfig
@parent = parent
else
raise "Parent must be a ZenConfig"
end
end
|
#to_hash ⇒ Object
168
169
170
171
172
173
174
175
176
177
178
179
|
# File 'lib/zen_config.rb', line 168
def to_hash
hash = {}
@data.each do |key, value|
if value.kind_of? ZenConfig
hash[key] = value.to_hash
else
hash[key] = value
end
end
return hash
end
|