bundler 1.9.10 → 1.10.0.pre

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of bundler might be problematic. Click here for more details.

Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/CHANGELOG.md +21 -13
  4. data/Rakefile +2 -2
  5. data/bin/bundle_ruby +2 -0
  6. data/bin/bundler +1 -1
  7. data/lib/bundler.rb +6 -10
  8. data/lib/bundler/cli.rb +23 -1
  9. data/lib/bundler/cli/gem.rb +5 -2
  10. data/lib/bundler/cli/install.rb +37 -5
  11. data/lib/bundler/cli/lock.rb +36 -0
  12. data/lib/bundler/cli/outdated.rb +9 -2
  13. data/lib/bundler/definition.rb +22 -7
  14. data/lib/bundler/dependency.rb +7 -6
  15. data/lib/bundler/deployment.rb +3 -0
  16. data/lib/bundler/dsl.rb +172 -39
  17. data/lib/bundler/endpoint_specification.rb +1 -1
  18. data/lib/bundler/fetcher.rb +90 -252
  19. data/lib/bundler/fetcher/base.rb +27 -0
  20. data/lib/bundler/fetcher/dependency.rb +88 -0
  21. data/lib/bundler/fetcher/downloader.rb +61 -0
  22. data/lib/bundler/fetcher/index.rb +31 -0
  23. data/lib/bundler/friendly_errors.rb +3 -0
  24. data/lib/bundler/inline.rb +50 -0
  25. data/lib/bundler/installer.rb +15 -60
  26. data/lib/bundler/installer/parallel_installer.rb +117 -0
  27. data/lib/bundler/lazy_specification.rb +1 -1
  28. data/lib/bundler/lockfile_parser.rb +26 -10
  29. data/lib/bundler/remote_specification.rb +21 -1
  30. data/lib/bundler/resolver.rb +2 -1
  31. data/lib/bundler/retry.rb +11 -10
  32. data/lib/bundler/rubygems_ext.rb +1 -1
  33. data/lib/bundler/rubygems_integration.rb +33 -6
  34. data/lib/bundler/settings.rb +58 -14
  35. data/lib/bundler/shared_helpers.rb +6 -3
  36. data/lib/bundler/source.rb +0 -10
  37. data/lib/bundler/source/git.rb +2 -2
  38. data/lib/bundler/source/path.rb +1 -1
  39. data/lib/bundler/source/path/installer.rb +8 -11
  40. data/lib/bundler/source/rubygems.rb +46 -16
  41. data/lib/bundler/source/rubygems/remote.rb +39 -0
  42. data/lib/bundler/templates/newgem/.travis.yml.tt +1 -0
  43. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +2 -2
  44. data/lib/bundler/templates/newgem/Rakefile.tt +2 -0
  45. data/lib/bundler/templates/newgem/test/{test_newgem.rb.tt → newgem_test.rb.tt} +2 -2
  46. data/lib/bundler/templates/newgem/test/{minitest_helper.rb.tt → test_helper.rb.tt} +0 -0
  47. data/lib/bundler/version.rb +1 -1
  48. data/man/bundle-config.ronn +7 -0
  49. data/man/bundle-install.ronn +9 -0
  50. data/man/bundle.ronn +3 -3
  51. data/man/gemfile.5.ronn +9 -5
  52. metadata +13 -8
  53. data/UPGRADING.md +0 -103
  54. data/lib/bundler/anonymizable_uri.rb +0 -32
@@ -7,34 +7,31 @@ module Bundler
7
7
 
8
8
  def initialize(spec, options = {})
9
9
  @spec = spec
10
+ @tmp_bin_dir = "#{Bundler.tmp(spec.full_name)}/bin"
11
+ @gem_bin_dir = "#{Bundler.rubygems.gem_dir}/bin"
12
+ @bin_dir = Bundler.requires_sudo? ? @tmp_bin_dir : @gem_bin_dir
10
13
  @gem_dir = Bundler.rubygems.path(spec.full_gem_path)
11
14
  @wrappers = options[:wrappers] || true
12
15
  @env_shebang = options[:env_shebang] || true
13
16
  @format_executable = options[:format_executable] || false
14
17
  @build_args = options[:build_args] || Bundler.rubygems.build_args
15
- @gem_bin_dir = "#{Bundler.rubygems.gem_dir}/bin"
16
-
17
- if Bundler.requires_sudo?
18
- @tmp_dir = Bundler.tmp(spec.full_name).to_s
19
- @bin_dir = "#{@tmp_dir}/bin"
20
- else
21
- @bin_dir = @gem_bin_dir
22
- end
23
18
  end
24
19
 
25
20
  def generate_bin
26
21
  return if spec.executables.nil? || spec.executables.empty?
27
22
 
23
+ if Bundler.requires_sudo?
24
+ FileUtils.mkdir_p(@tmp_bin_dir) unless File.exist?(@tmp_bin_dir)
25
+ end
26
+
28
27
  super
29
28
 
30
29
  if Bundler.requires_sudo?
31
30
  Bundler.mkdir_p @gem_bin_dir
32
31
  spec.executables.each do |exe|
33
- Bundler.sudo "cp -R #{@bin_dir}/#{exe} #{@gem_bin_dir}"
32
+ Bundler.sudo "cp -R #{@tmp_bin_dir}/#{exe} #{@gem_bin_dir}"
34
33
  end
35
34
  end
36
- ensure
37
- Bundler.rm_rf(@tmp_dir) if Bundler.requires_sudo?
38
35
  end
39
36
  end
40
37
 
@@ -5,6 +5,8 @@ require 'rubygems/spec_fetcher'
5
5
  module Bundler
6
6
  class Source
7
7
  class Rubygems < Source
8
+ autoload :Remote, "bundler/source/rubygems/remote"
9
+
8
10
  # Use the API when installing less than X gems
9
11
  API_REQUEST_LIMIT = 500
10
12
  # Ask for X gems per API request
@@ -83,15 +85,28 @@ module Bundler
83
85
  end
84
86
  end
85
87
 
86
- def install(spec)
87
- return ["Using #{version_message(spec)}", nil] if installed_specs[spec].any?
88
+ def install(spec, opts = {})
89
+ force = opts[:force]
90
+ ensure_builtin_gems_cached = opts[:ensure_builtin_gems_cached]
91
+
92
+ if ensure_builtin_gems_cached && builtin_gem?(spec)
93
+ if !cached_path(spec)
94
+ cached_built_in_gem(spec) unless spec.remote
95
+ force = true
96
+ else
97
+ spec.loaded_from = loaded_from(spec)
98
+ end
99
+ end
100
+
101
+ return ["Using #{version_message(spec)}", nil] if installed_specs[spec].any? && !force
102
+
88
103
 
89
104
  # Download the gem to get the spec, because some specs that are returned
90
105
  # by rubygems.org are broken and wrong.
91
- if spec.source_uri
106
+ if spec.remote
92
107
  # Check for this spec from other sources
93
- uris = [spec.source_uri.without_credentials]
94
- uris += source_uris_for_spec(spec)
108
+ uris = [spec.remote.anonymized_uri]
109
+ uris += remotes_for_spec(spec).map { |remote| remote.anonymized_uri }
95
110
  uris.uniq!
96
111
  Installer.ambiguous_gems << [spec.name, *uris] if uris.length > 1
97
112
 
@@ -145,7 +160,9 @@ module Bundler
145
160
  spec.loaded_from = loaded_from(spec)
146
161
  ["Installing #{version_message(spec)}", spec.post_install_message]
147
162
  ensure
148
- Bundler.rm_rf(install_path) if Bundler.requires_sudo?
163
+ if install_path && Bundler.requires_sudo?
164
+ FileUtils.remove_entry_secure(install_path)
165
+ end
149
166
  end
150
167
 
151
168
  def cache(spec, custom_path = nil)
@@ -196,7 +213,8 @@ module Bundler
196
213
 
197
214
  def fetchers
198
215
  @fetchers ||= remotes.map do |uri|
199
- Bundler::Fetcher.new(uri)
216
+ remote = Source::Rubygems::Remote.new(uri)
217
+ Bundler::Fetcher.new(remote)
200
218
  end
201
219
  end
202
220
 
@@ -206,11 +224,9 @@ module Bundler
206
224
  remotes.map(&method(:suppress_configured_credentials))
207
225
  end
208
226
 
209
- private
210
-
211
- def source_uris_for_spec(spec)
227
+ def remotes_for_spec(spec)
212
228
  specs.search_all(spec.name).inject([]) do |uris, s|
213
- uris << s.source_uri.without_credentials if s.source_uri
229
+ uris << s.remote if s.remote
214
230
  uris
215
231
  end
216
232
  end
@@ -296,7 +312,7 @@ module Bundler
296
312
  end
297
313
 
298
314
  def api_fetchers
299
- fetchers.select{|f| f.use_api }
315
+ fetchers.select(&:use_api)
300
316
  end
301
317
 
302
318
  def remote_specs
@@ -337,7 +353,7 @@ module Bundler
337
353
  end
338
354
  end until idxcount == idx.size
339
355
 
340
- if api_fetchers.any? && api_fetchers.all?{|f| f.use_api }
356
+ if api_fetchers.any?
341
357
  # it's possible that gems from one source depend on gems from some
342
358
  # other source, so now we download gemspecs and iterate over those
343
359
  # dependencies, looking for gems we don't have info on yet.
@@ -354,7 +370,7 @@ module Bundler
354
370
  end
355
371
  end
356
372
 
357
- if !allow_api
373
+ unless allow_api
358
374
  api_fetchers.each do |f|
359
375
  Bundler.ui.info "Fetching source index from #{f.uri}"
360
376
  idx.use f.specs(nil, self)
@@ -364,8 +380,22 @@ module Bundler
364
380
  end
365
381
 
366
382
  def fetch_gem(spec)
367
- return false unless spec.source_uri
368
- Fetcher.download_gem_from_uri(spec, spec.source_uri.original_uri)
383
+ return false unless spec.remote
384
+ uri = spec.remote.uri
385
+ spec.fetch_platform
386
+
387
+ download_path = Bundler.requires_sudo? ? Bundler.tmp(spec.full_name) : Bundler.rubygems.gem_dir
388
+ gem_path = "#{Bundler.rubygems.gem_dir}/cache/#{spec.full_name}.gem"
389
+
390
+ FileUtils.mkdir_p("#{download_path}/cache")
391
+ Bundler.rubygems.download_gem(spec, uri, download_path)
392
+
393
+ if Bundler.requires_sudo?
394
+ Bundler.mkdir_p "#{Bundler.rubygems.gem_dir}/cache"
395
+ Bundler.sudo "mv #{Bundler.tmp(spec.full_name)}/cache/#{spec.full_name}.gem #{gem_path}"
396
+ end
397
+
398
+ gem_path
369
399
  end
370
400
 
371
401
  def builtin_gem?(spec)
@@ -0,0 +1,39 @@
1
+ module Bundler
2
+ class Source
3
+ class Rubygems
4
+ class Remote
5
+ attr_reader :uri,
6
+ :anonymized_uri
7
+
8
+ def initialize(uri)
9
+ uri = Bundler.settings.mirror_for(uri)
10
+ fallback_auth = Bundler.settings.credentials_for(uri)
11
+
12
+ @uri = apply_auth(uri, fallback_auth).freeze
13
+ @anonymized_uri = remove_auth(@uri).freeze
14
+ end
15
+
16
+ private
17
+
18
+ def apply_auth(uri, auth)
19
+ if auth && uri.userinfo.nil?
20
+ uri = uri.dup
21
+ uri.userinfo = auth
22
+ end
23
+
24
+ uri
25
+ end
26
+
27
+ def remove_auth(uri)
28
+ if uri.userinfo
29
+ uri = uri.dup
30
+ uri.user = uri.password = nil
31
+ end
32
+
33
+ uri
34
+ end
35
+
36
+ end
37
+ end
38
+ end
39
+ end
@@ -1,3 +1,4 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - <%= RUBY_VERSION %>
4
+ before_install: gem install bundler -v <%= Bundler::VERSION %>
@@ -2,7 +2,7 @@
2
2
 
3
3
  As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
4
4
 
5
- We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, age, or religion.
5
+ We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, or religion.
6
6
 
7
7
  Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.
8
8
 
@@ -10,4 +10,4 @@ Project maintainers have the right and responsibility to remove, edit, or reject
10
10
 
11
11
  Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.
12
12
 
13
- This Code of Conduct is adapted from the [Contributor Covenant](http:contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)
13
+ This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)
@@ -4,6 +4,8 @@ require "rake/testtask"
4
4
 
5
5
  Rake::TestTask.new(:test) do |t|
6
6
  t.libs << "test"
7
+ t.libs << "lib"
8
+ t.test_files = FileList['test/**/*_test.rb']
7
9
  end
8
10
 
9
11
  task :default => :test
@@ -1,6 +1,6 @@
1
- require 'minitest_helper'
1
+ require 'test_helper'
2
2
 
3
- class Test<%= config[:constant_name] %> < Minitest::Test
3
+ class <%= config[:constant_name] %>Test < Minitest::Test
4
4
  def test_that_it_has_a_version_number
5
5
  refute_nil ::<%= config[:constant_name] %>::VERSION
6
6
  end
@@ -2,5 +2,5 @@ module Bundler
2
2
  # We're doing this because we might write tests that deal
3
3
  # with other versions of bundler and we are unsure how to
4
4
  # handle this better.
5
- VERSION = "1.9.10" unless defined?(::Bundler::VERSION)
5
+ VERSION = "1.10.0.pre" unless defined?(::Bundler::VERSION)
6
6
  end
@@ -35,6 +35,10 @@ local and global sources. Not compatible with --global or --local flag.
35
35
  Executing bundle with the `BUNDLE_IGNORE_CONFIG` environment variable set will
36
36
  cause it to ignore all configuration.
37
37
 
38
+ Executing `bundle config disable_multisource true` upgrades the warning about
39
+ the Gemfile containing multiple primary sources to an error. Executing `bundle
40
+ config --delete disable_multisource` downgrades this error to a warning.
41
+
38
42
  ## BUILD OPTIONS
39
43
 
40
44
  You can use `bundle config` to give bundler the flags to pass to the gem
@@ -108,6 +112,9 @@ learn more about their operation in [bundle install(1)][bundle-install].
108
112
  * `disable_multisource` (`BUNDLE_DISABLE_MULTISOURCE`): When set, Gemfiles
109
113
  containing multiple sources will produce errors instead of warnings. Use
110
114
  `bundle config --delete disable_multisource` to unset.
115
+ * `ignore_messages` (`BUNDLE_IGNORE_MESSAGES`): When set, no post install
116
+ messages will be printed. To silence a single gem, use dot notation like
117
+ `ignore_messages.httparty true`.
111
118
 
112
119
  In general, you should set these settings per-application by using the applicable
113
120
  flag to the [bundle install(1)][bundle-install] or [bundle package(1)][bundle-package] command.
@@ -20,6 +20,7 @@ bundle-install(1) -- Install the dependencies specified in your Gemfile
20
20
  [--standalone[=GROUP[ GROUP...]]]
21
21
  [--trust-policy=POLICY]
22
22
  [--without=GROUP[ GROUP...]]
23
+ [--with=GROUP[ GROUP...]]
23
24
 
24
25
  ## DESCRIPTION
25
26
 
@@ -127,8 +128,16 @@ update process below under [CONSERVATIVE UPDATING][].
127
128
 
128
129
  * `--without=<list>`:
129
130
  A space-separated list of groups referencing gems to skip during installation.
131
+ If a group is given that is in the remembered list of groups given
132
+ to --with, it is removed from that list.
130
133
  This is a [remembered option][REMEMBERED OPTIONS].
131
134
 
135
+ * `--with=<list>`:
136
+ A space-separated list of groups referencing gems to install. If an
137
+ optional group is given it is installed. If a group is given that is
138
+ in the remembered list of groups given to --without, it is removed
139
+ from that list. This is a [remembered option][REMEMBERED OPTIONS].
140
+
132
141
 
133
142
  ## DEPLOYMENT MODE
134
143
 
@@ -67,6 +67,9 @@ We divide `bundle` subcommands into primary commands and utilities.
67
67
  * `bundle open(1)`:
68
68
  Open an installed gem in the editor
69
69
 
70
+ * `bundle lock(1)`:
71
+ Generate a lockfile for your dependencies
72
+
70
73
  * `bundle viz(1)`:
71
74
  Generate a visual representation of your dependencies
72
75
 
@@ -92,7 +95,4 @@ and execute it, passing down any extra arguments to it.
92
95
 
93
96
  These commands are obsolete and should no longer be used
94
97
 
95
- * `bundle lock(1)`
96
- * `bundle unlock(1)`
97
98
  * `bundle cache(1)`
98
-
@@ -430,11 +430,15 @@ applied to a group of gems by using block form.
430
430
  gem "sqlite3"
431
431
  end
432
432
 
433
- group :development do
433
+ group :development, :optional => true do
434
434
  gem "wirble"
435
435
  gem "faker"
436
436
  end
437
437
 
438
+ In the case of the group block form the :optional option can be given
439
+ to prevent a group from being installed unless listed in the `--with`
440
+ option given to the `bundle install` command.
441
+
438
442
  In the case of the `git` block form, the `:ref`, `:branch`, `:tag`,
439
443
  and `:submodules` options may be passed to the `git` method, and
440
444
  all gems in the block will inherit those options.
@@ -453,10 +457,10 @@ files in your test code as you would if the project were installed as a gem; you
453
457
  need not manipulate the load path manually or require project files via relative
454
458
  paths.
455
459
 
456
- The `gemspec` method supports optional `:path`, `:name`, and `:development_group`
457
- options, which control where bundler looks for the `.gemspec`, what named
458
- `.gemspec` it uses (if more than one is present), and which group development
459
- dependencies are included in.
460
+ The `gemspec` method supports optional `:path`, `:glob`, `:name`, and `:development_group`
461
+ options, which control where bundler looks for the `.gemspec`, the glob it uses to look
462
+ for the gemspec (defaults to: "{,*,*/*}.gemspec"), what named `.gemspec` it uses
463
+ (if more than one is present), and which group development dependencies are included in.
460
464
 
461
465
  ## SOURCE PRIORITY
462
466
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bundler
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.10
4
+ version: 1.10.0.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - André Arko
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-06-23 00:00:00.000000000 Z
14
+ date: 2015-05-03 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: mustache
@@ -104,13 +104,11 @@ files:
104
104
  - LICENSE.md
105
105
  - README.md
106
106
  - Rakefile
107
- - UPGRADING.md
108
107
  - bin/bundle
109
108
  - bin/bundle_ruby
110
109
  - bin/bundler
111
110
  - bundler.gemspec
112
111
  - lib/bundler.rb
113
- - lib/bundler/anonymizable_uri.rb
114
112
  - lib/bundler/capistrano.rb
115
113
  - lib/bundler/cli.rb
116
114
  - lib/bundler/cli/binstubs.rb
@@ -125,6 +123,7 @@ files:
125
123
  - lib/bundler/cli/init.rb
126
124
  - lib/bundler/cli/inject.rb
127
125
  - lib/bundler/cli/install.rb
126
+ - lib/bundler/cli/lock.rb
128
127
  - lib/bundler/cli/open.rb
129
128
  - lib/bundler/cli/outdated.rb
130
129
  - lib/bundler/cli/package.rb
@@ -144,6 +143,10 @@ files:
144
143
  - lib/bundler/env.rb
145
144
  - lib/bundler/environment.rb
146
145
  - lib/bundler/fetcher.rb
146
+ - lib/bundler/fetcher/base.rb
147
+ - lib/bundler/fetcher/dependency.rb
148
+ - lib/bundler/fetcher/downloader.rb
149
+ - lib/bundler/fetcher/index.rb
147
150
  - lib/bundler/friendly_errors.rb
148
151
  - lib/bundler/gem_helper.rb
149
152
  - lib/bundler/gem_helpers.rb
@@ -153,7 +156,9 @@ files:
153
156
  - lib/bundler/graph.rb
154
157
  - lib/bundler/index.rb
155
158
  - lib/bundler/injector.rb
159
+ - lib/bundler/inline.rb
156
160
  - lib/bundler/installer.rb
161
+ - lib/bundler/installer/parallel_installer.rb
157
162
  - lib/bundler/lazy_specification.rb
158
163
  - lib/bundler/lockfile_parser.rb
159
164
  - lib/bundler/man/bundle
@@ -192,6 +197,7 @@ files:
192
197
  - lib/bundler/source/path.rb
193
198
  - lib/bundler/source/path/installer.rb
194
199
  - lib/bundler/source/rubygems.rb
200
+ - lib/bundler/source/rubygems/remote.rb
195
201
  - lib/bundler/source_list.rb
196
202
  - lib/bundler/spec_set.rb
197
203
  - lib/bundler/ssl_certs/.document
@@ -224,8 +230,8 @@ files:
224
230
  - lib/bundler/templates/newgem/rspec.tt
225
231
  - lib/bundler/templates/newgem/spec/newgem_spec.rb.tt
226
232
  - lib/bundler/templates/newgem/spec/spec_helper.rb.tt
227
- - lib/bundler/templates/newgem/test/minitest_helper.rb.tt
228
- - lib/bundler/templates/newgem/test/test_newgem.rb.tt
233
+ - lib/bundler/templates/newgem/test/newgem_test.rb.tt
234
+ - lib/bundler/templates/newgem/test/test_helper.rb.tt
229
235
  - lib/bundler/ui.rb
230
236
  - lib/bundler/ui/rg_proxy.rb
231
237
  - lib/bundler/ui/shell.rb
@@ -309,9 +315,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
309
315
  version: 1.3.6
310
316
  requirements: []
311
317
  rubyforge_project:
312
- rubygems_version: 2.4.8
318
+ rubygems_version: 2.4.5
313
319
  signing_key:
314
320
  specification_version: 4
315
321
  summary: The best way to manage your application's dependencies
316
322
  test_files: []
317
- has_rdoc:
@@ -1,103 +0,0 @@
1
- ## Bundler 0.9 to 1.0 and above
2
-
3
- Upgrading from Bundler 0.9 to 1.0 is relatively painless. The
4
- Gemfile API is the same, so your old Gemfiles should continue
5
- to work.
6
-
7
- The "env" file that 0.9 created at `.bundle/environment.rb` has been
8
- removed. As a side effect of this, Passenger will only find your
9
- bundled gems if you install with `bundle install --deployment`.
10
- Alternatively, you can tell Passenger where you gems are installed,
11
- [something like this](http://andre.arko.net/2010/08/16/using-passengerpane-with-gem_home-set/).
12
-
13
- The `bundle lock` command is no longer needed, as the
14
- Gemfile.lock file is now automatically generated by `bundle install`.
15
- If you have not yet done so, add your Gemfile.lock to source control
16
- and check it in.
17
-
18
- Running `bundle install` no longer updates the versions of your gems.
19
- If you need to update just one gem, run `bundle update GEMNAME`. To
20
- update all gems to the newest versions possible, run `bundle update`.
21
-
22
- Bundler now supports multiple platforms, using a block syntax to
23
- declare platform-specific gems:
24
-
25
- platform :jruby do
26
- gem "jruby-maven-plugins"
27
- end
28
-
29
- Deploying using Bundler is even easier than it was before, as Bundler
30
- now includes a Capistrano recipe. Simply add this line to the top of
31
- your deploy.rb file to run Bundler automatically as part of deploying:
32
-
33
- require 'bundler/capistrano'
34
-
35
- For more details on deploying using bundler, see the documentation
36
- for the bundler cap task, and the [documentation on deploying](http://bundler.io/deploying.html).
37
-
38
-
39
- ## Bundler 0.8 to 0.9 and above
40
-
41
- Upgrading to Bundler 0.9 from Bundler 0.8 requires upgrading several
42
- API calls in your Gemfile, and some workarounds if you are using Rails 2.3.
43
-
44
- ### Gemfile Removals
45
-
46
- Bundler 0.9 removes the following Bundler 0.8 Gemfile APIs:
47
-
48
- 1. `disable_system_gems`: This is now the default (and only) option
49
- for bundler. Bundler uses the system gems you have specified
50
- in the Gemfile, and only the system gems you have specified
51
- (and their dependencies)
52
- 2. `disable_rubygems`: This is no longer supported. We are looking
53
- into ways to get the fastest performance out of each supported
54
- scenario, and we will make speed the default where possible.
55
- 3. `clear_sources`: Bundler now defaults to an empty source
56
- list. If you want to include Rubygems, you can add the source
57
- via source "http://gemcutter.org". If you use bundle init, this
58
- source will be automatically added for you in the generated
59
- Gemfile
60
- 4. `bundle_path`: You can specify this setting when installing
61
- via `bundle install /path/to/bundle`. Bundler will remember
62
- where you installed the dependencies to on a particular
63
- machine for future installs, loads, setups, etc.
64
- 5. `bin_path`: Bundler no longer generates executables in the root
65
- of your app. You should use `bundle exec` to execute executables
66
- in the current context.
67
-
68
- ### Gemfile Changes
69
-
70
- Bundler 0.9 changes the following Bundler 0.8 Gemfile APIs:
71
-
72
- 1. Bundler 0.8 supported :only and :except as APIs for describing
73
- groups of gems. Bundler 0.9 supports a single `group` method,
74
- which you can use to group gems together. See the above "Group"
75
- section for more information.
76
-
77
- This means that `gem "foo", :only => :production` becomes
78
- `gem "foo", :group => :production`, and
79
- `only :production { gem "foo" }` becomes
80
- `group :production { gem "foo" }`
81
-
82
- The short version is: group your gems together logically, and
83
- use the available commands to make use of the groups you've
84
- created.
85
-
86
- 2. `:require_as` becomes `:require`
87
-
88
- 3. `:vendored_at` is fully removed; you should use `:path`
89
-
90
- ### API Changes
91
-
92
- 1. `Bundler.require_env(:environment)` becomes
93
- `Bundler.require(:multiple, :groups)`. You must
94
- now specify the default group (the default group is the
95
- group made up of the gems not assigned to any group)
96
- explicitly. So `Bundler.require_env(:test)` becomes
97
- `Bundler.require(:default, :test)`
98
-
99
- 2. `require 'vendor/gems/environment'`: In unlocked
100
- mode, where using system gems, this becomes
101
- `Bundler.setup(:multiple, :groups)`. If you don't
102
- specify any groups, this puts all groups on the load
103
- path. In locked mode, it becomes `require '.bundle/environment'`