Class: Spud::TaskRunners::SpudTaskRunner::Task
- Extended by:
- T::Sig
- Defined in:
- lib/spud/task_runners/spud_task_runner/task.rb
Instance Attribute Summary collapse
-
#filename ⇒ Object
readonly
Returns the value of attribute filename.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Class Method Summary collapse
Instance Method Summary collapse
- #args ⇒ Object
- #details ⇒ Object
-
#initialize(driver:, name:, filename:, dependencies:, &block) ⇒ Task
constructor
A new instance of Task.
- #invoke(ordered, named) ⇒ Object
Constructor Details
#initialize(driver:, name:, filename:, dependencies:, &block) ⇒ Task
Returns a new instance of Task.
53 54 55 56 57 58 59 |
# File 'lib/spud/task_runners/spud_task_runner/task.rb', line 53 def initialize(driver:, name:, filename:, dependencies:, &block) @driver = driver @name = name @filename = filename @dependencies = dependencies.map { |to, from| Dependency.new(to, from) } @block = block end |
Instance Attribute Details
#filename ⇒ Object (readonly)
Returns the value of attribute filename.
20 21 22 |
# File 'lib/spud/task_runners/spud_task_runner/task.rb', line 20 def filename @filename end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
23 24 25 |
# File 'lib/spud/task_runners/spud_task_runner/task.rb', line 23 def name @name end |
Class Method Details
.qualified_name(filename, name) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/spud/task_runners/spud_task_runner/task.rb', line 31 def self.qualified_name(filename, name) segments = File.dirname(filename) .split('/') .reject { |segment| segment == '.' } basename = File.basename(filename, '.spud') segments << basename unless basename == 'Spudfile' segments << name segments.join('.') end |
.tasks(driver) ⇒ Object
26 27 28 |
# File 'lib/spud/task_runners/spud_task_runner/task.rb', line 26 def self.tasks(driver) Dir['**/Spudfile', '**/*.spud'].flat_map { |filename| FileDSL.run(driver, filename) } end |
Instance Method Details
#args ⇒ Object
80 81 82 |
# File 'lib/spud/task_runners/spud_task_runner/task.rb', line 80 def args @args ||= TaskArgs.from_block(filename, &@block) end |
#details ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/spud/task_runners/spud_task_runner/task.rb', line 85 def details filename, line_cursor = @block.source_location line_cursor -= 1 lines = File.read(filename).split("\n") builder = StringIO.new # Move up for comments while lines[line_cursor - 1]&.start_with?('#') line_cursor -= 1 end # Capture comments while lines[line_cursor]&.start_with?('#') builder.puts lines[line_cursor] line_cursor += 1 end # Capture block until lines[line_cursor - 1]&.start_with?('end') builder.puts lines[line_cursor] line_cursor += 1 end builder.string end |
#invoke(ordered, named) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/spud/task_runners/spud_task_runner/task.rb', line 62 def invoke(ordered, named) if up_to_date? puts "'#{name}' up to date" return nil end check_required_args!(ordered) if args.any_named? T.unsafe(task_dsl).instance_exec(*ordered, **symbolize_keys(named), &@block) else T.unsafe(task_dsl).instance_exec(*ordered, &@block) end rescue ArgumentError => error raise Error, "invocation of '#{name}' with #{error.message}" end |