konfa 0.3.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/konfa.rb +30 -57
- metadata +2 -2
data/lib/konfa.rb
CHANGED
@@ -1,29 +1,31 @@
|
|
1
|
-
|
2
|
-
require 'yaml'
|
1
|
+
require_relative File.join(File.dirname(__FILE__), 'konfa', 'initializer')
|
3
2
|
|
4
3
|
module Konfa
|
5
4
|
class Base
|
5
|
+
include Konfa::Initializer
|
6
|
+
|
6
7
|
class << self
|
7
8
|
protected
|
8
9
|
|
9
10
|
#
|
10
|
-
# The following methods are not a part of the public API. You may
|
11
|
+
# The following methods are not a part of the public API. You may subclass
|
11
12
|
# them, but remember that unless you scope them as protected or private,
|
12
13
|
# they will then be public
|
13
14
|
#
|
14
15
|
|
15
|
-
attr_writer :configuration, :
|
16
|
+
attr_writer :configuration, :initializer, :initialized
|
16
17
|
|
17
|
-
def
|
18
|
-
@
|
18
|
+
def initialized
|
19
|
+
@initialized ||= false
|
19
20
|
end
|
20
21
|
|
21
22
|
def configuration
|
23
|
+
self.init
|
22
24
|
@configuration ||= self.allowed_variables
|
23
25
|
end
|
24
26
|
|
25
|
-
def
|
26
|
-
@
|
27
|
+
def initializer
|
28
|
+
@initializer ||= nil
|
27
29
|
end
|
28
30
|
|
29
31
|
def truthy?(value)
|
@@ -39,11 +41,6 @@ module Konfa
|
|
39
41
|
end
|
40
42
|
end
|
41
43
|
|
42
|
-
def do_deferred_initialization
|
43
|
-
self.send(self.deferred.first, *self.deferred[1..-1])
|
44
|
-
self.initialized_deferred = true
|
45
|
-
end
|
46
|
-
|
47
44
|
public
|
48
45
|
|
49
46
|
#
|
@@ -63,16 +60,11 @@ module Konfa
|
|
63
60
|
raise UnsupportedVariableError.new(key)
|
64
61
|
end
|
65
62
|
|
66
|
-
def do_deferred_initialization?
|
67
|
-
!self.initialized_deferred && !self.deferred.nil?
|
68
|
-
end
|
69
|
-
|
70
63
|
#
|
71
64
|
# The following methods provides the interface to this class
|
72
65
|
#
|
73
66
|
|
74
67
|
def get(variable)
|
75
|
-
self.do_deferred_initialization if self.do_deferred_initialization?
|
76
68
|
raise UnsupportedVariableError.new(variable) unless self.configuration.has_key? variable
|
77
69
|
self.configuration[variable]
|
78
70
|
end
|
@@ -93,8 +85,26 @@ module Konfa
|
|
93
85
|
self.configuration.dup
|
94
86
|
end
|
95
87
|
|
96
|
-
def
|
97
|
-
self.
|
88
|
+
def init?
|
89
|
+
!self.initialized && !self.initializer.nil?
|
90
|
+
end
|
91
|
+
|
92
|
+
def init
|
93
|
+
return unless self.init?
|
94
|
+
# Set to true before calling to prevent recursion if
|
95
|
+
# an initializer is accessing the configuration
|
96
|
+
self.initialized = true
|
97
|
+
self.send(self.initializer.first, *self.initializer[1..-1])
|
98
|
+
self.after_initialize
|
99
|
+
end
|
100
|
+
|
101
|
+
def init_with(suffix, *args)
|
102
|
+
self.initializer = [:"init_with_#{suffix}", *args]
|
103
|
+
self
|
104
|
+
end
|
105
|
+
|
106
|
+
def reinit
|
107
|
+
self.initialized = false
|
98
108
|
end
|
99
109
|
|
100
110
|
def after_initialize
|
@@ -113,46 +123,9 @@ module Konfa
|
|
113
123
|
result
|
114
124
|
end
|
115
125
|
|
116
|
-
# FIXME: Move out to external package
|
117
|
-
def initialize_from_yaml(path)
|
118
|
-
# FIXME: It would be a lot cleaner if the YAML library would raise an
|
119
|
-
# exception if it fails to read the file. We'll handle it like this for now
|
120
|
-
# load_file just returns "false" if it fails
|
121
|
-
yaml_data = YAML.load_file(path)
|
122
|
-
|
123
|
-
unless yaml_data.nil?
|
124
|
-
raise InitializationError.new("Bad YAML format, key/value pairs expected") unless yaml_data.kind_of?(Hash)
|
125
|
-
|
126
|
-
yaml_data.each do |variable, value|
|
127
|
-
self.store(variable, value)
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
after_initialize
|
132
|
-
dump
|
133
|
-
end
|
134
|
-
|
135
|
-
# FIXME: Move out to external package
|
136
|
-
def initialize_from_env
|
137
|
-
conf_prefix = self.env_variable_prefix.upcase
|
138
|
-
|
139
|
-
ENV.keys.reject { |key|
|
140
|
-
key !~ /^#{conf_prefix}/ # Ignore everything that doesn't match the prefix
|
141
|
-
}.each { |key|
|
142
|
-
variable = key[conf_prefix.size..-1].downcase
|
143
|
-
|
144
|
-
self.store(variable, ENV[key])
|
145
|
-
}
|
146
|
-
|
147
|
-
after_initialize
|
148
|
-
dump
|
149
|
-
end
|
150
126
|
end
|
151
127
|
end
|
152
128
|
|
153
|
-
class InitializationError < StandardError
|
154
|
-
end
|
155
|
-
|
156
129
|
class UnsupportedVariableError < StandardError
|
157
130
|
end
|
158
131
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: konfa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -40,7 +40,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
40
40
|
version: '0'
|
41
41
|
requirements: []
|
42
42
|
rubyforge_project:
|
43
|
-
rubygems_version: 1.8.
|
43
|
+
rubygems_version: 1.8.24
|
44
44
|
signing_key:
|
45
45
|
specification_version: 3
|
46
46
|
summary: Application configuration
|