| Class | Gem::ConfigFile |
| In: |
lib/rubygems/config_file.rb
|
| Parent: | Object |
Gem::ConfigFile RubyGems options and gem command options from ~/.gemrc.
~/.gemrc is a YAML file that uses strings to match gem command arguments and symbols to match RubyGems options.
Gem command arguments use a String key that matches the command name and allow you to specify default arguments:
install: --no-rdoc --no-ri update: --no-rdoc --no-ri
You can use gem: to set default arguments for all commands.
RubyGems options use symbol keys. Valid options are:
| +:backtrace+: | See backtrace |
| +:benchmark+: | See benchmark |
| +:sources+: | Sets Gem::sources |
| +:verbose+: | See verbose |
| DEFAULT_BACKTRACE | = | false | ||
| DEFAULT_BENCHMARK | = | false | ||
| DEFAULT_BULK_THRESHOLD | = | 1000 | ||
| DEFAULT_VERBOSITY | = | true | ||
| DEFAULT_UPDATE_SOURCES | = | true | ||
| OPERATING_SYSTEM_DEFAULTS | = | {} | For Ruby packagers to set configuration defaults. Set in rubygems/defaults/operating_system.rb | |
| PLATFORM_DEFAULTS | = | {} | For Ruby implementers to set configuration defaults. Set in rubygems/defaults/#{RUBY_ENGINE}.rb | |
| CSIDL_COMMON_APPDATA | = | 0x0023 | ||
| SHGetFolderPath | = | Win32API.new 'shell32', 'SHGetFolderPath', 'PLPLP', 'L', :stdcall | ||
| SHGetFolderPath | = | Win32API.new 'shell32', 'SHGetFolderPath', 'LLLLP', 'L' | ||
| SYSTEM_WIDE_CONFIG_FILE | = | File.join system_config_path, 'gemrc' |
| api_keys | [R] | Hash of RubyGems.org and alternate API keys |
| 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. (deprecated) |
| hash | [R] | |
| home | [RW] | Where to install gems (deprecated) |
| path | [RW] | Where to look for gems (deprecated) |
| rubygems_api_key | [R] | API key for RubyGems.org |
| update_sources | [RW] | True if we want to update the SourceInfoCache every time, false otherwise |
| verbose | [RW] |
Verbose level of output:
|
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, —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. |
# File lib/rubygems/config_file.rb, line 150
150: def initialize(arg_list)
151: @config_file_name = nil
152: need_config_file_name = false
153:
154: arg_list = arg_list.map do |arg|
155: if need_config_file_name then
156: @config_file_name = arg
157: need_config_file_name = false
158: nil
159: elsif arg =~ /^--config-file=(.*)/ then
160: @config_file_name = $1
161: nil
162: elsif arg =~ /^--config-file$/ then
163: need_config_file_name = true
164: nil
165: else
166: arg
167: end
168: end.compact
169:
170: @backtrace = DEFAULT_BACKTRACE
171: @benchmark = DEFAULT_BENCHMARK
172: @bulk_threshold = DEFAULT_BULK_THRESHOLD
173: @verbose = DEFAULT_VERBOSITY
174: @update_sources = DEFAULT_UPDATE_SOURCES
175:
176: operating_system_config = Marshal.load Marshal.dump(OPERATING_SYSTEM_DEFAULTS)
177: platform_config = Marshal.load Marshal.dump(PLATFORM_DEFAULTS)
178: system_config = load_file SYSTEM_WIDE_CONFIG_FILE
179: user_config = load_file config_file_name.dup.untaint
180:
181: @hash = operating_system_config.merge platform_config
182: @hash = @hash.merge system_config
183: @hash = @hash.merge user_config
184:
185: # HACK these override command-line args, which is bad
186: @backtrace = @hash[:backtrace] if @hash.key? :backtrace
187: @benchmark = @hash[:benchmark] if @hash.key? :benchmark
188: @bulk_threshold = @hash[:bulk_threshold] if @hash.key? :bulk_threshold
189: @home = @hash[:gemhome] if @hash.key? :gemhome
190: @path = @hash[:gempath] if @hash.key? :gempath
191: @update_sources = @hash[:update_sources] if @hash.key? :update_sources
192: @verbose = @hash[:verbose] if @hash.key? :verbose
193:
194: load_api_keys
195:
196: Gem.sources = @hash[:sources] if @hash.key? :sources
197: handle_arguments arg_list
198: end
Return the configuration information for key.
# File lib/rubygems/config_file.rb, line 335
335: def [](key)
336: @hash[key.to_s]
337: end
Set configuration option key to value.
# File lib/rubygems/config_file.rb, line 340
340: def []=(key, value)
341: @hash[key.to_s] = value
342: end
The name of the configuration file.
# File lib/rubygems/config_file.rb, line 249
249: def config_file_name
250: @config_file_name || Gem.config_file
251: end
Location of RubyGems.org credentials
# File lib/rubygems/config_file.rb, line 203
203: def credentials_path
204: File.join(Gem.user_home, '.gem', 'credentials')
205: end
Delegates to @hash
# File lib/rubygems/config_file.rb, line 254
254: def each(&block)
255: hash = @hash.dup
256: hash.delete :update_sources
257: hash.delete :verbose
258: hash.delete :benchmark
259: hash.delete :backtrace
260: hash.delete :bulk_threshold
261:
262: yield :update_sources, @update_sources
263: yield :verbose, @verbose
264: yield :benchmark, @benchmark
265: yield :backtrace, @backtrace
266: yield :bulk_threshold, @bulk_threshold
267:
268: yield 'config_file_name', @config_file_name if @config_file_name
269:
270: hash.each(&block)
271: end
Handle the command arguments.
# File lib/rubygems/config_file.rb, line 274
274: def handle_arguments(arg_list)
275: @args = []
276:
277: arg_list.each do |arg|
278: case arg
279: when /^--(backtrace|traceback)$/ then
280: @backtrace = true
281: when /^--bench(mark)?$/ then
282: @benchmark = true
283: when /^--debug$/ then
284: $DEBUG = true
285: else
286: @args << arg
287: end
288: end
289: end
# File lib/rubygems/config_file.rb, line 207
207: def load_api_keys
208: @api_keys = File.exists?(credentials_path) ? load_file(credentials_path) : @hash
209: if @api_keys.key? :rubygems_api_key then
210: @rubygems_api_key = @api_keys[:rubygems_api_key]
211: @api_keys[:rubygems] = @api_keys.delete :rubygems_api_key unless @api_keys.key? :rubygems
212: end
213: end
# File lib/rubygems/config_file.rb, line 230
230: def load_file(filename)
231: Gem.load_yaml
232:
233: return {} unless filename and File.exists?(filename)
234: begin
235: YAML.load(File.read(filename))
236: rescue ArgumentError
237: warn "Failed to load #{config_file_name}"
238: rescue Errno::EACCES
239: warn "Failed to load #{config_file_name} due to permissions problem."
240: end or {}
241: end
Really verbose mode gives you extra output.
# File lib/rubygems/config_file.rb, line 292
292: def really_verbose
293: case verbose
294: when true, false, nil then false
295: else true
296: end
297: end
# File lib/rubygems/config_file.rb, line 215
215: def rubygems_api_key=(api_key)
216: config = load_file(credentials_path).merge(:rubygems_api_key => api_key)
217:
218: dirname = File.dirname(credentials_path)
219: Dir.mkdir(dirname) unless File.exists?(dirname)
220:
221: Gem.load_yaml
222:
223: File.open(credentials_path, 'w') do |f|
224: f.write config.to_yaml
225: end
226:
227: @rubygems_api_key = api_key
228: end