Class Gem::ConfigFile
In: lib/rubygems/config_file.rb
Parent: Object

Store the gem command options specified in the configuration file. The config file object acts much like a hash.

Methods

Constants

DEFAULT_BACKTRACE = false
DEFAULT_BENCHMARK = false
DEFAULT_BULK_THRESHOLD = 1000
DEFAULT_VERBOSITY = true
DEFAULT_UPDATE_SOURCES = true
CSIDL_COMMON_APPDATA = 0x0023
SHGetFolderPath = Win32API.new 'shell32', 'SHGetFolderPath', 'LLLLP', 'L'
SYSTEM_WIDE_CONFIG_FILE = File.join system_config_path, 'gemrc'

Attributes

args  [R]  List of arguments supplied to the config file object.
backtrace  [W]  True if we print backtraces on errors.
benchmark  [RW]  True if we are benchmarking this run.
bulk_threshold  [RW]  Bulk threshold value. If the number of missing gems are above this threshold value, then a bulk download technique is used.
hash  [R] 
update_sources  [RW]  True if we want to update the SourceInfoCache every time, false otherwise
verbose  [RW]  Verbose level of output:
  • false — No output
  • true — Normal output
  • :loud — Extra output

Public Class methods

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.

[Source]

     # File lib/rubygems/config_file.rb, line 75
 75:   def initialize(arg_list)
 76:     @config_file_name = nil
 77:     need_config_file_name = false
 78: 
 79:     arg_list = arg_list.map do |arg|
 80:       if need_config_file_name then
 81:         @config_file_name = arg
 82:         need_config_file_name = false
 83:         nil
 84:       elsif arg =~ /^--config-file=(.*)/ then
 85:         @config_file_name = $1
 86:         nil
 87:       elsif arg =~ /^--config-file$/ then
 88:         need_config_file_name = true
 89:         nil
 90:       else
 91:         arg
 92:       end
 93:     end.compact
 94: 
 95:     @backtrace = DEFAULT_BACKTRACE
 96:     @benchmark = DEFAULT_BENCHMARK
 97:     @bulk_threshold = DEFAULT_BULK_THRESHOLD
 98:     @verbose = DEFAULT_VERBOSITY
 99:     @update_sources = DEFAULT_UPDATE_SOURCES
100: 
101:     @hash = load_file(SYSTEM_WIDE_CONFIG_FILE)
102:     @hash.merge!(load_file(config_file_name.dup.untaint))
103: 
104:     # HACK these override command-line args, which is bad
105:     @backtrace = @hash[:backtrace] if @hash.key? :backtrace
106:     @benchmark = @hash[:benchmark] if @hash.key? :benchmark
107:     @bulk_threshold = @hash[:bulk_threshold] if @hash.key? :bulk_threshold
108:     Gem.sources.replace @hash[:sources] if @hash.key? :sources
109:     @verbose = @hash[:verbose] if @hash.key? :verbose
110:     @update_sources = @hash[:update_sources] if @hash.key? :update_sources
111: 
112:     handle_arguments arg_list
113:   end

Public Instance methods

Return the configuration information for key.

[Source]

     # File lib/rubygems/config_file.rb, line 217
217:   def [](key)
218:     @hash[key.to_s]
219:   end

Set configuration option key to value.

[Source]

     # File lib/rubygems/config_file.rb, line 222
222:   def []=(key, value)
223:     @hash[key.to_s] = value
224:   end

True if the backtrace option has been specified, or debug is on.

[Source]

     # File lib/rubygems/config_file.rb, line 126
126:   def backtrace
127:     @backtrace or $DEBUG
128:   end

The name of the configuration file.

[Source]

     # File lib/rubygems/config_file.rb, line 131
131:   def config_file_name
132:     @config_file_name || Gem.config_file
133:   end

Delegates to @hash

[Source]

     # File lib/rubygems/config_file.rb, line 136
136:   def each(&block)
137:     hash = @hash.dup
138:     hash.delete :update_sources
139:     hash.delete :verbose
140:     hash.delete :benchmark
141:     hash.delete :backtrace
142:     hash.delete :bulk_threshold
143: 
144:     yield :update_sources, @update_sources
145:     yield :verbose, @verbose
146:     yield :benchmark, @benchmark
147:     yield :backtrace, @backtrace
148:     yield :bulk_threshold, @bulk_threshold
149: 
150:     yield 'config_file_name', @config_file_name if @config_file_name
151: 
152:     hash.each(&block)
153:   end

Handle the command arguments.

[Source]

     # File lib/rubygems/config_file.rb, line 156
156:   def handle_arguments(arg_list)
157:     @args = []
158: 
159:     arg_list.each do |arg|
160:       case arg
161:       when /^--(backtrace|traceback)$/ then
162:         @backtrace = true
163:       when /^--bench(mark)?$/ then
164:         @benchmark = true
165:       when /^--debug$/ then
166:         $DEBUG = true
167:       else
168:         @args << arg
169:       end
170:     end
171:   end

[Source]

     # File lib/rubygems/config_file.rb, line 115
115:   def load_file(filename)
116:     begin
117:       YAML.load(File.read(filename)) if filename and File.exist?(filename)
118:     rescue ArgumentError
119:       warn "Failed to load #{config_file_name}"
120:     rescue Errno::EACCES
121:       warn "Failed to load #{config_file_name} due to permissions problem."
122:     end or {}
123:   end

Really verbose mode gives you extra output.

[Source]

     # File lib/rubygems/config_file.rb, line 174
174:   def really_verbose
175:     case verbose
176:     when true, false, nil then false
177:     else true
178:     end
179:   end

Writes out this config file, replacing its source.

[Source]

     # File lib/rubygems/config_file.rb, line 210
210:   def write
211:     File.open config_file_name, 'w' do |fp|
212:       fp.write self.to_yaml
213:     end
214:   end

[Validate]