Class: Spud::BuildTools::Spud::Task
- Defined in:
- lib/spud/build_tools/spud/task.rb
Instance Attribute Summary
Attributes inherited from Task
Class Method Summary collapse
- .add_task(task, &block) ⇒ void
- .file_dsl ⇒ Spud::DSL::File
- .invoke(filename, task, positional, named) ⇒ Object
- .mount! ⇒ void
- .qualified_name(filename, task) ⇒ Object
- .qualified_prefix(filename) ⇒ String
- .task_for(filename, task) ⇒ Object
Instance Method Summary collapse
- #args ⇒ Spud::TaskArgs
-
#initialize(name:, filename:, &block) ⇒ Task
constructor
A new instance of Task.
- #invoke(positional, named) ⇒ Object
Constructor Details
#initialize(name:, filename:, &block) ⇒ Task
Returns a new instance of Task.
74 75 76 77 |
# File 'lib/spud/build_tools/spud/task.rb', line 74 def initialize(name:, filename:, &block) super @block = block end |
Class Method Details
.add_task(task, &block) ⇒ void
This method returns an undefined value.
30 31 32 33 34 |
# File 'lib/spud/build_tools/spud/task.rb', line 30 def self.add_task(task, &block) raise "task '#{task}' somehow created without filename" unless @filename new(name: qualified_name(@filename, task.to_s), filename: @filename, &block) end |
.file_dsl ⇒ Spud::DSL::File
23 24 25 |
# File 'lib/spud/build_tools/spud/task.rb', line 23 def self.file_dsl @file_dsl ||= DSL::File.new end |
.invoke(filename, task, positional, named) ⇒ Object
40 41 42 43 44 45 46 47 48 |
# File 'lib/spud/build_tools/spud/task.rb', line 40 def self.invoke(filename, task, positional, named) task = task.to_s task_obj = task_for(filename, task) if task_obj Runtime.invoke(task_obj.name, positional, named) else Runtime.invoke(task, positional, named) end end |
.mount! ⇒ void
This method returns an undefined value.
13 14 15 16 17 18 19 20 |
# File 'lib/spud/build_tools/spud/task.rb', line 13 def self.mount! Dir['**/Spudfile', '**/*.spud'].each do |filename| @filename = filename file_dsl.instance_eval(File.read(filename), filename) end @filename = nil end |
.qualified_name(filename, task) ⇒ Object
56 57 58 59 60 |
# File 'lib/spud/build_tools/spud/task.rb', line 56 def self.qualified_name(filename, task) raise "task '#{task}' somehow created without filename" unless filename [qualified_prefix(filename), task.to_s].join('.').gsub(/^\./, '') end |
.qualified_prefix(filename) ⇒ String
64 65 66 67 68 69 70 71 72 |
# File 'lib/spud/build_tools/spud/task.rb', line 64 def self.qualified_prefix(filename) dirname = File.dirname(filename) dirname = '' if dirname == '.' basename = File.basename(filename, '.spud') basename_array = basename == 'Spudfile' ? [] : [basename] (dirname.split('/') + basename_array).join('.') end |
.task_for(filename, task) ⇒ Object
52 53 54 |
# File 'lib/spud/build_tools/spud/task.rb', line 52 def self.task_for(filename, task) Runtime.tasks[qualified_name(filename, task.to_s)] end |
Instance Method Details
#args ⇒ Spud::TaskArgs
93 94 95 |
# File 'lib/spud/build_tools/spud/task.rb', line 93 def args @args ||= ::Spud::TaskArgs.from_block(filename, &@block) end |
#invoke(positional, named) ⇒ Object
82 83 84 85 86 87 88 89 90 |
# File 'lib/spud/build_tools/spud/task.rb', line 82 def invoke(positional, named) check_required!(positional) return task_dsl.instance_exec(*positional, &@block) unless args.any_named? task_dsl.instance_exec(*positional, **symbolize_keys(named), &@block) rescue ArgumentError => error raise Error, "invocation of '#{name}' with #{error.message}" end |