spud 0.1.18 → 0.1.19
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 +2 -182
- data/lib/spud/build_tools/build_tools.rb +13 -0
- data/lib/spud/build_tools/make/task.rb +27 -0
- data/lib/spud/build_tools/package.json/task.rb +47 -0
- data/lib/spud/build_tools/spud/block_param_info.rb +77 -0
- data/lib/spud/build_tools/spud/dsl/file.rb +23 -0
- data/lib/spud/build_tools/spud/dsl/task.rb +63 -0
- data/lib/spud/build_tools/spud/shell/command.rb +52 -0
- data/lib/spud/build_tools/spud/shell/result.rb +26 -0
- data/lib/spud/build_tools/spud/task.rb +125 -0
- data/lib/spud/build_tools/task.rb +33 -0
- data/lib/spud/cli/parser.rb +101 -0
- data/lib/spud/cli/results.rb +25 -0
- data/lib/{error.rb → spud/error.rb} +1 -0
- data/lib/spud/help.rb +23 -0
- data/lib/spud/lister.rb +86 -0
- data/lib/spud/options.rb +14 -0
- data/lib/spud/runtime.rb +104 -0
- data/lib/spud/task_arg.rb +51 -0
- data/lib/spud/task_args.rb +49 -0
- data/lib/spud/version.rb +3 -0
- metadata +48 -28
- data/lib/args.rb +0 -73
- data/lib/build_tools/build_rule.rb +0 -21
- data/lib/build_tools/build_tool.rb +0 -19
- data/lib/build_tools/build_tools.rb +0 -13
- data/lib/build_tools/make/make.rb +0 -33
- data/lib/build_tools/package.json/package.json.rb +0 -33
- data/lib/build_tools/spud/file_context.rb +0 -33
- data/lib/build_tools/spud/rule.rb +0 -124
- data/lib/build_tools/spud/rule_context.rb +0 -62
- data/lib/build_tools/spud/shell_error.rb +0 -7
- data/lib/build_tools/spud/spud.rb +0 -27
- data/lib/shell.rb +0 -38
- data/lib/version.rb +0 -3
data/lib/spud/options.rb
ADDED
data/lib/spud/runtime.rb
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'spud/error'
|
2
|
+
require 'spud/help'
|
3
|
+
require 'spud/lister'
|
4
|
+
require 'spud/cli/parser'
|
5
|
+
require 'spud/build_tools/task'
|
6
|
+
require 'spud/build_tools/build_tools'
|
7
|
+
|
8
|
+
module Spud
|
9
|
+
module Runtime
|
10
|
+
class << self
|
11
|
+
def run!
|
12
|
+
if options.debug?
|
13
|
+
puts "options: #{options.inspect}"
|
14
|
+
puts "task: #{args.task}"
|
15
|
+
puts "positional: #{args.positional}"
|
16
|
+
puts "named: #{args.named}"
|
17
|
+
end
|
18
|
+
|
19
|
+
if options.help?
|
20
|
+
Spud::Help.print!
|
21
|
+
return
|
22
|
+
end
|
23
|
+
|
24
|
+
mount!
|
25
|
+
if options.files?
|
26
|
+
lister.list_filenames!
|
27
|
+
return
|
28
|
+
end
|
29
|
+
|
30
|
+
unless args.task
|
31
|
+
print_tasks!
|
32
|
+
return
|
33
|
+
end
|
34
|
+
|
35
|
+
invoke(args.task, args.positional, args.named)
|
36
|
+
rescue Error => error
|
37
|
+
puts error.message
|
38
|
+
raise error if options.debug?
|
39
|
+
rescue => error
|
40
|
+
puts "fatal: #{error.message}"
|
41
|
+
raise error if options.debug?
|
42
|
+
end
|
43
|
+
|
44
|
+
# @param task_name [String]
|
45
|
+
# @param positional [Array]
|
46
|
+
# @param named [Hash]
|
47
|
+
def invoke(task_name, positional = [], named = {})
|
48
|
+
task = tasks[task_name.to_s]
|
49
|
+
raise Error, "no task found for '#{task_name}'" unless task
|
50
|
+
task.invoke(positional, named)
|
51
|
+
end
|
52
|
+
|
53
|
+
# @return [Hash{String->Spud::Task}]
|
54
|
+
def tasks
|
55
|
+
@tasks ||= {}
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
# @return [Array<String>]
|
61
|
+
def filenames
|
62
|
+
@filenames ||= tasks.values.map(&:filename).uniq
|
63
|
+
end
|
64
|
+
|
65
|
+
# @return [void]
|
66
|
+
def mount!
|
67
|
+
build_tools.each(&:mount!)
|
68
|
+
tasks.keys.each do |key|
|
69
|
+
tasks[key.to_s] = tasks.delete(key) if key.is_a?(Symbol)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# @return [Array<Spud::BuildTools::Task>]
|
74
|
+
def build_tools
|
75
|
+
@build_tools ||= begin
|
76
|
+
BuildTools::BUILD_TOOLS.each do |tool|
|
77
|
+
raise "build tool does not inherit from BuildTools::Task" unless tool < BuildTools::Task
|
78
|
+
end
|
79
|
+
|
80
|
+
BuildTools::BUILD_TOOLS.reverse
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# @return [Spud::Options]
|
85
|
+
def options
|
86
|
+
args.options
|
87
|
+
end
|
88
|
+
|
89
|
+
# @return [Spud::CLI::Results]
|
90
|
+
def args
|
91
|
+
@args ||= Spud::CLI::Parser.parse!
|
92
|
+
end
|
93
|
+
|
94
|
+
# @return [void]
|
95
|
+
def print_tasks!
|
96
|
+
lister.list!
|
97
|
+
end
|
98
|
+
|
99
|
+
def lister
|
100
|
+
@lister ||= Lister.new(tasks.values)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Spud
|
2
|
+
class TaskArg
|
3
|
+
# @param name [String]
|
4
|
+
# @param type [String]
|
5
|
+
# @param default [String]
|
6
|
+
def initialize(name, type, default: nil)
|
7
|
+
raise 'must be of type "positional" or "named"' unless %w[positional named].include?(type)
|
8
|
+
|
9
|
+
@name = name
|
10
|
+
@type = type
|
11
|
+
@default = default
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return [Boolean]
|
15
|
+
def required?
|
16
|
+
!has_default?
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [Boolean]
|
20
|
+
def has_default?
|
21
|
+
!!@default
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [Boolean]
|
25
|
+
def positional?
|
26
|
+
@type == 'positional'
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Boolean]
|
30
|
+
def named?
|
31
|
+
@type == 'named'
|
32
|
+
end
|
33
|
+
|
34
|
+
# @return [String]
|
35
|
+
def to_s
|
36
|
+
if positional?
|
37
|
+
if has_default?
|
38
|
+
"<#{@name}=#{@default}>"
|
39
|
+
else
|
40
|
+
"<#{@name}>"
|
41
|
+
end
|
42
|
+
else
|
43
|
+
if has_default?
|
44
|
+
"--#{@name}=#{@default}"
|
45
|
+
else
|
46
|
+
"--#{@name}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spud/task_arg'
|
2
|
+
require 'spud/build_tools/spud/block_param_info'
|
3
|
+
|
4
|
+
module Spud
|
5
|
+
class TaskArgs < Array
|
6
|
+
# @param filename [String]
|
7
|
+
# @param block [Proc]
|
8
|
+
# @return [Spud::TaskArgs]
|
9
|
+
def self.from_block(filename, &block)
|
10
|
+
info = BuildTools::Spud::BlockParamInfo.new(filename, &block)
|
11
|
+
new(info.task_args)
|
12
|
+
end
|
13
|
+
|
14
|
+
# @param task_args [Array<Spud::TaskArg>]
|
15
|
+
def initialize(task_args)
|
16
|
+
super(task_args)
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [Array<Spud::TaskArg>]
|
20
|
+
def positional
|
21
|
+
@positional ||= select(&:positional?)
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [Array<Spud::TaskArg>]
|
25
|
+
def required_positional
|
26
|
+
@required_positional ||= positional.select(&:required?)
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Boolean]
|
30
|
+
def any_positional?
|
31
|
+
!positional.empty?
|
32
|
+
end
|
33
|
+
|
34
|
+
# @return [Array<Spud::TaskArg>]
|
35
|
+
def named
|
36
|
+
@named ||= select(&:named?)
|
37
|
+
end
|
38
|
+
|
39
|
+
# @return [Array<Spud::TaskArg>]
|
40
|
+
def required_named
|
41
|
+
@required_named ||= named.select(&:required?)
|
42
|
+
end
|
43
|
+
|
44
|
+
# @return [Boolean]
|
45
|
+
def any_named?
|
46
|
+
!named.empty?
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/spud/version.rb
ADDED
metadata
CHANGED
@@ -1,71 +1,91 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Booth
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rspec
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '3.0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '3.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: pry
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.13.1
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
41
|
-
|
42
|
-
|
40
|
+
version: 0.13.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: byebug
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '11.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '11.0'
|
55
|
+
description:
|
56
|
+
email: andrew@andrewbooth.xyz
|
43
57
|
executables:
|
44
58
|
- spud
|
45
59
|
extensions: []
|
46
60
|
extra_rdoc_files: []
|
47
61
|
files:
|
48
62
|
- bin/spud
|
49
|
-
- lib/args.rb
|
50
|
-
- lib/build_tools/build_rule.rb
|
51
|
-
- lib/build_tools/build_tool.rb
|
52
|
-
- lib/build_tools/build_tools.rb
|
53
|
-
- lib/build_tools/make/make.rb
|
54
|
-
- lib/build_tools/package.json/package.json.rb
|
55
|
-
- lib/build_tools/spud/file_context.rb
|
56
|
-
- lib/build_tools/spud/rule.rb
|
57
|
-
- lib/build_tools/spud/rule_context.rb
|
58
|
-
- lib/build_tools/spud/shell_error.rb
|
59
|
-
- lib/build_tools/spud/spud.rb
|
60
|
-
- lib/error.rb
|
61
|
-
- lib/shell.rb
|
62
63
|
- lib/spud.rb
|
63
|
-
- lib/
|
64
|
+
- lib/spud/build_tools/build_tools.rb
|
65
|
+
- lib/spud/build_tools/make/task.rb
|
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
|
74
|
+
- lib/spud/cli/parser.rb
|
75
|
+
- lib/spud/cli/results.rb
|
76
|
+
- lib/spud/error.rb
|
77
|
+
- lib/spud/help.rb
|
78
|
+
- lib/spud/lister.rb
|
79
|
+
- lib/spud/options.rb
|
80
|
+
- lib/spud/runtime.rb
|
81
|
+
- lib/spud/task_arg.rb
|
82
|
+
- lib/spud/task_args.rb
|
83
|
+
- lib/spud/version.rb
|
64
84
|
homepage: https://github.com/broothie/spud#readme
|
65
85
|
licenses:
|
66
86
|
- MIT
|
67
87
|
metadata: {}
|
68
|
-
post_install_message:
|
88
|
+
post_install_message:
|
69
89
|
rdoc_options: []
|
70
90
|
require_paths:
|
71
91
|
- lib
|
@@ -81,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
101
|
version: '0'
|
82
102
|
requirements: []
|
83
103
|
rubygems_version: 3.1.3
|
84
|
-
signing_key:
|
104
|
+
signing_key:
|
85
105
|
specification_version: 4
|
86
|
-
summary:
|
106
|
+
summary: Spud is a task runner, in the form of a ruby DSL.
|
87
107
|
test_files: []
|
data/lib/args.rb
DELETED
@@ -1,73 +0,0 @@
|
|
1
|
-
require_relative 'spud'
|
2
|
-
|
3
|
-
module Spud
|
4
|
-
module Args
|
5
|
-
class << self
|
6
|
-
def parse_args!
|
7
|
-
parse_args(ARGV)
|
8
|
-
end
|
9
|
-
|
10
|
-
def default_options
|
11
|
-
{
|
12
|
-
help: false,
|
13
|
-
version: false,
|
14
|
-
watches: [],
|
15
|
-
debug: false,
|
16
|
-
}
|
17
|
-
end
|
18
|
-
|
19
|
-
def parse_option(options, index, args)
|
20
|
-
arg = args[index]
|
21
|
-
|
22
|
-
case arg
|
23
|
-
when '-h', '--help' then [options.merge(help: true), index + 1]
|
24
|
-
when '-v', '--version' then [options.merge(version: true), index + 1]
|
25
|
-
when '-w', '--watch' then [options.merge(watches: options[:watches] + [args[index + 1]]), index + 2]
|
26
|
-
when '--debug' then [options.merge(debug: true), index + 1]
|
27
|
-
else raise Error, "invalid option '#{arg}'"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def parse_args(args)
|
32
|
-
options = default_options.dup
|
33
|
-
rule_name = nil
|
34
|
-
index = 0
|
35
|
-
while index < args.length
|
36
|
-
arg = args[index]
|
37
|
-
|
38
|
-
if arg[0] != '-'
|
39
|
-
rule_name = arg
|
40
|
-
index += 1
|
41
|
-
break
|
42
|
-
end
|
43
|
-
|
44
|
-
options, index = parse_option(options, index, args)
|
45
|
-
end
|
46
|
-
|
47
|
-
positional = []
|
48
|
-
keyword = {}
|
49
|
-
while index < args.length
|
50
|
-
arg = args[index]
|
51
|
-
|
52
|
-
if arg[0] == '-'
|
53
|
-
value = args[index + 1]
|
54
|
-
raise Error, "missing value for arg #{arg}" unless value
|
55
|
-
|
56
|
-
keyword[arg.sub(/^-+/, '').to_sym] = value
|
57
|
-
index += 2
|
58
|
-
else
|
59
|
-
positional << arg
|
60
|
-
index += 1
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
{
|
65
|
-
options: options,
|
66
|
-
rule: rule_name,
|
67
|
-
positional: positional,
|
68
|
-
keyword: keyword
|
69
|
-
}
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module Spud
|
2
|
-
module BuildTools
|
3
|
-
class BuildRule
|
4
|
-
def invoke(*args, **kwargs)
|
5
|
-
raise NotImplementedError
|
6
|
-
end
|
7
|
-
|
8
|
-
def filename
|
9
|
-
raise NotImplementedError
|
10
|
-
end
|
11
|
-
|
12
|
-
def positional_params
|
13
|
-
[]
|
14
|
-
end
|
15
|
-
|
16
|
-
def keyword_params
|
17
|
-
[]
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|