Class: Spud::BuildTools::Spud::Task

Inherits:
Task
  • Object
show all
Defined in:
lib/spud/build_tools/spud/task.rb

Instance Attribute Summary

Attributes inherited from Task

#filename, #name

Class Method Summary collapse

Instance Method Summary collapse

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.

Parameters:

  • task (String)
  • block (Proc)


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_dslSpud::DSL::File

Returns:



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

Parameters:

  • filename (String)
  • task (String)
  • positional (Array)
  • named (Hash)


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

Parameters:

  • filename (String)

Returns:

  • (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

Parameters:

  • filename (String)
  • task (String)


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

#argsSpud::TaskArgs

Returns:



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

Parameters:

  • positional (Array)
  • named (Hash)

Returns:

  • (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