doit 0.2.8 → 1.0.1

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
- SHA1:
3
- metadata.gz: 21d9aef9f7bf2563d6dbaf3125b06bb63f2c51c8
4
- data.tar.gz: 927348c96fa1346a51c3f5ee19c0ca23db64698b
2
+ SHA256:
3
+ metadata.gz: 062ff1abf6d388eaef7a3bc4ce063c24e2c7b99deff85250dbb0b499170b1200
4
+ data.tar.gz: e2f62709fda2f9e1deb32daeb0026ea9c58c8dc64751c877d275be95d546dc10
5
5
  SHA512:
6
- metadata.gz: 9d68dd4dec5bb8d71ba463b80fd99e545e531331dd275a277026377675a61b540e38dadc197177a298bd070985d4f613a02fcfd3259feb577c4b0574ee59a1b6
7
- data.tar.gz: 52df7f1d400a16564168e1fb253020a17bf015877915fe3b7b22a5897ed69683d44745231cead599c5dd732b1f390248b537c3c57f0e580a71c40049e3b8f2c9
6
+ metadata.gz: 8e90e343ee283fe75597223adc64937058647e243b810872aca1f08bf8cfac7708846e89002de4823aba8d40063113a4f7c30a0a44c7a507853557cdbb7b201d
7
+ data.tar.gz: 6a3590e52412da8e5f55532c04a784d65f36e19915e8779714c0ea2ebad8df3997cf294dfa44c456ea8ef96e1f8da43b1290f67b27883b888f293cee0eccdcfb
data/.doit/hello CHANGED
@@ -1,2 +1,3 @@
1
+ # usage just a test
1
2
  echo Hello
2
3
  pwd
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ *.gem
2
+ tmp/
data/.rubocop.yml ADDED
@@ -0,0 +1,10 @@
1
+ inherit_from:
2
+ - ~/configs/.rubocop.yml
3
+
4
+ AllCops:
5
+ Include:
6
+ - 'lib/**/*.rb'
7
+
8
+ Exclude:
9
+ - 'bin/**/*'
10
+ - 'test/**/*'
data/.ruby-gemset CHANGED
@@ -1 +1 @@
1
- rails-4.2
1
+ rails-6.1
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.2.3
1
+ ruby-2.7.2
data/.travis.yml CHANGED
@@ -1,8 +1,22 @@
1
1
  language: ruby
2
- sudo: false
2
+
3
+ #bundler_args: --without production
4
+ bundle config set without production
5
+ script: "bundle exec rake test"
6
+
3
7
  rvm:
4
- - 2.0.0
5
- - 2.2.3
8
+ - 2.7.2 # 2020-10-26
9
+ # - 2.6.6 # 2020-07-17
10
+ # - 2.6.5 # 2019-10-29
11
+ # - 2.6.4 # 2019-10-15
12
+ # - 2.6.3 # 2019-06-21
13
+ # - 2.6.1
14
+ # - 2.5.1
15
+ # - 2.5.0
16
+ # - 2.4.1
17
+ # - 2.3.0 # tested; no longer in CI
18
+ # - 2.2.3 # tested; no longer in CI
19
+ # - 2.0.0 # tested; no longer in CI
6
20
 
7
21
  notifications:
8
22
  email: false
data/.watchr CHANGED
@@ -16,31 +16,35 @@ end
16
16
 
17
17
  def run_it(type, file)
18
18
  case type
19
- when 'test'; run %Q{ruby -I"lib:test" -rubygems #{file}}
19
+ when 'test'; run %Q(ruby -I"lib:test" -r rubygems #{file})
20
20
  else; puts "#{H} unknown type: #{type}, file: #{file}"
21
21
  end
22
22
  end
23
23
 
24
24
  def run_all_tests
25
25
  puts "\n#{HH} Running all tests #{HH}\n"
26
- %w{test}.each { |dir| run "rake #{dir}" if File.exists?(dir) }
26
+ %w[test].each { |dir| run "rake #{dir}" if File.exist?(dir) }
27
27
  end
28
28
 
29
29
  def run_matching_files(base)
30
30
  base = base.split('_').first
31
- %w{test spec}.each { |type|
31
+ %w[test spec].each { |type|
32
32
  files = Dir["#{type}/**/*.rb"].select { |file| file =~ /#{base}_.*\.rb/ }
33
33
  run_it type, files.join(' ') unless files.empty?
34
34
  }
35
35
  end
36
36
 
37
- %w{test spec}.each { |type|
37
+ %w[test spec].each { |type|
38
38
  watch("#{type}/#{type}_helper\.rb") { run_all_tests }
39
39
  watch("#{type}/.*/*_#{type}\.rb") { |match| run_it type, match[0] }
40
+ watch("#{type}/data/(.*)\.rb") { |match|
41
+ m1 = match[1]
42
+ run_matching_files("#{type}/#{m1}/#{m1}_#{type}.rb")
43
+ }
40
44
  }
41
- %w{rb erb haml slim}.each { |type|
42
- watch(".*/.*\.#{type}") { |m|
43
- run_matching_files("#{m[0].split('/').last.split('.').first}")
45
+ %w[rb erb haml slim].each { |type|
46
+ watch("app/.*/(.*)\.#{type}") { |match|
47
+ run_matching_files(match[1])
44
48
  }
45
49
  }
46
50
 
data/Gemfile CHANGED
@@ -1,15 +1,9 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'micro-optparse'
3
+ gemspec
4
4
 
5
5
  group :test do
6
- gem 'simplecov', require: false
7
- end
8
-
9
- group :test, :development do
10
- gem 'rake'
11
6
  gem 'observr'
12
- gem 'minitest'
7
+ gem 'rubocop', require: false
8
+ gem 'simplecov', require: false
13
9
  end
14
-
15
- gemspec
data/Gemfile.lock CHANGED
@@ -1,34 +1,56 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- doit (0.2.8)
4
+ doit (1.0.1)
5
5
  micro-optparse (~> 1)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- docile (1.1.5)
11
- json (1.8.3)
12
- micro-optparse (1.2.0)
13
- minitest (5.8.3)
10
+ ast (2.4.2)
11
+ docile (1.3.5)
12
+ micro-optparse (1.2.1)
13
+ minitest (5.14.4)
14
14
  observr (1.0.5)
15
- rake (10.4.2)
16
- simplecov (0.11.1)
17
- docile (~> 1.1.0)
18
- json (~> 1.8)
19
- simplecov-html (~> 0.10.0)
20
- simplecov-html (0.10.0)
15
+ parallel (1.20.1)
16
+ parser (3.0.1.0)
17
+ ast (~> 2.4.1)
18
+ rainbow (3.0.0)
19
+ rake (13.0.3)
20
+ regexp_parser (2.1.1)
21
+ rexml (3.2.5)
22
+ rubocop (1.13.0)
23
+ parallel (~> 1.10)
24
+ parser (>= 3.0.0.0)
25
+ rainbow (>= 2.2.2, < 4.0)
26
+ regexp_parser (>= 1.8, < 3.0)
27
+ rexml
28
+ rubocop-ast (>= 1.2.0, < 2.0)
29
+ ruby-progressbar (~> 1.7)
30
+ unicode-display_width (>= 1.4.0, < 3.0)
31
+ rubocop-ast (1.4.1)
32
+ parser (>= 2.7.1.5)
33
+ ruby-progressbar (1.11.0)
34
+ simplecov (0.21.2)
35
+ docile (~> 1.1)
36
+ simplecov-html (~> 0.11)
37
+ simplecov_json_formatter (~> 0.1)
38
+ simplecov-html (0.12.3)
39
+ simplecov_json_formatter (0.1.2)
40
+ unicode-display_width (2.0.0)
21
41
 
22
42
  PLATFORMS
23
- ruby
43
+ x86_64-linux
24
44
 
25
45
  DEPENDENCIES
46
+ bundler (~> 2)
26
47
  doit!
27
- micro-optparse
28
- minitest
48
+ micro-optparse (~> 1)
49
+ minitest (~> 5)
29
50
  observr
30
- rake
51
+ rake (~> 13)
52
+ rubocop
31
53
  simplecov
32
54
 
33
55
  BUNDLED WITH
34
- 1.10.6
56
+ 2.2.6
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 Dittmar Krall
1
+ Copyright (c) 2014-2020 Dittmar Krall
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy of
4
4
  this software and associated documentation files (the "Software"), to deal in
data/README.md CHANGED
@@ -5,6 +5,10 @@ Executes good old shell/bash scripts locally as well as remotely.
5
5
  The environment is set by a ".yml" configuration file.
6
6
  An array environment variable triggers multiple calls of the script.
7
7
 
8
+ The "where" in the configuration indicates where to run the script.
9
+
10
+ See examples below.
11
+
8
12
  Installation
9
13
  ------------
10
14
  gem install doit
@@ -19,22 +23,25 @@ Options
19
23
  -------
20
24
  -l, --[no-]list Lists available scripts
21
25
  -r, --remote ["host"] remote host or comma separated hosts
26
+ -e, --[no-]each Lists each remote command (no execution)
22
27
  -s, --[no-]silent run silently; suppress output
23
28
  -v, --[no-]verbose Enable verbose output
24
29
  -n, --[no-]noop Suppress execution of commannds
25
30
  -h, --help Show this message
26
31
  -V, --version Print version
27
32
 
33
+
28
34
  File Structure
29
35
  --------------
30
36
  ~/.doit/deploy # chmod +x .doit/deploy
31
37
  ~/.doit/deploy.yml
32
- $PROJ/.doit/deploy.yml # overwrites
33
- $PROJ/.doit/push # chmod +x .doit/deploy
38
+ $PROJ/.doit/deploy.yml # overwrites $HOME(~/) script/configuration
39
+ $PROJ/.doit/push # chmod +x .doit/push
34
40
  $PROJ/.doit/push.yml
35
41
 
36
42
  $PROJ/.doit/push
37
43
  ----------------
44
+ #! /bin/sh
38
45
  if ! (git status | grep 'nothing to commit'); then
39
46
  echo "push: commits are pending"
40
47
  exit 1
@@ -68,4 +75,4 @@ $PROJ/.doit/push
68
75
  - bob@sample.com
69
76
  - alice@customer.com
70
77
 
71
- Copyright (c) 2014 [Dittmar Krall], released under the MIT license
78
+ Copyright (c) 2014-2019 [Dittmar Krall], released under the MIT license.
data/bin/doit CHANGED
@@ -1,20 +1,24 @@
1
- #!/usr/bin/env ruby
1
+ #! /usr/bin/env ruby
2
2
 
3
- lib = File.expand_path('../../lib/', __FILE__)
4
- $:.unshift lib unless $:.include?(lib)
3
+ lib = File.expand_path('../lib/', __dir__)
4
+ # $:.unshift lib unless $:.include?(lib)
5
+ $LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
5
6
 
6
7
  require 'doit'
7
8
  require 'micro-optparse'
8
9
  require 'globals'
10
+ require 'what'
9
11
 
10
12
  options = Parser.new do |p|
11
- p.banner = "Usage: doit script... [options] # execute locally or remotely"
12
- p.version = "doit #{Globals::VERSION}"
13
- p.option :list, 'Lists available scripts'
14
- p.option :remote, 'Remote host or comma separated hosts', default: '---', optional: true
15
- p.option :silent, 'Run silently; suppress output'
16
- p.option :verbose, 'Enable verbose output'
17
- p.option :noop, 'Suppress execution of commannds'
13
+ p.banner = 'Usage: doit script... [options] # execute locally or remotely'
14
+ p.version = "doit #{Globals::VERSION}"
15
+ p.option :list, 'Lists available scripts'
16
+ p.option :each, 'Lists each remote command (no execution)'
17
+ p.option :remote, 'Remote host or comma separated hosts',
18
+ default: '...', optional: true
19
+ p.option :silent, 'Run silently; suppress output'
20
+ p.option :verbose, 'Enable verbose output'
21
+ p.option :noop, 'Suppress execution of commannds'
18
22
  end.process!
19
23
 
20
24
  Doit.start(options)
data/doit.gemspec CHANGED
@@ -1,22 +1,28 @@
1
- $:.push File.expand_path("../lib", __FILE__)
1
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
2
2
  require 'globals'
3
3
 
4
- Gem::Specification.new do |gem|
5
- gem.name = 'doit'
6
- gem.version = Globals::VERSION
7
- gem.summary = "Simple local & remote script executor"
8
- gem.description = "Run good old shell/bash scripts locally or remotely(ssh)."
4
+ Gem::Specification.new do |s|
5
+ s.name = 'doit'
6
+ s.version = Globals::VERSION
7
+ s.summary = 'Simple local & remote script executor'
8
+ s.description = 'Run good old shell/bash scripts locally or remotely(ssh).'
9
9
 
10
- gem.authors = ['Dittmar Krall']
11
- gem.email = 'dittmar.krall@matique.de'
12
- gem.homepage = 'http://www.matique.de'
13
- gem.license = 'MIT'
10
+ s.authors = ['Dittmar Krall']
11
+ s.email = 'dittmar.krall@matique.de'
12
+ s.homepage = 'http://www.matique.de'
13
+ s.license = 'MIT'
14
14
 
15
- gem.add_dependency 'micro-optparse', '~> 1'
15
+ s.add_dependency 'micro-optparse', '~> 1'
16
16
 
17
- gem.files = `git ls-files`.split("\n")
18
- gem.test_files = `git ls-files -- test`.split("\n")
19
- gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
- gem.require_paths = ["lib"]
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- test`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`
20
+ .split("\n").map { |f| File.basename(f) }
21
+ s.require_paths = ['lib']
21
22
 
23
+ s.add_development_dependency 'bundler', '~> 2'
24
+ s.add_development_dependency 'rake', '~> 13'
25
+
26
+ s.add_development_dependency 'micro-optparse', '~> 1'
27
+ s.add_development_dependency 'minitest', '~> 5'
22
28
  end
data/lib/doit.rb CHANGED
@@ -1,11 +1,13 @@
1
+ # rubocop: disable all
2
+
1
3
  require 'my'
2
4
  require 'run'
3
5
  require 'import'
4
- require 'what'
5
6
 
6
- class Doit
7
+ Doit = Object.new
8
+ class << Doit
7
9
 
8
- def self.start(options)
10
+ def start(options)
9
11
  @options = options
10
12
  list if options[:list]
11
13
 
@@ -15,54 +17,59 @@ class Doit
15
17
  execute(script) if script
16
18
  end
17
19
 
18
- def self.options
19
- @options || {}
20
+ def options
21
+ @options ||= {}
22
+ @options
20
23
  end
21
24
 
22
- def self.list
25
+ def list
23
26
  hsh = Import.list
24
27
  hsh.sort.each { |abb, long|
25
28
  puts "#{abb}\t- #{long}"
26
29
  next unless options[:verbose]
30
+
27
31
  lines = `grep -i 'usage\\|summary' #{long} | grep '^#'`.split("\n")
28
32
  lines.each { |line|
29
33
  next unless line
30
34
  next if line.empty?
35
+
31
36
  puts "\t #{line}"
32
37
  }
33
38
  }
34
39
  end
35
40
 
36
- def self.execute(name)
41
+ def execute(name)
37
42
  Import.init(name)
38
43
  unless Import.script
39
44
  puts "doit: script '#{name}' not found"
40
45
  return
41
46
  end
42
- What.init(Import.script, Import.config)
47
+ What.init(Import.config)
48
+
49
+ What.where.each { |w| puts "doit #{name} -r #{w}" } if options[:each]
43
50
 
44
- where_loop
51
+ where_loop unless options[:each]
45
52
  end
46
53
 
47
54
  private
48
- def self.where_loop
55
+ def where_loop
49
56
  What.where.each { |w|
50
57
  matrix_loop(w)
51
58
  }
52
59
  end
53
60
 
54
- def self.matrix_loop(w)
61
+ def matrix_loop(where)
55
62
  What.matrix.each { |mm|
56
63
  prefix = mm.empty? ? '' : "#{What.to_env(mm)}\n"
57
64
 
58
65
  What.env.each { |en|
59
- prefix2 = en.empty? ? '' : "#{en}\n"
66
+ prefix2 = en.empty? ? '' : "#{en}\n"
60
67
 
61
- cmds = Import.script
62
- cmds = @argv + prefix + prefix2 + cmds
63
- Run.init cmds, w
64
- Run.info if options[:verbose]
65
- Run.run
68
+ cmds = Import.script
69
+ cmds = @argv + prefix + prefix2 + cmds
70
+ Run.init cmds, where
71
+ Run.info if options[:verbose]
72
+ Run.run
66
73
  }
67
74
  }
68
75
  end
data/lib/globals.rb CHANGED
@@ -1,3 +1,13 @@
1
+ # rubocop: disable all
2
+
1
3
  module Globals
2
- VERSION = '0.2.8'
4
+ VERSION = '1.0.1' # 2021-04-21
5
+ # VERSION = '1.0.0' # 2020-10-26
6
+ # VERSION = '0.3.9' # 2020-07-17
7
+ # VERSION = '0.3.8' # 2020-02-26
8
+ # VERSION = '0.3.7' # 2019-10-15
9
+ # VERSION = '0.3.6' # 2019-03-06
10
+ # VERSION = '0.3.5' # 2018-09-11
11
+ # VERSION = '0.3.4' # 2018-08-19
12
+ # VERSION = '0.3.3'
3
13
  end
data/lib/import.rb CHANGED
@@ -1,32 +1,41 @@
1
+ # rubocop: disable all
2
+
1
3
  require 'pathname'
2
4
  require 'erb'
3
5
 
4
- class Import
6
+ Import = Object.new
7
+ class << Import
5
8
 
6
- def self.script; @script; end
7
- def self.config; @config; end
9
+ def script
10
+ @script ||= nil
11
+ @script
12
+ end
8
13
 
9
- def self.init(name)
14
+ def config
15
+ @config ||= nil
16
+ @config
17
+ end
18
+
19
+ def init(name)
10
20
  @script = read(name)
11
21
  @config = ERB.new(read("#{name}.yml") || '').result
12
22
  info
13
23
  end
14
24
 
15
25
  # returns Hash { 'pull' => '/home/dk/.doit/pull', ... }
16
- def self.list
26
+ def list
17
27
  @list ||= list2
18
28
  end
19
29
 
20
- def self.info
30
+ def info
21
31
  return unless Doit.options[:verbose]
22
32
 
23
- My.verbose "SCRIPT", @script
24
- My.verbose "CONFIG(yml)", @config
33
+ My.verbose 'SCRIPT', @script
34
+ My.verbose 'CONFIG(yml)', @config
25
35
  end
26
36
 
27
-
28
37
  private
29
- def self.list2
38
+ def list2
30
39
  res = {}
31
40
  Pathname.pwd.descend { |dir|
32
41
  doit_dir = dir + '.doit'
@@ -46,14 +55,14 @@ class Import
46
55
  res
47
56
  end
48
57
 
49
- def self.read(name)
58
+ def read(name)
50
59
  try_ascend(".doit/#{name}")
51
60
  end
52
61
 
53
- def self.try_ascend(filename)
62
+ def try_ascend(filename)
54
63
  Pathname.pwd.ascend { |dir|
55
64
  str = dir + filename
56
- return File.read(str) if File.exists?(str)
65
+ return File.read(str) if File.exist?(str)
57
66
  }
58
67
  nil
59
68
  end
data/lib/my.rb CHANGED
@@ -1,9 +1,12 @@
1
- class My
1
+ # frozen_string_literal: true
2
2
 
3
- def self.verbose(what, txt)
4
- marker = '*'*4
3
+ My = Object.new
4
+
5
+ class << My
6
+ def verbose(what, txt)
7
+ marker = '*' * 4
5
8
  arr = txt
6
- arr = txt ? txt.split("\n") : '' unless Array === txt
9
+ arr = txt ? txt.split("\n") : '' unless txt.is_a?(Array)
7
10
  if arr.length > 1
8
11
  puts "#{marker} #{what} #{marker}"
9
12
  puts txt
@@ -12,5 +15,4 @@ class My
12
15
  puts "#{marker} #{what}: #{txt}"
13
16
  end
14
17
  end
15
-
16
18
  end
data/lib/run.rb CHANGED
@@ -1,9 +1,12 @@
1
- class Run
1
+ # rubocop: disable all
2
2
 
3
- def self.ssh; @ssh; end
3
+ Run = Object.new
4
+ class << Run
4
5
 
5
- def self.init(cmds, where)
6
- aster = '*'*24
6
+ attr_reader :ssh
7
+
8
+ def init(cmds, where)
9
+ aster = '*' * 24
7
10
  puts "#{aster} #{where} #{aster}"
8
11
  @ssh = nil
9
12
  @cmds = cmds
@@ -17,25 +20,25 @@ class Run
17
20
  dir = where
18
21
  end
19
22
 
20
- @cmds = "cd; cd #{dir}\n" + @cmds unless dir && dir.empty?
23
+ @cmds = "cd; cd #{dir}\n" + @cmds unless dir&.empty?
21
24
  @ssh = "ssh #{host}" if host
22
25
  end
23
26
 
24
- def self.info
27
+ def info
25
28
  My.verbose('SSH', @ssh)
26
29
  My.verbose('cmds', @cmds)
27
30
  end
28
31
 
29
- def self.run
32
+ def run
30
33
  here = '___EOS___'
31
34
  silent = Doit.options[:silent] ? '>/dev/null' : ''
32
35
  cmd = "cat <<'#{here}\' | #{@ssh} bash -i -l #{silent} 2>&1"
33
36
  cmds = "#{cmd}\n#{@cmds}#{here}\n"
34
37
 
35
- unless Doit.options[:noop]
36
- IO.popen(cmds) { |p| p.each { |f| puts f } }
37
- else
38
+ if Doit.options[:noop]
38
39
  My.verbose('noop', cmds)
40
+ else
41
+ IO.popen(cmds) { |p| p.each { |f| puts f } }
39
42
  end
40
43
  end
41
44
 
data/lib/what.rb CHANGED
@@ -1,13 +1,16 @@
1
+ # rubocop: disable all
2
+
1
3
  require 'yaml'
2
4
  require 'doit'
3
5
 
4
- class What
6
+ What = Object.new
7
+ class << What
5
8
 
6
- def self.matrix; @matrix; end
7
- def self.where; @where; end
8
- def self.env; @env; end
9
+ attr_reader :matrix
10
+ attr_reader :where
11
+ attr_reader :env
9
12
 
10
- def self.init(script, config)
13
+ def init(config)
11
14
  @matrix = nil
12
15
  @yml = (config && YAML.load(config)) || {}
13
16
 
@@ -23,37 +26,38 @@ class What
23
26
 
24
27
  build_matrix
25
28
  @matrix ||= []
26
- @matrix = [@matrix] unless Array === @matrix.first
29
+ @matrix = [@matrix] unless @matrix.first.is_a?(Array)
27
30
  @matrix.map! { |m| m.flatten.inject({}) { |hsh, h| hsh.merge(h) } }
28
31
  info
29
32
  end
30
33
 
31
- def self.to_env(hsh)
34
+ def to_env(hsh)
32
35
  arr = hsh.collect { |key, value| "#{key.to_s.upcase}=#{value}" }
33
36
  arr.join ' '
34
37
  end
35
38
 
36
- def self.info
39
+ def info
37
40
  return unless Doit.options[:verbose]
38
41
 
39
- My.verbose "where", @where
40
- My.verbose "matrix", @matrix
41
- My.verbose "env", @env
42
+ My.verbose 'where', @where
43
+ My.verbose 'matrix', @matrix
44
+ My.verbose 'env', @env
42
45
  end
43
46
 
44
-
45
47
  private
46
- def self.build_matrix
47
- unless @yml.empty?
48
- key, value = @yml.first
49
- @yml.delete(key)
50
- add_to_matrix(key, value)
51
- build_matrix
52
- end
48
+ def build_matrix
49
+ return if @yml.empty?
50
+
51
+ key, value = @yml.first
52
+ @yml.delete(key)
53
+ add_to_matrix(key, value)
54
+ build_matrix
53
55
  end
54
56
 
55
- def self.add_to_matrix(key, val)
56
- arr = Array === val ? val.collect {|v| [{key => v}] } : [{key => val}]
57
+ def add_to_matrix(key, val)
58
+ arr = val.is_a?(Array) ?
59
+ val.collect { |v| [{ key => v }] } :
60
+ [{ key => val }]
57
61
  @matrix = @matrix ? @matrix.product(arr) : arr
58
62
  end
59
63
 
data/test/doit_test.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require 'test_helper'
2
- require 'doit'
3
2
 
4
3
  describe Doit do
5
4
 
@@ -7,34 +6,48 @@ describe Doit do
7
6
  Doit.start({})
8
7
  end
9
8
 
10
- it "start" do
11
- out = noop { }
9
+ it 'start' do
10
+ out = noop {}
12
11
  assert_equal '', out
13
12
  end
14
13
 
15
- it "options" do
14
+ it 'options' do
16
15
  assert_equal({}, Doit.options)
17
16
  end
18
17
 
19
- it "list" do
18
+ it 'list' do
20
19
  out = noop {
21
20
  Doit.list
22
21
  }
23
- assert_match /\/\.doit/, out
22
+ assert_match(/\/\.doit/, out)
24
23
  end
25
24
 
26
- it "execute" do
27
- out, err = capture_io do
25
+ it 'execute' do
26
+ out, _err = capture_io do
28
27
  Doit.execute('hello')
29
28
  end
30
- assert_match /\nHello\n/, out
29
+ assert_match(/\nHello\n/, out)
31
30
  end
32
31
 
33
- it "execute with unknown script" do
34
- out, err = capture_io do
32
+ it 'execute with unknown script' do
33
+ out, _err = capture_io do
35
34
  Doit.execute('______unknown______')
36
35
  end
37
- assert_match /not found/, out
36
+ assert_match(/not found/, out)
37
+ end
38
+
39
+ it 'tests option --each' do
40
+ out = noop(each: true) {
41
+ Doit.execute('hello')
42
+ }
43
+ assert_match(/doit hello -r/, out)
44
+ end
45
+
46
+ it 'coverage: list; option -lv' do
47
+ out = noop(verbose: true, list: true) {
48
+ Doit.start(verbose: true, list: true)
49
+ }
50
+ assert_match(/just a test\n/, out)
38
51
  end
39
52
 
40
53
  end
data/test/import_test.rb CHANGED
@@ -5,33 +5,33 @@ require 'my'
5
5
 
6
6
  describe Import do
7
7
 
8
- it "init fails with empty" do
8
+ it 'init fails with empty' do
9
9
  assert_raises(Errno::EISDIR) { Import.init('') }
10
10
  end
11
11
 
12
- it "init" do
12
+ it 'init' do
13
13
  Import.init('hello')
14
14
  end
15
15
 
16
- it "list" do
16
+ it 'list' do
17
17
  Import.init('hello')
18
- assert_match /\/\.doit\/hello$/, Import.list['hello']
18
+ assert_match(/\/\.doit\/hello$/, Import.list['hello'])
19
19
  end
20
20
 
21
- it "info" do
22
- out = noop({verbose: true}) {
21
+ it 'info' do
22
+ out = noop(verbose: true) {
23
23
  Import.init('hello')
24
24
  Import.info
25
25
  }
26
- assert_match /SCRIPT/, out
27
- assert_match /CONFIG/, out
26
+ assert_match(/SCRIPT/, out)
27
+ assert_match(/CONFIG/, out)
28
28
  end
29
29
 
30
- it "coverage: script" do
30
+ it 'coverage: script' do
31
31
  Import.script
32
32
  end
33
33
 
34
- it "coverage: config" do
34
+ it 'coverage: config' do
35
35
  Import.config
36
36
  end
37
37
 
data/test/my_test.rb CHANGED
@@ -3,20 +3,20 @@ require 'my'
3
3
 
4
4
  describe My do
5
5
 
6
- it "verbose" do
6
+ it 'verbose' do
7
7
  h = 'hello'
8
- out, err = capture_io do
8
+ out, _err = capture_io do
9
9
  My.verbose('a', h)
10
10
  end
11
- assert_match /#{h}/, out
11
+ assert_match(/#{h}/, out)
12
12
  end
13
13
 
14
- it "verbose text" do
14
+ it 'verbose text' do
15
15
  h = 'hello'
16
- out, err = capture_io do
16
+ out, _err = capture_io do
17
17
  My.verbose('a', "#{h}\nx\n")
18
18
  end
19
- assert_match /#{h}/, out
19
+ assert_match(/#{h}/, out)
20
20
  end
21
21
 
22
22
  end
data/test/run_test.rb CHANGED
@@ -5,54 +5,54 @@ require 'doit'
5
5
 
6
6
  describe Run do
7
7
 
8
- it "coverage #info" do
9
- out, err = capture_io do
8
+ it 'coverage #info' do
9
+ _out, _err = capture_io do
10
10
  Run.init('', '')
11
11
  Run.info
12
12
  end
13
13
  end
14
14
 
15
15
  it "where '' returns nil" do
16
- out, err = capture_io do
16
+ _out, _err = capture_io do
17
17
  Run.init('', '')
18
18
  assert_equal nil, Run.ssh
19
19
  end
20
20
  end
21
21
 
22
22
  it "where 'a' returns nil" do
23
- out, err = capture_io do
23
+ _out, _err = capture_io do
24
24
  Run.init('', 'a')
25
25
  assert_equal nil, Run.ssh
26
26
  end
27
27
  end
28
28
 
29
29
  it "where 'a@b' returns 'ssh a@b'" do
30
- out, err = capture_io do
30
+ _out, _err = capture_io do
31
31
  Run.init('', 'a@b')
32
32
  assert_equal 'ssh a@b', Run.ssh
33
33
  end
34
34
  end
35
35
 
36
36
  it "where 'a@b:c' returns 'ssh a@b'" do
37
- out, err = capture_io do
37
+ _out, _err = capture_io do
38
38
  Run.init('', 'a@b:c')
39
39
  assert_equal 'ssh a@b', Run.ssh
40
40
  end
41
41
  end
42
42
 
43
- it "coverage #run" do
44
- out, err = capture_io do
43
+ it 'coverage #run' do
44
+ _out, _err = capture_io do
45
45
  Run.init('', '')
46
46
  Run.run
47
47
  end
48
48
  end
49
49
 
50
- it "coverage #run noop" do
50
+ it 'coverage #run noop' do
51
51
  out = noop {
52
52
  Run.init('', '')
53
53
  Run.run
54
54
  }
55
- assert_match /EOS/, out
55
+ assert_match(/EOS/, out)
56
56
  end
57
57
 
58
58
  end
data/test/test_helper.rb CHANGED
@@ -4,15 +4,17 @@ SimpleCov.start do
4
4
  command_name 'Minitest'
5
5
  end
6
6
 
7
+ require 'what'
8
+
7
9
  require 'minitest/autorun'
8
10
 
9
- def noop(options = {noop: true}, &block)
11
+ def noop(options = { noop: true }, &block)
10
12
  return 'noop: missing block' unless block
11
13
 
12
14
  out = '---'
13
15
  Doit.stub :options, options do
14
- out, err = capture_io do
15
- block.call
16
+ out, _err = capture_io do
17
+ yield
16
18
  end
17
19
  end
18
20
  out
data/test/what_test.rb CHANGED
@@ -1,11 +1,10 @@
1
1
  require 'test_helper'
2
- require 'what'
3
2
  require 'my'
4
3
 
5
4
  describe What do
6
5
 
7
- it "is robust against empty params" do
8
- What.init('', '')
6
+ it 'is robust against empty params' do
7
+ What.init('')
9
8
  assert_equal [Dir.pwd], What.where
10
9
  assert_equal [{}], What.matrix
11
10
  end
@@ -14,32 +13,32 @@ describe What do
14
13
  assert_equal '', What.to_env({})
15
14
  end
16
15
 
17
- it "to_env converts variable to uppercase" do
18
- assert_equal 'A=1', What.to_env({a: 1})
16
+ it 'to_env converts variable to uppercase' do
17
+ assert_equal 'A=1', What.to_env(a: 1)
19
18
  end
20
19
 
21
- it "coverage: #info" do
22
- Doit.stub :options, {verbose: true} do
23
- out, err = capture_io do
24
- What.init('', '')
25
- What.info
20
+ it 'coverage: #info' do
21
+ Doit.stub :options, verbose: true do
22
+ _out, _err = capture_io do
23
+ What.init('')
24
+ What.info
26
25
  end
27
26
  end
28
27
  end
29
28
 
30
- it "builds simple matrix" do
31
- What.init('', "a: 1\n")
32
- assert_equal [{"a"=>1}], What.matrix
29
+ it 'builds simple matrix' do
30
+ What.init("a: 1\n")
31
+ assert_equal [{ 'a' => 1 }], What.matrix
33
32
  end
34
33
 
35
- it "builds matrix" do
36
- What.init('', "a:\n - 1\n - 2\n")
37
- assert_equal [{"a"=>1}, {"a"=>2}], What.matrix
34
+ it 'builds matrix' do
35
+ What.init("a:\n - 1\n - 2\n")
36
+ assert_equal [{ 'a' => 1 }, { 'a' => 2 }], What.matrix
38
37
  end
39
38
 
40
- it "builds product matrix" do
41
- What.init('', "a:\n - 1\nb:\n - 3\n - 4\n")
42
- assert_equal [{"a"=>1, "b"=>3}, {"a"=>1, "b"=>4}], What.matrix
39
+ it 'builds product matrix' do
40
+ What.init("a:\n - 1\nb:\n - 3\n - 4\n")
41
+ assert_equal [{ 'a' => 1, 'b' => 3 }, { 'a' => 1, 'b' => 4 }], What.matrix
43
42
  end
44
43
 
45
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: doit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dittmar Krall
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-19 00:00:00.000000000 Z
11
+ date: 2021-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: micro-optparse
@@ -24,6 +24,62 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '13'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '13'
55
+ - !ruby/object:Gem::Dependency
56
+ name: micro-optparse
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '5'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '5'
27
83
  description: Run good old shell/bash scripts locally or remotely(ssh).
28
84
  email: dittmar.krall@matique.de
29
85
  executables:
@@ -33,6 +89,8 @@ extra_rdoc_files: []
33
89
  files:
34
90
  - ".doit/hello"
35
91
  - ".doit/hello.yml"
92
+ - ".gitignore"
93
+ - ".rubocop.yml"
36
94
  - ".ruby-gemset"
37
95
  - ".ruby-version"
38
96
  - ".travis.yml"
@@ -75,8 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
133
  - !ruby/object:Gem::Version
76
134
  version: '0'
77
135
  requirements: []
78
- rubyforge_project:
79
- rubygems_version: 2.4.2
136
+ rubygems_version: 3.2.6
80
137
  signing_key:
81
138
  specification_version: 4
82
139
  summary: Simple local & remote script executor