Sha256: 4d0729e4cfde3ca2339c9197495fd2066598ec944aa728ae55b67c1eb702c557

Contents?: true

Size: 1.24 KB

Versions: 6

Compression:

Stored size: 1.24 KB

Contents

module Capsaicin

  module Namespace
    
    # Redefine settings for the duration of an existing task.
    def task_settings(task, vars)
      orig_vars = vars.keys.select { |k| exists? k }.inject({}) { |h,k| h[k] = variables[k]; h }
      orig_body = tasks[task].body
      tasks[task].instance_variable_set(:@body, lambda do
        vars.each { |k,v| Proc===v ? set(k, &v) : set(k, v) }
        begin
          orig_body.call
        ensure
	        vars.keys.each do |k|
            if ! orig_vars.include? k
              variables.delete k
            else
              v = orig_vars[k]
              Proc===v ? set(k, &v) : set(k, v)
            end
          end
        end
      end)
    end

	  # Undefine tasks in a namespace.
	  def undef_tasks(name, list)
	    namespace name do
	      metaclass = class << self; self; end
	      list.each do |k|
	        k = k.to_sym  
	        metaclass.send(:undef_method, k)
	        tasks.delete k
	      end
	    end
	  end
	
	  # Override tasks in a namespace to a NOOP.
	  def noop_tasks(name, list)
	    namespace name do
	      metaclass = class << self; self; end
	      list.each do |k|
	        tasks[k.to_sym].instance_variable_set(:@body, lambda {})
	      end
	    end
	  end
	end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
joekhoobyar-capsaicin-0.1.7 lib/capsaicin/namespace.rb
capsaicin-0.1.11 lib/capsaicin/namespace.rb
capsaicin-0.1.10 lib/capsaicin/namespace.rb
capsaicin-0.1.9 lib/capsaicin/namespace.rb
capsaicin-0.1.8 lib/capsaicin/namespace.rb
capsaicin-0.1.7 lib/capsaicin/namespace.rb