toolrack 0.1.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9de65ce9c244ee6178fcd96d2e1073dbd9067c7a1f9906e89de614e8a58c329f
4
- data.tar.gz: f9943c8203a7cc47c0ab05557ed3c8ad327336288b439d736fc15f7b78deee51
3
+ metadata.gz: 9695907a18e7af223dc46afdede9aadf6a63860cd85600eac575d1707f92122a
4
+ data.tar.gz: 33b7a5e328a97b336f75d74e87adfd11c9d2e4e4db65096db9657cbc8d438a3b
5
5
  SHA512:
6
- metadata.gz: 03d12fe2c6e1da0c3581ab424a4145f88aad0f0afbca472f5f1c1e2257b93438fba2cfb6591a33eb730751977257adc74b01acd875ce4b54fa8ce46cb08297fe
7
- data.tar.gz: 6d089a8429ce18c130fee89b5524a202f6860402b68d6111a1aca80240cf8ecaec38663af2f22a30c42784984c2995c54613d121ff11fcd5eaac27f45d593f82
6
+ metadata.gz: ed2140ad2e0ddd44977b8375e02f4d81ce30e2c5c3c8ade312d0ebb24213373d38783a3f509994f23bb866977d74825e42f8ea585f78a1bd64afdb24d017294c
7
+ data.tar.gz: ec78c82697275f8ad85900892a017dfe0be6edbc5a19f761d382d53dcf372c9f3c68f7d7bb4678b7af02d25a77346f2ba082c6d099d002ac563c9173fb40d8d3
@@ -1,11 +1,44 @@
1
1
  require "toolrack/version"
2
2
 
3
+ require 'tlogger'
4
+ require 'singleton'
5
+
3
6
  require_relative 'toolrack/exception_utils'
4
7
  require_relative 'toolrack/condition_utils'
8
+ #require_relative 'toolrack/process_utils'
9
+ require_relative 'toolrack/runtime_utils'
5
10
 
6
11
  module Antrapol
7
- module MyToolRack
12
+ module ToolRack
8
13
  class Error < StandardError; end
9
14
  # Your code goes here...
15
+
16
+ class GlobalConf
17
+ include Singleton
18
+
19
+ end
20
+
21
+ class Logger
22
+ include Singleton
23
+ include Antrapol::ToolRack::ConditionUtils
24
+
25
+ attr_reader :glogger
26
+ def initialize
27
+ # boolean
28
+ loggerDebug = ENV['TOOLRACK_DEBUG']
29
+ logFile = ENV['TOOLRACK_LOGFILE']
30
+ maxLogNo = ENV['TOOLRACK_MAX_LOGFILE'] || 10
31
+ logFileSize = ENV['TOOLRACK_MAX_LOGFILE_SIZE'] || 10*1024*1024
32
+
33
+ if not is_empty?(loggerDebug) and loggerDebug
34
+ @glogger = Tlogger.new(STDOUT)
35
+ elsif not is_empty?(logFile)
36
+ @glogger = Tlogger.new(logFile,maxLogNo,logFileSize)
37
+ else
38
+ @glogger = Tlogger.new('toolrack.log',maxLogNo,logFileSize)
39
+ end
40
+ end
41
+ end
42
+
10
43
  end
11
44
  end
@@ -1,7 +1,7 @@
1
1
 
2
2
 
3
3
  module Antrapol
4
- module MyToolRack
4
+ module ToolRack
5
5
  module ConditionUtils
6
6
 
7
7
  def is_empty?(obj)
@@ -14,6 +14,10 @@ module Antrapol
14
14
  end
15
15
  end # is_empty?
16
16
 
17
+ def not_empty?(obj)
18
+ !is_empty?(obj)
19
+ end # not empty
20
+
17
21
  end # ConditionUtils
18
22
  end # MyToolRack
19
23
  end # Antrapol
@@ -1,41 +1,44 @@
1
1
 
2
- require_relative 'conditions_utils'
2
+ require_relative 'condition_utils'
3
3
 
4
4
  module Antrapol
5
- module MyToolRack
5
+ module ToolRack
6
6
  module ExceptionUtils
7
- include Antrapol::MyToolRack::ConditionUtils
7
+ include Antrapol::ToolRack::ConditionUtils
8
8
 
9
9
  # raise_if_empty
10
10
  # Raise the given (or default if not given) exception if the val given is empty
11
11
  # val - variable/object that shall be tested for emptiness
12
12
  # message - message to be thrown if it is true
13
13
  # error - exception object to be thrown
14
- def raise_if_empty(val, message, error = Antrapol::MyToolRack::Error)
14
+ def raise_if_empty(val, message, error = Antrapol::ToolRack::Error)
15
15
  raise_error(message,error) if is_empty?(val)
16
16
  end # raise_if_empty
17
+ alias_method :raise_if_empty?, :raise_if_empty
17
18
 
18
19
  #
19
20
  # raise_if_false
20
21
  #
21
- def raise_if_false(bool, message, error = Antrapol::MyToolRack::Error)
22
+ def raise_if_false(bool, message, error = Antrapol::ToolRack::Error)
22
23
  if not bool
23
24
  raise_error(message,error)
24
25
  end
25
26
  end # raise_if_false
27
+ alias_method :raise_if_false?, :raise_if_false
26
28
 
27
29
  #
28
30
  # raise_if_true
29
31
  #
30
- def raise_if_true(bool, message, error = Antrapol::MyToolRack::Error)
32
+ def raise_if_true(bool, message, error = Antrapol::ToolRack::Error)
31
33
  raise_if_false(!bool, message, error)
32
34
  end # raise_if_true
35
+ alias_method :raise_if_true?, :raise_if_true
33
36
 
34
37
  protected
35
- def raise_error(message, error = Antrapol::MyToolRack::Error)
38
+ def raise_error(message, error = Antrapol::ToolRack::Error)
36
39
  if error.nil?
37
40
  if @default_exception.nil?
38
- raise Antrapol::MyToolRack::Error, message
41
+ raise Antrapol::ToolRack::Error, message
39
42
  else
40
43
  raise @default_exception, message
41
44
  end
@@ -45,5 +48,5 @@ module Antrapol
45
48
  end # raise_error
46
49
 
47
50
  end # ExceptionUtils
48
- end # MyToolRack
51
+ end # ToolRack
49
52
  end # Antrapol
@@ -0,0 +1,103 @@
1
+
2
+ require 'pty'
3
+ require 'expect'
4
+ require 'io/console'
5
+ require 'tlogger'
6
+ require 'open3'
7
+
8
+
9
+ module Antrapol
10
+ module ToolRack
11
+ module ProcessUtils
12
+
13
+ # backtick
14
+ # backtick will only return at the end of the process.
15
+ # If in the event there is a prompt to user, this should nto be used.
16
+ def basic_exec(cmd)
17
+ Antrapol::ToolRack::Logger.instance.glogger.debug "Basic shell exec command : #{cmd}"
18
+ `#{cmd}`
19
+ end # basic_shell_exec
20
+
21
+ # system
22
+ # System call link the stdout and stdin to the calling process and idea
23
+ # to call mild interactive process
24
+ def system_exec(cmd, opts = { }, &block)
25
+ Antrapol::ToolRack::Logger.instance.glogger.debug "System exec command : #{cmd}"
26
+ system(cmd)
27
+ $.
28
+ end # system_exec
29
+
30
+ #def popen_exec(cmd, opts = { }, &block)
31
+ # puts "Cmd : #{cmd}"
32
+ # IO.popen(cmd, "r+") do |io|
33
+ # puts io.gets
34
+ # puts io.gets
35
+ # puts io.gets
36
+ # end
37
+ #end
38
+
39
+ def popen3_exec(cmd, opts = { }, &block)
40
+ Antrapol::ToolRack::Logger.instance.glogger.debug "Popen3 exec command : #{cmd}"
41
+ stdout, stderr, status = Open3.capture3(cmd)
42
+ block.call(:popen_exec, { output: stdout, error: stderr, status: status })
43
+ end
44
+
45
+ def pty_exec(cmd, opts = { }, &block)
46
+
47
+ Antrapol::ToolRack::Logger.instance.glogger.debug "PTY exec command : #{cmd}"
48
+
49
+ logger = opts[:logger] || Tlogger.new(STDOUT)
50
+ expect = opts[:expect] || { }
51
+ bufSize = opts[:intBufSize] || 1024000
52
+
53
+ if bufSize != nil and bufSize.to_i > 0
54
+ else
55
+ bufSize = 1024000
56
+ end
57
+
58
+ logger.debug "Command : #{cmd}"
59
+ PTY.spawn(cmd[0], *(cmd[1..-1])) do |pout,pin,pid| #, 'env TERM=ansi') do |stdout, stdin, pid|
60
+
61
+ pin.sync = true
62
+
63
+ begin
64
+ loop do
65
+ dat = []
66
+ loop do
67
+ d = pout.sysread(bufSize)
68
+ dat << d
69
+ break if d.length < bufSize
70
+ end
71
+ #dat = dat.join("\r\n")
72
+
73
+ if block
74
+ block.call(:inspect, { data: dat, output: pout, input: pin })
75
+ end
76
+
77
+ end
78
+ rescue EOFError => ex
79
+ logger.error "EOF : #{ex}"
80
+ #clog "EOF reached. Waiting to kill process.", :debug, :os_cmd
81
+ Process.wait(pid)
82
+ #clog "Processed killed.", :debug, :os_cmd
83
+ rescue Exception => ex
84
+ logger.error ex.message
85
+ logger.error ex.backtrace.join("\n")
86
+ #clog ex.message, :error, :os_cmd
87
+ #clog ex.backtrace.join("\n"), :error, :os_cmd
88
+ end
89
+
90
+ end
91
+ # end PTY.spawn() method
92
+
93
+ $?.exitstatus
94
+
95
+ end # pty_exec
96
+
97
+ end # module ProcessUtils
98
+
99
+ class ProcessUtilsEngine
100
+ extend ProcessUtils
101
+ end
102
+ end # module ToolRack
103
+ end # module Antrapol
@@ -0,0 +1,24 @@
1
+
2
+
3
+ module Antrapol
4
+ module ToolRack
5
+ module RuntimeUtils
6
+
7
+ def detect_os
8
+ case RbConfig::CONFIG['host_os']
9
+ when /cygwin|mswin|mingw|bccwin|wince|emx/
10
+ :win
11
+ when /darwin|mac/
12
+ :mac
13
+ else
14
+ :linux
15
+ end
16
+ end
17
+
18
+ def detect_ruby
19
+
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -1,6 +1,6 @@
1
1
  module Antrapol
2
- module MyToolRack
3
- VERSION = "0.1.0"
2
+ module ToolRack
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
6
6
 
@@ -0,0 +1,2 @@
1
+
2
+ `ssh-keygen -t ed25519 -a 188 -o -f test.ssh -C chrisliaw@antrapol.com`
File without changes
@@ -0,0 +1,14 @@
1
+
2
+
3
+ require 'shell'
4
+
5
+ Shell.def_system_command(:sshKeygen,'/usr/bin/ssh-keygen')
6
+ s = Shell.new
7
+
8
+ th = Thread.new($stdout) do |out|
9
+
10
+ p sshKeygen("-t","ed25519","-a","188","-o","-f","test.ssh","-C","chrisliaw@antrapol.com")
11
+
12
+ end
13
+
14
+
@@ -0,0 +1,3 @@
1
+
2
+
3
+ system("ssh-keygen -t ed25519 -a 188 -o -f test.ssh -C chrisliaw@antrapol.com")
@@ -2,19 +2,19 @@ require_relative 'lib/toolrack/version'
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "toolrack"
5
- spec.version = Antrapol::MyToolRack::VERSION
5
+ spec.version = Antrapol::ToolRack::VERSION
6
6
  spec.authors = ["Chris"]
7
7
  spec.email = ["chrisliaw@antrapol.com"]
8
8
 
9
9
  spec.summary = %q{Collection of simple utilities but I find it increase clarity}
10
10
  spec.description = %q{Just collections of utilities}
11
- spec.homepage = ""
11
+ spec.homepage = "https://github.com/chrisliaw/toolrack"
12
12
  spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
13
13
 
14
14
  #spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
15
15
 
16
- #spec.metadata["homepage_uri"] = spec.homepage
17
- #spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
16
+ spec.metadata["homepage_uri"] = spec.homepage
17
+ spec.metadata["source_code_uri"] = "https://github.com/chrisliaw/toolrack"
18
18
  #spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
19
19
 
20
20
  # Specify which files should be added to the gem when it is released.
@@ -25,4 +25,6 @@ Gem::Specification.new do |spec|
25
25
  spec.bindir = "exe"
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ["lib"]
28
+
29
+ spec.add_dependency "tlogger", "~> 0.21"
28
30
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toolrack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-13 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2020-10-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: tlogger
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.21'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.21'
13
27
  description: Just collections of utilities
14
28
  email:
15
29
  - chrisliaw@antrapol.com
@@ -28,12 +42,20 @@ files:
28
42
  - lib/toolrack.rb
29
43
  - lib/toolrack/condition_utils.rb
30
44
  - lib/toolrack/exception_utils.rb
45
+ - lib/toolrack/process_utils.rb
46
+ - lib/toolrack/runtime_utils.rb
31
47
  - lib/toolrack/version.rb
48
+ - process_test/backtick_test.rb
49
+ - process_test/pty_test.rb
50
+ - process_test/shell_test.rb
51
+ - process_test/system_test.rb
32
52
  - toolrack.gemspec
33
- homepage: ''
53
+ homepage: https://github.com/chrisliaw/toolrack
34
54
  licenses: []
35
- metadata: {}
36
- post_install_message:
55
+ metadata:
56
+ homepage_uri: https://github.com/chrisliaw/toolrack
57
+ source_code_uri: https://github.com/chrisliaw/toolrack
58
+ post_install_message:
37
59
  rdoc_options: []
38
60
  require_paths:
39
61
  - lib
@@ -48,8 +70,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
48
70
  - !ruby/object:Gem::Version
49
71
  version: '0'
50
72
  requirements: []
51
- rubygems_version: 3.0.8
52
- signing_key:
73
+ rubygems_version: 3.1.4
74
+ signing_key:
53
75
  specification_version: 4
54
76
  summary: Collection of simple utilities but I find it increase clarity
55
77
  test_files: []