class Bundler::Settings - bundler-1.9.9 Documentation

# class Bundler::Settings

### Constants

BOOL_KEYS

### Public Class Methods

new(root = nil) click to toggle source

    # File lib/bundler/settings.rb, line 7
    def initialize(root = nil)
      @root          = root
      @local_config  = load_config(local_config_file)
      @global_config = load_config(global_config_file)
    end

### Public Instance Methods

[](name) click to toggle source

    # File lib/bundler/settings.rb, line 13
    def [](name)
      key = key_for(name)
      value = (@local_config[key] || ENV[key] || @global_config[key])

      if !value.nil? && is_bool(name)
        to_bool(value)
      else
        value
      end
    end

[]=(key, value) click to toggle source

    # File lib/bundler/settings.rb, line 24
    def []=(key, value)
      local_config_file or raise GemfileNotFound, "Could not locate Gemfile"
      set_key(key, value, @local_config, local_config_file)
    end

Also aliased as: set_local
all() click to toggle source

    # File lib/bundler/settings.rb, line 39
    def all
      env_keys = ENV.keys.select { |k| k =~ /BUNDLE_.*/ }

      keys = @global_config.keys | @local_config.keys | env_keys

      keys.map do |key|
        key.sub(/^BUNDLE_/, '').gsub(/__/, ".").downcase
      end
    end

allow_sudo?() click to toggle source

    # File lib/bundler/settings.rb, line 119
    def allow_sudo?
      !@local_config.key?(key_for(:path))
    end

app_cache_path() click to toggle source

    # File lib/bundler/settings.rb, line 127
    def app_cache_path
      @app_cache_path ||= begin
        path = self[:cache_path] || "vendor/cache"
        raise InvalidOption, "Cache path must be relative to the bundle path" if path.start_with?("/")
        path
      end
    end

delete(key) click to toggle source

    # File lib/bundler/settings.rb, line 31
    def delete(key)
      @local_config.delete(key_for(key))
    end

gem_mirrors() click to toggle source

    # File lib/bundler/settings.rb, line 59
    def gem_mirrors
      all.inject({}) do |h, k|
        if k =~ /^mirror\./
          uri = normalize_uri($')
          h[uri] = normalize_uri(self[k])
        end
        h
      end
    end

ignore_config?() click to toggle source

    # File lib/bundler/settings.rb, line 123
    def ignore_config?
      ENV['BUNDLE_IGNORE_CONFIG']
    end

local_overrides() click to toggle source

    # File lib/bundler/settings.rb, line 49
    def local_overrides
      repos = {}
      all.each do |k|
        if k =~ /^local\./
          repos[$'] = self[k]
        end
      end
      repos
    end

locations(key) click to toggle source

    # File lib/bundler/settings.rb, line 69
    def locations(key)
      key = key_for(key)
      locations = {}
      locations[:local]  = @local_config[key] if @local_config.key?(key)
      locations[:env]    = ENV[key] if ENV[key]
      locations[:global] = @global_config[key] if @global_config.key?(key)
      locations
    end

path() click to toggle source

@local_config should be prioritized over ENV

    # File lib/bundler/settings.rb, line 107
    def path
      key  = key_for(:path)
      path = ENV[key] || @global_config[key]
      return path if path && !@local_config.key?(key)

      if path = self[:path]
        "#{path}/#{Bundler.ruby_scope}"
      else
        Bundler.rubygems.gem_dir
      end
    end

pretty_values_for(exposed_key) click to toggle source

    # File lib/bundler/settings.rb, line 78
    def pretty_values_for(exposed_key)
      key = key_for(exposed_key)

      locations = []
      if @local_config.key?(key)
        locations << "Set for your local app (#{local_config_file}): #{@local_config[key].inspect}"
      end

      if value = ENV[key]
        locations << "Set via #{key}: #{value.inspect}"
      end

      if @global_config.key?(key)
        locations << "Set for the current user (#{global_config_file}): #{@global_config[key].inspect}"
      end

      return ["You have not configured a value for `#{exposed_key}`"] if locations.empty?
      locations
    end

set_global(key, value) click to toggle source

    # File lib/bundler/settings.rb, line 35
    def set_global(key, value)
      set_key(key, value, @global_config, global_config_file)
    end

set_local(key, value)
Alias for: []=
without() click to toggle source

    # File lib/bundler/settings.rb, line 102
    def without
      self[:without] ? self[:without].split(":").map { |w| w.to_sym } : []
    end

without=(array) click to toggle source

    # File lib/bundler/settings.rb, line 98
    def without=(array)
      self[:without] = (array.empty? ? nil : array.join(":")) if array
    end

### Private Instance Methods

convert_to_backward_compatible_key(key) click to toggle source

    # File lib/bundler/settings.rb, line 189
    def convert_to_backward_compatible_key(key)
      key = "#{key}/" if key =~ /https?:/i && key !~ %r[/\Z]
      key = key.gsub(".", "__") if key.include?(".")
      key
    end

global_config_file() click to toggle source

    # File lib/bundler/settings.rb, line 166
    def global_config_file
      file = ENV["BUNDLE_CONFIG"] || File.join(Bundler.rubygems.user_home, ".bundle/config")
      Pathname.new(file)
    end

is_bool(key) click to toggle source

    # File lib/bundler/settings.rb, line 144
    def is_bool(key)
      BOOL_KEYS.include?(key.to_s)
    end

key_for(key) click to toggle source

    # File lib/bundler/settings.rb, line 136
    def key_for(key)
      if key.is_a?(String) && /https?:/ =~ key
        key = normalize_uri(key).to_s
      end
      key = key.to_s.gsub(".", "__").upcase
      "BUNDLE_#{key}"
    end

load_config(config_file) click to toggle source

    # File lib/bundler/settings.rb, line 175
    def load_config(config_file)
      valid_file = config_file && config_file.exist? && !config_file.size.zero?
      if !ignore_config? && valid_file
        config_regex = /^(BUNDLE_.+): (['"]?)(.*(?:\n(?!BUNDLE).+)?)\2$/
        config_pairs = config_file.read.scan(config_regex).map do |m|
          key, _, value = m
          [convert_to_backward_compatible_key(key), value.gsub(/\s+/, " ").tr('"', "'")]
        end
        Hash[config_pairs]
      else
        {}
      end
    end

local_config_file() click to toggle source

    # File lib/bundler/settings.rb, line 171
    def local_config_file
      Pathname.new(@root).join("config") if @root
    end

normalize_uri(uri) click to toggle source

TODO: duplicates Rubygems#normalize_uri TODO: is this the correct place to validate mirror URIs?

    # File lib/bundler/settings.rb, line 197
    def normalize_uri(uri)
      uri = uri.to_s
      uri = "#{uri}/" unless uri =~ %r[/\Z]
      uri = URI(uri)
      unless uri.absolute?
        raise ArgumentError, "Gem sources must be absolute. You provided '#{uri}'."
      end
      uri
    end

set_key(key, value, hash, file) click to toggle source

    # File lib/bundler/settings.rb, line 152
    def set_key(key, value, hash, file)
      key = key_for(key)

      unless hash[key] == value
        hash[key] = value
        hash.delete(key) if value.nil?
        FileUtils.mkdir_p(file.dirname)
        require 'bundler/psyched_yaml'
        File.open(file, "w") { |f| f.puts YAML.dump(hash) }
      end

      value
    end

to_bool(value) click to toggle source

    # File lib/bundler/settings.rb, line 148
    def to_bool(value)
      !(value.nil? || value == '' || value =~ /^(false|f|no|n|0)$/i || value == false)
    end