teuton 2.6.0 → 2.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/docs/changelog/todo.md +4 -8
- data/docs/changelog/v2.7.md +11 -0
- data/docs/diagram.md +16 -15
- data/docs/learn/06-cmd_check.md +3 -2
- data/docs/learn/21-exit_codes.md +9 -16
- data/lib/teuton/case/case.rb +25 -44
- data/lib/teuton/case/close.rb +2 -0
- data/lib/teuton/case/config.rb +3 -3
- data/lib/teuton/case/{runner.rb → deprecated/runner.rb} +14 -10
- data/lib/teuton/case/deprecated/utils.rb +40 -0
- data/lib/teuton/case/dsl/all.rb +8 -0
- data/lib/teuton/case/dsl/expect.rb +25 -9
- data/lib/teuton/case/dsl/goto.rb +10 -9
- data/lib/teuton/case/dsl/log.rb +1 -2
- data/lib/teuton/case/dsl/macro.rb +2 -2
- data/lib/teuton/case/dsl/send.rb +3 -8
- data/lib/teuton/case/execute/execute_base.rb +55 -0
- data/lib/teuton/case/execute/execute_local.rb +29 -0
- data/lib/teuton/case/execute/execute_manager.rb +56 -0
- data/lib/teuton/case/execute/execute_ssh.rb +90 -0
- data/lib/teuton/case/execute/execute_telnet.rb +56 -0
- data/lib/teuton/case/play.rb +6 -6
- data/lib/teuton/case_manager/case_manager.rb +12 -8
- data/lib/teuton/case_manager/check_cases.rb +14 -12
- data/lib/teuton/case_manager/dsl.rb +6 -8
- data/lib/teuton/case_manager/export_manager.rb +2 -3
- data/lib/teuton/case_manager/hall_of_fame.rb +9 -10
- data/lib/teuton/case_manager/report.rb +11 -9
- data/lib/teuton/case_manager/show_report.rb +4 -6
- data/lib/teuton/case_manager/utils.rb +2 -48
- data/lib/teuton/check/dsl.rb +1 -2
- data/lib/teuton/check/laboratory.rb +7 -7
- data/lib/teuton/check/show.rb +5 -8
- data/lib/teuton/cli.rb +10 -0
- data/lib/teuton/readme/dsl.rb +5 -7
- data/lib/teuton/readme/lang.rb +3 -2
- data/lib/teuton/readme/readme.rb +15 -18
- data/lib/teuton/report/formatter/default/array.rb +6 -5
- data/lib/teuton/report/formatter/default/txt.rb +1 -0
- data/lib/teuton/report/formatter/resume/array.rb +3 -3
- data/lib/teuton/report/formatter/resume/html.rb +2 -2
- data/lib/teuton/report/report.rb +6 -5
- data/lib/teuton/skeleton.rb +8 -10
- data/lib/teuton/{application.rb → utils/application.rb} +13 -5
- data/lib/teuton/utils/name_file_finder.rb +40 -45
- data/lib/teuton/utils/project.rb +73 -0
- data/lib/teuton/{result → utils/result}/result.rb +9 -7
- data/lib/teuton/utils/settings.rb +12 -0
- data/lib/teuton/utils/verbose.rb +2 -2
- data/lib/teuton/version.rb +1 -1
- data/lib/teuton.rb +18 -17
- metadata +19 -9
- data/lib/teuton/case/dsl.rb +0 -10
- /data/lib/teuton/{result → utils/result}/ext_array.rb +0 -0
- /data/lib/teuton/{result → utils/result}/ext_compare.rb +0 -0
- /data/lib/teuton/{result → utils/result}/ext_filter.rb +0 -0
data/lib/teuton/check/dsl.rb
CHANGED
@@ -1,28 +1,28 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "../
|
4
|
-
require_relative "../result/result"
|
3
|
+
require_relative "../utils/project"
|
4
|
+
require_relative "../utils/result/result"
|
5
5
|
require_relative "show"
|
6
6
|
require_relative "dsl"
|
7
7
|
require_relative "builtin"
|
8
8
|
|
9
9
|
def use(filename)
|
10
10
|
filename += ".rb"
|
11
|
-
|
12
|
-
rbfiles = File.join(app.project_path, "**", filename)
|
11
|
+
rbfiles = File.join(Project.value[:project_path], "**", filename)
|
13
12
|
files = Dir.glob(rbfiles)
|
14
13
|
use = []
|
15
14
|
files.sort.each { |f| use << f if f.include?(filename) }
|
16
15
|
require_relative use[0]
|
16
|
+
Project.value[:uses] << use[0]
|
17
17
|
end
|
18
18
|
|
19
19
|
def group(name, &block)
|
20
|
-
|
20
|
+
Project.value[:groups] << {name: name, block: block}
|
21
21
|
end
|
22
22
|
alias task group
|
23
23
|
|
24
24
|
def define_macro(name, *args, &block)
|
25
|
-
|
25
|
+
Project.value[:macros][name] = {args: args, block: block}
|
26
26
|
end
|
27
27
|
alias def_macro define_macro
|
28
28
|
alias defmacro define_macro
|
@@ -54,6 +54,6 @@ class Laboratory
|
|
54
54
|
@sets = {}
|
55
55
|
@hosts = {}
|
56
56
|
@requests = [] # REVISE this
|
57
|
-
@verbose =
|
57
|
+
@verbose = Project.value[:verbose]
|
58
58
|
end
|
59
59
|
end
|
data/lib/teuton/check/show.rb
CHANGED
@@ -1,13 +1,9 @@
|
|
1
1
|
require "terminal-table"
|
2
2
|
require "rainbow"
|
3
3
|
|
4
|
-
require_relative "../
|
4
|
+
require_relative "../utils/project"
|
5
5
|
require_relative "../utils/configfile_reader"
|
6
6
|
|
7
|
-
# Laboratory
|
8
|
-
# * show_dsl
|
9
|
-
# * show_stats
|
10
|
-
# * show_config
|
11
7
|
class Laboratory
|
12
8
|
def show
|
13
9
|
@verbose = true
|
@@ -34,9 +30,9 @@ class Laboratory
|
|
34
30
|
end
|
35
31
|
|
36
32
|
def process_content
|
37
|
-
groups =
|
38
|
-
option =
|
39
|
-
|
33
|
+
groups = Project.value[:groups]
|
34
|
+
option = Project.value[:options]
|
35
|
+
@stats[:uses] = Project.value[:uses].size
|
40
36
|
verboseln ""
|
41
37
|
groups.each do |t|
|
42
38
|
@stats[:groups] += 1
|
@@ -124,6 +120,7 @@ class Laboratory
|
|
124
120
|
my_screen_table = Terminal::Table.new do |st|
|
125
121
|
st.add_row ["DSL Stats", "Count"]
|
126
122
|
st.add_separator
|
123
|
+
st.add_row ["Uses", @stats[:uses]]
|
127
124
|
st.add_row ["Groups", @stats[:groups]]
|
128
125
|
st.add_row ["Targets", @stats[:targets]]
|
129
126
|
st.add_row ["Runs", @stats[:hosts]]
|
data/lib/teuton/cli.rb
CHANGED
@@ -37,6 +37,16 @@ class CLI < Thor
|
|
37
37
|
Teuton.check(projectpath, options)
|
38
38
|
end
|
39
39
|
|
40
|
+
map ["co", "-co", "--config"] => "config"
|
41
|
+
desc "config DIRECTORY", "Suggest configuration"
|
42
|
+
long_desc <<~LONGDESC
|
43
|
+
config [OPTIONS] DIRECTORY", "Suggest configuration"
|
44
|
+
LONGDESC
|
45
|
+
def config(projectpath)
|
46
|
+
opt = {"onlyconfig" => true}
|
47
|
+
Teuton.check(projectpath, opt)
|
48
|
+
end
|
49
|
+
|
40
50
|
map ["--readme"] => "readme"
|
41
51
|
option :lang, type: :string
|
42
52
|
desc "readme DIRECTORY", "Show README extracted from test contents"
|
data/lib/teuton/readme/dsl.rb
CHANGED
@@ -1,12 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# Readme
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
# * expect
|
8
|
-
# * unique
|
9
|
-
# * log
|
4
|
+
# readme, target, goto, run
|
5
|
+
# expect,
|
6
|
+
# gett, set, unique, log
|
10
7
|
class Readme
|
11
8
|
def readme(text)
|
12
9
|
if @action[:target].nil?
|
@@ -92,7 +89,8 @@ class Readme
|
|
92
89
|
m = method.to_s
|
93
90
|
if m[0] == "_"
|
94
91
|
instance_eval("get(:#{m[1, m.size - 1]})", __FILE__, __LINE__)
|
95
|
-
elsif not Application.instance.macros[m].nil?
|
92
|
+
# elsif not Application.instance.macros[m].nil?
|
93
|
+
elsif not Project.value[:macros][m].nil?
|
96
94
|
puts "macro exec: #{m}"
|
97
95
|
code = ""
|
98
96
|
args[0].keys.each { |key| code += "set(:#{key}, '#{args[0][key]}')\n" }
|
data/lib/teuton/readme/lang.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative "../
|
1
|
+
require_relative "../utils/project"
|
2
2
|
|
3
3
|
module Lang
|
4
4
|
def self.get(key)
|
@@ -23,7 +23,8 @@ module Lang
|
|
23
23
|
global: "\nParámetros globales que pueden ser modificados:\n",
|
24
24
|
created: "\nParámetros creados durante la ejecución del reto:\n"
|
25
25
|
}
|
26
|
-
locale = Application.instance.options["lang"].downcase
|
26
|
+
# locale = Application.instance.options["lang"].downcase
|
27
|
+
locale = Project.value[:options]["lang"].downcase
|
27
28
|
lang[locale][key]
|
28
29
|
end
|
29
30
|
end
|
data/lib/teuton/readme/readme.rb
CHANGED
@@ -1,27 +1,27 @@
|
|
1
|
-
require_relative "../
|
1
|
+
require_relative "../utils/project"
|
2
2
|
require_relative "../utils/configfile_reader"
|
3
|
-
require_relative "../result/result"
|
3
|
+
require_relative "../utils/result/result"
|
4
4
|
require_relative "../version"
|
5
5
|
require_relative "dsl"
|
6
6
|
require_relative "lang"
|
7
7
|
|
8
8
|
def use(filename)
|
9
9
|
filename += ".rb"
|
10
|
-
|
11
|
-
rbfiles = File.join(app.project_path, "**", filename)
|
10
|
+
rbfiles = File.join(Project.value[:project_path], "**", filename)
|
12
11
|
files = Dir.glob(rbfiles)
|
13
12
|
use = []
|
14
13
|
files.sort.each { |f| use << f if f.include?(filename) }
|
15
14
|
require_relative use[0]
|
15
|
+
Project.value[:uses] << use[0]
|
16
16
|
end
|
17
17
|
|
18
18
|
def define_macro(name, *args, &block)
|
19
19
|
puts "macro: #{name}"
|
20
|
-
|
20
|
+
Project.value[:macros][name] = {args: args, block: block}
|
21
21
|
end
|
22
22
|
|
23
23
|
def group(name, &block)
|
24
|
-
|
24
|
+
Project.value[:groups] << {name: name, block: block}
|
25
25
|
end
|
26
26
|
alias task group
|
27
27
|
|
@@ -31,16 +31,14 @@ end
|
|
31
31
|
# alias_method "play", "start" # REVISE THIS
|
32
32
|
alias play start
|
33
33
|
|
34
|
-
# Creates README.md file from RB script file
|
35
34
|
class Readme
|
35
|
+
# Creates README.md file from RB script file
|
36
36
|
attr_reader :result
|
37
37
|
attr_reader :data
|
38
38
|
|
39
|
-
##
|
40
|
-
# Initialize Readme instance
|
41
|
-
# @param script_path (String) Path to main rb file (start.rb)
|
42
|
-
# @param config_path (String) Path to main config file (config.yaml)
|
43
39
|
def initialize(script_path, config_path)
|
40
|
+
# script_path Path to main rb file (start.rb)
|
41
|
+
# config_path Path to main config file (config.yaml)
|
44
42
|
@path = {}
|
45
43
|
@path[:script] = script_path
|
46
44
|
@path[:dirname] = File.dirname(script_path)
|
@@ -59,9 +57,9 @@ class Readme
|
|
59
57
|
private
|
60
58
|
|
61
59
|
def reset
|
62
|
-
app = Application.instance
|
63
|
-
@config = ConfigFileReader.read(
|
64
|
-
@verbose =
|
60
|
+
# app = Application.instance
|
61
|
+
@config = ConfigFileReader.read(Project.value[:config_path])
|
62
|
+
@verbose = Project.value[:verbose]
|
65
63
|
@result = Result.new
|
66
64
|
@data = {}
|
67
65
|
@data[:macros] = []
|
@@ -76,7 +74,7 @@ class Readme
|
|
76
74
|
end
|
77
75
|
|
78
76
|
def process_content
|
79
|
-
|
77
|
+
Project.value[:groups].each do |g|
|
80
78
|
@current = {name: g[:name], readme: [], actions: []}
|
81
79
|
@data[:groups] << @current
|
82
80
|
reset_action
|
@@ -89,14 +87,13 @@ class Readme
|
|
89
87
|
end
|
90
88
|
|
91
89
|
def show_head
|
92
|
-
app = Application.instance
|
93
90
|
puts "```"
|
94
|
-
puts format(Lang.get(:testname),
|
91
|
+
puts format(Lang.get(:testname), Project.value[:test_name])
|
95
92
|
puts format(Lang.get(:date), Time.now)
|
96
93
|
puts format(Lang.get(:version), Teuton::VERSION)
|
97
94
|
puts "```"
|
98
95
|
puts "\n"
|
99
|
-
puts "# #{
|
96
|
+
puts "# #{Project.value[:test_name]}\n"
|
100
97
|
|
101
98
|
i = 1
|
102
99
|
unless @required_hosts.empty?
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require_relative "../base_formatter"
|
2
|
-
require_relative "../../../
|
2
|
+
require_relative "../../../utils/project"
|
3
3
|
|
4
4
|
class ArrayFormatter < BaseFormatter
|
5
5
|
def initialize(report)
|
@@ -60,12 +60,14 @@ class ArrayFormatter < BaseFormatter
|
|
60
60
|
target[:duration] = i[:duration]
|
61
61
|
|
62
62
|
target[:command] = i[:command]
|
63
|
+
target[:output] = i[:output]
|
63
64
|
target[:alterations] = i[:alterations]
|
64
65
|
target[:expected] = i[:expected]
|
65
66
|
target[:result] = i[:result]
|
66
67
|
|
67
68
|
if options[:feedback] == false
|
68
69
|
target[:command] = "*" * i[:command].size
|
70
|
+
target[:output] = "*" * i[:output].size
|
69
71
|
target[:alterations] = "*" * i[:alterations].size
|
70
72
|
target[:expected] = "*" * i[:expected].size
|
71
73
|
target[:result] = "*" * i[:result].size
|
@@ -85,12 +87,11 @@ class ArrayFormatter < BaseFormatter
|
|
85
87
|
end
|
86
88
|
|
87
89
|
def build_hof_data
|
88
|
-
app = Application.instance
|
89
90
|
@data[:hall_of_fame] = {}
|
90
|
-
return if
|
91
|
+
return if Project.value[:options][:case_number] < 3
|
91
92
|
|
92
93
|
fame = {}
|
93
|
-
|
94
|
+
Project.value[:hall_of_fame].each { |line| fame[line[0]] = line[1] }
|
94
95
|
@data[:hall_of_fame] = fame
|
95
96
|
end
|
96
97
|
|
@@ -115,6 +116,6 @@ class ArrayFormatter < BaseFormatter
|
|
115
116
|
end
|
116
117
|
|
117
118
|
def version
|
118
|
-
|
119
|
+
Teuton::VERSION
|
119
120
|
end
|
120
121
|
end
|
@@ -91,6 +91,7 @@ class TXTFormatter < ArrayFormatter
|
|
91
91
|
w " (" + Rainbow(i[:score].to_s + "/" + i[:weight].to_s).color(color) + ")\n"
|
92
92
|
w "#{tab * 4}Description : #{i[:description]}\n"
|
93
93
|
w "#{tab * 4}Command : #{i[:command]}\n"
|
94
|
+
w "#{tab * 4}Output : #{i[:output]}\n"
|
94
95
|
w "#{tab * 4}Duration : #{i[:duration]} (#{i[:conn_type]})\n"
|
95
96
|
w "#{tab * 4}Alterations : #{i[:alterations]}\n"
|
96
97
|
w "#{tab * 4}Expected : #{i[:expected]} (#{i[:expected].class})\n"
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative "../base_formatter"
|
2
|
+
require_relative "../../../utils/project"
|
2
3
|
|
3
4
|
class ResumeArrayFormatter < BaseFormatter
|
4
5
|
def initialize(report)
|
@@ -36,10 +37,9 @@ class ResumeArrayFormatter < BaseFormatter
|
|
36
37
|
end
|
37
38
|
|
38
39
|
def build_hof_data
|
39
|
-
app = Application.instance
|
40
40
|
fame = {}
|
41
|
-
if
|
42
|
-
|
41
|
+
if Project.value[:options][:case_number] > 2
|
42
|
+
Project.value[:hall_of_fame].each { |line| fame[line[0]] = line[1] }
|
43
43
|
end
|
44
44
|
@data[:hall_of_fame] = fame
|
45
45
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require "erb"
|
2
2
|
require_relative "yaml"
|
3
|
-
require_relative "
|
3
|
+
# require_relative "../../../../teuton"
|
4
4
|
|
5
5
|
class ResumeHTMLFormatter < ResumeYAMLFormatter
|
6
6
|
def initialize(report)
|
@@ -42,6 +42,6 @@ class ResumeHTMLFormatter < ResumeYAMLFormatter
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def version
|
45
|
-
|
45
|
+
Teuton::VERSION
|
46
46
|
end
|
47
47
|
end
|
data/lib/teuton/report/report.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
require_relative "../
|
1
|
+
require_relative "../utils/project"
|
2
|
+
require_relative "../utils/settings"
|
2
3
|
require_relative "formatter/formatter"
|
3
4
|
|
4
5
|
class Report
|
@@ -12,7 +13,8 @@ class Report
|
|
12
13
|
def initialize(id = "00")
|
13
14
|
@id = id
|
14
15
|
@filename = "case-#{@id}"
|
15
|
-
@output_dir = Application.instance.output_basedir
|
16
|
+
# @output_dir = Application.instance.output_basedir
|
17
|
+
@output_dir = Project.value[:output_basedir]
|
16
18
|
@head = {}
|
17
19
|
@lines = []
|
18
20
|
@tail = {}
|
@@ -57,7 +59,6 @@ class Report
|
|
57
59
|
# * fail_weight
|
58
60
|
# * fail_counter
|
59
61
|
def close
|
60
|
-
app = Application.instance
|
61
62
|
max = 0.0
|
62
63
|
good = 0.0
|
63
64
|
fail = 0.0
|
@@ -68,11 +69,11 @@ class Report
|
|
68
69
|
max += i[:weight] if i[:weight].positive?
|
69
70
|
if i[:check]
|
70
71
|
good += i[:weight]
|
71
|
-
@history +=
|
72
|
+
@history += Settings.letter[:good]
|
72
73
|
else
|
73
74
|
fail += i[:weight]
|
74
75
|
fail_counter += 1
|
75
|
-
@history +=
|
76
|
+
@history += Settings.letter[:bad]
|
76
77
|
end
|
77
78
|
end
|
78
79
|
@tail[:max_weight] = max
|
data/lib/teuton/skeleton.rb
CHANGED
@@ -1,16 +1,18 @@
|
|
1
1
|
require "fileutils"
|
2
2
|
require "rainbow"
|
3
3
|
|
4
|
-
|
5
|
-
def
|
4
|
+
class Skeleton
|
5
|
+
def create(project_dir)
|
6
6
|
project_name = File.basename(project_dir)
|
7
|
-
puts "\
|
7
|
+
puts "\nCreating #{Rainbow(project_name).bright} project"
|
8
8
|
source_basedir = File.dirname(__FILE__)
|
9
9
|
create_dir project_dir
|
10
10
|
create_main_dir_and_files(project_dir, source_basedir)
|
11
11
|
end
|
12
12
|
|
13
|
-
|
13
|
+
private
|
14
|
+
|
15
|
+
def create_main_dir_and_files(project_dir, source_basedir)
|
14
16
|
# Directory and files: Ruby script, Configfile, gitignore
|
15
17
|
items = [
|
16
18
|
{source: "files/config.yaml", target: "config.yaml"},
|
@@ -23,7 +25,7 @@ module Skeleton
|
|
23
25
|
end
|
24
26
|
end
|
25
27
|
|
26
|
-
|
28
|
+
def create_dir(dirpath)
|
27
29
|
if Dir.exist? dirpath
|
28
30
|
puts "* Exists dir! => #{Rainbow(dirpath).yellow}"
|
29
31
|
else
|
@@ -36,11 +38,7 @@ module Skeleton
|
|
36
38
|
end
|
37
39
|
end
|
38
40
|
|
39
|
-
|
40
|
-
# Copy file
|
41
|
-
# @param source (String) Source file
|
42
|
-
# @param dest (String) Dest file
|
43
|
-
private_class_method def self.copyfile(source, dest)
|
41
|
+
def copyfile(source, dest)
|
44
42
|
if File.exist? dest
|
45
43
|
puts "* Exists file! => #{Rainbow(dest).yellow}"
|
46
44
|
else
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require "singleton"
|
2
|
-
require_relative "
|
2
|
+
require_relative "name_file_finder"
|
3
3
|
|
4
4
|
class Application
|
5
5
|
include Singleton
|
@@ -33,7 +33,11 @@ class Application
|
|
33
33
|
@running_basedir = Dir.getwd
|
34
34
|
@output_basedir = "var"
|
35
35
|
@default = {name: "teuton", format: :txt, debug: false}
|
36
|
-
@options = {
|
36
|
+
@options = {
|
37
|
+
"lang" => "en",
|
38
|
+
"color" => true,
|
39
|
+
"panel" => false
|
40
|
+
}
|
37
41
|
@verbose = true
|
38
42
|
|
39
43
|
@global = {}
|
@@ -65,10 +69,14 @@ class Application
|
|
65
69
|
# * Read color input option
|
66
70
|
def add_input_params(projectpath, options)
|
67
71
|
@options.merge! options
|
68
|
-
NameFileFinder.find_filenames_for(projectpath)
|
69
|
-
@options["color"] = true if @options["color"].nil?
|
70
72
|
Rainbow.enabled = @options["color"]
|
71
|
-
|
73
|
+
|
74
|
+
finder = NameFileFinder.new(@options)
|
75
|
+
finder.find_filenames_for(projectpath)
|
76
|
+
@project_path = finder.project_path
|
77
|
+
@script_path = finder.script_path
|
78
|
+
@config_path = finder.config_path
|
79
|
+
@test_name = finder.test_name
|
72
80
|
|
73
81
|
unless @options["case"].nil?
|
74
82
|
numbers = @options["case"].split(",")
|
@@ -1,10 +1,24 @@
|
|
1
1
|
require "rainbow"
|
2
2
|
|
3
|
-
|
3
|
+
class NameFileFinder
|
4
|
+
attr_reader :options
|
5
|
+
attr_reader :project_path
|
6
|
+
attr_reader :script_path
|
7
|
+
attr_reader :config_path
|
8
|
+
attr_reader :test_name
|
9
|
+
|
10
|
+
def initialize(options = {})
|
11
|
+
@options = options
|
12
|
+
@project_path = nil
|
13
|
+
@script_path = nil
|
14
|
+
@config_path = nil
|
15
|
+
@test_name = nil
|
16
|
+
end
|
17
|
+
|
4
18
|
##
|
5
19
|
# Find project filenames from input project relative path
|
6
20
|
# @param relprojectpath (String)
|
7
|
-
def
|
21
|
+
def find_filenames_for(relprojectpath)
|
8
22
|
projectpath = File.absolute_path(relprojectpath)
|
9
23
|
|
10
24
|
# Define:
|
@@ -20,10 +34,10 @@ module NameFileFinder
|
|
20
34
|
true
|
21
35
|
end
|
22
36
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
37
|
+
private
|
38
|
+
|
39
|
+
def find_filenames_from_directory(folder_path)
|
40
|
+
# Find project filenames from input folder path
|
27
41
|
# COMPLEX MODE: We use start.rb as main RB file
|
28
42
|
script_path = File.join(folder_path, "start.rb")
|
29
43
|
unless File.exist? script_path
|
@@ -31,38 +45,34 @@ module NameFileFinder
|
|
31
45
|
exit 1
|
32
46
|
end
|
33
47
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
app.test_name = folder_path.split(File::SEPARATOR)[-1]
|
48
|
+
@project_path = folder_path
|
49
|
+
@script_path = script_path
|
50
|
+
@test_name = folder_path.split(File::SEPARATOR)[-1]
|
38
51
|
|
39
52
|
find_configfilename_from_directory(folder_path)
|
40
53
|
end
|
41
54
|
|
42
|
-
|
43
|
-
|
44
|
-
# @param folder_path (String)
|
45
|
-
def self.find_configfilename_from_directory(folder_path)
|
55
|
+
def find_configfilename_from_directory(folder_path)
|
56
|
+
# Find project config filename from input folder path
|
46
57
|
# COMPLEX MODE: We use config.yaml by default
|
47
|
-
app = Application.instance
|
48
58
|
config_path = ""
|
49
59
|
|
50
|
-
if
|
60
|
+
if options["cpath"].nil?
|
51
61
|
config_name = "config"
|
52
62
|
# Config name file is introduced by cname arg option from teuton command
|
53
|
-
config_name =
|
63
|
+
config_name = options["cname"] unless options["cname"].nil?
|
54
64
|
config_path = File.join(folder_path, "#{config_name}.json")
|
55
65
|
unless File.exist? config_path
|
56
66
|
config_path = File.join(folder_path, "#{config_name}.yaml")
|
57
67
|
end
|
58
68
|
else
|
59
69
|
# Config path file is introduced by cpath arg option from teuton command
|
60
|
-
config_path =
|
70
|
+
config_path = options["cpath"]
|
61
71
|
end
|
62
|
-
|
72
|
+
@config_path = config_path
|
63
73
|
end
|
64
74
|
|
65
|
-
def
|
75
|
+
def find_filenames_from_rb(script_path)
|
66
76
|
# SIMPLE MODE: We use script_path as main RB file
|
67
77
|
# This must be fullpath to DSL script file
|
68
78
|
if File.extname(script_path) != ".rb"
|
@@ -71,44 +81,29 @@ module NameFileFinder
|
|
71
81
|
exit 1
|
72
82
|
end
|
73
83
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
app.test_name = File.basename(script_path, ".rb")
|
78
|
-
|
84
|
+
@project_path = File.dirname(script_path)
|
85
|
+
@script_path = script_path
|
86
|
+
@test_name = File.basename(script_path, ".rb")
|
79
87
|
find_configfilenames_from_rb(script_path)
|
80
88
|
end
|
81
89
|
|
82
|
-
def
|
90
|
+
def find_configfilenames_from_rb(script_path)
|
83
91
|
# SIMPLE MODE: We use script_path as main RB file
|
84
92
|
# This must be fullpath to DSL script file
|
85
|
-
app = Application.instance
|
86
|
-
|
87
93
|
config_path = ""
|
88
|
-
if
|
94
|
+
if options["cpath"].nil?
|
89
95
|
config_name = File.basename(script_path, ".rb")
|
90
96
|
# Config name file is introduced by cname arg option from teuton command
|
91
|
-
config_name =
|
97
|
+
config_name = options["cname"] unless options["cname"].nil?
|
92
98
|
|
93
|
-
config_path = File.join(
|
99
|
+
config_path = File.join(@project_path, config_name + ".json")
|
94
100
|
unless File.exist? config_path
|
95
|
-
config_path = File.join(
|
101
|
+
config_path = File.join(@project_path, config_name + ".yaml")
|
96
102
|
end
|
97
103
|
else
|
98
104
|
# Config path file is introduced by cpath arg option from teuton command
|
99
|
-
config_path =
|
105
|
+
config_path = options["cpath"]
|
100
106
|
end
|
101
|
-
|
102
|
-
end
|
103
|
-
|
104
|
-
def self.verboseln(text)
|
105
|
-
verbose(text + "\n")
|
106
|
-
end
|
107
|
-
|
108
|
-
def self.verbose(text)
|
109
|
-
return unless Application.instance.verbose
|
110
|
-
return if Application.instance.options["quiet"]
|
111
|
-
|
112
|
-
print text
|
107
|
+
@config_path = config_path
|
113
108
|
end
|
114
109
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# Development in progress...
|
2
|
+
|
3
|
+
require_relative "name_file_finder"
|
4
|
+
|
5
|
+
class Project
|
6
|
+
def self.init
|
7
|
+
@project = {}
|
8
|
+
@project[:running_basedir] = Dir.getwd
|
9
|
+
@project[:output_basedir] = "var"
|
10
|
+
@project[:name] = "teuton"
|
11
|
+
@project[:format] = :txt
|
12
|
+
@project[:debug] = false
|
13
|
+
@project[:options] = {
|
14
|
+
"color" => true,
|
15
|
+
"lang" => "en",
|
16
|
+
"panel" => false,
|
17
|
+
"quiet" => false
|
18
|
+
}
|
19
|
+
@project[:verbose] = true
|
20
|
+
@project[:global] = {} # Hash of Global configuration params
|
21
|
+
@project[:ialias] = {} # Hash of Internal alias
|
22
|
+
@project[:macros] = {} # Hash of macros
|
23
|
+
@project[:groups] = [] # Array of groups
|
24
|
+
@project[:uses] = [] # TODO: Array of files used
|
25
|
+
@project[:hall_of_fame] = []
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.value
|
29
|
+
@project
|
30
|
+
end
|
31
|
+
|
32
|
+
init
|
33
|
+
|
34
|
+
def self.debug?
|
35
|
+
value[:debug]
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.name
|
39
|
+
value[:name]
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.quiet?
|
43
|
+
return true if value[:options]["quiet"]
|
44
|
+
return true unless value[:verbose]
|
45
|
+
|
46
|
+
false
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.verbose
|
50
|
+
value[:verbose]
|
51
|
+
end
|
52
|
+
|
53
|
+
##
|
54
|
+
# Preprocess input options:
|
55
|
+
# * Convert input case options String to an Array of integers
|
56
|
+
# * Read color input option
|
57
|
+
def self.add_input_params(projectpath, options)
|
58
|
+
value[:options].merge! options
|
59
|
+
Rainbow.enabled = value[:options]["color"]
|
60
|
+
|
61
|
+
finder = NameFileFinder.new(value[:options])
|
62
|
+
finder.find_filenames_for(projectpath)
|
63
|
+
value[:project_path] = finder.project_path
|
64
|
+
value[:script_path] = finder.script_path
|
65
|
+
value[:config_path] = finder.config_path
|
66
|
+
value[:test_name] = finder.test_name
|
67
|
+
|
68
|
+
unless value[:options]["case"].nil?
|
69
|
+
numbers = value[:options]["case"].split(",")
|
70
|
+
value[:options]["case"] = numbers.collect!(&:to_i)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|