class Devinstall::Settings
Constants
- FILES
- MDEFS
- PROVIDERS
- SETTINGS
Public Instance Methods
load!(filename)
click to toggle source
# File lib/devinstall/settings.rb, line 55 def load! (filename) if FILES.include? filename true else FILES << filename data = YAML::load_file(filename).deep_symbolize merger = proc do |_, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 end SETTINGS.merge! data, &merger end if File.exist?(File.expand_path(filename)) FILES.include? filename end
method_missing(method, *args)
click to toggle source
# File lib/devinstall/settings.rb, line 69 def method_missing (method, *args) raise UnknownKeyError, "Undefined section '#{method}'" unless method_defined? method key = (args.shift or {}) rest = (Hash === key) ? key : (args.shift or {}) pkg = rest[:pkg] if pkg.nil? raise UnknownKeyError, "Unknown key #{key}" unless key_defined? method, key return SETTINGS[method][key] rescue raise "#{method}: Package must be defined" end type = rest[:type] || defaults(:type) env = rest[:env] || defaults(:env) return Action.new(method, pkg, type, env) if Hash === key raise UnknownKeyError, "Unknown key #{key}" unless key_defined? method, key global_or_local(method, key, pkg, type, env) or raise KeyNotDefinedError, "Undefined key '#{method}:#{key}' or alternate for ['#{pkg}' '#{type}' '#{env}']" end
register_provider(provider, methods)
click to toggle source
# File lib/devinstall/settings.rb, line 90 def register_provider(provider, methods) PROVIDERS[provider]=methods end
respond_to_missing?(method, _)
click to toggle source
# File lib/devinstall/settings.rb, line 86 def respond_to_missing?(method, _) method_defined? method end
unregister_provider(provider)
click to toggle source
# File lib/devinstall/settings.rb, line 94 def unregister_provider(provider) PROVIDERS.delete(provider) end
Private Instance Methods
global_or_local(section, key, pkg, type, env)
click to toggle source
# File lib/devinstall/settings.rb, line 110 def global_or_local(section, key, pkg, type, env) key_chain(:packages, pkg, type, section, env, key) || key_chain(:packages, pkg, type, section, key) || key_chain(section, env, key) || key_chain(section, key) end
key_chain(*keys)
click to toggle source
# File lib/devinstall/settings.rb, line 100 def key_chain(*keys) res=SETTINGS keys.each do |key| next if key.nil? return nil unless res.has_key? key.to_sym res=res[key.to_sym] end res end
key_defined?(method, key)
click to toggle source
# File lib/devinstall/settings.rb, line 117 def key_defined?(method, key) method, key = (method.to_sym rescue method), (key.to_sym rescue key) method_defined? method and (MDEFS[method].include? key rescue false) or PROVIDERS.inject(false) { |res, (_, v)| res or (v[method].include? key rescue false) } end
method_defined?(method)
click to toggle source
# File lib/devinstall/settings.rb, line 124 def method_defined?(method) method = (method.to_sym rescue method) (MDEFS.has_key?(method) or PROVIDERS.inject(false) { |res, (k, _)| res or PROVIDERS[k].has_key? method }) and SETTINGS.has_key? method end