spud 0.2.1 → 0.2.6

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.
Files changed (37) hide show
  1. checksums.yaml +5 -5
  2. data/lib/spud.rb +3 -2
  3. data/lib/spud/block_param_info.rb +80 -0
  4. data/lib/spud/cli/options.rb +35 -0
  5. data/lib/spud/cli/parser.rb +23 -19
  6. data/lib/spud/cli/results.rb +18 -11
  7. data/lib/spud/driver.rb +136 -0
  8. data/lib/spud/error.rb +6 -1
  9. data/lib/spud/help.rb +17 -14
  10. data/lib/spud/lister.rb +27 -22
  11. data/lib/spud/shell/command.rb +75 -0
  12. data/lib/spud/shell/result.rb +33 -0
  13. data/lib/spud/task_arg.rb +24 -12
  14. data/lib/spud/task_args.rb +20 -18
  15. data/lib/spud/task_runners/make/task.rb +67 -0
  16. data/lib/spud/task_runners/package.json/task.rb +71 -0
  17. data/lib/spud/task_runners/spud_task_runner/dependency.rb +50 -0
  18. data/lib/spud/task_runners/spud_task_runner/file_dsl.rb +57 -0
  19. data/lib/spud/task_runners/spud_task_runner/task.rb +149 -0
  20. data/lib/spud/task_runners/spud_task_runner/task_dsl.rb +95 -0
  21. data/lib/spud/task_runners/task.rb +40 -0
  22. data/lib/spud/task_runners/task_runners.rb +25 -0
  23. data/lib/spud/version.rb +2 -1
  24. data/lib/spud/watch.rb +73 -0
  25. metadata +51 -20
  26. data/lib/spud/build_tools/build_tools.rb +0 -13
  27. data/lib/spud/build_tools/make/task.rb +0 -27
  28. data/lib/spud/build_tools/package.json/task.rb +0 -47
  29. data/lib/spud/build_tools/spud/block_param_info.rb +0 -77
  30. data/lib/spud/build_tools/spud/dsl/file.rb +0 -23
  31. data/lib/spud/build_tools/spud/dsl/task.rb +0 -63
  32. data/lib/spud/build_tools/spud/shell/command.rb +0 -52
  33. data/lib/spud/build_tools/spud/shell/result.rb +0 -26
  34. data/lib/spud/build_tools/spud/task.rb +0 -125
  35. data/lib/spud/build_tools/task.rb +0 -33
  36. data/lib/spud/options.rb +0 -14
  37. data/lib/spud/runtime.rb +0 -104
@@ -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
- new(name: qualified_name(@filename, task.to_s), filename: @filename, &block)
34
- end
35
-
36
- # @param filename [String]
37
- # @param task [String]
38
- # @param positional [Array]
39
- # @param named [Hash]
40
- def self.invoke(filename, task, positional, named)
41
- task = task.to_s
42
- task_obj = task_for(filename, task)
43
- if task_obj
44
- Runtime.invoke(task_obj.name, positional, named)
45
- else
46
- Runtime.invoke(task, positional, named)
47
- end
48
- end
49
-
50
- # @param filename [String]
51
- # @param task [String]
52
- def self.task_for(filename, task)
53
- Runtime.tasks[qualified_name(filename, task.to_s)]
54
- end
55
-
56
- def self.qualified_name(filename, task)
57
- raise "task '#{task}' somehow created without filename" unless filename
58
-
59
- [qualified_prefix(filename), task.to_s].join('.').gsub(/^\./, '')
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
@@ -1,33 +0,0 @@
1
- module Spud
2
- module BuildTools
3
- class Task
4
- # @return [String]
5
- attr_reader :name
6
- # @return [String]
7
- attr_reader :filename
8
- # @return [Spud::TaskArgs]
9
- attr_reader :args
10
-
11
- # @return [void]
12
- def self.mount!
13
- raise NotImplementedError
14
- end
15
-
16
- # @param name [String]
17
- # @param filename [String]
18
- def initialize(name:, filename:)
19
- @name = name
20
- @filename = filename
21
-
22
- Runtime.tasks[name.to_s] = self
23
- end
24
-
25
- # @param positional [Array]
26
- # @param named [Hash]
27
- # @return [Object]
28
- def invoke(positional = [], named = {})
29
- raise NotImplementedError
30
- end
31
- end
32
- end
33
- end
@@ -1,14 +0,0 @@
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
@@ -1,104 +0,0 @@
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