Top Level Namespace
- Includes:
- Rake::DSL
Defined Under Namespace
Instance Method Summary collapse
-
#gemfile(install = false, options = {}, &gemfile) ⇒ Object
Allows for declaring a Gemfile inline in a ruby script, optionally installing any gems that aren’t already installed on the user’s system.
Instance Method Details
#gemfile(install = false, options = {}, &gemfile) ⇒ Object
Note:
Every gem that is specified in this ‘Gemfile’ will be ‘require`d, as if the user had manually called `Bundler.require`. To avoid a requested gem being automatically required, add the `:require => false` option to the `gem` dependency declaration.
Allows for declaring a Gemfile inline in a ruby script, optionally installing any gems that aren’t already installed on the user’s system.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/bundler/inline.rb', line 32 def gemfile(install = false, = {}, &gemfile) require_relative "../bundler" opts = .dup ui = opts.delete(:ui) { Bundler::UI::Shell.new } ui.level = "silent" if opts.delete(:quiet) raise ArgumentError, "Unknown options: #{opts.keys.join(", ")}" unless opts.empty? begin old_root = Bundler.method(:root) bundler_module = class << Bundler; self; end bundler_module.send(:remove_method, :root) def Bundler.root Bundler::SharedHelpers.pwd. end old_gemfile = ENV["BUNDLE_GEMFILE"] Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", "Gemfile" Bundler::Plugin.gemfile_install(&gemfile) if Bundler.feature_flag.plugins? builder = Bundler::Dsl.new builder.instance_eval(&gemfile) builder.check_primary_source_safety Bundler.settings.temporary(:deployment => false, :frozen => false) do definition = builder.to_definition(nil, true) def definition.lock(*); end definition.validate_runtime! Bundler.ui = install ? ui : Bundler::UI::Silent.new if install || definition.missing_specs? Bundler.settings.temporary(:inline => true) do installer = Bundler::Installer.install(Bundler.root, definition, :system => true) installer..each do |name, | Bundler.ui.info "Post-install message from #{name}:\n#{}" end end end runtime = Bundler::Runtime.new(nil, definition) runtime.setup.require end ensure if bundler_module bundler_module.send(:remove_method, :root) bundler_module.send(:define_method, :root, old_root) end if old_gemfile ENV["BUNDLE_GEMFILE"] = old_gemfile else ENV["BUNDLE_GEMFILE"] = "" end end end |