spud 0.2.0 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/spud.rb +3 -2
- data/lib/spud/block_param_info.rb +80 -0
- data/lib/spud/cli/options.rb +35 -0
- data/lib/spud/cli/parser.rb +23 -19
- data/lib/spud/cli/results.rb +18 -11
- data/lib/spud/driver.rb +135 -0
- data/lib/spud/error.rb +1 -0
- data/lib/spud/help.rb +13 -13
- data/lib/spud/lister.rb +27 -22
- data/lib/spud/shell/command.rb +75 -0
- data/lib/spud/shell/result.rb +33 -0
- data/lib/spud/task_arg.rb +24 -12
- data/lib/spud/task_args.rb +20 -18
- data/lib/spud/task_runners/make/task.rb +67 -0
- data/lib/spud/task_runners/package.json/task.rb +71 -0
- data/lib/spud/task_runners/spud_task_runner/dependency.rb +49 -0
- data/lib/spud/task_runners/spud_task_runner/file_dsl.rb +57 -0
- data/lib/spud/task_runners/spud_task_runner/task.rb +148 -0
- data/lib/spud/task_runners/spud_task_runner/task_dsl.rb +90 -0
- data/lib/spud/task_runners/task.rb +40 -0
- data/lib/spud/task_runners/task_runners.rb +25 -0
- data/lib/spud/version.rb +2 -1
- data/lib/spud/watch.rb +73 -0
- metadata +46 -16
- data/lib/spud/build_tools/build_tools.rb +0 -13
- data/lib/spud/build_tools/make/task.rb +0 -27
- data/lib/spud/build_tools/package.json/task.rb +0 -47
- data/lib/spud/build_tools/spud/block_param_info.rb +0 -77
- data/lib/spud/build_tools/spud/dsl/file.rb +0 -23
- data/lib/spud/build_tools/spud/dsl/task.rb +0 -63
- data/lib/spud/build_tools/spud/shell/command.rb +0 -52
- data/lib/spud/build_tools/spud/shell/result.rb +0 -26
- data/lib/spud/build_tools/spud/task.rb +0 -125
- data/lib/spud/build_tools/task.rb +0 -33
- data/lib/spud/options.rb +0 -14
- data/lib/spud/runtime.rb +0 -104
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Booth
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-11-
|
11
|
+
date: 2020-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '11.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: sorbet
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.5.6100
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.5.6100
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: sorbet-runtime
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.5.6100
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.5.6100
|
55
83
|
description:
|
56
84
|
email: andrew@andrewbooth.xyz
|
57
85
|
executables:
|
@@ -61,26 +89,28 @@ extra_rdoc_files: []
|
|
61
89
|
files:
|
62
90
|
- bin/spud
|
63
91
|
- lib/spud.rb
|
64
|
-
- lib/spud/
|
65
|
-
- lib/spud/
|
66
|
-
- lib/spud/build_tools/package.json/task.rb
|
67
|
-
- lib/spud/build_tools/spud/block_param_info.rb
|
68
|
-
- lib/spud/build_tools/spud/dsl/file.rb
|
69
|
-
- lib/spud/build_tools/spud/dsl/task.rb
|
70
|
-
- lib/spud/build_tools/spud/shell/command.rb
|
71
|
-
- lib/spud/build_tools/spud/shell/result.rb
|
72
|
-
- lib/spud/build_tools/spud/task.rb
|
73
|
-
- lib/spud/build_tools/task.rb
|
92
|
+
- lib/spud/block_param_info.rb
|
93
|
+
- lib/spud/cli/options.rb
|
74
94
|
- lib/spud/cli/parser.rb
|
75
95
|
- lib/spud/cli/results.rb
|
96
|
+
- lib/spud/driver.rb
|
76
97
|
- lib/spud/error.rb
|
77
98
|
- lib/spud/help.rb
|
78
99
|
- lib/spud/lister.rb
|
79
|
-
- lib/spud/
|
80
|
-
- lib/spud/
|
100
|
+
- lib/spud/shell/command.rb
|
101
|
+
- lib/spud/shell/result.rb
|
81
102
|
- lib/spud/task_arg.rb
|
82
103
|
- lib/spud/task_args.rb
|
104
|
+
- lib/spud/task_runners/make/task.rb
|
105
|
+
- lib/spud/task_runners/package.json/task.rb
|
106
|
+
- lib/spud/task_runners/spud_task_runner/dependency.rb
|
107
|
+
- lib/spud/task_runners/spud_task_runner/file_dsl.rb
|
108
|
+
- lib/spud/task_runners/spud_task_runner/task.rb
|
109
|
+
- lib/spud/task_runners/spud_task_runner/task_dsl.rb
|
110
|
+
- lib/spud/task_runners/task.rb
|
111
|
+
- lib/spud/task_runners/task_runners.rb
|
83
112
|
- lib/spud/version.rb
|
113
|
+
- lib/spud/watch.rb
|
84
114
|
homepage: https://github.com/broothie/spud#readme
|
85
115
|
licenses:
|
86
116
|
- MIT
|
@@ -91,9 +121,9 @@ require_paths:
|
|
91
121
|
- lib
|
92
122
|
required_ruby_version: !ruby/object:Gem::Requirement
|
93
123
|
requirements:
|
94
|
-
- -
|
124
|
+
- - '='
|
95
125
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
126
|
+
version: 2.3.0
|
97
127
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
128
|
requirements:
|
99
129
|
- - ">="
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'spud/build_tools/task'
|
2
|
-
|
3
|
-
module Spud
|
4
|
-
module BuildTools
|
5
|
-
module Make
|
6
|
-
class Task < BuildTools::Task
|
7
|
-
def self.mount!
|
8
|
-
return unless File.exist?('Makefile')
|
9
|
-
|
10
|
-
if `command -v make`.empty?
|
11
|
-
puts 'Makefile detected, but no installation of `make` exists. Skipping make...'
|
12
|
-
return
|
13
|
-
end
|
14
|
-
|
15
|
-
source = File.read('Makefile')
|
16
|
-
source.scan(/^(\S+):.*/).map(&:first).each do |name|
|
17
|
-
new(name: name, filename: 'Makefile')
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def invoke(*)
|
22
|
-
system('make', name)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'spud/build_tools/task'
|
3
|
-
|
4
|
-
module Spud
|
5
|
-
module BuildTools
|
6
|
-
module PackageJSON
|
7
|
-
class Task < BuildTools::Task
|
8
|
-
def self.mount!
|
9
|
-
return unless File.exist?('package.json')
|
10
|
-
|
11
|
-
opening_commands = %w[npm run]
|
12
|
-
if File.exist?('package.lock')
|
13
|
-
if `command -v npm`.empty?
|
14
|
-
puts 'package.json detected, but no installation of `npm` exists. Skipping npm...'
|
15
|
-
return
|
16
|
-
end
|
17
|
-
elsif File.exist?('yarn.lock')
|
18
|
-
if `command -v yarn`.empty?
|
19
|
-
puts 'package.json detected, but no installation of `yarn` exists. Skipping yarn...'
|
20
|
-
return
|
21
|
-
else
|
22
|
-
opening_commands = %w[yarn run]
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
source = File.read('package.json')
|
27
|
-
json = JSON.parse(source)
|
28
|
-
scripts = json['scripts']
|
29
|
-
return unless scripts
|
30
|
-
|
31
|
-
scripts.keys.each do |name|
|
32
|
-
new(name: name, filename: 'package.json', opening_commands: opening_commands)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def initialize(name:, filename:, opening_commands:)
|
37
|
-
super(name: name, filename: filename)
|
38
|
-
@opening_commands = opening_commands
|
39
|
-
end
|
40
|
-
|
41
|
-
def invoke(*)
|
42
|
-
system(*(@opening_commands + [name]))
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
require 'spud/task_arg'
|
2
|
-
|
3
|
-
module Spud
|
4
|
-
module BuildTools
|
5
|
-
module Spud
|
6
|
-
class BlockParamInfo
|
7
|
-
# @param filename [String]
|
8
|
-
# @param block [Proc]
|
9
|
-
def initialize(filename, &block)
|
10
|
-
@filename = filename
|
11
|
-
@block = block
|
12
|
-
end
|
13
|
-
|
14
|
-
# @return [Array<Spud::TaskArg>]
|
15
|
-
def task_args
|
16
|
-
parameters.map do |type, name|
|
17
|
-
case type
|
18
|
-
when :req
|
19
|
-
TaskArg.new(name, 'positional')
|
20
|
-
when :opt
|
21
|
-
TaskArg.new(name, 'positional', default: arg_values[name])
|
22
|
-
when :keyreq
|
23
|
-
TaskArg.new(name, 'named')
|
24
|
-
when :key
|
25
|
-
TaskArg.new(name, 'named', default: arg_values[name])
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
# @return [Array]
|
31
|
-
def dummy_args
|
32
|
-
[dummy_positional_args, dummy_named_args]
|
33
|
-
end
|
34
|
-
|
35
|
-
# @return [Array<NilClass>]
|
36
|
-
def dummy_positional_args
|
37
|
-
Array.new(parameters.count { |p| p.first == :req })
|
38
|
-
end
|
39
|
-
|
40
|
-
# @return [Hash{Symbol->NilClass}]
|
41
|
-
def dummy_named_args
|
42
|
-
parameters.select { |p| p.first == :keyreq }.map(&:last).each_with_object({}) { |n, h| h[n] = nil }
|
43
|
-
end
|
44
|
-
|
45
|
-
# @return [String]
|
46
|
-
def arg_hash_string
|
47
|
-
"{ #{parameters.map(&:last).map { |n| "#{n}: #{n}" }.join(', ')} }"
|
48
|
-
end
|
49
|
-
|
50
|
-
# @return [Hash]
|
51
|
-
def arg_values
|
52
|
-
@arg_values ||= begin
|
53
|
-
positional, named = dummy_args
|
54
|
-
lambda(arg_hash_string).call(*positional, **named)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
# @return [Array<Array<Symbol>>]
|
59
|
-
def parameters
|
60
|
-
@parameters ||= lambda.parameters
|
61
|
-
end
|
62
|
-
|
63
|
-
# @return [Proc]
|
64
|
-
def lambda(body = nil)
|
65
|
-
line = File.read(@filename).split("\n")[@block.source_location.last - 1]
|
66
|
-
|
67
|
-
match = /(do|{)\s*\|(?<params>[^|]+)\|/.match(line)
|
68
|
-
return -> {} unless match
|
69
|
-
|
70
|
-
param_source = match[:params]
|
71
|
-
param_source += ', _: nil, __: nil, ___: nil' if body
|
72
|
-
eval "-> (#{param_source}) { #{body} }"
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'spud/build_tools/spud/task'
|
2
|
-
|
3
|
-
module Spud
|
4
|
-
module BuildTools
|
5
|
-
module Spud
|
6
|
-
module DSL
|
7
|
-
class File
|
8
|
-
def require_relative(name)
|
9
|
-
require("./#{name}")
|
10
|
-
end
|
11
|
-
|
12
|
-
def task(name, *, &block)
|
13
|
-
BuildTools::Spud::Task.add_task(name, &block)
|
14
|
-
end
|
15
|
-
|
16
|
-
def method_missing(name, *args, &block)
|
17
|
-
task(name, *args, &block)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
require 'spud/error'
|
2
|
-
require 'spud/build_tools/spud/task'
|
3
|
-
require 'spud/build_tools/spud/shell/command'
|
4
|
-
|
5
|
-
module Spud
|
6
|
-
module BuildTools
|
7
|
-
module Spud
|
8
|
-
module DSL
|
9
|
-
class Task
|
10
|
-
def initialize(filename)
|
11
|
-
@filename = filename
|
12
|
-
end
|
13
|
-
|
14
|
-
def sh(command)
|
15
|
-
puts command
|
16
|
-
Shell::Command.(command)
|
17
|
-
end
|
18
|
-
|
19
|
-
def shh(command)
|
20
|
-
Shell::Command.(command)
|
21
|
-
end
|
22
|
-
|
23
|
-
def shhh(command)
|
24
|
-
Shell::Command.(command, silent: true)
|
25
|
-
end
|
26
|
-
|
27
|
-
def sh!(command)
|
28
|
-
puts command
|
29
|
-
result = Shell::Command.(command)
|
30
|
-
raise Error, "sh failed for '#{command}'" unless result.success?
|
31
|
-
result
|
32
|
-
end
|
33
|
-
|
34
|
-
def shh!(command)
|
35
|
-
result = Shell::Command.(command)
|
36
|
-
raise Error, "sh failed for '#{command}'" unless result.success?
|
37
|
-
result
|
38
|
-
end
|
39
|
-
|
40
|
-
def shhh!(command)
|
41
|
-
result = Shell::Command.(command, silent: true)
|
42
|
-
raise Error, "sh failed for '#{command}'" unless result.success?
|
43
|
-
result
|
44
|
-
end
|
45
|
-
|
46
|
-
def invoke(task, *positional, **named)
|
47
|
-
Spud::Task.invoke(@filename, task, positional, named)
|
48
|
-
rescue Error => error
|
49
|
-
puts "invoke failed for #{task}: #{error}"
|
50
|
-
end
|
51
|
-
|
52
|
-
def invoke!(task, *positional, **named)
|
53
|
-
Spud::Task.invoke(@filename, task, positional, named)
|
54
|
-
end
|
55
|
-
|
56
|
-
def method_missing(symbol, *positional, **named)
|
57
|
-
Spud::Task.task_for(@filename, symbol) ? Spud::Task.invoke(@filename, symbol, positional, named) : super
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
require 'stringio'
|
2
|
-
require 'open3'
|
3
|
-
require 'spud/build_tools/spud/shell/result'
|
4
|
-
|
5
|
-
module Spud
|
6
|
-
module BuildTools
|
7
|
-
module Spud
|
8
|
-
module Shell
|
9
|
-
class Command
|
10
|
-
attr_reader :result
|
11
|
-
|
12
|
-
# @param command [String]
|
13
|
-
# @param silent [Boolean]
|
14
|
-
# @param handle [IO]
|
15
|
-
def self.call(command, silent: false, handle: STDOUT)
|
16
|
-
cmd = new(command, silent: silent, handle: handle)
|
17
|
-
cmd.issue!
|
18
|
-
cmd.result
|
19
|
-
end
|
20
|
-
|
21
|
-
# @param command [String]
|
22
|
-
# @param silent [Boolean]
|
23
|
-
# @param handle [IO]
|
24
|
-
def initialize(command, silent: false, handle: STDOUT)
|
25
|
-
@command = command
|
26
|
-
@silent = silent
|
27
|
-
@handle = handle
|
28
|
-
|
29
|
-
@result = nil
|
30
|
-
end
|
31
|
-
|
32
|
-
# @return [void]
|
33
|
-
def issue!
|
34
|
-
capturer = StringIO.new
|
35
|
-
|
36
|
-
Open3.popen2e(@command) do |_stdin, stdout, thread|
|
37
|
-
loop do
|
38
|
-
line = stdout.gets
|
39
|
-
break unless line
|
40
|
-
|
41
|
-
@handle.write line unless @silent
|
42
|
-
capturer.puts line
|
43
|
-
end
|
44
|
-
|
45
|
-
@result = Result.new(capturer.string, thread.value)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module Spud
|
2
|
-
module BuildTools
|
3
|
-
module Spud
|
4
|
-
module Shell
|
5
|
-
class Result < String
|
6
|
-
attr_reader :status
|
7
|
-
|
8
|
-
# @param output [String]
|
9
|
-
# @param status [Process::Status]
|
10
|
-
def initialize(output, status)
|
11
|
-
super(output)
|
12
|
-
@status = status
|
13
|
-
end
|
14
|
-
|
15
|
-
def method_missing(symbol, *args)
|
16
|
-
status.respond_to?(symbol) ? status.send(symbol, *args) : super
|
17
|
-
end
|
18
|
-
|
19
|
-
def respond_to_missing?(symbol, *)
|
20
|
-
status.respond_to?(symbol) || super
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,125 +0,0 @@
|
|
1
|
-
require 'spud/error'
|
2
|
-
require 'spud/task_args'
|
3
|
-
require 'spud/build_tools/task'
|
4
|
-
require 'spud/build_tools/spud/task'
|
5
|
-
require 'spud/build_tools/spud/dsl/file'
|
6
|
-
require 'spud/build_tools/spud/dsl/task'
|
7
|
-
|
8
|
-
module Spud
|
9
|
-
module BuildTools
|
10
|
-
module Spud
|
11
|
-
class Task < BuildTools::Task
|
12
|
-
# @return [void]
|
13
|
-
def self.mount!
|
14
|
-
Dir['**/Spudfile', '**/*.spud'].each do |filename|
|
15
|
-
@filename = filename
|
16
|
-
file_dsl.instance_eval(File.read(filename), filename)
|
17
|
-
end
|
18
|
-
|
19
|
-
@filename = nil
|
20
|
-
end
|
21
|
-
|
22
|
-
# @return [Spud::DSL::File]
|
23
|
-
def self.file_dsl
|
24
|
-
@file_dsl ||= DSL::File.new
|
25
|
-
end
|
26
|
-
|
27
|
-
# @param task [String]
|
28
|
-
# @param block [Proc]
|
29
|
-
# @return [void]
|
30
|
-
def self.add_task(task, &block)
|
31
|
-
raise "task '#{task}' somehow created without filename" unless @filename
|
32
|
-
|
33
|
-
qualified_name = [qualified_prefix(@filename), task.to_s].join('.').gsub(/^\./, '')
|
34
|
-
new(name: qualified_name, filename: @filename, &block)
|
35
|
-
end
|
36
|
-
|
37
|
-
# @param filename [String]
|
38
|
-
# @param task [String]
|
39
|
-
# @param positional [Array]
|
40
|
-
# @param named [Hash]
|
41
|
-
def self.invoke(filename, task, positional, named)
|
42
|
-
task = task.to_s
|
43
|
-
task_obj = task_for(filename, task)
|
44
|
-
if task_obj
|
45
|
-
Runtime.invoke(task_obj.name, positional, named)
|
46
|
-
else
|
47
|
-
Runtime.invoke(task, positional, named)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
# @param filename [String]
|
52
|
-
# @param task [String]
|
53
|
-
def self.task_for(filename, task)
|
54
|
-
task = task.to_s
|
55
|
-
if task.include?('.')
|
56
|
-
Runtime.tasks[task]
|
57
|
-
else
|
58
|
-
Runtime.tasks[[qualified_prefix(filename), task.to_s].join('.').gsub(/^\./, '')]
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
# @param filename [String]
|
63
|
-
# @return [String]
|
64
|
-
def self.qualified_prefix(filename)
|
65
|
-
dirname = File.dirname(filename)
|
66
|
-
dirname = '' if dirname == '.'
|
67
|
-
|
68
|
-
basename = File.basename(filename, '.spud')
|
69
|
-
basename_array = basename == 'Spudfile' ? [] : [basename]
|
70
|
-
|
71
|
-
(dirname.split('/') + basename_array).join('.')
|
72
|
-
end
|
73
|
-
|
74
|
-
def initialize(name:, filename:, &block)
|
75
|
-
super
|
76
|
-
@block = block
|
77
|
-
end
|
78
|
-
|
79
|
-
# @param positional [Array]
|
80
|
-
# @param named [Hash]
|
81
|
-
# @return [Object]
|
82
|
-
def invoke(positional, named)
|
83
|
-
check_required!(positional)
|
84
|
-
|
85
|
-
return task_dsl.instance_exec(*positional, &@block) unless args.any_named?
|
86
|
-
|
87
|
-
task_dsl.instance_exec(*positional, **symbolize_keys(named), &@block)
|
88
|
-
rescue ArgumentError => error
|
89
|
-
raise Error, "invocation of '#{name}' with #{error.message}"
|
90
|
-
end
|
91
|
-
|
92
|
-
# @return [Spud::TaskArgs]
|
93
|
-
def args
|
94
|
-
@args ||= ::Spud::TaskArgs.from_block(filename, &@block)
|
95
|
-
end
|
96
|
-
|
97
|
-
private
|
98
|
-
|
99
|
-
# @param positional [Array<String>]
|
100
|
-
# @return [void]
|
101
|
-
def check_required!(positional)
|
102
|
-
required_positional = args.required_positional
|
103
|
-
missing_positional = required_positional.length - positional.length
|
104
|
-
if missing_positional > 0
|
105
|
-
arguments = required_positional.length - missing_positional > 1 ? 'arguments' : 'argument'
|
106
|
-
raise Error, "invocation of '#{name}' missing required #{arguments} #{required_positional.join(', ')}"
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
# @return [Spud::DSL::Task]
|
111
|
-
def task_dsl
|
112
|
-
@task_dsl ||= DSL::Task.new(filename)
|
113
|
-
end
|
114
|
-
|
115
|
-
# @param hash [Hash]
|
116
|
-
# @return [Hash]
|
117
|
-
def symbolize_keys(hash)
|
118
|
-
hash.each_with_object({}) do |(key, value), new_hash|
|
119
|
-
new_hash[key.is_a?(String) ? key.to_sym : key] = value
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|