Top Level Namespace
- Includes:
- Rake::DSL
Defined Under Namespace
Instance Method Summary collapse
-
#gemfile(force_latest_compatible = false, options = {}, &gemfile) ⇒ Object
Allows for declaring a Gemfile inline in a ruby script, installing any gems that aren’t already installed on the user’s system.
Instance Method Details
#gemfile(force_latest_compatible = 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, installing any gems that aren’t already installed on the user’s system.
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 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/bundler/inline.rb', line 36 def gemfile(force_latest_compatible = false, = {}, &gemfile) require_relative "../bundler" Bundler.reset! opts = .dup ui = opts.delete(:ui) { Bundler::UI::Shell.new } ui.level = "silent" if opts.delete(:quiet) || !force_latest_compatible Bundler.ui = ui raise ArgumentError, "Unknown options: #{opts.keys.join(", ")}" unless opts.empty? old_gemfile = ENV["BUNDLE_GEMFILE"] Bundler.unbundle_env! begin Bundler.instance_variable_set(:@bundle_path, Pathname.new(Gem.dir)) 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) Bundler.settings.temporary(deployment: false, frozen: false) do definition = builder.to_definition(nil, true) definition.validate_runtime! if force_latest_compatible || definition.missing_specs? Bundler.settings.temporary(inline: true, no_install: false) 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 begin runtime = Bundler::Runtime.new(nil, definition).setup rescue Gem::LoadError => e name = e.name version = e.requirement.requirements.first[1] activated_version = Gem.loaded_specs[name].version Bundler.ui.info \ "The #{name} gem was resolved to #{version}, but #{activated_version} was activated by Bundler while installing it, causing a conflict. " \ "Bundler will now retry resolving with #{activated_version} instead." builder.dependencies.delete_if {|d| d.name == name } builder.instance_eval { gem name, activated_version } definition = builder.to_definition(nil, true) retry end runtime.require end ensure if old_gemfile ENV["BUNDLE_GEMFILE"] = old_gemfile else ENV["BUNDLE_GEMFILE"] = "" end end end |