teuton 3.2.1 → 3.4.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.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +18 -20
  3. data/docs/commands/README.md +12 -10
  4. data/docs/commands/check.md +17 -15
  5. data/docs/commands/{readme.md → doc.md} +3 -5
  6. data/docs/commands/help.md +23 -13
  7. data/docs/devel/todo.md +2 -8
  8. data/docs/dsl/README.md +9 -8
  9. data/docs/dsl/event.md +172 -0
  10. data/docs/dsl/target.md +0 -14
  11. data/docs/install/t-node.md +10 -21
  12. data/docs/learn/01-cmd_new.md +1 -1
  13. data/docs/learn/02-target.md +52 -50
  14. data/docs/learn/03-remote_hosts.md +15 -16
  15. data/docs/learn/04-config.md +70 -69
  16. data/docs/learn/05-use.md +1 -1
  17. data/docs/learn/06-cmd_check.md +28 -26
  18. data/docs/learn/07-target_weight.md +7 -5
  19. data/docs/learn/08-unique_values.md +32 -30
  20. data/docs/learn/09-send.md +2 -2
  21. data/docs/learn/10-debug.md +38 -1
  22. data/docs/learn/11-export.md +1 -1
  23. data/docs/learn/12-preserve.md +4 -4
  24. data/docs/learn/13-feedback.md +12 -11
  25. data/docs/learn/14-moodle_id.md +3 -3
  26. data/docs/learn/15-readme.md +12 -12
  27. data/docs/learn/16-include.md +9 -9
  28. data/docs/learn/17-alias.md +2 -2
  29. data/docs/learn/18-log.md +46 -44
  30. data/docs/learn/19-read_vars.md +1 -1
  31. data/docs/learn/20-macros.md +1 -1
  32. data/docs/learn/21-exit_codes.md +1 -1
  33. data/docs/learn/22-result.md +1 -1
  34. data/docs/learn/23-test-code.md +14 -11
  35. data/docs/learn/24-test-sql.md +6 -6
  36. data/docs/learn/25-expect-result.md +1 -1
  37. data/docs/learn/26-expect_sequence.md +2 -2
  38. data/docs/learn/27-run_script.md +9 -6
  39. data/docs/learn/28-upload.md +3 -1
  40. data/docs/learn/31-event-stop.md +134 -0
  41. data/docs/learn/32-event-zero.md +127 -0
  42. data/docs/more.md +4 -1
  43. data/lib/teuton/case/{action.rb → action/action.rb} +18 -10
  44. data/lib/teuton/case/action/manager.rb +198 -0
  45. data/lib/teuton/case/case.rb +15 -13
  46. data/lib/teuton/case/close.rb +7 -7
  47. data/lib/teuton/case/dsl/all.rb +1 -0
  48. data/lib/teuton/case/dsl/event.rb +5 -0
  49. data/lib/teuton/case/dsl/expect.rb +6 -4
  50. data/lib/teuton/case/dsl/log.rb +10 -9
  51. data/lib/teuton/case/dsl/macro.rb +1 -1
  52. data/lib/teuton/case/dsl/run.rb +10 -15
  53. data/lib/teuton/case/dsl/target.rb +10 -3
  54. data/lib/teuton/case/play.rb +1 -1
  55. data/lib/teuton/case/result/ext_compare.rb +10 -10
  56. data/lib/teuton/case_manager/dsl.rb +6 -2
  57. data/lib/teuton/case_manager/ext/report.rb +0 -4
  58. data/lib/teuton/case_manager/show_resume_report.rb +29 -30
  59. data/lib/teuton/check/checker.rb +19 -8
  60. data/lib/teuton/check/dsl/all.rb +10 -16
  61. data/lib/teuton/check/dsl/event.rb +10 -0
  62. data/lib/teuton/check/dsl/expect.rb +21 -45
  63. data/lib/teuton/check/dsl/getset.rb +2 -2
  64. data/lib/teuton/check/dsl/run.rb +2 -2
  65. data/lib/teuton/check/dsl/target.rb +17 -0
  66. data/lib/teuton/check/show.rb +35 -41
  67. data/lib/teuton/cli/app.rb +16 -8
  68. data/lib/teuton/readme/dsl/all.rb +16 -2
  69. data/lib/teuton/readme/main.rb +2 -2
  70. data/lib/teuton/report/formatter/default/array.rb +15 -29
  71. data/lib/teuton/report/formatter/default/txt.rb +42 -30
  72. data/lib/teuton/report/formatter/resume/txt.rb +27 -26
  73. data/lib/teuton/report/formatter/resume/xml.rb +4 -4
  74. data/lib/teuton/report/report.rb +5 -36
  75. data/lib/teuton/utils/project.rb +4 -3
  76. data/lib/teuton/version.rb +1 -1
  77. metadata +14 -7
  78. data/docs/tutorial/es/nginx/README.md +0 -546
  79. data/lib/teuton/deprecated/utils.rb +0 -14
@@ -5,7 +5,7 @@ require_relative "getset"
5
5
  require_relative "run"
6
6
 
7
7
  module ReadmeDSL
8
- def readme(text)
8
+ def doc(text)
9
9
  if @action.description.nil?
10
10
  @current[:readme] << text # It's a group readme
11
11
  else
@@ -13,6 +13,11 @@ module ReadmeDSL
13
13
  end
14
14
  end
15
15
 
16
+ def readme(...)
17
+ Logger.warn("Keyword deprecated: Replace 'readme' by 'doc'.")
18
+ doc(...)
19
+ end
20
+
16
21
  def target(desc, args = {})
17
22
  previous_host = @action.host
18
23
  @action.description = desc
@@ -22,7 +27,16 @@ module ReadmeDSL
22
27
  weight = args[:weight].to_f if args[:weight]
23
28
  @action.weight = weight
24
29
  end
25
- alias_method :goal, :target
30
+
31
+ def goal(...)
32
+ Logger.warn("Keyword deprecated: Replace 'goal' by 'target'.")
33
+ target(...)
34
+ end
35
+
36
+ def event(*args, &block)
37
+ # TODO
38
+ # args = on: XXX, when: XXX
39
+ end
26
40
 
27
41
  def unique(_key, _value)
28
42
  # Nothing to do
@@ -20,7 +20,7 @@ def group(name, &block)
20
20
  end
21
21
 
22
22
  def task(...)
23
- Logger.warn "[DEPRECATED] Replace 'task' by 'group'"
23
+ Logger.warn "Keyword deprecated: Replace 'task' by 'group'"
24
24
  group(...)
25
25
  end
26
26
 
@@ -29,6 +29,6 @@ def play(&block)
29
29
  end
30
30
 
31
31
  def start(...)
32
- Logger.warn "[DEPRECATED] Replace `start' by' play'"
32
+ Logger.warn "Keyword deprecated: Replace `start' by' play'"
33
33
  play(...)
34
34
  end
@@ -33,45 +33,31 @@ class ArrayFormatter < BaseFormatter
33
33
  groups = []
34
34
  title = nil
35
35
  targets = []
36
- @lines.each do |i|
37
- unless i.instance_of? Hash
38
- @data[:logs] << i.to_s # Add log line
36
+ @lines.each do |line|
37
+ unless line.instance_of? Hash
38
+ @data[:logs] << line.to_s # Add log line
39
39
  next
40
40
  end
41
41
 
42
- value = 0.0
43
- value = i[:weight] if i[:check]
44
- if i[:groupname] != title
42
+ # value = 0.0
43
+ # value = line[:weight] if line[:check]
44
+ if line[:groupname] != title
45
45
  # Add currentgroup
46
46
  groups << {title: title, targets: targets} unless title.nil?
47
47
  # Create new group
48
- title = i[:groupname]
48
+ title = line[:groupname]
49
49
  targets = []
50
50
  end
51
-
52
- target = {}
53
- target[:target_id] = format("%<id>02d", id: i[:id])
54
- target[:check] = i[:check]
55
- target[:score] = value
56
- target[:weight] = i[:weight]
57
- target[:description] = i[:description]
58
-
59
- target[:conn_type] = i[:conn_type]
60
- target[:duration] = i[:duration]
61
-
62
- target[:command] = i[:command]
63
- target[:output] = i[:output]
64
- target[:alterations] = i[:alterations]
65
- target[:expected] = i[:expected]
66
- target[:result] = i[:result]
51
+ target = line
52
+ target[:target_id] = format("%<id>02d", id: line[:id])
67
53
 
68
54
  if options[:feedback] == false
69
- target[:command] = "*" * i[:command].size
70
- i[:output] = "" if i[:output].nil?
71
- target[:output] = "*" * i[:output].size
72
- target[:alterations] = "*" * i[:alterations].size
73
- target[:expected] = "*" * i[:expected].size
74
- target[:result] = "*" * i[:result].size
55
+ target[:command] = "*" * line[:command].size
56
+ line[:output] = "" if line[:output].nil?
57
+ target[:output] = "*" * line[:output].size
58
+ target[:alterations] = "*" * line[:alterations].size
59
+ target[:expected] = "*" * line[:expected].size
60
+ target[:result] = "*" * line[:result].size
75
61
  end
76
62
 
77
63
  targets << target
@@ -23,44 +23,43 @@ class TXTFormatter < ArrayFormatter
23
23
  private
24
24
 
25
25
  def process_config
26
- w "#{colorize("CONFIGURATION", :bg_blue)}\n"
27
- my_screen_table = Terminal::Table.new do |st|
28
- @data[:config].sort.each do |key, value|
29
- st.add_row [key.to_s, value.to_s]
30
- end
26
+ w "#{colorize(" \u{2692} CONFIGURATION", :bg_blue)}\n"
27
+ table = Terminal::Table.new do |t|
28
+ t.style = {border: :unicode}
29
+ @data[:config].sort.each { |key, value| t.add_row [key.to_s, value.to_s] }
31
30
  end
32
- w "#{my_screen_table}\n\n"
31
+ w "#{table}\n"
33
32
  end
34
33
 
35
34
  def process_logs
36
35
  return if @data[:logs].empty?
37
36
 
38
- w "#{colorize("LOGS", :bg_blue)}\n"
39
- @data[:logs].each { |line| w " #{line}\n" }
37
+ w "#{colorize("\n \u{1f6c8} LOGS", :bg_blue)}\n"
38
+ @data[:logs].each { |line| w " #{line}\n" }
40
39
  end
41
40
 
42
41
  def process_groups
43
42
  return if @data[:groups].empty?
44
43
 
45
- w "\n#{colorize("GROUPS", :bg_blue)}\n"
44
+ w "\n#{colorize(" \u{2630} GROUPS", :bg_blue)}\n"
46
45
  @data[:groups].each { |g| process_group g }
47
46
  end
48
47
 
49
48
  def process_results
50
- w "\n#{colorize("RESULTS", :bg_blue)}\n"
51
- my_screen_table = Terminal::Table.new do |st|
52
- @data[:results].each do |key, value|
53
- st.add_row [key.to_s, value.to_s]
54
- end
49
+ w "\n#{colorize(" \u{1f5f9} RESULTS", :bg_blue)}\n"
50
+ table = Terminal::Table.new do |t|
51
+ t.style = {border: :unicode}
52
+ @data[:results].each { |key, value| t.add_row [key.to_s, value.to_s] }
55
53
  end
56
- w "#{my_screen_table}\n"
54
+ w "#{table}\n"
57
55
  end
58
56
 
59
57
  def process_hof
60
58
  return if @data[:hall_of_fame].empty?
61
59
 
62
- w "\n#{colorize("HALL OF FAME", :bg_blue)}\n"
63
- my_screen_table = Terminal::Table.new do |st|
60
+ w "\n#{colorize(" \u{2605} HALL OF FAME", :bg_blue)}\n"
61
+ my_screen_table = Terminal::Table.new do |t|
62
+ t.style = {border: :unicode}
64
63
  @data[:hall_of_fame].each do |line|
65
64
  color = :green
66
65
  color = :red if line[0] < 50
@@ -70,7 +69,7 @@ class TXTFormatter < ArrayFormatter
70
69
  text1 = colorize(text1, :bright)
71
70
  text2 = colorize(text2, :bright)
72
71
  end
73
- st.add_row [text1, text2]
72
+ t.add_row [text1, text2]
74
73
  end
75
74
  end
76
75
  w "#{my_screen_table}\n"
@@ -80,21 +79,34 @@ class TXTFormatter < ArrayFormatter
80
79
 
81
80
  def process_group(group)
82
81
  tab = " "
83
- w "- #{colorize(group[:title], :blue_bright)}\n"
82
+ w " \u{25B6} #{colorize(group[:title], :blue_bright)}\n"
83
+ corner = nil
84
84
  group[:targets].each do |i|
85
- color = :red
86
- color = :green if i[:check]
87
- w tab * 2 + format("%02d", i[:target_id].to_i)
85
+ if i[:check]
86
+ color = :green
87
+ symbol = Settings.letter[:ok]
88
+ else
89
+ color = :red
90
+ symbol = Settings.letter[:cross]
91
+ end
92
+ w tab * 1 + format(" #{symbol} %02d", i[:target_id].to_i)
88
93
  text = "#{i[:score]}/#{i[:weight]}"
89
- w " (#{colorize(text, color)})\n"
90
- w "#{tab * 4}Description : #{i[:description]}\n"
91
- w "#{tab * 4}Command : #{i[:command]}\n"
92
- w "#{tab * 4}Output : #{i[:output]}\n"
93
- w "#{tab * 4}Duration : #{i[:duration]} (#{i[:conn_type]})\n"
94
- w "#{tab * 4}Alterations : #{i[:alterations]}\n"
95
- w "#{tab * 4}Expected : #{i[:expected]}\n"
96
- w "#{tab * 4}Result : #{i[:result]}\n"
94
+ corner = if corner.nil?
95
+ "┌──"
96
+ else
97
+ "├──"
98
+ end
99
+ s = " " * (10 - text.size)
100
+ w " (#{colorize(text, color)})#{s}#{corner}\n"
101
+ w "#{tab * 4}Description │ #{i[:description]}\n"
102
+ w "#{tab * 4}Command │ #{i[:command]}\n"
103
+ w "#{tab * 4}Output │ #{i[:output]}\n"
104
+ w "#{tab * 4}Duration │ #{i[:duration]} (#{i[:conn_type]})\n"
105
+ w "#{tab * 4}Alterations │ #{i[:alterations]}\n"
106
+ w "#{tab * 4}Expected │ #{i[:expected]}\n"
107
+ w "#{tab * 4}Result │ #{i[:result]}\n"
97
108
  end
109
+ w "#{tab * 10}└──\n"
98
110
  end
99
111
 
100
112
  def colorize(text, option)
@@ -25,21 +25,21 @@ class ResumeTXTFormatter < ResumeArrayFormatter
25
25
  private
26
26
 
27
27
  def process_config
28
- w "#{colorize("CONFIGURATION", :bg_blue)}\n"
29
- my_screen_table = Terminal::Table.new do |st|
30
- @data[:config].each do |key, value|
31
- st.add_row [key.to_s, trim(value)]
32
- end
28
+ w "#{colorize(" \u{2692} CONFIGURATION ", :bg_blue)}\n"
29
+ table = Terminal::Table.new do |t|
30
+ t.style = {border: :unicode}
31
+ @data[:config].each { |key, value| t.add_row [key.to_s, trim(value)] }
33
32
  end
34
- w "#{my_screen_table}\n\n"
33
+ w "#{table}\n\n"
35
34
  end
36
35
 
37
36
  def process_cases
38
- w "#{colorize("CASES", :bg_blue)}\n"
39
- my_screen_table = Terminal::Table.new do |st|
40
- st.add_row %w[CASE MEMBERS GRADE STATE]
37
+ w "#{colorize(" \u{2630} CASES", :bg_blue)}\n"
38
+ table = Terminal::Table.new do |t|
39
+ t.style = {border: :unicode}
40
+ t.add_row %w[CASE MEMBERS GRADE STATE]
41
41
  @data[:cases].each do |line|
42
- st.add_row [
42
+ t.add_row [
43
43
  line[:id],
44
44
  line[:members],
45
45
  format(" %<grade>3d", {grade: line[:grade]}),
@@ -47,38 +47,39 @@ class ResumeTXTFormatter < ResumeArrayFormatter
47
47
  ]
48
48
  end
49
49
  end
50
- w "#{my_screen_table}\n\n"
50
+ w "#{table}\n\n"
51
51
  end
52
52
 
53
53
  def process_conn_errors
54
- my_screen_table = Terminal::Table.new do |st|
55
- st.add_row %w[CASE MEMBERS HOST ERROR]
54
+ table = Terminal::Table.new do |t|
55
+ t.style = {border: :unicode}
56
+ t.add_row %w[CASE MEMBERS HOST ERROR]
56
57
  @data[:cases].each do |line|
57
58
  line[:conn_status].each_pair do |h, e|
58
- st.add_row [line[:id], line[:members], h, colorize(e, :red_bright)]
59
+ t.add_row [line[:id], line[:members], h, colorize(e, :red_bright)]
59
60
  end
60
61
  end
61
62
  end
62
- return unless my_screen_table.rows.size > 1
63
+ return unless table.rows.size > 1
63
64
 
64
- w "#{colorize("CONN ERRORS", :bg_blue)}\n#{my_screen_table}\n\n"
65
+ w "#{colorize(" \u{1f5f2} CONN ERRORS", :bg_blue)}\n#{table}\n\n"
65
66
  end
66
67
 
67
68
  def process_results
68
- w "#{colorize("RESULTS", :bg_blue)}\n"
69
- my_screen_table = Terminal::Table.new do |st|
70
- @data[:results].each do |key, value|
71
- st.add_row [key.to_s, value.to_s]
72
- end
69
+ w "#{colorize(" \u{1f5f9} RESULTS", :bg_blue)}\n"
70
+ table = Terminal::Table.new do |t|
71
+ t.style = {border: :unicode}
72
+ @data[:results].each { |key, value| t.add_row([key.to_s, value.to_s]) }
73
73
  end
74
- w "#{my_screen_table}\n\n"
74
+ w "#{table}\n\n"
75
75
  end
76
76
 
77
77
  def process_hof
78
78
  return if @data[:hall_of_fame].size < MIN_HALL_OF_FAME
79
79
 
80
- w "#{colorize("HALL OF FAME", :bg_blue)}\n"
81
- my_screen_table = Terminal::Table.new do |st|
80
+ w "#{colorize(' \u{2605} HALL OF FAME', :bg_blue)}\n"
81
+ table = Terminal::Table.new do |t|
82
+ t.style = {border: :unicode}
82
83
  @data[:hall_of_fame].each do |line|
83
84
  color = :green
84
85
  color = :red if line[0] < 50
@@ -88,10 +89,10 @@ class ResumeTXTFormatter < ResumeArrayFormatter
88
89
  text1 = colorize(text1, :bright)
89
90
  text2 = colorize(text2, :bright)
90
91
  end
91
- st.add_row [text1, text2]
92
+ t.add_row [text1, text2]
92
93
  end
93
94
  end
94
- w "#{my_screen_table}\n"
95
+ w "#{table}\n"
95
96
  end
96
97
 
97
98
  def colorize(text, option)
@@ -61,10 +61,10 @@ class ResumeXMLFormatter < ResumeArrayFormatter
61
61
  end
62
62
  lines << " </conn_errors>"
63
63
 
64
- if lines.size > 2
65
- w lines.join("\n")
66
- w "\n"
67
- end
64
+ return unless lines.size > 2
65
+
66
+ w lines.join("\n")
67
+ w "\n\n"
68
68
  end
69
69
 
70
70
  def process_results
@@ -3,16 +3,18 @@ require_relative "../utils/settings"
3
3
  require_relative "formatter/formatter"
4
4
 
5
5
  class Report
6
- attr_accessor :id, :filename, :output_dir, :head, :lines, :tail, :format
7
- attr_reader :history
6
+ attr_accessor :id, :filename, :output_dir,
7
+ :head, :lines, :tail, :format, :history
8
8
 
9
9
  def initialize(id = "00")
10
10
  @id = id
11
11
  @filename = "case-#{@id}"
12
- @output_dir = Project.value[:output_basedir]
12
+ @output_dir = Project.value[:output_dir]
13
+
13
14
  @head = {}
14
15
  @lines = []
15
16
  @tail = {unique_fault: 0}
17
+ # TODO
16
18
  # [String] with 1 char for every target in @lines
17
19
  # For example: "..F." means: good, good, fail and good
18
20
  @history = ""
@@ -44,37 +46,4 @@ class Report
44
46
  filepath = File.join(@output_dir, "moodle")
45
47
  Formatter.call(self, {format: :moodle_csv}, filepath)
46
48
  end
47
-
48
- ##
49
- # Calculate final values:
50
- # * grade
51
- # * max_weight
52
- # * good_weight,d
53
- # * fail_weight
54
- # * fail_counter
55
- def close
56
- max = good = fails = fail_counter = 0
57
- @lines.each do |i|
58
- next unless i.instance_of? Hash
59
-
60
- max += i[:weight] if i[:weight].positive?
61
- if i[:check]
62
- good += i[:weight]
63
- @history += Settings.letter[:good]
64
- else
65
- fails += i[:weight]
66
- fail_counter += 1
67
- @history += Settings.letter[:fail]
68
- end
69
- end
70
- @tail[:max_weight] = max
71
- @tail[:good_weight] = good
72
- @tail[:fail_weight] = fails
73
- @tail[:fail_counter] = fail_counter
74
-
75
- i = good.to_f / max
76
- i = 0 if i.nan?
77
- @tail[:grade] = (100.0 * i).round
78
- @tail[:grade] = 0 if @tail[:unique_fault].positive?
79
- end
80
49
  end
@@ -8,6 +8,7 @@ class Project
8
8
  @project[:running_basedir] = Dir.getwd
9
9
  @project[:output_basedir] = "var"
10
10
  @project[:output_dir] = @project[:output_basedir]
11
+ @project[:base_case_id] = "00"
11
12
  @project[:name] = "teuton"
12
13
  @project[:format] = :txt # Default export format
13
14
  @project[:debug] = false # Disable/enable local executions
@@ -18,12 +19,12 @@ class Project
18
19
  "quiet" => false
19
20
  }
20
21
  @project[:verbose] = true # Enable/disable screen outputs
21
- @project[:global] = {}
22
22
  @project[:ialias] = {} # Hash of Internal alias
23
- @project[:macros] = {}
23
+ @project[:global] = {}
24
24
  @project[:groups] = []
25
- @project[:uses] = []
26
25
  @project[:hall_of_fame] = [] # Hall of fame content
26
+ @project[:macros] = {}
27
+ @project[:uses] = []
27
28
  end
28
29
 
29
30
  def self.value
@@ -1,5 +1,5 @@
1
1
  module Teuton
2
- VERSION = "3.2.1".freeze
2
+ VERSION = "3.4.0".freeze
3
3
  APPNAME = "teuton".freeze
4
4
  GEMNAME = "teuton".freeze
5
5
  DOCKERNAME = "dvarrui/#{GEMNAME}".freeze
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: teuton
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.1
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Vargas Ruiz
@@ -126,15 +126,16 @@ extra_rdoc_files:
126
126
  - docs/commands/README.md
127
127
  - docs/commands/check.md
128
128
  - docs/commands/config.md
129
+ - docs/commands/doc.md
129
130
  - docs/commands/help.md
130
131
  - docs/commands/new.md
131
- - docs/commands/readme.md
132
132
  - docs/commands/run.md
133
133
  - docs/config_file.md
134
134
  - docs/devel/contribute.md
135
135
  - docs/devel/diagram.md
136
136
  - docs/devel/todo.md
137
137
  - docs/dsl/README.md
138
+ - docs/dsl/event.md
138
139
  - docs/dsl/expect.md
139
140
  - docs/dsl/export.md
140
141
  - docs/dsl/get.md
@@ -181,10 +182,11 @@ extra_rdoc_files:
181
182
  - docs/learn/26-expect_sequence.md
182
183
  - docs/learn/27-run_script.md
183
184
  - docs/learn/28-upload.md
185
+ - docs/learn/31-event-stop.md
186
+ - docs/learn/32-event-zero.md
184
187
  - docs/learn/README.md
185
188
  - docs/modes_of_use.md
186
189
  - docs/more.md
187
- - docs/tutorial/es/nginx/README.md
188
190
  files:
189
191
  - LICENSE
190
192
  - README.md
@@ -192,15 +194,16 @@ files:
192
194
  - docs/commands/README.md
193
195
  - docs/commands/check.md
194
196
  - docs/commands/config.md
197
+ - docs/commands/doc.md
195
198
  - docs/commands/help.md
196
199
  - docs/commands/new.md
197
- - docs/commands/readme.md
198
200
  - docs/commands/run.md
199
201
  - docs/config_file.md
200
202
  - docs/devel/contribute.md
201
203
  - docs/devel/diagram.md
202
204
  - docs/devel/todo.md
203
205
  - docs/dsl/README.md
206
+ - docs/dsl/event.md
204
207
  - docs/dsl/expect.md
205
208
  - docs/dsl/export.md
206
209
  - docs/dsl/get.md
@@ -247,12 +250,14 @@ files:
247
250
  - docs/learn/26-expect_sequence.md
248
251
  - docs/learn/27-run_script.md
249
252
  - docs/learn/28-upload.md
253
+ - docs/learn/31-event-stop.md
254
+ - docs/learn/32-event-zero.md
250
255
  - docs/learn/README.md
251
256
  - docs/modes_of_use.md
252
257
  - docs/more.md
253
- - docs/tutorial/es/nginx/README.md
254
258
  - lib/teuton.rb
255
- - lib/teuton/case/action.rb
259
+ - lib/teuton/case/action/action.rb
260
+ - lib/teuton/case/action/manager.rb
256
261
  - lib/teuton/case/builtin/main.rb
257
262
  - lib/teuton/case/builtin/package.rb
258
263
  - lib/teuton/case/builtin/service.rb
@@ -263,6 +268,7 @@ files:
263
268
  - lib/teuton/case/close.rb
264
269
  - lib/teuton/case/config.rb
265
270
  - lib/teuton/case/dsl/all.rb
271
+ - lib/teuton/case/dsl/event.rb
266
272
  - lib/teuton/case/dsl/expect.rb
267
273
  - lib/teuton/case/dsl/expect_exitcode.rb
268
274
  - lib/teuton/case/dsl/expect_sequence.rb
@@ -300,15 +306,16 @@ files:
300
306
  - lib/teuton/check/checker.rb
301
307
  - lib/teuton/check/dsl/all.rb
302
308
  - lib/teuton/check/dsl/builtin.rb
309
+ - lib/teuton/check/dsl/event.rb
303
310
  - lib/teuton/check/dsl/expect.rb
304
311
  - lib/teuton/check/dsl/expect_sequence.rb
305
312
  - lib/teuton/check/dsl/getset.rb
306
313
  - lib/teuton/check/dsl/run.rb
314
+ - lib/teuton/check/dsl/target.rb
307
315
  - lib/teuton/check/main.rb
308
316
  - lib/teuton/check/show.rb
309
317
  - lib/teuton/cli/app.rb
310
318
  - lib/teuton/cli/run.rb
311
- - lib/teuton/deprecated/utils.rb
312
319
  - lib/teuton/errors.rb
313
320
  - lib/teuton/files/config.yaml
314
321
  - lib/teuton/files/start.rb