diff options
author | Bundlerbot <bot@bundler.io> | 2019-11-06 00:46:53 +0000 |
---|---|---|
committer | Bundlerbot <bot@bundler.io> | 2019-11-06 00:46:53 +0000 |
commit | a7cc4ec87f17e549a1f0fb9063c53a76889426d6 (patch) | |
tree | 0762aa10c44a2c6c622d387301950d75eb87e811 /lib/bundler.rb | |
parent | bf7df421ee6311fcc17e6dc46d204236f33b4b3f (diff) | |
parent | 9e0641e588ea02456b5b7bdf9bbde0436f8a56f2 (diff) | |
download | bundler-a7cc4ec87f17e549a1f0fb9063c53a76889426d6.tar.gz |
Merge #7394
7394: Add inline RDoc documentation r=hsbt a=zverok
Since Bundler became part of the standard library, it renders in Ruby's docs. Unfortunately, what renders there... is not really helpful: https://docs.ruby-lang.org/en/master/Bundler.html
I've added rudimentary documentation for `Bundler` module and two of its most user-facing methods to solve this problem at least partially.
Co-authored-by: zverok <zverok.offline@gmail.com>
Diffstat (limited to 'lib/bundler.rb')
-rw-r--r-- | lib/bundler.rb | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/lib/bundler.rb b/lib/bundler.rb index 2ada6fe789..809771a168 100644 --- a/lib/bundler.rb +++ b/lib/bundler.rb @@ -14,6 +14,25 @@ require_relative "bundler/constants" require_relative "bundler/current_ruby" require_relative "bundler/build_metadata" +# Bundler provides a consistent environment for Ruby projects by +# tracking and installing the exact gems and versions that are needed. +# +# Since Ruby 2.6, Bundler is a part of Ruby's standard library. +# +# Bunder is used by creating _gemfiles_ listing all the project dependencies +# and (optionally) their versions and then using +# +# require 'bundler/setup' +# +# or Bundler.setup to setup environment where only specified gems and their +# specified versions could be used. +# +# See {Bundler website}[https://bundler.io/docs.html] for extensive documentation +# on gemfiles creation and Bundler usage. +# +# As a standard library inside project, Bundler could be used for introspection +# of loaded and required modules. +# module Bundler environment_preserver = EnvironmentPreserver.new(ENV, EnvironmentPreserver::BUNDLER_KEYS) ORIGINAL_ENV = environment_preserver.restore @@ -91,6 +110,33 @@ module Bundler end end + # Turns on the Bundler runtime. After +Bundler.setup+ call, all +load+ or + # +require+ of the gems would be allowed only if they are part of + # the Gemfile or Ruby's standard library. If the versions specified + # in Gemfile, only those versions would be loaded. + # + # Assuming Gemfile + # + # gem 'first_gem', '= 1.0' + # group :test do + # gem 'second_gem', '= 1.0' + # end + # + # The code using Bundler.setup works as follows: + # + # require 'third_gem' # allowed, required from global gems + # require 'first_gem' # allowed, loads the last installed version + # Bundler.setup + # require 'fourth_gem' # fails with LoadError + # require 'second_gem' # loads exactly version 1.0 + # + # +Bundler.setup+ can be called only once, all subsequent calls are no-op. + # + # If _groups_ list is provided, only gems from specified groups would + # be allowed (gems specified outside groups belong to special +:default+ group). + # + # To require all gems from Gemfile (or only some groups), see Bundler.require. + # def setup(*groups) # Return if all groups are already loaded return @setup if defined?(@setup) && @setup @@ -107,6 +153,24 @@ module Bundler end end + # Setups Bundler environment (see Bundler.setup) if it is not already set, + # and loads all gems from groups specified. Unlike ::setup, can be called + # multiple times with different groups (if they were allowed by setup). + # + # Assuming Gemfile + # + # gem 'first_gem', '= 1.0' + # group :test do + # gem 'second_gem', '= 1.0' + # end + # + # The code will work as follows: + # + # Bundler.setup # allow all groups + # Bundler.require(:default) # requires only first_gem + # # ...later + # Bundler.require(:test) # requires second_gem + # def require(*groups) setup(*groups).require(*groups) end |