doit 0.2.7 → 0.3.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 70518ea8bcbf0e15ac83df3e0e1e99e676550172
4
- data.tar.gz: 391276d0d384805aeb3840456663101d3dd99d2f
2
+ SHA256:
3
+ metadata.gz: 3b8c68afcf5f77a8417f547416d04bdc90c38f0cda47ec2614cb83367c472d31
4
+ data.tar.gz: ffad2c5f2b2e7ba683bf881d0214832ac61ac0c4a32c0136a0fde6ee24bb9de0
5
5
  SHA512:
6
- metadata.gz: 926ef9ba46971ca99ee2e431a1e19a03fbc8f6e8f65138cf97918ce3272db0b609e4fa984da5b5a57c5b4c1a93e17f8879b04b3dc9fcd90f6749ce4bcf152135
7
- data.tar.gz: 97085872c51e982f0b79f77b79de49da2126d81b684c3260c505b60c180eb55b8780df15d2bd807c17727343956f14fd3110ebd88db1ad2bfa9555a5259ff782
6
+ metadata.gz: 46c1dbc104ca4cfbf6b4045fd32ca1fb7709d74a4c4d5fe5c7bbeaa51d4ee3e13239a3b9bf69ac265e3bab24ec20b07140b340fe5f0495713213d875ef348d37
7
+ data.tar.gz: 67253a363b7fe882dd385c2cbd1738b5335c79c9332a882cc44be8ff870c223aa22acd4820c15973e5522c0a467da20cc6597223c17bd88402adc2f5c8f23a5f
@@ -1,2 +1,3 @@
1
+ # usage just a test
1
2
  echo Hello
2
3
  pwd
@@ -0,0 +1,2 @@
1
+ *.gem
2
+ tmp/
@@ -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/**/*'
@@ -1 +1 @@
1
- rails-4.1
1
+ rails-6.0
@@ -1 +1 @@
1
- ruby-2.1.4
1
+ ruby-2.6.6
@@ -1,5 +1,21 @@
1
- bundler_args: "--without development"
2
- script: bundle exec rake
1
+ language: ruby
2
+ sudo: false
3
+
4
+ bundler_args: --without production
5
+ script: "bundle exec rake test"
6
+
3
7
  rvm:
4
- - 2.0.0
5
- - 2.1.3
8
+ - 2.6.6 # 2020-07-17
9
+ # - 2.6.5 # 2019-10-29
10
+ # - 2.6.4 # 2019-10-15
11
+ # - 2.6.3 # 2019-06-21
12
+ # - 2.6.1
13
+ # - 2.5.1
14
+ # - 2.5.0
15
+ # - 2.4.1
16
+ # - 2.3.0 # tested; no longer in CI
17
+ # - 2.2.3 # tested; no longer in CI
18
+ # - 2.0.0 # tested; no longer in CI
19
+
20
+ notifications:
21
+ email: false
data/.watchr CHANGED
@@ -16,31 +16,38 @@ 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
+ # when 'test'; run %(rails test #{file})
21
+ when 'spec'; run %(spring rspec -X #{file})
20
22
  else; puts "#{H} unknown type: #{type}, file: #{file}"
21
23
  end
22
24
  end
23
25
 
24
26
  def run_all_tests
25
27
  puts "\n#{HH} Running all tests #{HH}\n"
26
- %w{test}.each { |dir| run "rake #{dir}" if File.exists?(dir) }
28
+ system "spring stop"
29
+ %w[test].each { |dir| run "rails #{dir}" if File.exist?(dir) }
27
30
  end
28
31
 
29
32
  def run_matching_files(base)
30
33
  base = base.split('_').first
31
- %w{test spec}.each { |type|
34
+ %w[test spec].each { |type|
32
35
  files = Dir["#{type}/**/*.rb"].select { |file| file =~ /#{base}_.*\.rb/ }
33
36
  run_it type, files.join(' ') unless files.empty?
34
37
  }
35
38
  end
36
39
 
37
- %w{test spec}.each { |type|
40
+ %w[test spec].each { |type|
38
41
  watch("#{type}/#{type}_helper\.rb") { run_all_tests }
39
42
  watch("#{type}/.*/*_#{type}\.rb") { |match| run_it type, match[0] }
43
+ watch("#{type}/data/(.*)\.rb") { |match|
44
+ m1 = match[1]
45
+ run_matching_files("#{type}/#{m1}/#{m1}_#{type}.rb")
46
+ }
40
47
  }
41
- %w{rb erb haml slim}.each { |type|
42
- watch(".*/.*\.#{type}") { |m|
43
- run_matching_files("#{m[0].split('/').last.split('.').first}")
48
+ %w[rb erb haml slim].each { |type|
49
+ watch("app/.*/(.*)\.#{type}") { |match|
50
+ run_matching_files(match[1])
44
51
  }
45
52
  }
46
53
 
data/Gemfile CHANGED
@@ -1,14 +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 'observr'
7
+ gem 'rubocop', require: false
6
8
  gem 'simplecov', require: false
7
9
  end
8
-
9
- group :test, :development do
10
- gem 'rake'
11
- gem 'watchr'
12
- end
13
-
14
- gemspec
@@ -1,29 +1,54 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- doit (0.2.7)
4
+ doit (0.3.9)
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
- micro-optparse (1.2.0)
12
- multi_json (1.10.1)
13
- rake (10.3.2)
14
- simplecov (0.9.1)
15
- docile (~> 1.1.0)
16
- multi_json (~> 1.0)
17
- simplecov-html (~> 0.8.0)
18
- simplecov-html (0.8.0)
19
- watchr (0.7)
10
+ ast (2.4.1)
11
+ docile (1.3.2)
12
+ micro-optparse (1.2.1)
13
+ minitest (5.14.1)
14
+ observr (1.0.5)
15
+ parallel (1.19.2)
16
+ parser (2.7.1.4)
17
+ ast (~> 2.4.1)
18
+ rainbow (3.0.0)
19
+ rake (13.0.1)
20
+ regexp_parser (1.7.1)
21
+ rexml (3.2.4)
22
+ rubocop (0.88.0)
23
+ parallel (~> 1.10)
24
+ parser (>= 2.7.1.1)
25
+ rainbow (>= 2.2.2, < 4.0)
26
+ regexp_parser (>= 1.7)
27
+ rexml
28
+ rubocop-ast (>= 0.1.0, < 1.0)
29
+ ruby-progressbar (~> 1.7)
30
+ unicode-display_width (>= 1.4.0, < 2.0)
31
+ rubocop-ast (0.1.0)
32
+ parser (>= 2.7.0.1)
33
+ ruby-progressbar (1.10.1)
34
+ simplecov (0.18.5)
35
+ docile (~> 1.1)
36
+ simplecov-html (~> 0.11)
37
+ simplecov-html (0.12.2)
38
+ unicode-display_width (1.7.0)
20
39
 
21
40
  PLATFORMS
22
41
  ruby
23
42
 
24
43
  DEPENDENCIES
44
+ bundler (~> 2)
25
45
  doit!
26
- micro-optparse
27
- rake
46
+ micro-optparse (~> 1)
47
+ minitest (~> 5)
48
+ observr
49
+ rake (~> 13)
50
+ rubocop
28
51
  simplecov
29
- watchr
52
+
53
+ BUNDLED WITH
54
+ 2.1.4
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)
@@ -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
@@ -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
@@ -1,3 +1,11 @@
1
+ # rubocop: disable all
2
+
1
3
  module Globals
2
- VERSION = '0.2.7'
4
+ VERSION = '0.3.9' # 2020-07-17
5
+ # VERSION = '0.3.8' # 2020-02-26
6
+ # VERSION = '0.3.7' # 2019-10-15
7
+ # VERSION = '0.3.6' # 2019-03-06
8
+ # VERSION = '0.3.5' # 2018-09-11
9
+ # VERSION = '0.3.4' # 2018-08-19
10
+ # VERSION = '0.3.3'
3
11
  end
@@ -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
 
@@ -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
 
@@ -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
@@ -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
 
@@ -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
@@ -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
@@ -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
@@ -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.7
4
+ version: 0.3.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dittmar Krall
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-19 00:00:00.000000000 Z
11
+ date: 2020-07-17 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.1.4
80
137
  signing_key:
81
138
  specification_version: 4
82
139
  summary: Simple local & remote script executor