module Capistrano::ImmutableTask

This module extends a Rake::Task to freeze it to prevent it from being enhanced. This is used to prevent users from enhancing a task at the wrong point of Capistrano’s boot process, which can happen if a Capistrano plugin is loaded in deploy.rb by mistake (instead of in the Capfile).

Usage:

task = Rake.application task.invoke task.extend(Capistrano::ImmutableTask) # prevent further modifications

Public Class Methods

extended(task) click to toggle source
# File lib/capistrano/immutable_task.rb, line 14
def self.extended(task)
  task.freeze
end

Public Instance Methods

enhance(*args, &block) click to toggle source
Calls superclass method
# File lib/capistrano/immutable_task.rb, line 18
    def enhance(*args, &block)
      $stderr.puts <<-MESSAGE
ERROR: #{name} has already been invoked and can no longer be modified.
Check that you haven't loaded a Capistrano plugin in deploy.rb or a stage
(e.g. deploy/production.rb) by mistake.
Plugins must be loaded in the Capfile to initialize properly.
MESSAGE

      # This will raise a frozen object error
      super(*args, &block)
    end