teuton 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +7 -0
  2. data/bin/teuton +4 -0
  3. data/lib/teuton/application.rb +53 -0
  4. data/lib/teuton/case_manager/case/builtin/main.rb +24 -0
  5. data/lib/teuton/case_manager/case/builtin/package.rb +20 -0
  6. data/lib/teuton/case_manager/case/builtin/service.rb +32 -0
  7. data/lib/teuton/case_manager/case/builtin/user.rb +20 -0
  8. data/lib/teuton/case_manager/case/case.rb +114 -0
  9. data/lib/teuton/case_manager/case/close.rb +29 -0
  10. data/lib/teuton/case_manager/case/config.rb +76 -0
  11. data/lib/teuton/case_manager/case/dsl/check.rb +24 -0
  12. data/lib/teuton/case_manager/case/dsl/deprecated.rb +14 -0
  13. data/lib/teuton/case_manager/case/dsl/expect.rb +78 -0
  14. data/lib/teuton/case_manager/case/dsl/getset.rb +22 -0
  15. data/lib/teuton/case_manager/case/dsl/goto.rb +35 -0
  16. data/lib/teuton/case_manager/case/dsl/log.rb +14 -0
  17. data/lib/teuton/case_manager/case/dsl/main.rb +11 -0
  18. data/lib/teuton/case_manager/case/dsl/missing.rb +12 -0
  19. data/lib/teuton/case_manager/case/dsl/send.rb +69 -0
  20. data/lib/teuton/case_manager/case/dsl/target.rb +16 -0
  21. data/lib/teuton/case_manager/case/dsl/unique.rb +11 -0
  22. data/lib/teuton/case_manager/case/main.rb +7 -0
  23. data/lib/teuton/case_manager/case/play.rb +59 -0
  24. data/lib/teuton/case_manager/case/result/ext_array.rb +43 -0
  25. data/lib/teuton/case_manager/case/result/ext_compare.rb +147 -0
  26. data/lib/teuton/case_manager/case/result/ext_filter.rb +68 -0
  27. data/lib/teuton/case_manager/case/result/result.rb +73 -0
  28. data/lib/teuton/case_manager/case/runner.rb +134 -0
  29. data/lib/teuton/case_manager/case_manager.rb +76 -0
  30. data/lib/teuton/case_manager/check_cases.rb +73 -0
  31. data/lib/teuton/case_manager/dsl.rb +31 -0
  32. data/lib/teuton/case_manager/export_manager.rb +20 -0
  33. data/lib/teuton/case_manager/hall_of_fame.rb +28 -0
  34. data/lib/teuton/case_manager/main.rb +6 -0
  35. data/lib/teuton/case_manager/report.rb +52 -0
  36. data/lib/teuton/case_manager/show.rb +19 -0
  37. data/lib/teuton/case_manager/utils.rb +57 -0
  38. data/lib/teuton/command/create.rb +20 -0
  39. data/lib/teuton/command/download.rb +26 -0
  40. data/lib/teuton/command/main.rb +9 -0
  41. data/lib/teuton/command/play.rb +34 -0
  42. data/lib/teuton/command/readme.rb +23 -0
  43. data/lib/teuton/command/test.rb +35 -0
  44. data/lib/teuton/command/update.rb +27 -0
  45. data/lib/teuton/command/version.rb +13 -0
  46. data/lib/teuton/files/start.rb +13 -0
  47. data/lib/teuton/project/configfile_reader.rb +49 -0
  48. data/lib/teuton/project/laboratory/builtin.rb +23 -0
  49. data/lib/teuton/project/laboratory/dsl.rb +117 -0
  50. data/lib/teuton/project/laboratory/laboratory.rb +55 -0
  51. data/lib/teuton/project/laboratory/show.rb +161 -0
  52. data/lib/teuton/project/name_file_finder.rb +129 -0
  53. data/lib/teuton/project/project.rb +62 -0
  54. data/lib/teuton/project/project_creator.rb +79 -0
  55. data/lib/teuton/project/readme/dsl.rb +109 -0
  56. data/lib/teuton/project/readme/lang.rb +30 -0
  57. data/lib/teuton/project/readme/readme.rb +156 -0
  58. data/lib/teuton/rake_function/check.rb +39 -0
  59. data/lib/teuton/rake_function/install.rb +36 -0
  60. data/lib/teuton/report/close.rb +34 -0
  61. data/lib/teuton/report/formatter/array_formatter.rb +84 -0
  62. data/lib/teuton/report/formatter/base_formatter.rb +33 -0
  63. data/lib/teuton/report/formatter/csv_formatter.rb +31 -0
  64. data/lib/teuton/report/formatter/formatter_factory.rb +73 -0
  65. data/lib/teuton/report/formatter/html_formatter.rb +81 -0
  66. data/lib/teuton/report/formatter/json_formatter.rb +17 -0
  67. data/lib/teuton/report/formatter/list_formatter.rb +71 -0
  68. data/lib/teuton/report/formatter/moodle_csv_formatter.rb +28 -0
  69. data/lib/teuton/report/formatter/resume_array_formatter.rb +49 -0
  70. data/lib/teuton/report/formatter/resume_json_formatter.rb +16 -0
  71. data/lib/teuton/report/formatter/resume_list_formatter.rb +62 -0
  72. data/lib/teuton/report/formatter/resume_txt_formatter.rb +102 -0
  73. data/lib/teuton/report/formatter/resume_yaml_formatter.rb +16 -0
  74. data/lib/teuton/report/formatter/txt_formatter.rb +102 -0
  75. data/lib/teuton/report/formatter/xml_formatter.rb +42 -0
  76. data/lib/teuton/report/formatter/yaml_formatter.rb +18 -0
  77. data/lib/teuton/report/report.rb +55 -0
  78. data/lib/teuton/report/show.rb +111 -0
  79. data/lib/teuton/utils/verbose.rb +15 -0
  80. data/lib/teuton.rb +17 -0
  81. metadata +263 -0
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base_formatter'
4
+
5
+ # ArrayFormatter class: format report data into an array
6
+ class ResumeArrayFormatter < BaseFormatter
7
+ def initialize(report)
8
+ super(report)
9
+ @data = {}
10
+ end
11
+
12
+ def process
13
+ build_data
14
+ w @data.to_s # Write data into ouput file
15
+ deinit
16
+ end
17
+
18
+ def build_data
19
+ build_initial_data
20
+ build_cases_data
21
+ build_final_data
22
+ build_hof_data
23
+ end
24
+
25
+ def build_initial_data
26
+ head = {}
27
+ @head.each { |key, value| head[key] = value }
28
+ @data[:config] = head
29
+ end
30
+
31
+ def build_cases_data
32
+ @data[:cases] = @lines
33
+ end
34
+
35
+ def build_final_data
36
+ tail = {}
37
+ @tail.each { |key, value| tail[key] = value }
38
+ @data[:results] = tail
39
+ end
40
+
41
+ def build_hof_data
42
+ app = Application.instance
43
+ fame = {}
44
+ if app.options[:case_number] > 2
45
+ app.hall_of_fame.each { |line| fame[line[0]] = line[1] }
46
+ end
47
+ @data[:hall_of_fame] = fame
48
+ end
49
+ end
@@ -0,0 +1,16 @@
1
+
2
+ require_relative 'resume_array_formatter'
3
+
4
+ # JSONFormatter class
5
+ class ResumeJSONFormatter < ResumeArrayFormatter
6
+ def initialize(report)
7
+ super(report)
8
+ @data = {}
9
+ end
10
+
11
+ def process
12
+ build_data
13
+ w @data.to_json # Write data into ouput file
14
+ deinit
15
+ end
16
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'resume_array_formatter'
4
+
5
+ # ResumeListFormatter class
6
+ class ResumeListFormatter < ResumeArrayFormatter
7
+ def initialize(report)
8
+ super(report)
9
+ @data = {}
10
+ end
11
+
12
+ def process
13
+ build_data
14
+ process_config
15
+ process_cases
16
+ process_conn_errors
17
+ process_results
18
+ process_hof
19
+ deinit
20
+ end
21
+
22
+ private
23
+
24
+ def process_config
25
+ w "CONFIGURATION\n"
26
+ @data[:config].each do |key,value|
27
+ w " * #{key}: #{trim(value)}\n"
28
+ end
29
+ end
30
+
31
+ def process_cases
32
+ w "CASES\n"
33
+ @data[:cases].each do |line|
34
+ w " [#{line[:id]}] #{line[:members]} :#{format('%3d', line[:grade])}\n"
35
+ end
36
+ end
37
+
38
+ def process_conn_errors
39
+ w "CONN ERRORS\n"
40
+ @data[:cases].each do |line|
41
+ line[:conn_status].each_pair do |h, e|
42
+ w " * #{line[:id]} #{line[:members]} #{h} #{e}\n"
43
+ end
44
+ end
45
+ end
46
+
47
+ def process_results
48
+ w "\nRESULTS\n"
49
+ @data[:results].each do |key,value|
50
+ w " * #{key}: #{value}\n"
51
+ end
52
+ end
53
+
54
+ def process_hof
55
+ return if @data[:hall_of_fame].size < 3
56
+
57
+ w "\nHALL OF FAME\n"
58
+ @data[:hall_of_fame].each do |line|
59
+ w " #{line[0]} : #{line[1]}\n"
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'terminal-table'
4
+ require 'rainbow'
5
+ require_relative 'resume_array_formatter'
6
+
7
+ # TXTFormatter class
8
+ class ResumeTXTFormatter < ResumeArrayFormatter
9
+ def initialize(report, color=false)
10
+ @color = color
11
+ super(report)
12
+ @data = {}
13
+ end
14
+
15
+ def process
16
+ rainbow_state = Rainbow.enabled
17
+ Rainbow.enabled = @color
18
+
19
+ build_data
20
+ process_config
21
+ process_cases
22
+ process_conn_errors
23
+ process_results
24
+ process_hof
25
+ deinit
26
+
27
+ Rainbow.enabled = rainbow_state
28
+ end
29
+
30
+ private
31
+
32
+ def process_config
33
+ w "#{Rainbow("CONFIGURATION").bg(:blue)}\n"
34
+ my_screen_table = Terminal::Table.new do |st|
35
+ @data[:config].each do |key,value|
36
+ st.add_row [ key.to_s, trim(value)]
37
+ end
38
+ end
39
+ w my_screen_table.to_s+"\n\n"
40
+ end
41
+
42
+ def process_cases
43
+ w "#{Rainbow('CASES').bg(:blue)}\n"
44
+
45
+ my_screen_table = Terminal::Table.new do |st|
46
+ st.add_row [ 'CASE ID', 'MEMBERS', 'GRADE', 'STATE' ]
47
+ @data[:cases].each do |line|
48
+ st.add_row [ line[:id],
49
+ line[:members],
50
+ format(' %3d', line[:grade]),
51
+ line[:letter] ]
52
+ end
53
+ end
54
+ w my_screen_table.to_s+"\n\n"
55
+ end
56
+
57
+ def process_conn_errors
58
+ w "#{Rainbow('CONN ERRORS').bg(:red)}\n"
59
+
60
+ my_screen_table = Terminal::Table.new do |st|
61
+ st.add_row [ 'CASE ID', 'MEMBERS', 'HOST', 'ERROR' ]
62
+ @data[:cases].each do |line|
63
+ line[:conn_status].each_pair do |h, e|
64
+ st.add_row [ line[:id],
65
+ line[:members],
66
+ h, e ]
67
+ end
68
+ end
69
+ end
70
+ w my_screen_table.to_s+"\n"
71
+ end
72
+
73
+ def process_results
74
+ w "\n#{Rainbow("RESULTS").bg(:blue)}\n"
75
+ my_screen_table = Terminal::Table.new do |st|
76
+ @data[:results].each do |key,value|
77
+ st.add_row [ key.to_s, value.to_s]
78
+ end
79
+ end
80
+ w my_screen_table.to_s+"\n"
81
+ end
82
+
83
+ def process_hof
84
+ return if @data[:hall_of_fame].size < 3
85
+
86
+ w "\n#{Rainbow("HALL OF FAME").bg(:blue)}\n"
87
+ my_screen_table = Terminal::Table.new do |st|
88
+ @data[:hall_of_fame].each do |line|
89
+ mycolor = :green
90
+ mycolor = :red if line[0] < 50
91
+ text1 = Rainbow(line[0]).color(mycolor)
92
+ text2 = Rainbow(line[1]).color(mycolor)
93
+ if line[0] == @data[:results][:grade]
94
+ text1 = text1.bright
95
+ text2 = text2.bright
96
+ end
97
+ st.add_row [text1, text2]
98
+ end
99
+ end
100
+ w my_screen_table.to_s + "\n"
101
+ end
102
+ end
@@ -0,0 +1,16 @@
1
+
2
+ require_relative 'resume_array_formatter'
3
+
4
+ # JSONFormatter class
5
+ class ResumeYAMLFormatter < ResumeArrayFormatter
6
+ def initialize(report)
7
+ super(report)
8
+ @data = {}
9
+ end
10
+
11
+ def process
12
+ build_data
13
+ w @data.to_yaml # Write data into ouput file
14
+ deinit
15
+ end
16
+ end
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'terminal-table'
4
+ require 'rainbow'
5
+ require_relative 'array_formatter'
6
+
7
+ # TXTFormatter class
8
+ class TXTFormatter < ArrayFormatter
9
+ def initialize(report, color=false)
10
+ @color = color
11
+ super(report)
12
+ @data = {}
13
+ end
14
+
15
+ def process
16
+ rainbow_state = Rainbow.enabled
17
+ Rainbow.enabled = @color
18
+
19
+ build_data
20
+ process_config
21
+ process_logs
22
+ process_groups
23
+ process_results
24
+ process_hof
25
+ deinit
26
+
27
+ Rainbow.enabled = rainbow_state
28
+ end
29
+
30
+ private
31
+
32
+ def process_config
33
+ w "#{Rainbow("CONFIGURATION").bg(:blue)}\n"
34
+ my_screen_table = Terminal::Table.new do |st|
35
+ @data[:config].sort.each { |key,value| st.add_row [ key.to_s, value.to_s] }
36
+ end
37
+ w my_screen_table.to_s+"\n\n"
38
+ end
39
+
40
+ def process_logs
41
+ return if @data[:logs].size == 0
42
+
43
+ w "#{Rainbow("LOGS").bg(:blue)}\n"
44
+ @data[:logs].each { |line| w " #{line}\n" }
45
+ end
46
+
47
+ def process_groups
48
+ return if @data[:groups].size == 0
49
+
50
+ w "\n#{Rainbow("GROUPS").bg(:blue)}\n"
51
+ @data[:groups].each { |g| process_group g }
52
+ end
53
+
54
+ def process_results
55
+ w "\n#{Rainbow("RESULTS").bg(:blue)}\n"
56
+ my_screen_table = Terminal::Table.new do |st|
57
+ @data[:results].each do |key,value|
58
+ st.add_row [ key.to_s, value.to_s]
59
+ end
60
+ end
61
+ w my_screen_table.to_s+"\n"
62
+ end
63
+
64
+ def process_hof
65
+ return if @data[:hall_of_fame].size < 3
66
+
67
+ w "\n#{Rainbow("HALL OF FAME").bg(:blue)}\n"
68
+ my_screen_table = Terminal::Table.new do |st|
69
+ @data[:hall_of_fame].each do |line|
70
+ mycolor = :green
71
+ mycolor = :red if line[0] < 50
72
+ text1 = Rainbow(line[0]).color(mycolor)
73
+ text2 = Rainbow(line[1]).color(mycolor)
74
+ if line[0] == @data[:results][:grade]
75
+ text1 = text1.bright
76
+ text2 = text2.bright
77
+ end
78
+ st.add_row [text1, text2]
79
+ end
80
+ end
81
+ w my_screen_table.to_s + "\n"
82
+ end
83
+
84
+ private
85
+
86
+ def process_group(group)
87
+ tab = ' '
88
+ w "- #{Rainbow(group[:title]).blue.bright}\n"
89
+ group[:targets].each do |i|
90
+ color = :red
91
+ color = :green if i[:check]
92
+ w tab*2 + format("%02d", i[:target_id].to_i)
93
+ w " (#{Rainbow(i[:score].to_s+"/"+i[:weight].to_s).color(color)})\n"
94
+ w tab*4+"Description : #{i[:description].to_s}\n"
95
+ w tab*4+"Command : #{i[:command].to_s}\n"
96
+ w tab*4+"Duration : #{i[:duration].to_s} (#{i[:conn_type].to_s})\n"
97
+ w tab*4+"Alterations : #{i[:alterations].to_s}\n"
98
+ w tab*4+"Expected : #{i[:expected].to_s} (#{i[:expected].class.to_s})\n"
99
+ w tab*4+"Result : #{i[:result].to_s} (#{i[:result].class.to_s})\n"
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,42 @@
1
+
2
+ require_relative 'base_formatter'
3
+
4
+ class XMLFormatter < BaseFormatter
5
+
6
+ def initialize(pReport)
7
+ super(pReport)
8
+ end
9
+
10
+ def process
11
+ tab=" "
12
+ w "<tt-checker version='0.2'>\n"
13
+ w tab+"<head>\n"
14
+ @head.each { |key,value| w tab*2+"<"+key.to_s+">"+value.to_s+"</"+key.to_s+">\n" }
15
+ w tab+"</head>\n"
16
+
17
+ w tab+"<lines>\n"
18
+ @lines.each do |i|
19
+ if i.class.to_s=='Hash' then
20
+ w tab*2+"<line>\n"
21
+ w tab*3+"<id>"+i[:id].to_s+"</id>\n"
22
+ w tab*3+"<description>"+i[:description].to_s+"</description>\n"
23
+ w tab*3+"<command"
24
+ w " tempfile='"+i[:tempfile]+"'" if i[:tempfile]
25
+ w ">"+i[:command].to_s+"</command>\n"
26
+ w tab*3+"<check>"+i[:check].to_s+"</check>\n"
27
+ w tab*3+"<weigth>"+i[:weight].to_s+"</weigth>\n"
28
+ w tab*2+"</line>\n"
29
+ else
30
+ w tab*2+"<line type='log'>"+i.to_s+"</line>\n"
31
+ end
32
+ end
33
+ w tab+"</lines>\n"
34
+
35
+ w tab+"<tail>\n"
36
+ @tail.each { |key,value| w tab*2+"<"+key.to_s+">"+value.to_s+"</"+key.to_s+">\n" }
37
+ w tab+"</tail>\n"
38
+ w "</tt-checker>\n"
39
+
40
+ deinit
41
+ end
42
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+ require_relative 'array_formatter'
5
+
6
+ # YAMLFormatter class
7
+ class YAMLFormatter < ArrayFormatter
8
+ def initialize(report)
9
+ super(report)
10
+ @data = {}
11
+ end
12
+
13
+ def process
14
+ build_data
15
+ w @data.to_yaml # Write data into ouput file
16
+ deinit
17
+ end
18
+ end
@@ -0,0 +1,55 @@
1
+
2
+ require 'terminal-table'
3
+ require_relative '../application'
4
+ require_relative 'formatter/formatter_factory'
5
+ require_relative 'show'
6
+ require_relative 'close'
7
+
8
+ =begin
9
+ This class maintain the results of every case, in a structured way.
10
+ * report/show.rb
11
+ * report/close.rb
12
+ =end
13
+
14
+ class Report
15
+ attr_accessor :id, :filename, :output_dir
16
+ attr_accessor :head, :lines, :tail
17
+ attr_reader :history
18
+ attr_reader :format
19
+
20
+ def initialize(id=0)
21
+ @id = id
22
+ number = '0' + @id.to_s
23
+ number = @id.to_s if @id > 9
24
+ @filename = "case-#{number}"
25
+ @output_dir = Application.instance.output_basedir
26
+ @head = {}
27
+ @lines = []
28
+ @tail = {}
29
+ # @history save 1 letter for every target.
30
+ # For example: "..F." means: good, good, fail and good
31
+ # I will use this in the future stats manager.
32
+ @history = ''
33
+ end
34
+
35
+ def export(format = :txt)
36
+ @format = format
37
+ filepath = File.join(@output_dir, @filename + '.' \
38
+ + FormatterFactory.ext(@format))
39
+
40
+ formatter = FormatterFactory.get(self, @format, filepath)
41
+ formatter.process
42
+ end
43
+
44
+ def export_resume(format = :txt)
45
+ @format = "resume_#{format.to_s}".to_sym
46
+ filepath = File.join(@output_dir, @filename + '.' \
47
+ + FormatterFactory.ext(@format))
48
+ formatter = FormatterFactory.get(self, @format, filepath)
49
+ formatter.process
50
+
51
+ filepath = File.join(@output_dir, 'moodle.csv')
52
+ formatter = FormatterFactory.get(self, :moodle_csv, filepath)
53
+ formatter.process
54
+ end
55
+ end
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Show methods for Report class.
4
+ class Report
5
+ def show
6
+ show_initial_configurations
7
+ if @filename.to_s.include? 'resume'
8
+ show_resume
9
+ else
10
+ show_targets_history
11
+ end
12
+ show_final_values
13
+ show_hall_of_fame
14
+ end
15
+
16
+ private
17
+
18
+ def show_initial_configurations
19
+ puts 'INITIAL CONFIGURATIONS'
20
+ my_screen_table = Terminal::Table.new do |st|
21
+ @head.each do |key, value|
22
+ st.add_row [key.to_s, trim(value)]
23
+ end
24
+ end
25
+ puts my_screen_table.to_s + "\n\n"
26
+ end
27
+
28
+ def show_resume
29
+ show_case_list
30
+ show_conn_status
31
+ end
32
+
33
+ def show_case_list
34
+ puts 'CASE RESULTS'
35
+ my_screen_table = Terminal::Table.new do |st|
36
+ st.add_row ['CASE ID', 'MEMBERS', 'GRADE', 'STATE' ]
37
+ @lines.each do |line|
38
+ st.add_row [line[:id], line[:members], line[:grade], line[:letter]]
39
+ end
40
+ end
41
+ puts my_screen_table.to_s + "\n\n"
42
+ end
43
+
44
+ def show_conn_status
45
+ e = 0
46
+ @lines.each { |line| e += line[:conn_status].size }
47
+ return if e == 0
48
+
49
+ puts 'CONN ERRORS'
50
+ my_screen_table = Terminal::Table.new do |st|
51
+ st.add_row ['CASE ID', 'MEMBERS', 'HOST', 'ERROR']
52
+ @lines.each do |line|
53
+ line[:conn_status].each_pair do |h,e|
54
+ st.add_row [line[:id], line[:members], h, e]
55
+ end
56
+ end
57
+ end
58
+ puts my_screen_table.to_s + "\n\n"
59
+ end
60
+
61
+ def show_targets_history
62
+ tab = ' '
63
+ puts 'CASE RESULTS'
64
+ if @lines.size == 1
65
+ puts @lines[0]
66
+ else
67
+ @lines.each do |i|
68
+ if i.class.to_s == 'Hash'
69
+ value = 0.0
70
+ value = i[:weight] if i[:check]
71
+ print tab + "%03d" % i[:id].to_i
72
+ print ' (' + '%2d.2f' % value.to_f + '/'
73
+ puts '%2d.2f' % i[:weight].to_f + ') ' + i[:description].to_s
74
+ else
75
+ puts tab + '- ' + i.to_s
76
+ end
77
+ end
78
+ end
79
+ puts "\n\n"
80
+ end
81
+
82
+ def show_final_values
83
+ puts 'FINAL VALUES'
84
+ my_screen_table = Terminal::Table.new do |st|
85
+ @tail.each do |key, value|
86
+ st.add_row [key.to_s, value.to_s]
87
+ end
88
+ end
89
+ puts my_screen_table.to_s + "\n\n"
90
+ end
91
+
92
+ def show_hall_of_fame
93
+ app = Application.instance
94
+ return if app.hall_of_fame.size < 3
95
+
96
+ puts 'HALL OF FAME'
97
+ my_screen_table = Terminal::Table.new do |st|
98
+ app.hall_of_fame.each do |line|
99
+ st.add_row [line[0], line[1]]
100
+ end
101
+ end
102
+ puts my_screen_table.to_s + "\n"
103
+ end
104
+
105
+ def trim(input)
106
+ output = input.to_s
107
+ return output if output.size<65
108
+ output = "...#{input[input.size-50, input.size]}"
109
+ output.to_s
110
+ end
111
+ end
@@ -0,0 +1,15 @@
1
+
2
+ require_relative '../application'
3
+
4
+ # Define general use methods
5
+ module Verbose
6
+ def verboseln(text)
7
+ verbose(text + "\n")
8
+ end
9
+
10
+ def verbose(text)
11
+ return if Application.instance.quiet?
12
+
13
+ print text
14
+ end
15
+ end
data/lib/teuton.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'thor'
2
+ require_relative 'teuton/application'
3
+ require_relative 'teuton/project/project'
4
+ require_relative 'teuton/command/main'
5
+
6
+ # Command Line User Interface
7
+ class Teuton < Thor
8
+ map ['h', '-h', '--help'] => 'help'
9
+
10
+ def method_missing(method, *_args, &_block)
11
+ play(method.to_s)
12
+ end
13
+
14
+ def respond_to_missing?(method_name, include_private = false)
15
+ super
16
+ end
17
+ end