Sha256: e69dbf4f6a17b38a7c415c7a2917b0eb513d1a9f9bc83609370628dbc7a4e66a

Contents?: true

Size: 693 Bytes

Versions: 4

Compression:

Stored size: 693 Bytes

Contents

# Module extension for defining prequisite tasks.

module Taskable

  # Define or call a task.

  def task n, &block
    case n
    when Hash
      name, preq = *n.to_a[0]
    else
      name, preq = n, []
    end

    task_name = "#{name}:task"

    define_method(task_name) do |cache,*args|
      cache ||= {}
      return cache[name] if cache.key?(name)
      preq.each do |q|
        send("#{q}:task",cache,*args)
      end
      cache[name] = block.call(*args)
    end

    private task_name
  end

  def call_target(name,*a)
    send("#{name}:task",nil,*a)
  end

  #def cache
  #  @taskable_cache ||= {}
  #end

  #def function s, &b
  #  define_method s, &b
  #  private s
  #end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ratch-0.2.1 dev/taskable-simple.rb
ratch-0.2.2 dev/taskable-simple.rb
ratch-0.3.0 work/scrap/taskable-simple.rb
ratch-0.1 dev/taskable-simple.rb