Module: Bundler

Defined in:
lib/bundler.rb,
lib/bundler/ui.rb,
lib/bundler/cli.rb,
lib/bundler/dsl.rb,
lib/bundler/graph.rb,
lib/bundler/index.rb,
lib/bundler/source.rb,
lib/bundler/runtime.rb,
lib/bundler/version.rb,
lib/bundler/resolver.rb,
lib/bundler/settings.rb,
lib/bundler/spec_set.rb,
lib/bundler/installer.rb,
lib/bundler/definition.rb,
lib/bundler/dependency.rb,
lib/bundler/deployment.rb,
lib/bundler/gem_helper.rb,
lib/bundler/environment.rb,
lib/bundler/rubygems_ext.rb,
lib/bundler/shared_helpers.rb,
lib/bundler/lockfile_parser.rb,
lib/bundler/lazy_specification.rb,
lib/bundler/remote_specification.rb

Defined Under Namespace

Modules: GemHelpers, MatchPlatform, SharedHelpers, Source Classes: BundlerError, CLI, Definition, DepProxy, Dependency, Deployment, DeprecatedError, Dsl, DslError, Environment, GemHelper, GemNotFound, GemfileError, GemfileNotFound, GemspecError, GitError, Graph, GraphNode, Index, Installer, InvalidOption, InvalidSpecSet, LazySpecification, LockfileParser, PathError, ProductionError, RemoteSpecification, Resolver, Runtime, Settings, SpecSet, UI, VersionConflict

Constant Summary collapse

ORIGINAL_ENV =
ENV.to_hash
WINDOWS =
RbConfig::CONFIG["host_os"] =~ %r!(msdos|mswin|djgpp|mingw)!
FREEBSD =
RbConfig::CONFIG["host_os"] =~ /bsd/
NULL =
WINDOWS ? "NUL" : "/dev/null"
VERSION =

We’re doing this because we might write tests that deal with other versions of bundler and we are unsure how to handle this better.

"1.0.9"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.bundle_pathObject



81
82
83
84
# File 'lib/bundler.rb', line 81

def bundle_path
  # STDERR.puts settings.path
  @bundle_path ||= Pathname.new(settings.path).expand_path(root)
end

.uiObject



77
78
79
# File 'lib/bundler.rb', line 77

def ui
  @ui ||= UI.new
end

Class Method Details

.app_cacheObject



168
169
170
# File 'lib/bundler.rb', line 168

def app_cache
  root.join("vendor/cache")
end

.app_config_pathObject



162
163
164
165
166
# File 'lib/bundler.rb', line 162

def app_config_path
  ENV['BUNDLE_APP_CONFIG'] ?
    Pathname.new(ENV['BUNDLE_APP_CONFIG']).expand_path(root) :
    root.join('.bundle')
end

.bin_pathObject



86
87
88
89
90
91
92
93
# File 'lib/bundler.rb', line 86

def bin_path
  @bin_path ||= begin
    path = settings[:bin] || "bin"
    path = Pathname.new(path).expand_path(root)
    FileUtils.mkdir_p(path)
    Pathname.new(path).expand_path
  end
end

.cacheObject



154
155
156
# File 'lib/bundler.rb', line 154

def cache
  bundle_path.join("cache/bundler")
end

.configureObject



70
71
72
73
74
75
# File 'lib/bundler.rb', line 70

def configure
  @configured ||= begin
    configure_gem_home_and_path
    true
  end
end

.default_gemfileObject



188
189
190
# File 'lib/bundler.rb', line 188

def default_gemfile
  SharedHelpers.default_gemfile
end

.default_lockfileObject



192
193
194
# File 'lib/bundler.rb', line 192

def default_lockfile
  SharedHelpers.default_lockfile
end

.definition(unlock = nil) ⇒ Object



125
126
127
128
129
130
131
132
# File 'lib/bundler.rb', line 125

def definition(unlock = nil)
  @definition = nil if unlock
  @definition ||= begin
    configure
    upgrade_lockfile
    Definition.build(default_gemfile, default_lockfile, unlock)
  end
end

.environmentObject



121
122
123
# File 'lib/bundler.rb', line 121

def environment
  Bundler::Environment.new(root, definition)
end

.homeObject



142
143
144
# File 'lib/bundler.rb', line 142

def home
  bundle_path.join("bundler")
end

.install_pathObject



146
147
148
# File 'lib/bundler.rb', line 146

def install_path
  home.join("gems")
end

.loadObject



117
118
119
# File 'lib/bundler.rb', line 117

def load
  @load ||= Runtime.new(root, definition)
end

.load_gemspec(file) ⇒ Object



223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
# File 'lib/bundler.rb', line 223

def load_gemspec(file)
  path = Pathname.new(file)
  # Eval the gemspec from its parent directory
  Dir.chdir(path.dirname.to_s) do
    begin
      Gem::Specification.from_yaml(path.basename.to_s)
      # Raises ArgumentError if the file is not valid YAML
    rescue ArgumentError, SyntaxError, Gem::EndOfYAMLException, Gem::Exception
      begin
        eval(File.read(path.basename.to_s), TOPLEVEL_BINDING, path.expand_path.to_s)
      rescue LoadError => e
        original_line = e.backtrace.find { |line| line.include?(path.to_s) }
        msg  = "There was a LoadError while evaluating #{path.basename}:\n  #{e.message}"
        msg << " from\n  #{original_line}" if original_line
        msg << "\n"

        if RUBY_VERSION >= "1.9.0"
          msg << "\nDoes it try to require a relative path? That doesn't work in Ruby 1.9."
        end

        raise GemspecError, msg
      end
    end
  end
end

.mkdir_p(path) ⇒ Object



207
208
209
210
211
212
213
# File 'lib/bundler.rb', line 207

def mkdir_p(path)
  if requires_sudo?
    sudo "mkdir -p '#{path}'" unless File.exist?(path)
  else
    FileUtils.mkdir_p(path)
  end
end

.read_file(file) ⇒ Object



219
220
221
# File 'lib/bundler.rb', line 219

def read_file(file)
  File.open(file, "rb") { |f| f.read }
end

.require(*groups) ⇒ Object



113
114
115
# File 'lib/bundler.rb', line 113

def require(*groups)
  setup(*groups).require(*groups)
end

.requires_sudo?Boolean

Returns:

  • (Boolean)


196
197
198
199
200
201
202
203
204
205
# File 'lib/bundler.rb', line 196

def requires_sudo?
  return @requires_sudo if @checked_for_sudo

  path = bundle_path
  path = path.parent until path.exist?
  sudo_present = !(`which sudo` rescue '').empty?

  @checked_for_sudo = true
  @requires_sudo = settings.allow_sudo? && !File.writable?(path) && sudo_present
end

.rootObject



158
159
160
# File 'lib/bundler.rb', line 158

def root
  default_gemfile.dirname.expand_path
end

.ruby_scopeObject



134
135
136
# File 'lib/bundler.rb', line 134

def ruby_scope
  "#{Gem.ruby_engine}/#{Gem::ConfigMap[:ruby_version]}"
end

.settingsObject



176
177
178
# File 'lib/bundler.rb', line 176

def settings
  @settings ||= Settings.new(app_config_path)
end

.setup(*groups) ⇒ Object



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/bundler.rb', line 95

def setup(*groups)
  # Just return if all groups are already loaded
  return @setup if defined?(@setup)

  if groups.empty?
    # Load all groups, but only once
    @setup = load.setup
  else
    @completed_groups ||= []
    # Figure out which groups haven't been loaded yet
    unloaded = groups - @completed_groups
    # Record groups that are now loaded
    @completed_groups = groups
    # Load any groups that are not yet loaded
    unloaded.any? ? load.setup(*unloaded) : load
  end
end

.specs_pathObject



150
151
152
# File 'lib/bundler.rb', line 150

def specs_path
  bundle_path.join("specifications")
end

.sudo(str) ⇒ Object



215
216
217
# File 'lib/bundler.rb', line 215

def sudo(str)
  `sudo -p 'Enter your password to install the bundled RubyGems to your system: ' #{str}`
end

.tmpObject



172
173
174
# File 'lib/bundler.rb', line 172

def tmp
  user_bundle_path.join("tmp", Process.pid.to_s)
end

.user_bundle_pathObject



138
139
140
# File 'lib/bundler.rb', line 138

def user_bundle_path
  Pathname.new(Gem.user_home).join(".bundler")
end

.with_clean_envObject



180
181
182
183
184
185
186
# File 'lib/bundler.rb', line 180

def with_clean_env
  bundled_env = ENV.to_hash
  ENV.replace(ORIGINAL_ENV)
  yield
ensure
  ENV.replace(bundled_env.to_hash)
end