application_configuration 1.0.2 → 1.1.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/application_configuration.rb +89 -33
- data/lib/tasks/rubyforge_config.yml +1 -1
- metadata +2 -2
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'singleton'
|
2
2
|
require 'yaml'
|
3
3
|
require 'erb'
|
4
|
+
require 'open-uri'
|
4
5
|
module Application
|
5
6
|
|
6
7
|
class Configuration
|
@@ -24,6 +25,25 @@ module Application
|
|
24
25
|
|
25
26
|
end
|
26
27
|
|
28
|
+
class Location
|
29
|
+
|
30
|
+
attr_accessor :type
|
31
|
+
attr_accessor :file_location
|
32
|
+
|
33
|
+
def initialize(loc, type = Application::Configuration::Location::FILE)
|
34
|
+
self.type = type
|
35
|
+
self.file_location = loc
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.supported_types
|
39
|
+
[Application::Configuration::Location::FILE, Application::Configuration::Location::URL]
|
40
|
+
end
|
41
|
+
|
42
|
+
FILE = :file
|
43
|
+
URL = :url
|
44
|
+
|
45
|
+
end
|
46
|
+
|
27
47
|
|
28
48
|
include Singleton
|
29
49
|
|
@@ -51,8 +71,8 @@ module Application
|
|
51
71
|
@last_reload_time = Time.now # set the first load time
|
52
72
|
@is_rails = Object.const_defined?("RAILS_ENV") # set whether it's rails
|
53
73
|
if self.is_rails
|
54
|
-
self.loaded_files << "#{RAILS_ROOT}/config/application_configuration.yml"
|
55
|
-
self.loaded_files << "#{RAILS_ROOT}/config/application_configuration_#{RAILS_ENV}.yml"
|
74
|
+
self.loaded_files << Application::Configuration::Location.new("#{RAILS_ROOT}/config/application_configuration.yml")
|
75
|
+
self.loaded_files << Application::Configuration::Location.new("#{RAILS_ROOT}/config/application_configuration_#{RAILS_ENV}.yml")
|
56
76
|
self.loaded_files.uniq!
|
57
77
|
end
|
58
78
|
reload # do the work!
|
@@ -60,36 +80,29 @@ module Application
|
|
60
80
|
|
61
81
|
def load_file(path_to_file)
|
62
82
|
unless path_to_file.nil?
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
self.final_configuration_settings["#{m}"]
|
86
|
-
end
|
87
|
-
}
|
88
|
-
end
|
83
|
+
begin
|
84
|
+
path_to_file = Application::Configuration::Location.new(path_to_file) if path_to_file.is_a? String
|
85
|
+
settings = load_from_file(path_to_file.file_location)
|
86
|
+
handle_settings(settings, path_to_file)
|
87
|
+
return self
|
88
|
+
rescue Exception => e
|
89
|
+
puts e.message
|
90
|
+
return nil
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def load_url(path_to_file)
|
96
|
+
unless path_to_file.nil?
|
97
|
+
begin
|
98
|
+
path_to_file = Application::Configuration::Location.new(path_to_file, Application::Configuration::Location::URL) if path_to_file.is_a? String
|
99
|
+
settings = load_from_url(path_to_file.file_location)
|
100
|
+
handle_settings(settings, path_to_file)
|
101
|
+
return self
|
102
|
+
rescue Exception => e
|
103
|
+
puts e.message
|
104
|
+
return nil
|
89
105
|
end
|
90
|
-
|
91
|
-
@loaded_files << path_to_file
|
92
|
-
@loaded_files.uniq!
|
93
106
|
end
|
94
107
|
end
|
95
108
|
|
@@ -99,8 +112,15 @@ module Application
|
|
99
112
|
@final_configuration_settings = {} # reset the configuration
|
100
113
|
|
101
114
|
self.loaded_files.each do |lf|
|
102
|
-
puts "Loading Configuration Settings from file: #{lf}"
|
103
|
-
|
115
|
+
puts "Loading Configuration Settings from file: #{lf.file_location}"
|
116
|
+
case lf.type
|
117
|
+
when Application::Configuration::Location::FILE
|
118
|
+
load_file(lf)
|
119
|
+
when Application::Configuration::Location::URL
|
120
|
+
load_url(lf)
|
121
|
+
else
|
122
|
+
raise TypeError.new("The Application::Configuration::Location type '#{lf.type}' is not supported!")
|
123
|
+
end
|
104
124
|
end
|
105
125
|
|
106
126
|
@last_reload_time = Time.now
|
@@ -124,6 +144,42 @@ module Application
|
|
124
144
|
YAML.load(template.result)
|
125
145
|
end
|
126
146
|
|
147
|
+
def load_from_url(file)
|
148
|
+
template = ERB.new(open(file).read)
|
149
|
+
YAML.load(template.result)
|
150
|
+
end
|
151
|
+
|
152
|
+
def handle_settings(settings, path_to_file)
|
153
|
+
@final_configuration_settings.merge!(settings)
|
154
|
+
|
155
|
+
self.final_configuration_settings.each_pair do |k,v|
|
156
|
+
k = k.to_s.downcase
|
157
|
+
# start a list of methods that need to be generated
|
158
|
+
# methods can't have :: in them so convert these to __.
|
159
|
+
e_meths = [k.gsub("::", "__")]
|
160
|
+
if k.match("::")
|
161
|
+
vars = k.split("::") # get the namespace and the method names
|
162
|
+
mod = vars.first # namespace
|
163
|
+
e_meths << mod # generate a method for the namespace
|
164
|
+
# create a new Namespace object for this name space and assign it to the final_configuration_settings hash.
|
165
|
+
self.final_configuration_settings[mod.to_s] = Application::Configuration::Namespace.new(mod.to_s)
|
166
|
+
# add an entry for the __ version of the key so our __ method can call it.
|
167
|
+
self.final_configuration_settings[e_meths.first] = v
|
168
|
+
end
|
169
|
+
# generate all the necessary getter methods
|
170
|
+
e_meths.each do |m|
|
171
|
+
eval %{
|
172
|
+
def #{m}
|
173
|
+
self.final_configuration_settings["#{m}"]
|
174
|
+
end
|
175
|
+
}
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
@loaded_files << path_to_file
|
180
|
+
@loaded_files.uniq!
|
181
|
+
end
|
182
|
+
|
127
183
|
end
|
128
184
|
|
129
185
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
|
|
3
3
|
specification_version: 1
|
4
4
|
name: application_configuration
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.0
|
7
|
-
date: 2007-09-
|
6
|
+
version: 1.1.0
|
7
|
+
date: 2007-09-18 00:00:00 -04:00
|
8
8
|
summary: application_configuration
|
9
9
|
require_paths:
|
10
10
|
- lib
|