CmdShellMgr 0.1.0 → 0.1.1.0.pre

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: 03d4beae9d674c2f4a07c93a0b9f4f6b9e1b8003
4
- data.tar.gz: c8955d835377718c027cf0d2df704390b0e2745c
3
+ metadata.gz: 06827d8b27d4b42c6c7f3ba6c2e80c8fc19f97f7
4
+ data.tar.gz: 2b9c414164c1844591aaa04e32caa06020d1782a
5
5
  SHA512:
6
- metadata.gz: 7e312ed2a190d226f6edf9a4281de0c5fc7ca83bd2ddd1c458a147d45d8a2e936c349d0f0805c1593796508fa07087290caf91e59d48e6b74177d04b01cfc128
7
- data.tar.gz: ab3d365c21060e292bfe1d23c25bc2f1bfe98cd5fdad26e3320269fceefb99a183f2e713447b22becbced0c2efe21004f7bdd3650d13fec93127b9ae1fbc7ecc
6
+ metadata.gz: 9bac7be8a9c16f967e4164a074958a08b4016dfd36ea81d6d34b69a7c8138ccba05349b793089d45f09a68c9f4bcb8c57dedf4d03da883a9c3f3bda478ff208e
7
+ data.tar.gz: c54d3a48252ccd8f4651f620e4114496c7683e59d8cba15ef1c6d65dd4464c21ea5de2e8ffd7a270a81958313321321ab5daa2a930101fe962efd7eb6f54f24a
data/README.md CHANGED
@@ -1,13 +1,15 @@
1
1
  # CmdShellMgr
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/CmdShellMgr`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ CmdShellMgr provides a DSL, domain specific language, container to manage
4
+ commands. Commands are managed by defining, executing, and accessing
5
+ their results from a preferred framework, test script, or utility.
4
6
 
5
- TODO: Delete this and the text above, and describe your gem
7
+ ## Use Case
8
+ Test automation frameworks, with CmdShellMgr, can easily be extended to
9
+ execute external commands and manage those results.
6
10
 
7
11
  ## Installation
8
12
 
9
- Add this line to your application's Gemfile:
10
-
11
13
  ```ruby
12
14
  gem 'CmdShellMgr'
13
15
  ```
@@ -22,7 +24,44 @@ Or install it yourself as:
22
24
 
23
25
  ## Usage
24
26
 
25
- TODO: Write usage instructions here
27
+
28
+
29
+ ## Examples (ScoutUI YAML)
30
+
31
+ page:
32
+ name: Run ls
33
+ action: loadcommand
34
+ command:
35
+ - echo "Hello World"
36
+ - java -jar Tools.jar <.......>
37
+ id: DO Linux ls
38
+ ---
39
+ page:
40
+ name: run ls
41
+ action: execute(DO Linux ls)
42
+ ---
43
+ page:
44
+ name: Run a BASH Script
45
+ action: loadcommand
46
+ command: /tmp/abc.sh
47
+ id: CREATE_Foo
48
+
49
+ ---
50
+
51
+ page:
52
+ name: do something
53
+ action: execute(CREATE_Foo)
54
+ parms:
55
+ - abc
56
+ - 123
57
+ - EFG
58
+ - ${userid}
59
+
60
+ ---
61
+ page:
62
+ name: blah
63
+ action: type(#username, getResult(CREATE_Foo))
64
+ ---
26
65
 
27
66
  ## Development
28
67
 
@@ -0,0 +1,51 @@
1
+
2
+
3
+ module CmdShellMgr
4
+
5
+
6
+ class Command
7
+
8
+ attr_accessor :debug
9
+ attr_accessor :cmd
10
+ attr_accessor :results
11
+ attr_accessor :exitStatus
12
+
13
+ def initialize(_c=nil)
14
+ @debug=true
15
+ @exitStatus=nil
16
+ @results=nil
17
+ @cmd=_c
18
+ end
19
+
20
+
21
+ def execute(opts=nil)
22
+ @results=nil
23
+
24
+ # if @cmd.match(/.*\.(sh|ksh|csh)\s*$/i)
25
+ # puts " execute script #{@cmd} #{opts.to_s}" if @debug
26
+ # @results = %x[ #{@cmd} #{opts.to_s} ]
27
+ # else
28
+ @results = %x[ #{@cmd} #{opts.to_s} ]
29
+ # end
30
+ @exitStatus = $?.exitstatus
31
+
32
+ if @debug
33
+ puts __FILE__ + (__LINE__).to_s + " results => #{@results}"
34
+ puts __FILE__ + (__LINE__).to_s + " exist => #{@exitStatus}"
35
+ end
36
+
37
+ @exitStatus
38
+ end
39
+
40
+ def exitStatus
41
+ @exitStatus
42
+ end
43
+
44
+ def results
45
+ @results
46
+ end
47
+
48
+ end
49
+
50
+
51
+ end
@@ -0,0 +1,102 @@
1
+
2
+
3
+
4
+ module CmdShellMgr
5
+
6
+
7
+ class Commands
8
+
9
+ attr_reader :debug
10
+ attr_accessor :queue
11
+
12
+
13
+ def initialize()
14
+ @debug=false
15
+ @queue=[]
16
+ end
17
+
18
+ def count
19
+ length
20
+ end
21
+ def size
22
+ length
23
+ end
24
+ def length
25
+ @queue.length
26
+ end
27
+
28
+ def add(_id, _cmd)
29
+
30
+ if _cmd.is_a?(String)
31
+ @queue << { :id => _id, :cmd => CmdShellMgr::Command.new(_cmd) }
32
+ else
33
+ @queue << { :id => _id, :cmd => _cmd }
34
+ end
35
+
36
+ @queue.last()
37
+ end
38
+
39
+ def _execute(cmd)
40
+ rc=0
41
+ if cmd.is_a?(Hash) && cmd.has_key?(:cmd) && cmd.has_key?(:id)
42
+ rc += cmd[:cmd].execute().to_i
43
+ end
44
+
45
+ rc
46
+ end
47
+
48
+
49
+
50
+ def execute(id=nil)
51
+
52
+ exitStatus=0
53
+ rc=nil
54
+
55
+ if id.nil?
56
+ @queue.each do |_cmd|
57
+
58
+ puts __FILE__ + (__LINE__).to_s + " execute command #{_cmd[:id]}" if @debug
59
+ rc=_cmd[:cmd].execute()
60
+ end
61
+ else
62
+ hits = @queue.select { |cmd| cmd[:id]==id }
63
+ hits.each do |h|
64
+ puts __FILE__ + (__LINE__).to_s + " #{h}" if @debug
65
+ _execute(h)
66
+ end
67
+ end
68
+
69
+ rc
70
+ end
71
+
72
+ def exitStatus(_id)
73
+ puts __FILE__ + (__LINE__).to_s + " results(#{_id})" if @debug
74
+ rc=""
75
+ hits = @queue.select { |cmd| cmd[:id]==_id }
76
+ hits.each do |h|
77
+
78
+ puts __FILE__ + (__LINE__).to_s + " results : #{h[:cmd].exitStatus}" if @debug
79
+ rc << h[:cmd].exitStatus.to_s
80
+ end
81
+
82
+ rc
83
+ end
84
+
85
+ def results(_id)
86
+ puts __FILE__ + (__LINE__).to_s + " results(#{_id})" if @debug
87
+ rc=""
88
+ hits = @queue.select { |cmd| cmd[:id]==_id }
89
+ hits.each do |h|
90
+
91
+ puts __FILE__ + (__LINE__).to_s + " results : #{h[:cmd].results}" if @debug
92
+ rc << h[:cmd].results.to_s
93
+ end
94
+
95
+ rc
96
+ end
97
+
98
+ end
99
+
100
+
101
+ end
102
+
@@ -0,0 +1,143 @@
1
+ require 'singleton'
2
+
3
+ module CmdShellMgr
4
+
5
+
6
+ class DSL
7
+ include Singleton
8
+
9
+ DSL_LIST=[
10
+ { id: 'add', regex: Regexp.new(/^\s*(add|command)\s*\(\s*(?<id>.*)?,\s*(?<cmd>.*)\s*\)\s*$/i)},
11
+ { id: 'execute', regex: Regexp.new(/^\s*execute\s*\(\s*(?<id>.*)?\)\s*$/i) },
12
+ { id: 'getResult', regex: Regexp.new(/^\s*getResult[s]*\s*\(\s*(?<id>.*)?\)\s*$/i) },
13
+ { id: 'matches', regex: Regexp.new(/^\s*getResult[s]*\s*\(\s*(?<id>.*)?\)\s*\.matches\s*\(\s*\/(?<regex>.*)?\/\s*\)$/i) },
14
+ { id: 'capture', regex: Regexp.new(/^\s*getResult[s]*\s*\(\s*(?<id>.*)?\)\s*\.capture\s*\(\s*\/(?<regex>.*)?\/\s*\)$/i) },
15
+ { id: 'status', regex: Regexp.new(/^\s*getResult[s]*\s*\(\s*(?<id>.*)?\)\s*\.exitStatus\s*$/i) }
16
+ ]
17
+
18
+ attr_accessor :queue
19
+ attr_accessor :debug
20
+
21
+ def validCmd?(_cmd)
22
+ DSL_LIST.each do |c|
23
+ _r = c[:regex]
24
+ if _cmd.match(_r)
25
+ return c
26
+ end
27
+ end
28
+
29
+ nil
30
+ end
31
+
32
+ def initialize()
33
+ @debug=false
34
+ @queue = CmdShellMgr::Commands.new()
35
+ end
36
+
37
+ def count
38
+ @queue.length
39
+ end
40
+
41
+ def cmd(opts)
42
+
43
+ rc=nil
44
+ cmdObj=nil
45
+ _cmd=nil
46
+
47
+
48
+ if opts.has_key?(:cmd)
49
+ _cmd=opts[:cmd]
50
+ else
51
+ return false
52
+ end
53
+
54
+ puts "CMD => #{_cmd}" if @debug
55
+
56
+ begin
57
+ cmdReg = Regexp.new(/^\s*(add|command)\s*\(\s*(?<id>.*)?,\s*(?<cmd>.*)\s*\)\s*$/i)
58
+ executeIdReg = Regexp.new(/^\s*execute\s*\(\s*(?<id>.*)?\)\s*$/i)
59
+ getResultsReg = Regexp.new(/^\s*getResult[s]*\s*\(\s*(?<id>.*)?\)\s*$/i)
60
+ getResultsMatchesReg = Regexp.new(/^\s*getResult[s]*\s*\(\s*(?<id>.*)?\)\s*\.matches\s*\(\s*\/(?<regex>.*)?\/\s*\)$/i)
61
+ getResultsCaptureReg = Regexp.new(/^\s*getResult[s]*\s*\(\s*(?<id>.*)?\)\s*\.capture\s*\(\s*\/(?<regex>.*)?\/\s*\)$/i)
62
+ getResultsStatusReg = Regexp.new(/^\s*getResult[s]*\s*\(\s*(?<id>.*)?\)\s*\.exitStatus\s*$/i)
63
+
64
+ cmdObj = _cmd.match(cmdReg)
65
+
66
+ if cmdObj
67
+
68
+ puts __FILE__ + (__LINE__).to_s + " cmdObj => #{cmdObj.class}" if @debug # MatchData
69
+
70
+ cmd = CmdShellMgr::Command.new(cmdObj[:cmd]);
71
+ puts __FILE__ + (__LINE__).to_s + " cmd ==> #{cmd}" if @debug
72
+
73
+ rc=@queue.add(cmdObj[:id], cmd)
74
+
75
+ elsif _cmd.match(executeIdReg)
76
+
77
+ cmdObj = _cmd.match(executeIdReg)
78
+ puts __FILE__ + (__LINE__).to_s + " exe => #{cmdObj[:id]}" if @debug
79
+
80
+ rc=@queue.execute(cmdObj[:id])
81
+
82
+ puts __FILE__ + (__LINE__).to_s + " executeResults => #{rc}"
83
+
84
+ elsif _cmd.match(getResultsStatusReg)
85
+ cmdObj=_cmd.match(getResultsStatusReg)
86
+ rc = @queue.exitStatus(cmdObj[:id])
87
+ puts __FILE__ + (__LINE__).to_s + " exitStatus(#{_cmd}) : #{rc}" if @debug
88
+
89
+
90
+ elsif _cmd.match(getResultsMatchesReg)
91
+ cmdObj = _cmd.match(getResultsMatchesReg)
92
+ _result = @queue.results(cmdObj[:id])
93
+ regex = cmdObj[:regex]
94
+
95
+ rc=false
96
+
97
+ if _result.is_a?(String)
98
+ m=_result.match(/#{regex.to_s}/m)
99
+ rc = m.is_a?(MatchData) && m.size > 0
100
+ end
101
+
102
+
103
+ elsif _cmd.match(getResultsCaptureReg)
104
+ cmdObj = _cmd.match(getResultsCaptureReg)
105
+ _result=@queue.results(cmdObj[:id])
106
+ regex = cmdObj[:regex]
107
+ puts __FILE__ + (__LINE__).to_s + "RESULTS.Capture => #{_result.class} with #{regex}" if @debug
108
+
109
+ m=nil
110
+ if _result.is_a?(String)
111
+ m = _result.match(/#{regex.to_s}/m)
112
+
113
+ puts __FILE__ + (__LINE__).to_s + " m => #{m.class}" if @debug
114
+
115
+ if m.is_a?(MatchData) && m.size > 0
116
+ puts __FILE__ + (__LINE__).to_s + " ====> #{m[1]}" if @debug
117
+ rc=m[1]
118
+ end
119
+
120
+ end
121
+
122
+ elsif _cmd.match(getResultsReg)
123
+
124
+ cmdObj=_cmd.match(getResultsReg)
125
+ rc=@queue.results(cmdObj[:id])
126
+ puts __FILE__ + (__LINE__).to_s + "RESULTS => #{rc}" if @debug
127
+
128
+ else
129
+ puts __FILE__ + (__LINE__).to_s + " Unknown command: #{_cmd}"
130
+ end
131
+
132
+ rescue RegexpError => ex
133
+ puts __FILE__ + (__LINE__).to_s + " #{ex.class} : #{_cmd}"
134
+ end
135
+
136
+ rc
137
+ end
138
+
139
+
140
+ end
141
+
142
+
143
+ end
@@ -1,3 +1,3 @@
1
1
  module CmdShellMgr
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1.0.pre"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: CmdShellMgr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1.0.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kim, Peter
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-30 00:00:00.000000000 Z
11
+ date: 2016-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -73,6 +73,9 @@ files:
73
73
  - bin/console
74
74
  - bin/setup
75
75
  - lib/CmdShellMgr.rb
76
+ - lib/CmdShellMgr/Command/command.rb
77
+ - lib/CmdShellMgr/Command/commands.rb
78
+ - lib/CmdShellMgr/DSL/dsl.rb
76
79
  - lib/CmdShellMgr/version.rb
77
80
  homepage: https://github.com/h20draoon
78
81
  licenses:
@@ -89,9 +92,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
89
92
  version: '0'
90
93
  required_rubygems_version: !ruby/object:Gem::Requirement
91
94
  requirements:
92
- - - ">="
95
+ - - ">"
93
96
  - !ruby/object:Gem::Version
94
- version: '0'
97
+ version: 1.3.1
95
98
  requirements: []
96
99
  rubyforge_project:
97
100
  rubygems_version: 2.6.2