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