teuton 2.1.10 → 2.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +15 -12
  3. data/bin/check_teuton +0 -2
  4. data/docs/changelog/ideas.md +132 -0
  5. data/docs/changelog/v2.1.md +14 -122
  6. data/docs/changelog/v2.2.md +52 -28
  7. data/docs/changelog/version2.1.md +4 -0
  8. data/docs/commands/README.md +58 -15
  9. data/docs/commands/example_check.md +0 -4
  10. data/docs/commands/example_run.md +0 -4
  11. data/docs/dsl/README.md +1 -1
  12. data/docs/dsl/definition/result.md +1 -0
  13. data/docs/dsl/definition/run_remote.md +12 -6
  14. data/docs/dsl/definition/target.md +9 -10
  15. data/docs/dsl/execution/export.md +27 -20
  16. data/docs/install/README.md +13 -18
  17. data/docs/install/vagrant_docker.md +1 -1
  18. data/docs/learn/README.md +8 -8
  19. data/docs/learn/example-01-target.md +25 -25
  20. data/docs/learn/example-02-config.md +38 -49
  21. data/docs/learn/example-03-remote-hosts.md +22 -22
  22. data/docs/learn/{example-11-first-test.md → example-04-new-test.md} +23 -24
  23. data/docs/learn/{example-04-use.md → example-05-use.md} +6 -6
  24. data/docs/learn/{example-05-debug.md → example-06-debug.md} +8 -8
  25. data/docs/learn/{example-06-log.md → example-07-log.md} +7 -7
  26. data/docs/learn/example-08-readme.md +59 -0
  27. data/docs/learn/example-09-preserve.md +41 -0
  28. data/docs/videos.md +19 -0
  29. data/lib/teuton/application.rb +22 -3
  30. data/lib/teuton/case_manager/case/builtin/main.rb +3 -19
  31. data/lib/teuton/case_manager/case/builtin/package.rb +7 -6
  32. data/lib/teuton/case_manager/case/builtin/service.rb +9 -8
  33. data/lib/teuton/case_manager/case/builtin/teuton_file.rb +28 -0
  34. data/lib/teuton/case_manager/case/builtin/teuton_host.rb +31 -0
  35. data/lib/teuton/case_manager/case/builtin/user.rb +8 -7
  36. data/lib/teuton/case_manager/case/case.rb +1 -1
  37. data/lib/teuton/case_manager/case/dsl/goto.rb +2 -2
  38. data/lib/teuton/case_manager/case/dsl/log.rb +1 -1
  39. data/lib/teuton/case_manager/case/dsl/macro.rb +4 -1
  40. data/lib/teuton/case_manager/case/dsl/send.rb +2 -1
  41. data/lib/teuton/case_manager/case/play.rb +2 -0
  42. data/lib/teuton/case_manager/case/result/ext_compare.rb +16 -0
  43. data/lib/teuton/case_manager/case/result/result.rb +1 -1
  44. data/lib/teuton/case_manager/case/runner.rb +30 -4
  45. data/lib/teuton/case_manager/case_manager.rb +1 -1
  46. data/lib/teuton/case_manager/dsl.rb +10 -0
  47. data/lib/teuton/case_manager/export_manager.rb +24 -5
  48. data/lib/teuton/case_manager/utils.rb +1 -1
  49. data/lib/teuton/{project/laboratory → check}/builtin.rb +0 -0
  50. data/lib/teuton/{project/laboratory → check}/dsl.rb +40 -28
  51. data/lib/teuton/{project/laboratory → check}/laboratory.rb +3 -8
  52. data/lib/teuton/{project/laboratory → check}/show.rb +53 -59
  53. data/lib/teuton/cli.rb +85 -14
  54. data/lib/teuton/{project/readme → readme}/dsl.rb +0 -0
  55. data/lib/teuton/{project/readme → readme}/lang.rb +1 -1
  56. data/lib/teuton/{project/readme → readme}/readme.rb +22 -18
  57. data/lib/teuton/report/formatter/array_formatter.rb +13 -1
  58. data/lib/teuton/report/formatter/base_formatter.rb +18 -5
  59. data/lib/teuton/{project/skeleton.rb → skeleton.rb} +7 -18
  60. data/lib/teuton/utils/configfile_reader.rb +121 -0
  61. data/lib/teuton/{project → utils}/name_file_finder.rb +46 -26
  62. data/lib/teuton/version.rb +8 -0
  63. data/lib/teuton.rb +39 -32
  64. metadata +109 -62
  65. data/lib/teuton/case_manager/case/dsl/deprecated.rb +0 -14
  66. data/lib/teuton/cli/check.rb +0 -38
  67. data/lib/teuton/cli/main.rb +0 -6
  68. data/lib/teuton/cli/play.rb +0 -38
  69. data/lib/teuton/cli/readme.rb +0 -26
  70. data/lib/teuton/cli/version.rb +0 -12
  71. data/lib/teuton/files/gitignore +0 -2
  72. data/lib/teuton/project/configfile_reader.rb +0 -49
  73. data/lib/teuton/project/project.rb +0 -80
@@ -9,9 +9,12 @@ module ExportManager
9
9
  # Run export function
10
10
  # @param main_report (Report)
11
11
  # @param cases (Array)
12
- # @param args (Hash) Selected export options
13
- # rubocop: disable Metrics/AbcSize
14
- def self.run(main_report, cases, args)
12
+ # @param input (Hash) Selected export options
13
+ # rubocop:disable Metrics/AbcSize
14
+ # rubocop:disable Metrics/CyclomaticComplexity
15
+ def self.run(main_report, cases, input)
16
+ args = strings2symbols(input)
17
+
15
18
  # default :mode=>:all, :format=>:txt
16
19
  format = args[:format] || Application.instance.default[:format]
17
20
  mode = args[:mode] || :all
@@ -27,12 +30,29 @@ module ExportManager
27
30
  preserve_files if args[:preserve] == true
28
31
  end
29
32
  # rubocop:enable Metrics/AbcSize
33
+ # rubocop:enable Metrics/CyclomaticComplexity
34
+
35
+ ##
36
+ # Convert Hash String values into Symbol values
37
+ # @param input (Hash)
38
+ # rubocop:disable Style/ConditionalAssignment
39
+ private_class_method def self.strings2symbols(input)
40
+ args = {}
41
+ input.each_pair do |key, value|
42
+ if value.class == String
43
+ args[key] = value.to_sym
44
+ else
45
+ args[key] = value
46
+ end
47
+ end
48
+ args
49
+ end
50
+ # rubocop:enable Style/ConditionalAssignment
30
51
 
31
52
  ##
32
53
  # Preserve output files for current project
33
54
  # rubocop:disable Metrics/AbcSize
34
55
  # rubocop:disable Metrics/MethodLength
35
- # rubocop:disable Layout/LineLength
36
56
  private_class_method def self.preserve_files
37
57
  app = Application.instance
38
58
  t = Time.now
@@ -48,5 +68,4 @@ module ExportManager
48
68
  end
49
69
  # rubocop:enable Metrics/AbcSize
50
70
  # rubocop:enable Metrics/MethodLength
51
- # rubocop:enable Layout/LineLength
52
71
  end
@@ -26,7 +26,7 @@ module Utils
26
26
  text = ec.convert(text)
27
27
  rescue StandardError => e
28
28
  puts "[ERROR] #{e}: Declare text encoding..."
29
- puts " goto :host, :exec => 'command', :encoding => 'ISO-8859-1'"
29
+ puts " run 'command', on: :host, :encoding => 'ISO-8859-1'"
30
30
  end
31
31
 
32
32
  text.split("\n")
File without changes
@@ -1,36 +1,27 @@
1
- # Laboratory
2
- # * target
3
- # * request (development)
4
- # * tempfile
5
- # * goto
6
- # * run
7
- # * expect
8
- # * get
9
- # * unique
10
- # * log
11
- # * set
1
+ # frozen_string_literal: true
2
+
3
+ ##
4
+ # Include Teuton DSL keywords into Laboratory class
12
5
  class Laboratory
6
+ ##
7
+ # Execute Teuton DSL readme keyword
13
8
  def readme(_text)
14
9
  # Usefull for "teuton readme" command action.
15
10
  end
16
11
 
12
+ ##
13
+ # Execute Teuton DSL target keyword
17
14
  def target(desc, args = {})
18
15
  @stats[:targets] += 1
19
16
  @targetid += 1
20
17
  weight = args[:weight] || 1.0
21
- verboseln '(%03d' % @targetid + ") target #{desc}"
18
+ verboseln format('(%03<targetid>d) target %<desc>s', targetid: @targetid, desc: desc)
22
19
  verboseln " weight #{weight}"
23
20
  end
24
21
  alias goal target
25
22
 
26
- # def request(text)
27
- # @requests << text.to_s
28
- # end
29
-
30
- def tempfile(_tempfile = nil)
31
- 'tempfile'
32
- end
33
-
23
+ ##
24
+ # Execute Teuton DSL run keyword
34
25
  def run(command, args = {})
35
26
  args[:exec] = command
36
27
  host = :localhost
@@ -38,6 +29,8 @@ class Laboratory
38
29
  goto(host, args)
39
30
  end
40
31
 
32
+ ##
33
+ # Execute Teuton DSL goto keyword
41
34
  def goto(host = :localhost, args = {})
42
35
  result.reset
43
36
  args[:on] = host unless args[:on]
@@ -50,24 +43,32 @@ class Laboratory
50
43
  verboseln " run '#{args[:exec]}' on #{args[:on]}"
51
44
  end
52
45
 
53
- def expect(_cond, args = {})
46
+ ##
47
+ # Execute Teuton DSL expect keyword
48
+ def expect(cond)
54
49
  verboseln " alter #{result.alterations}" unless result.alterations.empty?
55
- verboseln " expect #{_cond} (#{_cond.class})"
50
+ verboseln " expect #{cond} (#{cond.class})"
56
51
  verboseln ''
57
52
  end
58
53
 
59
- def expect_one(_cond, args = {})
54
+ ##
55
+ # Execute Teuton DSL expect_one keyword
56
+ def expect_one(cond)
60
57
  verboseln " alter #{result.alterations}" unless result.alterations.empty?
61
- verboseln " expect_one #{_cond} (#{_cond.class})"
58
+ verboseln " expect_one #{cond} (#{cond.class})"
62
59
  verboseln ''
63
60
  end
64
61
 
65
- def expect_none(_cond, args = {})
62
+ ##
63
+ # Execute Teuton DSL expect_none keyword
64
+ def expect_none(cond)
66
65
  verboseln " alter #{result.alterations}" unless result.alterations.empty?
67
- verboseln " expect_none #{_cond} (#{_cond.class})"
66
+ verboseln " expect_none #{cond} (#{cond.class})"
68
67
  verboseln ''
69
68
  end
70
69
 
70
+ ##
71
+ # Execute Teuton DSL get keyword
71
72
  def get(varname)
72
73
  @stats[:gets] += 1
73
74
 
@@ -80,17 +81,24 @@ class Laboratory
80
81
  "get(#{varname})"
81
82
  end
82
83
 
83
- # If a method call is missing, then delegate to concept parent.
84
+ # If a method call is missing, then try to call get(var)
85
+ # rubocop:disable Style/MissingRespondToMissing
84
86
  def method_missing(method)
85
87
  a = method.to_s
86
- instance_eval("get(:#{a[0, a.size - 1]})") if a[a.size - 1] == '?'
88
+ instance_eval("get(:#{a[0, a.size - 1]})", __FILE__, __LINE__) if a[a.size - 1] == '?'
87
89
  end
90
+ # rubocop:enable Style/MissingRespondToMissing
88
91
 
92
+ ##
93
+ # Execute Teuton DSL gett keyword
94
+ # Same as get keyword, but show pretty output when used by readme command.
89
95
  def gett(option)
90
96
  value = get(option)
91
97
  value
92
98
  end
93
99
 
100
+ ##
101
+ # Execute Teuton DSL unique keyword
94
102
  def unique(key, _value)
95
103
  @stats[:uniques] += 1
96
104
 
@@ -98,11 +106,15 @@ class Laboratory
98
106
  verboseln ''
99
107
  end
100
108
 
109
+ ##
110
+ # Execute Teuton DSL log keyword
101
111
  def log(text = '', type = :info)
102
112
  @stats[:logs] += 1
103
113
  verboseln " log [#{type}]: " + text.to_s
104
114
  end
105
115
 
116
+ ##
117
+ # Execute Teuton DSL set keyword
106
118
  def set(key, value)
107
119
  @stats[:sets] += 1
108
120
 
@@ -1,10 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'terminal-table'
4
- require 'rainbow'
5
-
6
- require_relative '../../application'
7
- require_relative '../../case_manager/case/result/result'
3
+ require_relative '../application'
4
+ require_relative '../case_manager/case/result/result'
8
5
  require_relative 'show'
9
6
  require_relative 'dsl'
10
7
  require_relative 'builtin'
@@ -35,7 +32,7 @@ alias task group
35
32
  # DSL start: Define main teuton test execution
36
33
  # @param block (Proc)
37
34
  def start(&block)
38
- # don't do nothing
35
+ # Don't do nothing. We are checking test not running it
39
36
  end
40
37
  alias play start
41
38
 
@@ -54,8 +51,6 @@ class Laboratory
54
51
  reset
55
52
  end
56
53
 
57
- ##
58
- # Set attibutes to default values
59
54
  def reset
60
55
  @result = Result.new
61
56
  @targetid = 0
@@ -1,8 +1,8 @@
1
1
  require 'terminal-table'
2
2
  require 'rainbow'
3
3
 
4
- require_relative '../../application'
5
- require_relative '../configfile_reader'
4
+ require_relative '../application'
5
+ require_relative '../utils/configfile_reader'
6
6
 
7
7
  # Laboratory
8
8
  # * show_dsl
@@ -10,68 +10,23 @@ require_relative '../configfile_reader'
10
10
  # * show_config
11
11
  class Laboratory
12
12
  ##
13
- # Display DSL on screen
14
- def show_dsl
13
+ # Display DSL checking on screen
14
+ def show
15
15
  @verbose = true
16
16
  process_content
17
17
  show_stats
18
- show_config
19
- end
20
-
21
- ##
22
- # Display stats on screen
23
- def show_stats
24
- @stats[:hosts] = 0
25
- @hosts.each_pair { |_k, v| @stats[:hosts] += v }
26
-
27
- my_screen_table = Terminal::Table.new do |st|
28
- st.add_row ['DSL Stats', 'Count']
29
- st.add_separator
30
- st.add_row ['Groups', @stats[:groups]]
31
- st.add_row ['Targets', @stats[:targets]]
32
- st.add_row ['Goto', @stats[:hosts]]
33
- @hosts.each_pair { |k, v| st.add_row [" * #{k}", v] }
34
- st.add_row ['Uniques', @stats[:uniques]]
35
- st.add_row ['Logs', @stats[:uniques]]
36
- st.add_row [' ', ' ']
37
-
38
- st.add_row ['Gets', @stats[:gets]]
39
- if @gets.count > 0
40
- list = @gets.sort_by { |_k, v| v }
41
- list.reverse_each { |item| st.add_row [" * #{item[0]}", item[1].to_s] }
42
- end
43
-
44
- st.add_row ['Sets', @stats[:sets]]
45
- if @sets.count > 0
46
- @sets.each_pair { |k, v| st.add_row [" * #{k}", v.to_s] }
47
- end
48
- end
49
- verboseln my_screen_table.to_s + "\n"
18
+ revise_config_content
50
19
  end
51
20
 
52
21
  ##
53
- # Display config on screen
54
- def show_config
22
+ # Display config for teuton panel on screen
23
+ def show_panelconfig
55
24
  @verbose = false
56
25
  process_content
57
26
  @verbose = true
58
- revise_config_content
27
+ recomended_panelconfig_content
59
28
  end
60
29
 
61
- # def show_requests
62
- # @verbose = false
63
- # process_content
64
- # @verbose = true
65
- # my_screen_table = Terminal::Table.new do |st|
66
- # st.add_row ['Lines', 'REQUEST description']
67
- # st.add_separator
68
- # @requests.each_with_index do |line, index|
69
- # st.add_row ['%03d' % index, line]
70
- # end
71
- # end
72
- # verboseln my_screen_table
73
- # end
74
-
75
30
  private
76
31
 
77
32
  def verbose(text)
@@ -84,14 +39,16 @@ class Laboratory
84
39
 
85
40
  def process_content
86
41
  groups = Application.instance.groups
42
+ option = Application.instance.options
43
+
87
44
  verboseln ''
88
45
  groups.each do |t|
89
46
  @stats[:groups] += 1
90
-
91
- msg = "GROUP: #{t[:name]}"
92
- my_screen_table = Terminal::Table.new { |st| st.add_row [msg] }
93
- verboseln my_screen_table
94
-
47
+ unless option[:panel]
48
+ msg = "GROUP: #{t[:name]}"
49
+ my_screen_table = Terminal::Table.new { |st| st.add_row [msg] }
50
+ verboseln my_screen_table
51
+ end
95
52
  instance_eval(&t[:block])
96
53
  end
97
54
  end
@@ -127,10 +84,16 @@ class Laboratory
127
84
  verboseln YAML.dump(output)
128
85
  end
129
86
 
87
+ def recomended_panelconfig_content
88
+ output = { global: {}, cases: nil }
89
+ script_vars = find_script_vars
90
+ script_vars.each { |i| output[:global][i] = 'VALUE' }
91
+ verboseln YAML.dump(output)
92
+ end
93
+
130
94
  ##
131
95
  # Revive and check config content
132
96
  def revise_config_content
133
- @verbose = true
134
97
  my_screen_table = Terminal::Table.new do |st|
135
98
  st.add_row ['Revising CONFIG file']
136
99
  end
@@ -166,4 +129,35 @@ class Laboratory
166
129
  end
167
130
  end
168
131
  end
132
+
133
+ ##
134
+ # Display stats on screen
135
+ def show_stats
136
+ @stats[:hosts] = 0
137
+ @hosts.each_pair { |_k, v| @stats[:hosts] += v }
138
+
139
+ my_screen_table = Terminal::Table.new do |st|
140
+ st.add_row ['DSL Stats', 'Count']
141
+ st.add_separator
142
+ st.add_row ['Groups', @stats[:groups]]
143
+ st.add_row ['Targets', @stats[:targets]]
144
+ st.add_row ['Goto', @stats[:hosts]]
145
+ @hosts.each_pair { |k, v| st.add_row [" * #{k}", v] }
146
+ st.add_row ['Uniques', @stats[:uniques]]
147
+ st.add_row ['Logs', @stats[:uniques]]
148
+ st.add_row [' ', ' ']
149
+
150
+ st.add_row ['Gets', @stats[:gets]]
151
+ if @gets.count > 0
152
+ list = @gets.sort_by { |_k, v| v }
153
+ list.reverse_each { |item| st.add_row [" * #{item[0]}", item[1].to_s] }
154
+ end
155
+
156
+ st.add_row ['Sets', @stats[:sets]]
157
+ if @sets.count > 0
158
+ @sets.each_pair { |k, v| st.add_row [" * #{k}", v.to_s] }
159
+ end
160
+ end
161
+ verboseln my_screen_table.to_s + "\n"
162
+ end
169
163
  end
data/lib/teuton/cli.rb CHANGED
@@ -1,39 +1,110 @@
1
+
1
2
  require 'thor'
2
- require_relative 'application'
3
- require_relative 'project/project'
4
- require_relative 'project/skeleton.rb'
5
- require_relative 'cli/main'
3
+ require_relative 'version'
4
+ require_relative '../teuton'
6
5
 
7
- ##
8
- # Command Line User Interface
9
6
  class CLI < Thor
10
7
  map ['h', '-h', '--help'] => 'help'
11
8
 
12
- map ['c', '-c', '--create', 'create'] => 'new'
9
+ map ['v', '-v', '--version'] => 'version'
10
+ desc 'version', 'Show the program version'
11
+ def version
12
+ puts "#{Teuton::APPNAME} (version #{Teuton::VERSION})"
13
+ end
14
+
15
+ map ['n', '-n', '--new'] => 'new'
13
16
  desc 'new DIRECTORY', 'Create skeleton for a new project'
14
17
  long_desc <<-LONGDESC
15
18
  Create files for a new project.
19
+ LONGDESC
20
+ def new(projectpath)
21
+ Teuton.create(projectpath)
22
+ end
23
+
24
+ map ['c', '-c', '--check'] => 'check'
25
+ option :panelconfig, type: :boolean
26
+ option :cname, type: :string
27
+ option :cpath, type: :string
28
+ desc 'check [OPTIONS] DIRECTORY',
29
+ 'Check test and config file content'
30
+ long_desc <<-LONGDESC
31
+
32
+ (1) teuton check path/to/dir/foo
33
+ , Check content of start.rb and config.yaml files.
16
34
 
17
- Example:
35
+ (2) teuton check path/to/dir/foo --cname=demo
36
+ , Check content of start.rb and demo.yaml files.
37
+
38
+ (3) teuton check path/to/file/foo.rb
39
+ , Check content of foo.rb and foo.yaml files.
40
+
41
+ (4) teuton check path/to/file/foo.rb --cname=demo
42
+ , Check content of foo.rb and demo.yaml files.
18
43
 
19
- #{$PROGRAM_NAME} create dir/foo
20
44
  LONGDESC
21
- ##
22
- # Command: create new Teuton project
23
- def new(path_to_new_dir)
24
- Skeleton.create(path_to_new_dir)
45
+ def check(projectpath)
46
+ Teuton.check(projectpath, options)
47
+ end
48
+
49
+ map ['--run', 'run'] => 'play'
50
+ option :export, type: :string
51
+ option :cname, type: :string
52
+ option :cpath, type: :string
53
+ option :case, type: :string
54
+ option :color, type: :boolean
55
+ option :quiet, type: :boolean
56
+ desc '[run] [OPTIONS] DIRECTORY',
57
+ 'Run test from directory'
58
+ long_desc <<-LONGDESC
59
+ This function execute challenge from specified directory.
60
+ By default, show progress on the screen.
61
+
62
+ Let's see others options:
63
+
64
+ (1) teuton foo, run challenge from foo/start.rb with foo/config.yaml config file.
65
+
66
+ (2) teuton run foo, same as (1).
67
+
68
+ (3) teuton run --export=json foo, run challenge and export using json format.
69
+ Others output formats availables are: txt, html, yaml, json and colored_text.
70
+
71
+ (4) teuton run --cname=demo foo, run challenge from foo/start.rb with foo/demo.yaml config file.
72
+
73
+ (5) teuton foo/demo.rb, Run challenge from foo/demo.rb with foo/demo.yaml config file.
74
+
75
+ LONGDESC
76
+ def play(filepath)
77
+ Teuton.run(filepath, options)
78
+ end
79
+
80
+ map ['--readme'] => 'readme'
81
+ option :lang, type: :string
82
+ desc 'readme DIRECTORY',
83
+ 'Show README extracted from test contents'
84
+ long_desc <<-LONGDESC
85
+
86
+ (1) teuton readme foo
87
+ , Create README.md from foo/start.rb.
88
+
89
+ (2) teuton readme foo/demo.rb
90
+ , Create README.md from foo/demo.rb.
91
+ LONGDESC
92
+
93
+ def readme(projectpath)
94
+ # Create README from teuton test
95
+ Teuton.readme(projectpath, options)
25
96
  end
26
97
 
27
98
  ##
28
99
  # These inputs are equivalents:
29
100
  # * teuton dir/foo
30
101
  # * teuton run dir/foo
31
- # * teuton play dir/foo
32
102
  def method_missing(method, *_args, &_block)
33
103
  play(method.to_s)
34
104
  end
35
105
 
36
106
  def respond_to_missing?(method_name, include_private = false)
107
+ # Respond to missing methods name
37
108
  super
38
109
  end
39
110
  end
File without changes
@@ -1,5 +1,5 @@
1
1
 
2
- require_relative '../../application'
2
+ require_relative '../application'
3
3
 
4
4
  module Lang
5
5
  def self.get(key)
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../application'
4
- require_relative '../configfile_reader'
5
- require_relative '../../case_manager/case/result/result'
3
+ require_relative '../application'
4
+ require_relative '../utils/configfile_reader'
5
+ require_relative '../case_manager/case/result/result'
6
6
  require_relative 'dsl'
7
7
  require_relative 'lang'
8
8
 
@@ -44,6 +44,19 @@ class Readme
44
44
  reset
45
45
  end
46
46
 
47
+ ##
48
+ # Show README on screen
49
+ def show
50
+ process_content
51
+ show_head
52
+ show_content
53
+ show_tail
54
+ end
55
+
56
+ private
57
+
58
+ ##
59
+ # Reset attributes
47
60
  def reset
48
61
  app = Application.instance
49
62
  @config = ConfigFileReader.read(app.config_path)
@@ -73,13 +86,6 @@ class Readme
73
86
  @action = { readme: [] }
74
87
  end
75
88
 
76
- def show
77
- process_content
78
- show_head
79
- show_content
80
- show_tail
81
- end
82
-
83
89
  ##
84
90
  # Show README head
85
91
  def show_head
@@ -97,23 +103,21 @@ class Readme
97
103
  puts Lang::get(:hosts)
98
104
  puts "\n"
99
105
  puts '| ID | Host | Configuration |'
100
- puts '| -- | ---- | ------------- |'
106
+ puts '| --- | --- | --- |'
101
107
  @required_hosts.each_pair do |k, v|
102
108
  c = []
103
109
  v.each_pair { |k2,v2| c << "#{k2}=#{v2}" }
104
- puts "|#{i}|#{k.upcase}|#{c.join(', ')}|"
110
+ puts "| #{i} | #{k.upcase} | #{c.join(', ')} |"
105
111
  i += 1
106
112
  end
107
113
  puts "\n> NOTE: SSH Service installation is required on every host."
108
114
  end
109
115
 
110
116
  unless @cases_params.empty?
111
- @cases_params.uniq!.sort!
117
+ @cases_params.sort!
112
118
  puts Lang::get(:params)
113
119
  @cases_params.uniq.each { |i| puts format('* %s', i) }
114
- puts "\n> NOTE:"
115
- puts "> * Teuton software must known this information!"
116
- puts "> * Save every ':param: value' into config file."
120
+ puts "\n> NOTE: Save every ':param: value' into config file."
117
121
  end
118
122
  end
119
123
 
@@ -156,13 +160,13 @@ class Readme
156
160
  puts Lang::get(:global)
157
161
  puts "\n"
158
162
  puts '| Global param | Value |'
159
- puts '| ------------ | ----- |'
163
+ puts '| --- | --- |'
160
164
  @global_params.each_pair { |k,v| puts "|#{k}|#{v}|" }
161
165
  puts "\n\#\# Created params"
162
166
  puts Lang::get(:created)
163
167
  puts "\n"
164
168
  puts '| Created params | Value |'
165
- puts '| -------------- | ----- |'
169
+ puts '| --- | --- |'
166
170
  @setted_params.each_pair { |k,v| puts "|#{k}|#{v}|" }
167
171
  end
168
172
  end
@@ -2,13 +2,19 @@
2
2
 
3
3
  require_relative 'base_formatter'
4
4
 
5
+ ##
5
6
  # ArrayFormatter class: format report data into an array
6
7
  class ArrayFormatter < BaseFormatter
8
+ ##
9
+ # Initialize class
10
+ # @param report (Report) Format report data into Array
7
11
  def initialize(report)
8
12
  super(report)
9
13
  @data = {}
10
14
  end
11
15
 
16
+ ##
17
+ # Execute format action
12
18
  def process
13
19
  build_data
14
20
  w @data.to_s # Write data into ouput file
@@ -28,6 +34,8 @@ class ArrayFormatter < BaseFormatter
28
34
  @data[:config] = head
29
35
  end
30
36
 
37
+ # rubocop:disable Metrics/AbcSize
38
+ # rubocop:disable Metrics/MethodLength
31
39
  def build_history_data
32
40
  @data[:logs] = []
33
41
  groups = []
@@ -46,7 +54,8 @@ class ArrayFormatter < BaseFormatter
46
54
  end
47
55
 
48
56
  target = {}
49
- target[:target_id] = format('%02d', i[:id])
57
+ # target[:target_id] = format('%02d', i[:id])
58
+ target[:target_id] = format('%<id>02d', id: i[:id])
50
59
  target[:check] = i[:check]
51
60
  target[:score] = value
52
61
  target[:weight] = i[:weight]
@@ -66,6 +75,8 @@ class ArrayFormatter < BaseFormatter
66
75
  groups << { title: title, targets: targets } unless title.nil?
67
76
  @data[:groups] = groups
68
77
  end
78
+ # rubocop:enable Metrics/AbcSize
79
+ # rubocop:enable Metrics/MethodLength
69
80
 
70
81
  def build_final_data
71
82
  tail = {}
@@ -77,6 +88,7 @@ class ArrayFormatter < BaseFormatter
77
88
  app = Application.instance
78
89
  @data[:hall_of_fame] = {}
79
90
  return if app.options[:case_number] < 3
91
+
80
92
  fame = {}
81
93
  app.hall_of_fame.each { |line| fame[line[0]] = line[1] }
82
94
  @data[:hall_of_fame] = fame