Class: LibStorj::ArgForwardingTask

Inherits:
Object
  • Object
show all
Includes:
Rake::DSL
Defined in:
lib/ruby-libstorj/arg_forwarding_task.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(target_name, alias_names: [nil], args_deps_hash:, &block) ⇒ ArgForwardingTask

Returns a new instance of ArgForwardingTask.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/ruby-libstorj/arg_forwarding_task.rb', line 13

def initialize(target_name, alias_names: [nil], args_deps_hash:, &block)
  @alias_tasks = {}
  @target_task = nil


  if alias_names.nil? || alias_names.empty? || alias_names.reject {|t| !t}.empty?
    unless block
      throw ArgumentError.new 'either a block or at least one alias is required for `ArgFowardingTask.new`'
    end

    block_wrapper = Proc.new do |task, args|
      deps = args_deps_hash.values.flatten
      yield task, args, deps
    end

    # if no aliases, just register the target
    #
    #:call-seq:
    #      ... v-- We're using this signature --v
    #      Rake::Task.define_task task_name, arguments => dependencies
    #(see https://github.com/ruby/rake/blob/68ef9140c11d083d8bb7ee5da5b0543e3a7df73d/lib/rake/dsl_definition.rb#L28)
    @target_task = task(target_name, args_deps_hash, &block_wrapper)
  else
    if block_given?
      block_wrapper = Proc.new do |task, args|
        deps = args_deps_hash.values.flatten
        yield task, args, deps
      end

      @target_task = task(target_name, args_deps_hash, &block_wrapper)
    else
      @target_task = task(target_name, args_deps_hash)
    end
    alias_names.flatten.each do |task_name|
      @alias_tasks[task_name] = task(task_name, args_deps_hash) do |t, args|
        @target_task.invoke(*args.to_a)
      end
    end
  end
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object



54
55
56
# File 'lib/ruby-libstorj/arg_forwarding_task.rb', line 54

def method_missing(name, *args, &block)
  @target_task.method(name).call(*args, &block)
end

Instance Attribute Details

#alias_tasksObject (readonly)

Returns the value of attribute alias_tasks.



11
12
13
# File 'lib/ruby-libstorj/arg_forwarding_task.rb', line 11

def alias_tasks
  @alias_tasks
end

#target_taskObject (readonly)

Returns the value of attribute target_task.



10
11
12
# File 'lib/ruby-libstorj/arg_forwarding_task.rb', line 10

def target_task
  @target_task
end