Sha256: dae71789261c1c491889cbf2ace42d8368c6be6090fc054f5b6aa3ac69e68c92

Contents?: true

Size: 1.67 KB

Versions: 9

Compression:

Stored size: 1.67 KB

Contents

module Capistrano
  class ExtensionProxy #:nodoc:
    def initialize(config, mod)
      @config = config
      extend(mod)
    end

    def method_missing(sym, *args, &block)
      @config.send(sym, *args, &block)
    end
  end

  # Holds the set of registered plugins, keyed by name (where the name is a
  # symbol).
  EXTENSIONS = {}

  # Register the given module as a plugin with the given name. It will henceforth
  # be available via a proxy object on Configuration instances, accessible by
  # a method with the given name.
  def self.plugin(name, mod)
    name = name.to_sym
    return false if EXTENSIONS.has_key?(name)

    methods = Capistrano::Configuration.public_instance_methods +
      Capistrano::Configuration.protected_instance_methods +
      Capistrano::Configuration.private_instance_methods

    if methods.include?(name.to_s)
      raise Capistrano::Error, "registering a plugin named `#{name}' would shadow a method on Capistrano::Configuration with the same name"
    end

    Capistrano::Configuration.class_eval <<-STR, __FILE__, __LINE__+1
      def #{name}
        @__#{name}_proxy ||= Capistrano::ExtensionProxy.new(self, Capistrano::EXTENSIONS[#{name.inspect}])
      end
    STR

    EXTENSIONS[name] = mod
    return true
  end

  # Unregister the plugin with the given name.
  def self.remove_plugin(name)
    name = name.to_sym
    if EXTENSIONS.delete(name)
      Capistrano::Configuration.send(:remove_method, name)
      return true
    end

    return false
  end

  def self.configuration(*args) #:nodoc:
    warn "[DEPRECATION] Capistrano.configuration is deprecated. Use Capistrano::Configuration.instance instead"
    Capistrano::Configuration.instance(*args)
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
capistrano-2.0.0 lib/capistrano/extensions.rb
capistrano-2.1.0 lib/capistrano/extensions.rb
capistrano-2.4.3 lib/capistrano/extensions.rb
capistrano-2.2.0 lib/capistrano/extensions.rb
capistrano-2.4.0 lib/capistrano/extensions.rb
capistrano-2.4.2 lib/capistrano/extensions.rb
capistrano-2.3.0 lib/capistrano/extensions.rb
capistrano-2.4.1 lib/capistrano/extensions.rb
capistrano-2.5.0 lib/capistrano/extensions.rb