Class: Origen::SiteConfig
- Inherits:
-
Object
show all
- Defined in:
- lib/origen/site_config.rb,
lib/origen/site_config/config.rb
Defined Under Namespace
Classes: Config
Constant Summary
collapse
- TRUE_VALUES =
['true', 'TRUE', '1', 1]
- FALSE_VALUES =
['false', 'FALSE', '0', 0]
- NON_BOOLEAN_PARAMETERS =
Adding parameters to this array will prevent them from being converted to booleans if they are assigned one of the values in the TRUE_VALUES/FALSE_VALUES arrays
[:lsf_cores, :centralized_site_config_refresh]
Instance Method Summary
collapse
-
#add_as_highest(var, value) ⇒ Object
(also: #[]=)
Dynamically add a new site variable at the highest priority.
-
#add_as_lowest(var, value) ⇒ Object
Dynamically add a new site variable at the lowest priority.
-
#add_site_config_as_highest(site_config_file) ⇒ Object
Adds a new site config file as the highest priority.
-
#add_site_config_as_lowest(site_config_file) ⇒ Object
Adds a new site config file as the highest priority.
-
#all_vars ⇒ Object
(also: #env)
-
#centralized_site_config_cache_dir ⇒ Object
-
#clear ⇒ Object
-
#env_contains?(val) ⇒ Boolean
-
#eval_path(path, options = {}) ⇒ Object
-
#find_val(val, options = {}) ⇒ Object
(also: #get, #[])
-
#gem_install_dir ⇒ Object
(also: #user_gem_dir)
-
#get_all(val) ⇒ Object
-
#home_dir ⇒ Object
-
#inspect_configs(*config_indexes) ⇒ Object
(also: #inspect_config)
Inspects the config(s) at the incex given.
-
#inspect_variable(*vars) ⇒ Object
(also: #inspect_var, #inspect_variables, #inspect_vars)
-
#method_missing(method, *args, &block) ⇒ Object
-
#pretty_print_configs ⇒ Object
(also: #pp_configs)
-
#pretty_print_env(*vars) ⇒ Object
(also: #pp_env)
-
#rebuild! ⇒ Object
-
#refresh ⇒ Object
-
#remove_all_instances(var) ⇒ Object
(also: #purge)
Dynamically remove all the instances of :var.
-
#remove_highest(var) ⇒ Object
Dynamically remove the highest instance of :var.
-
#to_env(val) ⇒ Object
-
#user_install_dir ⇒ Object
Gets the user_install_dir.
-
#vars_by_configs ⇒ Object
(also: #vars_by_config)
Gets all config variables as a hash, but the hash’s values are the Config instances which defines the highest priority of each var, instead of the var’s value itself.
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
# File 'lib/origen/site_config.rb', line 144
def method_missing(method, *args, &block)
method = method.to_s
if method =~ /(.*)!$/
method = Regexp.last_match(1)
must_be_present = true
end
val = find_val(method)
if must_be_present && val.nil?
puts "No value assigned for site_config attribute '#{method}'"
puts
fail 'Missing site_config value!'
end
define_singleton_method(method) do
find_val(method)
end
val
end
|
Instance Method Details
#add_as_highest(var, value) ⇒ Object
Also known as:
[]=
Dynamically add a new site variable at the highest priority.
116
117
118
119
120
121
|
# File 'lib/origen/site_config.rb', line 116
def add_as_highest(var, value)
c = Config.new(path: :runtime, parent: self, values: { var.to_s => value })
configs.prepend(Config.new(path: :runtime, parent: self, values: { var.to_s => value }))
end
|
#add_as_lowest(var, value) ⇒ Object
Dynamically add a new site variable at the lowest priority. Essentially, this sets a new default value.
126
127
128
129
130
|
# File 'lib/origen/site_config.rb', line 126
def add_as_lowest(var, value)
configs.append(Config.new(path: :runtime, parent: self, values: { var.to_s => value }))
end
|
#add_site_config_as_highest(site_config_file) ⇒ Object
Adds a new site config file as the highest priority
133
134
135
136
|
# File 'lib/origen/site_config.rb', line 133
def add_site_config_as_highest(site_config_file)
configs.prepend(Config.new(path: site_config_file, parent: self))
end
|
#add_site_config_as_lowest(site_config_file) ⇒ Object
Adds a new site config file as the highest priority
139
140
141
142
|
# File 'lib/origen/site_config.rb', line 139
def add_site_config_as_lowest(site_config_file)
configs.append(Config.new(path: site_config_file, parent: self))
end
|
#all_vars ⇒ Object
Also known as:
env
193
194
195
196
197
198
199
|
# File 'lib/origen/site_config.rb', line 193
def all_vars
vars = {}
configs.each do |c|
vars = c.values.merge(vars)
end
vars
end
|
#centralized_site_config_cache_dir ⇒ Object
83
84
85
|
# File 'lib/origen/site_config.rb', line 83
def centralized_site_config_cache_dir
File.expand_path(find_val('centralized_site_config_cache_dir'))
end
|
172
173
174
|
# File 'lib/origen/site_config.rb', line 172
def clear
configs.clear
end
|
#env_contains?(val) ⇒ Boolean
242
243
244
|
# File 'lib/origen/site_config.rb', line 242
def env_contains?(val)
ENV.key?(val)
end
|
#eval_path(path, options = {}) ⇒ Object
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# File 'lib/origen/site_config.rb', line 49
def eval_path(path, options = {})
path = path.sub(/^~/, File.expand_path('~/'))
path.gsub!(/(?<!\\|\A)~/, "#{Etc.getlogin}")
path.gsub!(/\\(?=~)/, '')
if path.start_with?('~')
path = File.expand_path(path).sub(/^#{Regexp.quote(File.expand_path('~/'))}/, '~')
else
path = File.expand_path(path)
end
append = find_val('append_dot_origen')
append = '.origen' if append == true || append.nil?
gem_append = find_val('append_gems')
gem_append = 'gems' if gem_append == true || gem_append.nil?
if append
unless path.end_with?(append) || (path.end_with?(File.join(append, gem_append)) if gem_append)
path = File.join(path, append)
end
end
path
end
|
#find_val(val, options = {}) ⇒ Object
Also known as:
get, []
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
|
# File 'lib/origen/site_config.rb', line 329
def find_val(val, options = {})
env = "ORIGEN_#{val.upcase}"
if ENV.key?(env)
value = ENV[env]
else
config = configs.find { |c| c.has_var?(val) }
value = config ? config.find_val(val) : nil
end
unless NON_BOOLEAN_PARAMETERS.include?(val.to_s.downcase.to_sym)
if TRUE_VALUES.include?(value)
return true
elsif FALSE_VALUES.include?(value)
return false
end
end
value
end
|
#gem_install_dir ⇒ Object
Also known as:
user_gem_dir
Gets the gem_intall_dir. This is either site_config.home_dir/gems or the site configs gem_install_dir
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
# File 'lib/origen/site_config.rb', line 21
def gem_install_dir
if gems_use_tool_repo && tool_repo_install_dir && !user_install_enable
path = eval_path(tool_repo_install_dir)
else
path = eval_path(find_val('user_gem_dir') || find_val('gem_install_dir') || home_dir)
end
append = find_val('append_gems')
append = 'gems' if append == true || append.nil?
if append
unless path.end_with?(append)
path = File.join(path, append)
end
end
path
end
|
#get_all(val) ⇒ Object
162
163
164
165
166
167
168
169
170
|
# File 'lib/origen/site_config.rb', line 162
def get_all(val)
ret = []
configs.each do |c|
if c.has_var?(val)
ret << c[val]
end
end
ret
end
|
45
46
47
|
# File 'lib/origen/site_config.rb', line 45
def home_dir
eval_path(find_val('home_dir') || '~/')
end
|
#inspect_configs(*config_indexes) ⇒ Object
Also known as:
inspect_config
Inspects the config(s) at the incex given.
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
|
# File 'lib/origen/site_config.rb', line 273
def inspect_configs(*config_indexes)
config_indexes.each do |i|
if i.to_i > configs.size
puts red("Origen::SiteConfig: index #{i} is out of range of the available configs! Total configs: #{configs.size}.")
elsif i.to_i < 0
puts red("Origen::SiteConfig: index #{i} is less than 0. This index is ignored.")
else
c = configs[i.to_i]
puts "Inspecting config \##{i}"
puts "Type: #{c.type}"
puts "Path: #{c.path}"
if c.centralized?
puts "Cached At: #{c.cache_file}" if c.cache_file
puts "Cached On: #{c.cache_file.ctime}" if c.cache_file
end
puts
puts 'Values from this config:'
spacing = ' ' * 2
c.values.each do |var, val|
if val.is_a?(Array)
puts "#{var}: ["
val.each { |v| puts "#{spacing} #{v}" }
puts ']'
elsif val.is_a?(Hash)
puts "#{var}: {"
val.each { |v| puts "#{spacing} #{v}" }
puts '}'
else
puts "#{var}: #{val}"
end
end
puts
puts 'Active (highest-level) values from this config:'
spacing = ' ' * 2
vars_by_config.select { |k, v| v == c }.map { |k, v| [k, v[k]] }.to_h.each do |var, val|
if val.is_a?(Array)
puts "#{var}: ["
val.each { |v| puts "#{spacing} #{v}" }
puts ']'
elsif val.is_a?(Hash)
puts "#{var}: {"
val.each { |v| puts "#{spacing} #{v}" }
puts '}'
else
puts "#{var}: #{val}"
end
end
puts
end
end
end
|
#inspect_variable(*vars) ⇒ Object
Also known as:
inspect_var, inspect_variables, inspect_vars
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
|
# File 'lib/origen/site_config.rb', line 252
def inspect_variable(*vars)
vars.each do |var|
puts "Inspecting Variable: #{var}"
if env_contains?(to_env(var))
puts "Environment Variable (#{to_env(var)}): #{env(to_env(var))}"
else
puts "(No enviornment variable #{to_env(var)} defined)"
end
configs.each do |c|
if c.has_var?(var)
puts "#{c.path} (#{c.type}): #{c[var]}"
end
end
puts
end
end
|
#pretty_print_configs ⇒ Object
Also known as:
pp_configs
184
185
186
187
188
189
190
|
# File 'lib/origen/site_config.rb', line 184
def pretty_print_configs
puts 'The following config files are ordered from last-encountered (highest priority) first-encountered (lowest priority)'
puts
configs.each_with_index do |config, i|
puts "#{i}: #{config.path} (#{config.type})"
end
end
|
#pretty_print_env(*vars) ⇒ Object
Also known as:
pp_env
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
|
# File 'lib/origen/site_config.rb', line 213
def pretty_print_env(*vars)
puts
spacing = ' ' * 2
r = vars.empty? ? nil : Regexp.union(vars.map { |v| Regexp.new(v) })
all_vars.each do |var, val|
if !r.nil? && !(var.match r)
next
end
if val.is_a?(Array)
puts "#{var}: ["
val.each { |v| puts "#{spacing} #{v}" }
puts ']'
elsif val.is_a?(Hash)
puts "#{var}: {"
val.each { |v| puts "#{spacing} #{v}" }
puts '}'
else
puts "#{var}: #{val}"
end
end
puts
end
|
176
177
178
|
# File 'lib/origen/site_config.rb', line 176
def rebuild!
configs!
end
|
180
181
182
|
# File 'lib/origen/site_config.rb', line 180
def refresh
configs.each(&:refresh)
end
|
#remove_all_instances(var) ⇒ Object
Also known as:
purge
Dynamically remove all the instances of :var
100
101
102
103
104
105
106
107
108
109
110
111
112
|
# File 'lib/origen/site_config.rb', line 100
def remove_all_instances(var)
ret = []
configs.each do |c|
if c.has_var?(var)
ret << c.remove_var(var)
end
end
ret
end
|
#remove_highest(var) ⇒ Object
Dynamically remove the highest instance of :var
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/origen/site_config.rb', line 88
def remove_highest(var)
configs.each do |c|
if c.has_var?(var)
return c.remove_var(var)
end
end
nil
end
|
#to_env(val) ⇒ Object
238
239
240
|
# File 'lib/origen/site_config.rb', line 238
def to_env(val)
"ORIGEN_#{val.upcase}"
end
|
#user_install_dir ⇒ Object
Gets the user_install_dir. Like gem_install_dir, this default to somewhere home_dir, unless overridden
41
42
43
|
# File 'lib/origen/site_config.rb', line 41
def user_install_dir
eval_path(find_val('user_install_dir') || home_dir)
end
|
#vars_by_configs ⇒ Object
Also known as:
vars_by_config
Gets all config variables as a hash, but the hash’s values are the Config instances which defines the highest priority of each var, instead of the var’s value itself.
204
205
206
207
208
209
210
|
# File 'lib/origen/site_config.rb', line 204
def vars_by_configs
vars = {}
configs.each do |c|
vars = c.values.map { |k, v| [k, c] }.to_h.merge(vars)
end
vars
end
|