class Spud::TaskRunners::SpudTaskRunner::Task
Attributes
dependencies[R]
filename[R]
name[R]
source[R]
watches[R]
Public Class Methods
new(driver:, name:, filename:, dependencies:, watches:, file_dsl:, &block)
click to toggle source
# File lib/spud/task_runners/spud_task_runner/task.rb, line 61 def initialize(driver:, name:, filename:, dependencies:, watches:, file_dsl:, &block) @driver = driver @name = name @filename = filename @watches = watches @dependencies = dependencies.map { |to, from| Dependency.new(to, from) } @file_dsl = file_dsl @block = block end
qualified_name(filename, name)
click to toggle source
# File lib/spud/task_runners/spud_task_runner/task.rb, line 38 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)
click to toggle source
# File lib/spud/task_runners/spud_task_runner/task.rb, line 33 def self.tasks(driver) Dir['Spudfile', '*.spud'].flat_map { |filename| FileDSL.run(driver, filename) } end
Public Instance Methods
args()
click to toggle source
# File lib/spud/task_runners/spud_task_runner/task.rb, line 91 def args @args ||= TaskArgs.from_block(filename, &@block) end
details()
click to toggle source
# File lib/spud/task_runners/spud_task_runner/task.rb, line 96 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)
click to toggle source
# File lib/spud/task_runners/spud_task_runner/task.rb, line 72 def invoke(ordered, named) if up_to_date? raise Error, "'#{name}' up to date" end check_required_args!(ordered) catch :halt do 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 end rescue ArgumentError => error raise Error, "invocation of '#{name}' with #{error.message}" end
Private Instance Methods
check_required_args!(ordered)
click to toggle source
# File lib/spud/task_runners/spud_task_runner/task.rb, line 126 def check_required_args!(ordered) required_ordered = args.required_ordered missing_ordered = required_ordered.length - ordered.length if missing_ordered > 0 arguments = required_ordered.length - missing_ordered > 1 ? 'arguments' : 'argument' raise Error, "invocation of '#{name}' missing required #{arguments} #{required_ordered.join(', ')}" end end
symbolize_keys(hash)
click to toggle source
# File lib/spud/task_runners/spud_task_runner/task.rb, line 148 def symbolize_keys(hash) hash.each_with_object({}) { |(key, value), new_hash| new_hash[key.to_sym] = value } end
task_dsl()
click to toggle source
# File lib/spud/task_runners/spud_task_runner/task.rb, line 143 def task_dsl @task_dsl ||= TaskDSL.new(@driver, @filename, @file_dsl) end
up_to_date?()
click to toggle source
# File lib/spud/task_runners/spud_task_runner/task.rb, line 136 def up_to_date? return false if @dependencies.empty? @dependencies.all?(&:up_to_date?) end