kaya 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +26 -0
- data/CHANGELOG +52 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/NOTAS +19 -0
- data/README.md +279 -0
- data/Rakefile +1 -0
- data/bin/kaya +4 -0
- data/documentation/api.md +47 -0
- data/documentation/api_execution_data.md +47 -0
- data/documentation/configuration.md +13 -0
- data/documentation/custom_parameters.md +117 -0
- data/documentation/document_kaya.md +122 -0
- data/documentation/link.md +12 -0
- data/documentation/results.md +119 -0
- data/documentation/start.md +19 -0
- data/documentation/suites.md +60 -0
- data/documentation/test_suite_information.md +9 -0
- data/kaya.gemspec +42 -0
- data/lib/generators/task_rack.rb +160 -0
- data/lib/generators/templates/Gemfile.tt +2 -0
- data/lib/generators/templates/config.ru.tt +2 -0
- data/lib/generators/templates/kaya_conf.tt +49 -0
- data/lib/generators/templates/kaya_log.tt +0 -0
- data/lib/generators/templates/sidekiq_log.tt +0 -0
- data/lib/generators/templates/tasks.kaya.tt +10 -0
- data/lib/generators/templates/unicorn.rb.tt +21 -0
- data/lib/kaya/API/error.rb +17 -0
- data/lib/kaya/API/execution.rb +141 -0
- data/lib/kaya/API/result.rb +49 -0
- data/lib/kaya/API/results.rb +31 -0
- data/lib/kaya/API/suite.rb +42 -0
- data/lib/kaya/API/suites.rb +36 -0
- data/lib/kaya/background_jobs/sidekiq.rb +35 -0
- data/lib/kaya/background_jobs/workers/execution_checker.rb +20 -0
- data/lib/kaya/background_jobs/workers/garbage_cleaner.rb +31 -0
- data/lib/kaya/commands/bye.rb +12 -0
- data/lib/kaya/commands/help.rb +13 -0
- data/lib/kaya/commands/install.rb +27 -0
- data/lib/kaya/commands/reset.rb +39 -0
- data/lib/kaya/commands/reset_suites.rb +40 -0
- data/lib/kaya/commands/restart.rb +9 -0
- data/lib/kaya/commands/start.rb +104 -0
- data/lib/kaya/commands/stop.rb +53 -0
- data/lib/kaya/cuba.rb +287 -0
- data/lib/kaya/cucumber/features.rb +15 -0
- data/lib/kaya/cucumber/task.rb +64 -0
- data/lib/kaya/custom/execution_data.rb +50 -0
- data/lib/kaya/custom/params.rb +34 -0
- data/lib/kaya/database/mongo_connector.rb +285 -0
- data/lib/kaya/error/errors.rb +55 -0
- data/lib/kaya/execution.rb +57 -0
- data/lib/kaya/results/result.rb +493 -0
- data/lib/kaya/results/results.rb +47 -0
- data/lib/kaya/suites/custom/params.rb +151 -0
- data/lib/kaya/suites/suite.rb +177 -0
- data/lib/kaya/suites/suites.rb +130 -0
- data/lib/kaya/support/clean.rb +12 -0
- data/lib/kaya/support/configuration.rb +254 -0
- data/lib/kaya/support/console.rb +11 -0
- data/lib/kaya/support/documentation.rb +34 -0
- data/lib/kaya/support/error_handler_helper.rb +24 -0
- data/lib/kaya/support/files_cleanner.rb +136 -0
- data/lib/kaya/support/git.rb +161 -0
- data/lib/kaya/support/if_config.rb +14 -0
- data/lib/kaya/support/logo.rb +23 -0
- data/lib/kaya/support/logs.rb +37 -0
- data/lib/kaya/support/notification.rb +127 -0
- data/lib/kaya/support/processes.rb +96 -0
- data/lib/kaya/support/query_string.rb +22 -0
- data/lib/kaya/support/request.rb +32 -0
- data/lib/kaya/support/risk.rb +9 -0
- data/lib/kaya/support/time_helper.rb +11 -0
- data/lib/kaya/support/update.rb +65 -0
- data/lib/kaya/version.rb +3 -0
- data/lib/kaya/view/body.mote +60 -0
- data/lib/kaya/view/custom/params/select_list.mote +14 -0
- data/lib/kaya/view/custom/params/text.mote +9 -0
- data/lib/kaya/view/custom/params.mote +9 -0
- data/lib/kaya/view/error_handler.mote +40 -0
- data/lib/kaya/view/features/feature.mote +14 -0
- data/lib/kaya/view/features/features_list.mote +10 -0
- data/lib/kaya/view/features.mote +57 -0
- data/lib/kaya/view/footer.mote +10 -0
- data/lib/kaya/view/git_information.mote +21 -0
- data/lib/kaya/view/help/main.mote +21 -0
- data/lib/kaya/view/help/page.mote +2 -0
- data/lib/kaya/view/help/search_result.mote +29 -0
- data/lib/kaya/view/help.mote +72 -0
- data/lib/kaya/view/javascript.mote +96 -0
- data/lib/kaya/view/logs/log.mote +3 -0
- data/lib/kaya/view/modals.mote +31 -0
- data/lib/kaya/view/navigation_bar.mote +48 -0
- data/lib/kaya/view/not_found.mote +40 -0
- data/lib/kaya/view/parser.rb +79 -0
- data/lib/kaya/view/results/all.mote +59 -0
- data/lib/kaya/view/results/console.mote +106 -0
- data/lib/kaya/view/results/detailed_info.mote +112 -0
- data/lib/kaya/view/results/report.mote +1 -0
- data/lib/kaya/view/results/result.mote +23 -0
- data/lib/kaya/view/results/results.mote +52 -0
- data/lib/kaya/view/screenshot.mote +42 -0
- data/lib/kaya/view/sections.rb +25 -0
- data/lib/kaya/view/styles.mote +58 -0
- data/lib/kaya/view/suites/suite.mote +73 -0
- data/lib/kaya/view/suites/suites.mote +9 -0
- data/lib/kaya/view/view.rb +72 -0
- data/lib/kaya.rb +175 -0
- data/test/features/install.feature +18 -0
- data/test/features/support/env.rb +3 -0
- metadata +395 -0
@@ -0,0 +1,65 @@
|
|
1
|
+
module Kaya
|
2
|
+
module Support
|
3
|
+
class Update
|
4
|
+
|
5
|
+
@gem_folder = File.expand_path("../../../../", __FILE__) + "/lib/generators/templates/"
|
6
|
+
@project_folder = @main_folder = "#{Dir.pwd}/kaya/"
|
7
|
+
|
8
|
+
# Returns the most updated version of kaya_conf file, and updates the file if neded
|
9
|
+
def self.kaya_conf
|
10
|
+
update_json_file "kaya_conf"
|
11
|
+
end
|
12
|
+
|
13
|
+
# Returns the updated version of a json file, and writes it in the disk
|
14
|
+
#
|
15
|
+
# It updates a file located in kaya folder inside the project, with all new keys and sub-keys in of it's template file
|
16
|
+
|
17
|
+
# It also removes all keys not longer present in the template file.
|
18
|
+
|
19
|
+
def self.update_json_file name
|
20
|
+
file = JSON.parse(IO.read(@project_folder + name))
|
21
|
+
template = JSON.parse(IO.read(@gem_folder + name + ".tt"))
|
22
|
+
|
23
|
+
modified = false
|
24
|
+
|
25
|
+
deprecated_keys = file.keys - template.keys
|
26
|
+
if deprecated_keys.any?
|
27
|
+
deprecated_keys.each { |key| file.delete key }
|
28
|
+
modified = true
|
29
|
+
puts "The following keys: #{deprecated_keys} are deprecated and are going to be removed from your #{name} file.".colorize(:green)
|
30
|
+
end
|
31
|
+
|
32
|
+
if file.keys.sort != template.keys.sort
|
33
|
+
puts "The following keys: #{template.keys - file.keys} are new and are going to be added to your #{name} file.".colorize(:green)
|
34
|
+
modified = true
|
35
|
+
file.merge! template
|
36
|
+
end
|
37
|
+
|
38
|
+
file.keys.each do |key|
|
39
|
+
if file[key].class == Hash
|
40
|
+
deprecated_sub_keys = file[key].keys - template[key].keys
|
41
|
+
if deprecated_sub_keys.any?
|
42
|
+
deprecated_sub_keys.each{ |sub_key| file[key].delete sub_key }
|
43
|
+
modified = true
|
44
|
+
puts "The following sub keys: #{deprecated_sub_keys} from #{key} key are deprecated and are going to be removed from your #{name} file.".colorize(:green)
|
45
|
+
end
|
46
|
+
if file[key].keys.sort != template[key].keys.sort
|
47
|
+
puts "The following sub keys: #{template[key].keys - file[key].keys} from #{key} key are new and are going to be added to your #{name} file.".colorize(:green)
|
48
|
+
modified = true
|
49
|
+
file[key].merge! template[key]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
if modified
|
55
|
+
File.write(@project_folder + name, JSON.pretty_generate(file))
|
56
|
+
puts "Done.".colorize(:green)
|
57
|
+
end
|
58
|
+
|
59
|
+
return file
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
data/lib/kaya/version.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
% message = query_string.msg ? " onload=\"javascript:my_alert('Attention!','#{query_string.msg}');\"" : nil
|
4
|
+
|
5
|
+
% title = h1 = section.split.map{|w| w.capitalize}.join " "
|
6
|
+
|
7
|
+
|
8
|
+
<!--partials -->
|
9
|
+
|
10
|
+
% javascript = Mote.parse(File.read("#{Kaya::View.path}/javascript.mote"), self, []).call()
|
11
|
+
|
12
|
+
% styles = Mote.parse(File.read("#{Kaya::View.path}/styles.mote"), self, []).call()
|
13
|
+
|
14
|
+
% modals = Mote.parse(File.read("#{Kaya::View.path}/modals.mote"), self, []).call()
|
15
|
+
|
16
|
+
|
17
|
+
% git_information = Mote.parse(File.read("#{Kaya::View.path}/git_information.mote"), self, [:section]).call(section:section)
|
18
|
+
|
19
|
+
% footer = Mote.parse(File.read("#{Kaya::View.path}/footer.mote"), self, []).call()
|
20
|
+
|
21
|
+
% template_file_path = File.read("#{Kaya::View.path}/#{Kaya::View::Sections.path_for(section)}.mote")
|
22
|
+
|
23
|
+
% content = Mote.parse(template_file_path, self, [:query_string, :suite_name, :log_name]).call(query_string:query_string, suite_name:suite_name, log_name:log_name)
|
24
|
+
|
25
|
+
% section = section.gsub(" ","_").downcase
|
26
|
+
|
27
|
+
% navigation_bar = Mote.parse(File.read("#{Kaya::View.path}/navigation_bar.mote"), self, [:section]).call(section:section)
|
28
|
+
|
29
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns ="http://www.w3.org/1999/xhtml"><head><meta content="text/html;charset=utf-8" http-equiv="Content-Type"/>'
|
30
|
+
<head>
|
31
|
+
<title>{{Kaya::Support::Configuration.project_name}} through Kaya - {{title}}</title>
|
32
|
+
|
33
|
+
<meta content='text/html;charset=utf-8' http-equiv='Content-Type'/>
|
34
|
+
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
|
35
|
+
<link rel='shortcut icon' href='/favicon'>
|
36
|
+
<link href='https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css' rel='stylesheet'>
|
37
|
+
|
38
|
+
{{javascript}}
|
39
|
+
|
40
|
+
{{styles}}
|
41
|
+
|
42
|
+
</head>
|
43
|
+
<body class='padding-top: 50px;' {{message}}>
|
44
|
+
|
45
|
+
{{modals}}
|
46
|
+
|
47
|
+
{{navigation_bar}}
|
48
|
+
|
49
|
+
<div class='container'>
|
50
|
+
<br>
|
51
|
+
{{git_information}}
|
52
|
+
|
53
|
+
<p>{{content}}</p>
|
54
|
+
|
55
|
+
{{footer}}
|
56
|
+
|
57
|
+
</div>
|
58
|
+
</div>
|
59
|
+
</body>
|
60
|
+
</html>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<div class='form-group-sm'>
|
2
|
+
<label class='col-sm-2 control-label' for='formGroupInputSmall'>{{param["name"]}}</label>
|
3
|
+
<select id='{{param["name"]}}' name='{{param["name"]}}' class='customParam' style='height: 34px; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; color: #555; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 4px; font-weight:normal;'>
|
4
|
+
% param["options"].each do |value|
|
5
|
+
% value = nil if value.downcase == "none"
|
6
|
+
<option value='{{value}}'>{{value}}</option>
|
7
|
+
% end
|
8
|
+
</select>
|
9
|
+
% param["options"].each do |value|
|
10
|
+
% if param["plus_options"].keys.include? value
|
11
|
+
<input type='text' id='{{param["plus_options"][value]+$suites_counter.to_s}}' name='{{param["plus_options"][value]}}' value='Enter {{param["plus_options"][value]}}' onfocus='if (this.value=="Enter {{param["plus_options"][value]}}") this.value="";' placeholder='' style='display: none; height: 34px; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; color: #555; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 4px;'>
|
12
|
+
% end
|
13
|
+
% end
|
14
|
+
</div>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<div class='form-group-sm'>
|
2
|
+
<label class='col-sm-2 control-label' for='formGroupInputSmall'>
|
3
|
+
{{param['name']}}
|
4
|
+
</label>
|
5
|
+
<textarea class='customParam' {{"required title='#{param['name']} is Required!'" if param["required"]}} type='text' name='{{param['name']}}' placeholder='{{"Enter value here" if param["required"]}}' style='height: 34px; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; color: #555; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 4px; max-width: 70%; max-height: 500px; min-height: 34px; min-width: 212px; font-weight:normal;' />{{"#{param["options"]}"}}</textarea>
|
6
|
+
% if param["required"]
|
7
|
+
*
|
8
|
+
% end
|
9
|
+
</div>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<h4 title='This parameters will be passed to the test suite execution'> Custom Parameters</h4>
|
2
|
+
<div class='container' style='width: inherit'>
|
3
|
+
<li class='list-group-item' style='position:relative; with=100%'>
|
4
|
+
% custom_params.each do |custom_param|
|
5
|
+
% custom = Mote.parse(File.read("#{Kaya::View.path}/custom/params/#{custom_param["type"]}.mote"), self, [:param])
|
6
|
+
{{custom.call(param:custom_param)}}
|
7
|
+
% end
|
8
|
+
</li>
|
9
|
+
</div>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
% javascript = Mote.parse(File.read("#{Kaya::View.path}/javascript.mote"), self, []).call()
|
2
|
+
|
3
|
+
% styles = Mote.parse(File.read("#{Kaya::View.path}/styles.mote"), self, []).call()
|
4
|
+
|
5
|
+
% navigation_bar = Mote.parse(File.read("#{Kaya::View.path}/navigation_bar.mote"), self, [:section]).call(section:"help")
|
6
|
+
|
7
|
+
|
8
|
+
% error_title , error_msg = Kaya::Support::ErrorHandlerHelper.evaluate exception
|
9
|
+
|
10
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
11
|
+
<html xmlns ="http://www.w3.org/1999/xhtml">
|
12
|
+
|
13
|
+
<head>
|
14
|
+
<title>{{Kaya::Support::Configuration.project_name}} through Kaya - Error</title>
|
15
|
+
|
16
|
+
<meta content='text/html;charset=utf-8' http-equiv='Content-Type'/>
|
17
|
+
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
|
18
|
+
<link rel='shortcut icon' href='/favicon'>
|
19
|
+
<link href='https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css' rel='stylesheet'>
|
20
|
+
|
21
|
+
{{javascript}}
|
22
|
+
|
23
|
+
{{styles}}
|
24
|
+
|
25
|
+
</head>
|
26
|
+
<body class='padding-top: 50px;'>
|
27
|
+
|
28
|
+
{{navigation_bar}}
|
29
|
+
|
30
|
+
<div class='container'>
|
31
|
+
<br>
|
32
|
+
<div class='container'>
|
33
|
+
<div class='alert alert-danger' role='alert'>
|
34
|
+
<h1>{{error_title}}</h1>
|
35
|
+
<p>{{error_msg}}</p>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
</body>
|
40
|
+
</html>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
% feature_path.gsub!(" ","/")
|
2
|
+
% unless (feature_path.start_with? "features")
|
3
|
+
<h3>Could not find the requestes feature file</h3>
|
4
|
+
% else
|
5
|
+
% name = feature_path.split("/").last.split(".").first.capitalize.gsub("_"," ")
|
6
|
+
% content = IO.read("#{Dir.pwd}/#{feature_path}").gsub("\n\n\n","======#=====")
|
7
|
+
<div class="well">
|
8
|
+
% content.each_line do |line|
|
9
|
+
<div class="small">{{line.gsub("<","<").gsub(">",">").gsub('"',""").gsub("<","<<strong>").gsub(">","</strong>>").gsub(" "," ").gsub("======#=====","<br><br>")}}</div>
|
10
|
+
% end
|
11
|
+
</pre>
|
12
|
+
% end
|
13
|
+
|
14
|
+
<!-- % content = IO.read("#{Dir.pwd}/#{feature_path}").each_line{|line| line.gsub("<","%LT&").gsub(">","%GT&").gsub("'","").gsub('"',"").gsub("\n","<br>")} -->
|
@@ -0,0 +1,10 @@
|
|
1
|
+
% features_files_list = Kaya::Cucumber::Features.feature_files_names
|
2
|
+
<table class='table table-hover'>
|
3
|
+
% features_files_list.each do |file_name|
|
4
|
+
<tr>
|
5
|
+
<td>
|
6
|
+
<a aria-hidden='true' href='/{{Kaya::Support::Configuration.hostname}}/kaya/features/file?path={{file_name.gsub("/"," ")}}'>{{file_name}}</a>
|
7
|
+
</td>
|
8
|
+
</tr>
|
9
|
+
% end
|
10
|
+
</table>
|
@@ -0,0 +1,57 @@
|
|
1
|
+
% title = h1 = section = "features"
|
2
|
+
|
3
|
+
<!--partials -->
|
4
|
+
|
5
|
+
% feature_path = query_string.path
|
6
|
+
|
7
|
+
% javascript = Mote.parse(File.read("#{Kaya::View.path}/javascript.mote"), self, []).call()
|
8
|
+
|
9
|
+
% styles = Mote.parse(File.read("#{Kaya::View.path}/styles.mote"), self, []).call()
|
10
|
+
|
11
|
+
% modals = Mote.parse(File.read("#{Kaya::View.path}/modals.mote"), self, []).call()
|
12
|
+
|
13
|
+
% git_information = Mote.parse(File.read("#{Kaya::View.path}/git_information.mote"), self, [:section]).call(section:section)
|
14
|
+
|
15
|
+
% footer = Mote.parse(File.read("#{Kaya::View.path}/footer.mote"), self, []).call()
|
16
|
+
|
17
|
+
% if feature_path
|
18
|
+
% content = Mote.parse(File.read("#{Kaya::View.path}/features/feature.mote"), self, [:feature_path]).call(feature_path:feature_path)
|
19
|
+
% else
|
20
|
+
% content = Mote.parse(File.read("#{Kaya::View.path}/features/features_list.mote"), self, []).call()
|
21
|
+
% end
|
22
|
+
% section = section.gsub(" ","_").downcase
|
23
|
+
|
24
|
+
% navigation_bar = Mote.parse(File.read("#{Kaya::View.path}/navigation_bar.mote"), self, [:section]).call(section:section)
|
25
|
+
|
26
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns ="http://www.w3.org/1999/xhtml"><head><meta content="text/html;charset=utf-8" http-equiv="Content-Type"/>'
|
27
|
+
<head>
|
28
|
+
<title>{{Kaya::Support::Configuration.project_name}} through Kaya - {{title.capitalize}}</title>
|
29
|
+
|
30
|
+
<meta content='text/html;charset=utf-8' http-equiv='Content-Type'/>
|
31
|
+
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
|
32
|
+
<link rel='shortcut icon' href='/favicon'>
|
33
|
+
<link href='https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css' rel='stylesheet'>
|
34
|
+
|
35
|
+
{{javascript}}
|
36
|
+
|
37
|
+
{{styles}}
|
38
|
+
|
39
|
+
</head>
|
40
|
+
<body class='padding-top: 50px;'>
|
41
|
+
|
42
|
+
{{modals}}
|
43
|
+
|
44
|
+
{{navigation_bar}}
|
45
|
+
|
46
|
+
<div class='container'>
|
47
|
+
<br>
|
48
|
+
{{git_information}}
|
49
|
+
|
50
|
+
<p>{{content}}</p>
|
51
|
+
|
52
|
+
{{footer}}
|
53
|
+
|
54
|
+
</div>
|
55
|
+
</div>
|
56
|
+
</body>
|
57
|
+
</html>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<footer>
|
2
|
+
<div style='width: 100%; display: table;'>
|
3
|
+
<div style='display: table-row'>
|
4
|
+
<div style='width: 600px; display: table-cell;'>{{Kaya::Support::Configuration.company}}</div>
|
5
|
+
<div align='right' style='display: table-cell;'>
|
6
|
+
<p>Kaya {{Kaya::VERSION}}</p>
|
7
|
+
</div>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
</footer>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<div class='well'>
|
2
|
+
% if Kaya::Support::Configuration.use_git?
|
3
|
+
<h4>
|
4
|
+
Working on branch <strong>{{Kaya::Support::Git.branch}}</strong>
|
5
|
+
</h4>
|
6
|
+
<h4>
|
7
|
+
<small>
|
8
|
+
<span title='{{Kaya::Support::Git.log_last_commit}}'>Commit ID:{{Kaya::Support::Git.get_last_commit_id}}</span>
|
9
|
+
</small>
|
10
|
+
% end
|
11
|
+
% unless ["help","logs", "features"].include? section.downcase
|
12
|
+
<div class='btn-group pull-right' role='group'>
|
13
|
+
<button type='button' class='btn btn-default' aria-label='Left Align' title='Toggle collapse' onclick="auto_collapse()" title='collapse all panels'>
|
14
|
+
<div id='collapse_icon'>
|
15
|
+
<span class='glyphicon glyphicon-minus' aria-hidden='true' style='font-size:18px;'></span>
|
16
|
+
</div>
|
17
|
+
</button>
|
18
|
+
</div>
|
19
|
+
</h4>
|
20
|
+
% end
|
21
|
+
</div>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
% documents = Kaya::Database::MongoConnector.get_all_documentation
|
2
|
+
Here you will find information about Kaya. What it is and how it works.
|
3
|
+
</div></div>
|
4
|
+
<div class='container-fluid'>
|
5
|
+
% if documents
|
6
|
+
<table class="table">
|
7
|
+
<tbody>
|
8
|
+
% documents.each do |document|
|
9
|
+
% next if document["title"]=="README"
|
10
|
+
<tr>
|
11
|
+
<th style="width:130px;"><h3>{{document["title"].capitalize.gsub("_"," ")}}<h3></th>
|
12
|
+
<th><h3><small>{{document["body"].split("=").first.delete("\n")}}</small></h3></th>
|
13
|
+
<th><small><a class='btn btn-info' href='/{{Kaya::Support::Configuration.hostname}}/kaya/help/{{document["title"]}}' role='button' style="text-align:middle;">Read more »</a></small></th>
|
14
|
+
</tr>
|
15
|
+
% end
|
16
|
+
</tbody>
|
17
|
+
</table>
|
18
|
+
% else
|
19
|
+
<h1>Could not find documentation</h1>
|
20
|
+
% end
|
21
|
+
</div>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
% help_search_resut = Kaya::Database::MongoConnector.help_search(query).delete_if{|res| res["title"]=="README"}
|
2
|
+
</p><h3>Results for <b>"{{query}}"</b></h3></p>
|
3
|
+
<br>
|
4
|
+
<p style='display:none;'>strong fix</p>
|
5
|
+
% if help_search_resut.size.zero?
|
6
|
+
No result where found for "{{query}}\"</div></div>
|
7
|
+
% else
|
8
|
+
% help_search_resut.each do |result|
|
9
|
+
<div class='panel panel-primary'>
|
10
|
+
<div class='panel-heading'>
|
11
|
+
<a href='/{{Kaya::Support::Configuration.hostname}}/kaya/help/{{result["title"]}}' style='display: block;color: white !important;'>
|
12
|
+
<h3 class='panel-title'>
|
13
|
+
<span class='glyphicon glyphicon-file' aria-hidden='true'></span>
|
14
|
+
{{result["title"].to_s.gsub('_', ' ').capitalize}}
|
15
|
+
</h3>
|
16
|
+
</a>
|
17
|
+
</div>
|
18
|
+
<ul class='list-group'>
|
19
|
+
% result["body"].split(/\n/).each do |line|
|
20
|
+
% if (line.include? query)
|
21
|
+
<li class='list-group-item'>
|
22
|
+
<div style='font-weight:normal;'>... {{line.to_s.gsub("#{query}", "<span style='background-color: #FFFF00'>#{query}</span>")}} ...</div>
|
23
|
+
</li>
|
24
|
+
% end
|
25
|
+
% end
|
26
|
+
</ul>
|
27
|
+
</div>
|
28
|
+
% end
|
29
|
+
% end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
% title = (page == "main")? page : Kaya::Database::MongoConnector.help_title(page)
|
5
|
+
|
6
|
+
% javascript = Mote.parse(File.read("#{Kaya::View.path}/javascript.mote"), self, []).call()
|
7
|
+
|
8
|
+
% styles = Mote.parse(File.read("#{Kaya::View.path}/styles.mote"), self, []).call()
|
9
|
+
|
10
|
+
% available_pages = Kaya::Database::MongoConnector.get_all_documentation.map{|doc| doc["title"].downcase}
|
11
|
+
|
12
|
+
% navigation_bar = Mote.parse(File.read("#{Kaya::View.path}/navigation_bar.mote"), self, [:section]).call(section:"help")
|
13
|
+
|
14
|
+
% query = query_string
|
15
|
+
|
16
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
17
|
+
<html xmlns ="http://www.w3.org/1999/xhtml">
|
18
|
+
|
19
|
+
<head>
|
20
|
+
<title>{{Kaya::Support::Configuration.project_name}} through Kaya - {{title}}</title>
|
21
|
+
|
22
|
+
<meta content='text/html;charset=utf-8' http-equiv='Content-Type'/>
|
23
|
+
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
|
24
|
+
<link rel='shortcut icon' href='/favicon'>
|
25
|
+
<link href='https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css' rel='stylesheet'>
|
26
|
+
|
27
|
+
{{javascript}}
|
28
|
+
|
29
|
+
{{styles}}
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
</head>
|
34
|
+
<body class='padding-top: 50px;'>
|
35
|
+
|
36
|
+
|
37
|
+
{{navigation_bar}}
|
38
|
+
|
39
|
+
<div class='container'>
|
40
|
+
<br>
|
41
|
+
|
42
|
+
<div class='jumbotron'>
|
43
|
+
<div class='container'>
|
44
|
+
<h1>
|
45
|
+
<a href='/{{Kaya::Support::Configuration.hostname}}/kaya/help'>Help</a>
|
46
|
+
{{page.capitalize.gsub("_"," ")}}
|
47
|
+
<div class='col-sm-3 col-md-3 pull-right'>
|
48
|
+
<form class='navbar-form' role='search' action='/{{Kaya::Support::Configuration.hostname}}/kaya/help/main' method='get'>
|
49
|
+
<div class='input-group'>
|
50
|
+
<input type='text' class='form-control' placeholder='Search' name='s' value="{{query}}">
|
51
|
+
<div class='input-group-btn'>
|
52
|
+
<button class='btn btn-info' type='submit'><i class='glyphicon glyphicon-search'></i></button>
|
53
|
+
</div>
|
54
|
+
</div>
|
55
|
+
</form>
|
56
|
+
</div>
|
57
|
+
</h1>
|
58
|
+
<!-- inicio content-->
|
59
|
+
% if query and !query.empty?
|
60
|
+
{{Mote.parse(File.read("#{Kaya::View.path}/help/search_result.mote"), self, [:query]).call(query:query)}}
|
61
|
+
% else
|
62
|
+
% if available_pages.include? page
|
63
|
+
{{Mote.parse(File.read("#{Kaya::View.path}/help/page.mote"), self, [:page]).call(page:page)}}
|
64
|
+
% else
|
65
|
+
{{Mote.parse(File.read("#{Kaya::View.path}/help/main.mote"), self, []).call()}}
|
66
|
+
% end
|
67
|
+
% end
|
68
|
+
<!-- fin content -->
|
69
|
+
</div>
|
70
|
+
</div>
|
71
|
+
</body>
|
72
|
+
</html>
|
@@ -0,0 +1,96 @@
|
|
1
|
+
<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
|
2
|
+
<script src='https://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js'></script>
|
3
|
+
<script type='text/javascript'>
|
4
|
+
|
5
|
+
function my_alert(title, text){
|
6
|
+
info(title,text);
|
7
|
+
url = 'http://' + window.location.host + window.location.pathname;
|
8
|
+
$('#myModal').modal('show');
|
9
|
+
}
|
10
|
+
function starter_link(formId){
|
11
|
+
var form = document.getElementById(formId);
|
12
|
+
var link = window.location.origin + '/{{Kaya::Support::Configuration.hostname}}/kaya/suites/' + formId + '/run?';
|
13
|
+
var elements = form.getElementsByClassName('customParam');
|
14
|
+
for(i=0; i < elements.length; i++){
|
15
|
+
if(elements[i].value.length > 0){
|
16
|
+
link += elements[i].getAttribute('name') + '=' + elements[i].value + '&';
|
17
|
+
}
|
18
|
+
}
|
19
|
+
info_for_link('Use to the following link to start execution, share it!', link.slice(0,link.length-1));
|
20
|
+
}
|
21
|
+
function info(title, text){
|
22
|
+
document.getElementById('myModalLabel').innerHTML= title;
|
23
|
+
document.getElementById('my-modal').innerHTML= text;
|
24
|
+
}
|
25
|
+
function featureInfo(title, text){
|
26
|
+
start_html = '<pre lang="ruby" style="height:400px; overflow:scroll; white-space:pre; word-wrap:normal;">';
|
27
|
+
end_html = '</pre>'
|
28
|
+
replaced_text = text.replace(/%LT&/g,'<')
|
29
|
+
replaced_text = replaced_text.replace(/%GT&/g,'>')
|
30
|
+
all_html = start_html + replaced_text + end_html;
|
31
|
+
document.getElementById('myLargeModalLabel').innerHTML= title;
|
32
|
+
document.getElementById('my-largeModal').innerHTML= all_html;
|
33
|
+
}
|
34
|
+
function go_clean(){
|
35
|
+
window.location.href = url;
|
36
|
+
}
|
37
|
+
function refresh_and_open(url){
|
38
|
+
window.open(url, '_blank', 'toolbar=no, scrollbars=yes, resizable=yes, top=300, left=300, width=800, height=600');
|
39
|
+
location.reload();
|
40
|
+
}
|
41
|
+
function selectLink(){
|
42
|
+
document.getElementById('link-text-area').focus();
|
43
|
+
document.getElementById('link-text-area').select();
|
44
|
+
}
|
45
|
+
function info_for_link(title, text){
|
46
|
+
document.getElementById('myModalLabel').innerHTML= title;
|
47
|
+
content = "<textarea id='link-text-area' rows='3' cols='63' style='resize: none; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; color: #555; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 4px; font-weight:normal;' onfocus='selectLink()'>" + text + "</textarea><br>";
|
48
|
+
content += '<small>Click to select.<small>';
|
49
|
+
document.getElementById('my-modal').innerHTML= content;
|
50
|
+
}
|
51
|
+
function isInArray(value, array) {
|
52
|
+
return array.indexOf(value) > -1;
|
53
|
+
}
|
54
|
+
function addTextInput(selectId, plusFields, index){
|
55
|
+
for (var key in plusFields){
|
56
|
+
document.getElementById(plusFields[key] + index).style.display = 'none';
|
57
|
+
}
|
58
|
+
if(plusFields.hasOwnProperty(document.getElementById(selectId + index).options[document.getElementById(selectId + index).selectedIndex].value)) {
|
59
|
+
document.getElementById(plusFields[document.getElementById(selectId + index).options[document.getElementById(selectId + index).selectedIndex].value] + index).style.display = 'block';
|
60
|
+
}
|
61
|
+
}
|
62
|
+
|
63
|
+
function get_and_close(url){
|
64
|
+
xmlHttp = new XMLHttpRequest();
|
65
|
+
xmlHttp.open( 'GET', url, false );
|
66
|
+
xmlHttp.send();
|
67
|
+
window.close();
|
68
|
+
}
|
69
|
+
|
70
|
+
function go_to_bottom(){
|
71
|
+
window.scrollTo(0,document.body.scrollHeight);
|
72
|
+
}
|
73
|
+
|
74
|
+
function go_to_top(){
|
75
|
+
window.scrollTo(0,0);
|
76
|
+
}
|
77
|
+
|
78
|
+
|
79
|
+
var collapsed = false;
|
80
|
+
function auto_collapse(){
|
81
|
+
if(collapsed) {
|
82
|
+
collapsed = false;
|
83
|
+
document.getElementById('collapse_icon').innerHTML = "<span class='glyphicon glyphicon-minus' aria-hidden='true' style='font-size:18px;'></span>";
|
84
|
+
} else {
|
85
|
+
collapsed = true;
|
86
|
+
document.getElementById('collapse_icon').innerHTML = "<span class='glyphicon glyphicon-plus' aria-hidden='true' style='font-size:18px;'></span>";
|
87
|
+
}
|
88
|
+
$('.panel-body').collapse('toggle');
|
89
|
+
}
|
90
|
+
|
91
|
+
|
92
|
+
function PrintScreenshot(path){
|
93
|
+
var win = window.open(path , "win");
|
94
|
+
win.onload = win.print;
|
95
|
+
}
|
96
|
+
</script>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<div id='myModal' class='modal fade' tabindex='-1' role='dialog' aria-labelledby='myModalLabel' aria-hidden='true'>
|
2
|
+
<div class='modal-dialog'>
|
3
|
+
<div class='modal-content'>
|
4
|
+
<div class='modal-header'>
|
5
|
+
<h3 class='modal-title' id='myModalLabel'></h3>
|
6
|
+
</div>
|
7
|
+
<div class='modal-body'>
|
8
|
+
<h4 id='my-modal' style='overflow: hidden'></h4>
|
9
|
+
</div>
|
10
|
+
<div class='modal-footer'>
|
11
|
+
<button type='button' class='btn btn-default' data-dismiss='modal' onclick='go_clean();'>Close</button>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<div id='myLargeModal' class='modal fade bs-example-modal-lg' tabindex='-1' role='dialog' aria-labelledby='myLargeModalLabel' aria-hidden='true'>
|
18
|
+
<div class='modal-dialog modal-lg'>
|
19
|
+
<div class='modal-content'>
|
20
|
+
<div class='modal-header'>
|
21
|
+
<h4 class='modal-title' id='myLargeModalLabel'></h4>
|
22
|
+
</div>
|
23
|
+
<div class='modal-body'>
|
24
|
+
<h6 id='my-largeModal'></h6>
|
25
|
+
</div>
|
26
|
+
<div class='modal-footer'>
|
27
|
+
<button type='button' class='btn btn-default' data-dismiss='modal'>Close</button>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
</div>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
<div class='navbar navbar-inverse navbar-fixed-top'>
|
2
|
+
<div class='container'>
|
3
|
+
<div class='navbar-header'>
|
4
|
+
<button type='button' class='navbar-toggle' data-toggle='collapse' data-target='.navbar-collapse'>
|
5
|
+
<span class='icon-bar'></span>
|
6
|
+
<span class='icon-bar'></span>
|
7
|
+
<span class='icon-bar'></span>
|
8
|
+
<span class='icon-bar'></span>
|
9
|
+
<span class='icon-bar'></span>
|
10
|
+
<span class='icon-bar'></span>
|
11
|
+
</button>
|
12
|
+
<a class='navbar-brand' href='#'>{{Kaya::Support::Configuration.project_name}}</a>
|
13
|
+
</div>
|
14
|
+
<div class='collapse navbar-collapse'>
|
15
|
+
<ul class='nav navbar-nav'>
|
16
|
+
<li class='{{'active' if section == "test_suites"}}'>
|
17
|
+
<a href='/{{Kaya::Support::Configuration.hostname}}/kaya/suites'>Test Suites</a>
|
18
|
+
</li>
|
19
|
+
<li class='{{'active' if section == "features"}}'>
|
20
|
+
<a href='/{{Kaya::Support::Configuration.hostname}}/kaya/features'>Features</a>
|
21
|
+
</li>
|
22
|
+
<li class='{{'active' if section == "results"}}'>
|
23
|
+
<a href='/{{Kaya::Support::Configuration.hostname}}/kaya/results'>Results</a>
|
24
|
+
</li>
|
25
|
+
<li class='{{'active' if section == "all_results"}}'>
|
26
|
+
<a href='/{{Kaya::Support::Configuration.hostname}}/kaya/results/all'>All Results</a>
|
27
|
+
</li>
|
28
|
+
<li class='{{'active' if section == "repo"}}'>
|
29
|
+
<a title='Open repository url' href='{{Kaya::Support::Configuration.project_url}}' target='_blank'>Repo</a>
|
30
|
+
</li>
|
31
|
+
<li class='{{'active' if section == "logs"}}'>
|
32
|
+
<a href='#' class='dropdown-toggle' data-toggle='dropdown' role= 'button' aria-expanded='false'>
|
33
|
+
Logs
|
34
|
+
</a>
|
35
|
+
<ul class='dropdown-menu' role='menu'>
|
36
|
+
% Kaya::Support::Logs.all.keys.each do |log|
|
37
|
+
<li><a href='/{{Kaya::Support::Configuration.hostname}}/kaya/logs/{{log}}'>{{log.split('_').first.capitalize}}</a></li>
|
38
|
+
% end
|
39
|
+
</ul>
|
40
|
+
</li>
|
41
|
+
<li class='{{section == "help" ? 'active' : ''}}'>
|
42
|
+
<a href='/{{Kaya::Support::Configuration.hostname}}/kaya/help'>Help</a>
|
43
|
+
</li>
|
44
|
+
</ul>
|
45
|
+
</div>
|
46
|
+
<!--/.nav-collapse -->
|
47
|
+
</div>
|
48
|
+
</div>
|