class Bundler::Plugin::DSL

Dsl to parse the Gemfile looking for plugins to install

Attributes

inferred_plugins[R]

This lists the plugins that was added automatically and not specified by the user.

When we encounter :type attribute with a source block, we add a plugin by name bundler-source-<type> to list of plugins to be installed.

These plugins are optional and are not installed when there is conflict with any other plugin.

Public Class Methods

new() click to toggle source
Calls superclass method Bundler::Dsl.new
# File lib/bundler/plugin/dsl.rb, line 25
def initialize
  super
  @sources = Plugin::SourceList.new
  @inferred_plugins = [] # The source plugins inferred from :type
end

Public Instance Methods

method_missing(name, *args) click to toggle source
# File lib/bundler/plugin/dsl.rb, line 35
def method_missing(name, *args)
  raise PluginGemfileError, "Undefined local variable or method `#{name}' for Gemfile" unless Bundler::Dsl.method_defined? name
end
plugin(name, *args) click to toggle source
# File lib/bundler/plugin/dsl.rb, line 31
def plugin(name, *args)
  _gem(name, *args)
end
source(source, *args, &blk) click to toggle source
Calls superclass method Bundler::Dsl#source
# File lib/bundler/plugin/dsl.rb, line 39
  def source(source, *args, &blk)
    options = args.last.is_a?(Hash) ? args.pop.dup : {}
    options = normalize_hash(options)
    return super unless options.key?("type")

    plugin_name = "bundler-source-#{options["type"]}"

    return if @dependencies.any? {|d| d.name == plugin_name }

    plugin(plugin_name)
    @inferred_plugins << plugin_name
  end
end