eac_ruby_utils 0.1.0
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 +7 -0
- data/README.rdoc +3 -0
- data/lib/eac_ruby_utils.rb +17 -0
- data/lib/eac_ruby_utils/console/docopt_runner.rb +24 -0
- data/lib/eac_ruby_utils/console/speaker.rb +50 -0
- data/lib/eac_ruby_utils/envs.rb +13 -0
- data/lib/eac_ruby_utils/envs/base_env.rb +13 -0
- data/lib/eac_ruby_utils/envs/command.rb +120 -0
- data/lib/eac_ruby_utils/envs/local_env.rb +13 -0
- data/lib/eac_ruby_utils/envs/process.rb +18 -0
- data/lib/eac_ruby_utils/envs/ssh_env.rb +15 -0
- data/lib/eac_ruby_utils/version.rb +5 -0
- metadata +83 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d5fa1cf02f09675fc58d1578a7a65385540c409f
|
4
|
+
data.tar.gz: 3ae2e091eafcfadab182d82101fcabccd5d57ff6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 28c5eb7ca9b13a7a94b8a3bf1be07d69f9e53f0aeb7eccbcae1a697b60051c38e4c26dc6371aa87ac7c39167151e992168c8e2fe7e61e93867d792a29fa78968
|
7
|
+
data.tar.gz: 72fea88ff5a5b6c28318d5ea0399172001f4c932081f6d324e53089430012c800720afcf9b02625a5b6b41710092d1e20bdc0d03751e79fe451b2523406240fb
|
data/README.rdoc
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'colorize'
|
4
|
+
require 'docopt'
|
5
|
+
require 'open3'
|
6
|
+
require 'pp'
|
7
|
+
|
8
|
+
module EacRubyUtils
|
9
|
+
require 'eac_ruby_utils/console/docopt_runner'
|
10
|
+
require 'eac_ruby_utils/console/speaker'
|
11
|
+
require 'eac_ruby_utils/envs'
|
12
|
+
require 'eac_ruby_utils/envs/base_env'
|
13
|
+
require 'eac_ruby_utils/envs/command'
|
14
|
+
require 'eac_ruby_utils/envs/local_env'
|
15
|
+
require 'eac_ruby_utils/envs/process'
|
16
|
+
require 'eac_ruby_utils/envs/ssh_env'
|
17
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module EacRubyUtils
|
2
|
+
module Console
|
3
|
+
class DocoptRunner
|
4
|
+
attr_reader :options
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@options = Docopt.docopt(doc)
|
8
|
+
run
|
9
|
+
rescue Docopt::Exit => e
|
10
|
+
puts e.message
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def doc
|
16
|
+
self.class.const_get('DOC').gsub('__PROGRAM__', program)
|
17
|
+
end
|
18
|
+
|
19
|
+
def program
|
20
|
+
ENV['MYSELF_PROGRAM'] || $PROGRAM_NAME
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module EacRubyUtils
|
2
|
+
module Console
|
3
|
+
# https://github.com/fazibear/colorize
|
4
|
+
module Speaker
|
5
|
+
def puts(s = '')
|
6
|
+
STDERR.puts(s)
|
7
|
+
end
|
8
|
+
|
9
|
+
def out(s = '')
|
10
|
+
STDOUT.write(s)
|
11
|
+
end
|
12
|
+
|
13
|
+
def fatal_error(s)
|
14
|
+
puts "ERROR: #{s}".white.on_red
|
15
|
+
Kernel.exit 1
|
16
|
+
end
|
17
|
+
|
18
|
+
def title(s)
|
19
|
+
puts(('-' * (8 + s.length)).green)
|
20
|
+
puts("--- #{s} ---".green)
|
21
|
+
puts(('-' * (8 + s.length)).green)
|
22
|
+
puts
|
23
|
+
end
|
24
|
+
|
25
|
+
def info(s)
|
26
|
+
puts s.white
|
27
|
+
end
|
28
|
+
|
29
|
+
def warn(s)
|
30
|
+
puts s.yellow
|
31
|
+
end
|
32
|
+
|
33
|
+
def infov(*args)
|
34
|
+
r = []
|
35
|
+
args.each_with_index do |v, i|
|
36
|
+
if i.even?
|
37
|
+
r << "#{v}: ".cyan
|
38
|
+
else
|
39
|
+
r.last << v.to_s
|
40
|
+
end
|
41
|
+
end
|
42
|
+
puts r.join(', ')
|
43
|
+
end
|
44
|
+
|
45
|
+
def success(s)
|
46
|
+
puts s.green
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
module EacRubyUtils
|
2
|
+
module Envs
|
3
|
+
class Command
|
4
|
+
include EacRubyUtils::Console::Speaker
|
5
|
+
|
6
|
+
def initialize(env, command)
|
7
|
+
@env = env
|
8
|
+
if command.count == 1 && command.first.is_a?(Array)
|
9
|
+
@command = command.first
|
10
|
+
elsif command.is_a?(Array)
|
11
|
+
@command = command
|
12
|
+
else
|
13
|
+
raise "Invalid argument command: #{command}|#{command.class}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def append(args)
|
18
|
+
self.class.new(@env, @command + args)
|
19
|
+
end
|
20
|
+
|
21
|
+
def prepend(args)
|
22
|
+
self.class.new(@env, args + @command)
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_s
|
26
|
+
"#{@command} [ENV: #{@env}]"
|
27
|
+
end
|
28
|
+
|
29
|
+
def command(options = {})
|
30
|
+
c = @command
|
31
|
+
c = c.map { |x| escape(x) }.join(' ') if c.is_a?(Enumerable)
|
32
|
+
c = @env.command_line(c)
|
33
|
+
append_command_options(c, options)
|
34
|
+
end
|
35
|
+
|
36
|
+
def execute!(options = {})
|
37
|
+
er = ExecuteResult.new(execute(options), options)
|
38
|
+
return er.result if er.success?
|
39
|
+
raise "execute! command failed: #{self}\n#{er.r.pretty_inspect}"
|
40
|
+
end
|
41
|
+
|
42
|
+
def execute(options = {})
|
43
|
+
c = command(options)
|
44
|
+
puts "BEFORE: #{c}".light_red if debug?
|
45
|
+
t1 = Time.now
|
46
|
+
r = ::EacRubyUtils::Envs::Process.new(c).to_h
|
47
|
+
i = Time.now - t1
|
48
|
+
puts "AFTER [#{i}]: #{c}".light_red if debug?
|
49
|
+
r
|
50
|
+
end
|
51
|
+
|
52
|
+
def system!(options = {})
|
53
|
+
return if system(options)
|
54
|
+
raise "system! command failed: #{self}"
|
55
|
+
end
|
56
|
+
|
57
|
+
def system(options = {})
|
58
|
+
c = command(options)
|
59
|
+
puts c.light_red if debug?
|
60
|
+
Kernel.system(c)
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def debug?
|
66
|
+
ENV['DEBUG'].to_s.strip != ''
|
67
|
+
end
|
68
|
+
|
69
|
+
def append_command_options(c, options)
|
70
|
+
c = options[:input].command + ' | ' + c if options[:input]
|
71
|
+
c += ' < ' + Shellwords.escape(options[:input_file]) if options[:input_file]
|
72
|
+
c += ' > ' + Shellwords.escape(options[:output_file]) if options[:output_file]
|
73
|
+
c
|
74
|
+
end
|
75
|
+
|
76
|
+
def escape(s)
|
77
|
+
raise "#{s}|#{s.class}" unless s.is_a?(String)
|
78
|
+
m = /^\@ESC_(.+)$/.match(s)
|
79
|
+
m ? m[1] : Shellwords.escape(s)
|
80
|
+
end
|
81
|
+
|
82
|
+
class ExecuteResult
|
83
|
+
attr_reader :r, :options
|
84
|
+
|
85
|
+
def initialize(r, options)
|
86
|
+
@r = r
|
87
|
+
@options = options
|
88
|
+
end
|
89
|
+
|
90
|
+
def result
|
91
|
+
return exit_code_zero_result if exit_code_zero?
|
92
|
+
return expected_error_result if expected_error?
|
93
|
+
raise 'Failed!'
|
94
|
+
end
|
95
|
+
|
96
|
+
def success?
|
97
|
+
exit_code_zero? || expected_error?
|
98
|
+
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
def exit_code_zero?
|
103
|
+
r[:exit_code] && r[:exit_code].zero?
|
104
|
+
end
|
105
|
+
|
106
|
+
def exit_code_zero_result
|
107
|
+
r[options[:output] || :stdout]
|
108
|
+
end
|
109
|
+
|
110
|
+
def expected_error_result
|
111
|
+
options[:exit_outputs][r[:exit_code]]
|
112
|
+
end
|
113
|
+
|
114
|
+
def expected_error?
|
115
|
+
options[:exit_outputs].is_a?(Hash) && options[:exit_outputs].key?(r[:exit_code])
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module EacRubyUtils
|
2
|
+
module Envs
|
3
|
+
class Process
|
4
|
+
def initialize(command)
|
5
|
+
@command = command
|
6
|
+
Open3.popen3(command) do |_stdin, stdout, stderr, wait_thr|
|
7
|
+
@exit_code = wait_thr.value.to_i
|
8
|
+
@stdout = stdout.read
|
9
|
+
@stderr = stderr.read
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_h
|
14
|
+
{ exit_code: @exit_code, stdout: @stdout, stderr: @stderr, command: @command }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Envs
|
2
|
+
class SshEnv < ::EacRubyUtils::Envs::BaseEnv
|
3
|
+
def initialize(user_hostname)
|
4
|
+
@user_hostname = user_hostname
|
5
|
+
end
|
6
|
+
|
7
|
+
def to_s
|
8
|
+
"SSH(#{@user_hostname})"
|
9
|
+
end
|
10
|
+
|
11
|
+
def command_line(line)
|
12
|
+
"ssh #{Shellwords.escape(@user_hostname)} #{Shellwords.escape(line)}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: eac_ruby_utils
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Esquilo Azul Company
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-04-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: colorize
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.8.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.8.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: docopt
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.6.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.6.1
|
41
|
+
description:
|
42
|
+
email:
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files: []
|
46
|
+
files:
|
47
|
+
- README.rdoc
|
48
|
+
- lib/eac_ruby_utils.rb
|
49
|
+
- lib/eac_ruby_utils/console/docopt_runner.rb
|
50
|
+
- lib/eac_ruby_utils/console/speaker.rb
|
51
|
+
- lib/eac_ruby_utils/envs.rb
|
52
|
+
- lib/eac_ruby_utils/envs/base_env.rb
|
53
|
+
- lib/eac_ruby_utils/envs/command.rb
|
54
|
+
- lib/eac_ruby_utils/envs/local_env.rb
|
55
|
+
- lib/eac_ruby_utils/envs/process.rb
|
56
|
+
- lib/eac_ruby_utils/envs/ssh_env.rb
|
57
|
+
- lib/eac_ruby_utils/version.rb
|
58
|
+
homepage:
|
59
|
+
licenses:
|
60
|
+
- MIT
|
61
|
+
metadata: {}
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirements: []
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 2.6.14
|
79
|
+
signing_key:
|
80
|
+
specification_version: 4
|
81
|
+
summary: Utilities for E.A.C.'s Ruby projects.
|
82
|
+
test_files: []
|
83
|
+
has_rdoc:
|