You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
amarok/amarok/src/mediadevice/daap/mongrel/lib/rubygems/config_file.rb

99 lines
2.5 KiB

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++
require 'yaml'
module Gem
####################################################################
# Store the gem command options specified in the configuration file.
# The config file object acts much like a hash.
#
class ConfigFile
# True if the backtrace option has been specified.
attr_reader :backtrace
# List of arguments supplied to the config file object.
attr_reader :args
# Verbose level of output:
# * false -- No output
# * true -- Normal output
# * :loud -- Extra output
attr_accessor :verbose
# Create the config file object. +args+ is the list of arguments
# from the command line.
#
# The following command line options are handled early here rather
# than later at the time most command options are processed.
#
# * --config-file and --config-file==NAME -- Obviously these need
# to be handled by the ConfigFile object to ensure we get the
# right config file.
#
# * --backtrace -- Backtrace needs to be turned on early so that
# errors before normal option parsing can be properly handled.
#
# * --debug -- Enable Ruby level debug messages. Handled early
# for the same reason as --backtrace.
#
def initialize(arg_list)
@verbose = true
handle_arguments(arg_list)
begin
@hash = open(config_file_name) {|f| YAML.load(f) }
rescue ArgumentError
warn "Failed to load #{config_file_name}"
rescue Errno::ENOENT
# Ignore missing config file error.
rescue Errno::EACCES
warn "Failed to load #{config_file_name} due to permissions problem."
end
@hash ||= {}
end
# The name of the configuration file.
def config_file_name
@config_file_name || Gem.config_file
end
# Return the configuration information for +key+.
def [](key)
@hash[key.to_s]
end
private
# Handle the command arguments.
def handle_arguments(arg_list)
need_cfg_name = false
@args = []
arg_list.each do |arg|
if need_cfg_name
@config_file_name = arg
need_cfg_name = false
else
case arg
when /^--(traceback|backtrace)$/
@backtrace = true
when /^--debug$/
$DEBUG = true
when /^--config-file$/
need_cfg_name = true
when /^--config-file=(.+)$/
@config_file_name = $1
else
@args << arg
end
end
end
end
end
end