Class: LibStorj::ArgForwardingTask
- Inherits:
-
Object
- Object
- LibStorj::ArgForwardingTask
- Includes:
- Rake::DSL
- Defined in:
- lib/ruby-libstorj/arg_forwarding_task.rb
Instance Attribute Summary collapse
-
#alias_tasks ⇒ Object
readonly
Returns the value of attribute alias_tasks.
-
#target_task ⇒ Object
readonly
Returns the value of attribute target_task.
Instance Method Summary collapse
-
#initialize(target_name, alias_names: [nil], args_deps_hash:, &block) ⇒ ArgForwardingTask
constructor
A new instance of ArgForwardingTask.
- #method_missing(name, *args, &block) ⇒ Object
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_tasks ⇒ Object (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_task ⇒ Object (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 |