123456789_123456789_123456789_123456789_123456789_

Class: Bundler::Plugin::DSL

Relationships & Source Files
Namespace Children
Exceptions:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: Bundler::Dsl
Defined in: lib/bundler/plugin/dsl.rb

Overview

::Bundler::Dsl to parse the Gemfile looking for plugins to install

Constant Summary

::Bundler::Dsl - Inherited

VALID_KEYS, VALID_PLATFORMS

Class Method Summary

::Bundler::Dsl - Inherited

Instance Attribute Summary

  • #inferred_plugins readonly

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

::Bundler::Dsl - Inherited

Instance Method Summary

Constructor Details

.newDSL

[ GitHub ]

  
# File 'lib/bundler/plugin/dsl.rb', line 25

def initialize
  super
  @sources = Plugin::SourceList.new
  @inferred_plugins = [] # The source plugins inferred from :type
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args)

Raises:

[ GitHub ]

  
# 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

Instance Attribute Details

#inferred_plugins (readonly)

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.

[ GitHub ]

  
# File 'lib/bundler/plugin/dsl.rb', line 23

attr_reader :inferred_plugins

Instance Method Details

#_gem(name, *args)

Alias for Dsl#gem.

[ GitHub ]

  
# File 'lib/bundler/plugin/dsl.rb', line 8

alias_method :_gem, :gem # To use for plugin installation as gem

#plugin(name, *args)

[ GitHub ]

  
# File 'lib/bundler/plugin/dsl.rb', line 31

def plugin(name, *args)
  _gem(name, *args)
end

#source(source, *args, &blk)

[ GitHub ]

  
# 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