spud 0.2.6 → 0.2.9

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ea40b0df03085beb5350590ed0336f4bbac760ff
4
- data.tar.gz: 93427f8d7a3d1906d8f5ac082b54ee7a343afbec
3
+ metadata.gz: c375bdd21d64dcddbdb86e7d3aef2c8e04abd0b5
4
+ data.tar.gz: 26d2be23293edfa1305ab3b28684e04a3d2d98ec
5
5
  SHA512:
6
- metadata.gz: 9e5125c223b8e4733a018cbfc31239f6f9dc9a7b6912785f3167cebf67f07886f64106f64940e1f5fe50e7516d76b5c0dddbbfe4ed53d7b2edc837a08b193068
7
- data.tar.gz: 052fb31ba933ffaf3520669830d37bf292f325c1d54072ce29642b20d3dac53d71f76ef9afb7eb5e6eb1ecd8d76da0a3dc7368c66b17b65cceaec387c1296a05
6
+ metadata.gz: 8689e8cbf001ad043337b556a7e6c981c67481eac17c10810da3d9d5f851fb0def39cb5a828d0d96022b722828447412cc3f3a730d599f756d59098df32a5a21
7
+ data.tar.gz: 033f5a3b43d2d1d99247cf75d1aa98c9d42e69f99cfaa50201f66253681388b8f55c80c1f008691cabb9e23aef4f6d5daed418d2958c6b3b4714e98121de279b
@@ -7,7 +7,6 @@ module Spud
7
7
  extend T::Sig
8
8
 
9
9
  attr_writer :help
10
- attr_writer :files
11
10
  attr_writer :inspect
12
11
 
13
12
  sig {returns(T::Array[String])}
@@ -21,11 +20,6 @@ module Spud
21
20
  !!@help
22
21
  end
23
22
 
24
- sig {returns(T::Boolean)}
25
- def files?
26
- !!@files
27
- end
28
-
29
23
  sig {returns(T::Boolean)}
30
24
  def inspect?
31
25
  !!@inspect
@@ -54,7 +54,6 @@ module Spud
54
54
  case flag
55
55
  when '-h', '--help' then options.help = true
56
56
  when '-w', '--watch' then options.watches << take!
57
- when '-f', '--files' then options.files = true
58
57
  when '-i', '--inspect' then options.inspect = true
59
58
  else raise Error, "invalid option: '#{flag}'"
60
59
  end
@@ -34,11 +34,6 @@ module Spud
34
34
  return
35
35
  end
36
36
 
37
- if options.files?
38
- lister.list_filenames!
39
- return
40
- end
41
-
42
37
  unless args.task
43
38
  lister.list_tasks!
44
39
  return
@@ -1,4 +1,4 @@
1
- # typed: true
1
+ # typed: strict
2
2
  require 'sorbet-runtime'
3
3
 
4
4
  module Spud
@@ -1,4 +1,4 @@
1
- # typed: true
1
+ # typed: strict
2
2
  require 'sorbet-runtime'
3
3
  require 'stringio'
4
4
  require 'spud/version'
@@ -18,7 +18,6 @@ module Spud
18
18
  options:
19
19
  -h, --help show this help dialog
20
20
  -w, --watch <glob> re-run task any time glob changes
21
- -f, --files list parsed files
22
21
  -i, --inspect show details about a task
23
22
  HELP
24
23
  end
@@ -7,6 +7,11 @@ module Spud
7
7
  class Lister
8
8
  extend T::Sig
9
9
 
10
+ TASKS_HEADER = T.let('TASK', String)
11
+ ORDERED_HEADER = T.let('ORDERED ARGS', String)
12
+ NAMED_HEADER = T.let('NAMED ARGS', String)
13
+ SOURCES_HEADER = T.let('SOURCE', String)
14
+
10
15
  sig {params(tasks: T::Array[TaskRunners::Task]).void}
11
16
  def initialize(tasks)
12
17
  @tasks = tasks
@@ -16,6 +21,27 @@ module Spud
16
21
  def list_tasks!
17
22
  builder = StringIO.new
18
23
 
24
+ if show_headers?
25
+ builder.write TASKS_HEADER.ljust(max_task_length)
26
+
27
+ if show_ordered_args?
28
+ builder.write ' '
29
+ builder.write ORDERED_HEADER.ljust(max_ordered_string_length)
30
+ end
31
+
32
+ if show_named_args?
33
+ builder.write ' '
34
+ builder.write NAMED_HEADER.ljust(max_named_string_length)
35
+ end
36
+
37
+ if show_sources?
38
+ builder.write ' '
39
+ builder.write SOURCES_HEADER
40
+ end
41
+
42
+ builder.write "\n"
43
+ end
44
+
19
45
  @tasks.each do |task|
20
46
  builder.write task.name.ljust(max_task_length)
21
47
 
@@ -29,9 +55,9 @@ module Spud
29
55
  builder.write task.args.named.join(' ').ljust(max_named_string_length)
30
56
  end
31
57
 
32
- if show_filenames?
58
+ if show_sources?
33
59
  builder.write ' '
34
- builder.write task.filename
60
+ builder.write task.source
35
61
  end
36
62
 
37
63
  builder.write "\n"
@@ -40,21 +66,19 @@ module Spud
40
66
  puts builder.string
41
67
  end
42
68
 
43
- sig {void}
44
- def list_filenames!
45
- puts filenames.join("\n")
46
- end
69
+ private
47
70
 
48
- sig {returns(T::Array[String])}
49
- def filenames
50
- @filenames ||= @tasks.map(&:filename).uniq
71
+ sig {returns(T::Boolean)}
72
+ def show_headers?
73
+ @show_headers ||= show_ordered_args? || show_named_args? || show_sources?
51
74
  end
52
75
 
53
- private
54
-
55
76
  sig {returns(Integer)}
56
77
  def max_task_length
57
- @max_task_length ||= @tasks.map { |task| task.name.length }.max
78
+ @max_task_length ||= @tasks
79
+ .map { |task| task.name.length }
80
+ .tap { |lengths| lengths.push(TASKS_HEADER.length) if show_headers? }
81
+ .max
58
82
  end
59
83
 
60
84
  sig {returns(Integer)}
@@ -62,6 +86,7 @@ module Spud
62
86
  @max_ordered_string_length ||= @tasks
63
87
  .map { |task| task.args.ordered.join(' ') }
64
88
  .map(&:length)
89
+ .tap { |lengths| lengths.push(ORDERED_HEADER.length) if show_headers? }
65
90
  .max
66
91
  end
67
92
 
@@ -75,6 +100,7 @@ module Spud
75
100
  @max_named_string_length ||= @tasks
76
101
  .map { |task| task.args.named.join(' ') }
77
102
  .map(&:length)
103
+ .tap { |lengths| lengths.push(NAMED_HEADER.length) if show_headers? }
78
104
  .max
79
105
  end
80
106
 
@@ -84,8 +110,13 @@ module Spud
84
110
  end
85
111
 
86
112
  sig {returns(T::Boolean)}
87
- def show_filenames?
88
- filenames.length > 1
113
+ def show_sources?
114
+ sources.length > 1
115
+ end
116
+
117
+ sig {returns(T::Array[String])}
118
+ def sources
119
+ @filenames ||= @tasks.map(&:source).uniq
89
120
  end
90
121
  end
91
122
  end
@@ -0,0 +1,56 @@
1
+ # typed: true
2
+ require 'sorbet-runtime'
3
+ require 'yaml'
4
+ require 'spud/driver'
5
+ require 'spud/shell/command'
6
+ require 'spud/task_runners/task'
7
+
8
+ module Spud
9
+ module TaskRunners
10
+ module DockerCompose
11
+ class Task < TaskRunners::Task
12
+ extend T::Sig
13
+
14
+ sig {override.returns(String)}
15
+ attr_reader :name
16
+
17
+ sig {override.params(driver: Driver).returns(T::Array[TaskRunners::Task])}
18
+ def self.tasks(driver)
19
+ return [] unless File.exist?('docker-compose.yml')
20
+
21
+ if `command -v docker-compose`.empty?
22
+ puts 'docker-compose.yml detected, but no installation of `docker-compose` exists. Skipping docker-compose...'
23
+ return []
24
+ end
25
+
26
+ source = File.read('docker-compose.yml')
27
+ contents = YAML.load(source)
28
+ services = contents['services']
29
+ services.map { |name, service| new(driver, name, service) }
30
+ end
31
+
32
+ sig {params(driver: Driver, name: String, service: T::Hash[String, T.untyped]).void}
33
+ def initialize(driver, name, service)
34
+ @driver = driver
35
+ @name = name
36
+ @service = service
37
+ end
38
+
39
+ sig {override.params(ordered: T::Array[String], named: T::Hash[String, String]).returns(T.untyped)}
40
+ def invoke(ordered, named)
41
+ system("docker-compose up #{@name} #{ordered.join(' ')}")
42
+ end
43
+
44
+ sig {override.returns(String)}
45
+ def source
46
+ 'docker-compose.yml'
47
+ end
48
+
49
+ sig {override.returns(String)}
50
+ def details
51
+ YAML.dump(@name => @service)
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -25,30 +25,30 @@ module Spud
25
25
 
26
26
  source = File.read('Makefile')
27
27
  T.unsafe(source.scan(/^(\S+):.*/)).map(&:first).map do |name|
28
- new(driver, name)
28
+ new(driver, name, source)
29
29
  end
30
30
  end
31
31
 
32
- sig {params(driver: Driver, name: String).void}
33
- def initialize(driver, name)
32
+ sig {params(driver: Driver, name: String, make_source: String).void}
33
+ def initialize(driver, name, make_source)
34
34
  @driver = driver
35
35
  @name = name
36
+ @make_source = make_source
36
37
  end
37
38
 
38
39
  sig {override.params(ordered: T::Array[String], named: T::Hash[String, String]).returns(T.untyped)}
39
40
  def invoke(ordered, named)
40
- Shell::Command.("make #{name}", driver: @driver)
41
+ system("make #{name}")
41
42
  end
42
43
 
43
44
  sig {override.returns(String)}
44
- def filename
45
+ def source
45
46
  'Makefile'
46
47
  end
47
48
 
48
49
  sig {override.returns(String)}
49
50
  def details
50
- source = File.read('Makefile')
51
- lines = source.split("\n")
51
+ lines = @make_source.split("\n")
52
52
  cursor = 0
53
53
 
54
54
  cursor += 1 until lines[cursor]&.start_with?(name)
@@ -36,8 +36,8 @@ module Spud
36
36
  end
37
37
 
38
38
  source = File.read('package.json')
39
- json = JSON.parse(source)
40
- scripts = json['scripts']
39
+ contents = JSON.parse(source)
40
+ scripts = contents['scripts']
41
41
  return [] unless scripts
42
42
 
43
43
  scripts.keys.map { |name| new(driver, name, command, scripts) }
@@ -53,11 +53,11 @@ module Spud
53
53
 
54
54
  sig {override.params(ordered: T::Array[String], named: T::Hash[String, String]).returns(T.untyped)}
55
55
  def invoke(ordered, named)
56
- Shell::Command.("#{@command} run #{name}", driver: @driver)
56
+ system("#{@command} run #{name}")
57
57
  end
58
58
 
59
59
  sig {override.returns(String)}
60
- def filename
60
+ def source
61
61
  'package.json'
62
62
  end
63
63
 
@@ -0,0 +1,59 @@
1
+ # typed: true
2
+ require 'sorbet-runtime'
3
+ require 'rake'
4
+ require 'spud/driver'
5
+ require 'spud/task_arg'
6
+ require 'spud/task_args'
7
+ require 'spud/task_runners/task'
8
+
9
+ module Spud
10
+ module TaskRunners
11
+ module RakeTaskRunner
12
+ class Task < TaskRunners::Task
13
+ extend T::Sig
14
+
15
+ sig {override.params(driver: Driver).returns(T::Array[TaskRunners::Task])}
16
+ def self.tasks(driver)
17
+ app = Rake.application
18
+ rakefile = app.find_rakefile_location&.first
19
+ return [] if rakefile.nil?
20
+
21
+ app.init('rake', [])
22
+ app.load_rakefile
23
+
24
+ app.tasks.map(&method(:new))
25
+ end
26
+
27
+ sig {params(task: Rake::Task).void}
28
+ def initialize(task)
29
+ @rake_task = task
30
+ end
31
+
32
+ sig {override.params(ordered: T::Array[String], named: T::Hash[String, String]).returns(T.untyped)}
33
+ def invoke(ordered, named)
34
+ T.unsafe(@rake_task).invoke(*ordered)
35
+ end
36
+
37
+ sig {override.returns(String)}
38
+ def name
39
+ @rake_task.name
40
+ end
41
+
42
+ sig {override.returns(String)}
43
+ def source
44
+ 'rake'
45
+ end
46
+
47
+ sig {override.returns(TaskArgs)}
48
+ def args
49
+ TaskArgs.new(@rake_task.arg_names.map { |arg_name| TaskArg.new(arg_name.to_s, 'ordered') })
50
+ end
51
+
52
+ sig {override.returns(String)}
53
+ def details
54
+ "#{@rake_task.name_with_args}"
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -16,8 +16,9 @@ module Spud
16
16
  class Task < TaskRunners::Task
17
17
  extend T::Sig
18
18
 
19
- sig {override.returns(String)}
19
+ sig {returns(String)}
20
20
  attr_reader :filename
21
+ alias source filename
21
22
 
22
23
  sig {override.returns(String)}
23
24
  attr_reader :name
@@ -27,7 +28,7 @@ module Spud
27
28
 
28
29
  sig {override.params(driver: Driver).returns(T::Array[TaskRunners::Task])}
29
30
  def self.tasks(driver)
30
- Dir['**/Spudfile', '**/*.spud'].flat_map { |filename| FileDSL.run(driver, filename) }
31
+ Dir['Spudfile', '*.spud'].flat_map { |filename| FileDSL.run(driver, filename) }
31
32
  end
32
33
 
33
34
  sig {params(filename: String, name: String).returns(String)}
@@ -17,13 +17,9 @@ module Spud
17
17
  def name; end
18
18
 
19
19
  sig {abstract.returns(String)}
20
- def filename; end
20
+ def source; end
21
21
 
22
- sig do
23
- abstract
24
- .params(ordered: T::Array[String], named: T::Hash[String, String])
25
- .returns(T.untyped)
26
- end
22
+ sig {abstract.params(ordered: T::Array[String], named: T::Hash[String, String]).returns(T.untyped)}
27
23
  def invoke(ordered, named); end
28
24
 
29
25
  sig {overridable.returns(TaskArgs)}
@@ -1,9 +1,11 @@
1
- # typed: strict
1
+ # typed: true
2
2
  require 'sorbet-runtime'
3
3
  require 'spud/task_runners/task'
4
4
  require 'spud/task_runners/spud_task_runner/task'
5
+ require 'spud/task_runners/rake_task_runner/task'
5
6
  require 'spud/task_runners/make/task'
6
7
  require 'spud/task_runners/package.json/task'
8
+ require 'spud/task_runners/docker-compose/task'
7
9
 
8
10
  module Spud
9
11
  module TaskRunners
@@ -12,14 +14,15 @@ module Spud
12
14
  sig {returns(T::Array[T.class_of(Task)])}
13
15
  def self.get
14
16
  # Ordered by priority
15
- T.let(
16
- [
17
- T.let(SpudTaskRunner::Task, T.class_of(Task)),
18
- T.let(Make::Task, T.class_of(Task)),
19
- T.let(PackageJSON::Task, T.class_of(Task)),
20
- ],
21
- T::Array[T.class_of(Task)]
22
- )
17
+ runners = [
18
+ SpudTaskRunner::Task,
19
+ RakeTaskRunner::Task,
20
+ Make::Task,
21
+ PackageJSON::Task,
22
+ DockerCompose::Task,
23
+ ]
24
+
25
+ T.let(runners, T::Array[T.class_of(Task)])
23
26
  end
24
27
  end
25
28
  end
@@ -1,4 +1,4 @@
1
1
  # typed: strict
2
2
  module Spud
3
- VERSION = '0.2.6'
3
+ VERSION = '0.2.9'
4
4
  end
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.6
4
+ version: 0.2.9
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-23 00:00:00.000000000 Z
11
+ date: 2020-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sorbet-runtime
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.5.6100
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '13.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '13.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rspec
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -101,8 +115,10 @@ files:
101
115
  - lib/spud/shell/result.rb
102
116
  - lib/spud/task_arg.rb
103
117
  - lib/spud/task_args.rb
118
+ - lib/spud/task_runners/docker-compose/task.rb
104
119
  - lib/spud/task_runners/make/task.rb
105
120
  - lib/spud/task_runners/package.json/task.rb
121
+ - lib/spud/task_runners/rake_task_runner/task.rb
106
122
  - lib/spud/task_runners/spud_task_runner/dependency.rb
107
123
  - lib/spud/task_runners/spud_task_runner/file_dsl.rb
108
124
  - lib/spud/task_runners/spud_task_runner/task.rb