spud 0.1.18 → 0.1.19

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,14 @@
1
+ module Spud
2
+ class Options
3
+ BOOLEANS = %i[help files debug]
4
+
5
+ BOOLEANS.each do |name|
6
+ attr_accessor name
7
+ define_method("#{name}?") { !!send(name) }
8
+ end
9
+
10
+ def watches
11
+ @watches ||= []
12
+ end
13
+ end
14
+ end
@@ -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
@@ -0,0 +1,3 @@
1
+ module Spud
2
+ VERSION = '0.1.19'
3
+ end
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.18
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: 2010-04-05 00:00:00.000000000 Z
11
+ date: 2020-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: rspec
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.17'
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: '1.17'
26
+ version: '3.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rspec
28
+ name: pry
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.0'
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: '3.0'
41
- description: Spud is a build tool, written as a ruby DSL
42
- email: adbooth8@gmail.com
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/version.rb
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: A build tool
106
+ summary: Spud is a task runner, in the form of a ruby DSL.
87
107
  test_files: []
@@ -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