html_cs_run_parse 0.0.6 → 0.1.1

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 (26) hide show
  1. checksums.yaml +4 -4
  2. data/lib/HTMLCS.js +33 -630
  3. data/lib/html_compilation/classes/builders/app_html.rb +62 -0
  4. data/lib/html_compilation/classes/builders/graph.rb +70 -0
  5. data/lib/html_compilation/classes/builders/html_builder.rb +27 -0
  6. data/lib/html_compilation/classes/builders/page_html.rb +91 -0
  7. data/lib/html_compilation/classes/builders/row_html.rb +13 -0
  8. data/lib/html_compilation/classes/objects/app.rb +28 -0
  9. data/lib/html_compilation/classes/objects/base_object.rb +12 -0
  10. data/lib/html_compilation/classes/objects/page.rb +99 -0
  11. data/lib/html_compilation/classes/objects/row.rb +22 -0
  12. data/lib/html_compilation/classes/setup/conditioning.rb +23 -0
  13. data/lib/html_compilation/classes/setup/output_generation.rb +21 -0
  14. data/lib/html_compilation/classes/setup/retrieval.rb +90 -0
  15. data/lib/html_compilation/classes/setup/setup.rb +83 -0
  16. data/lib/html_compilation/classes/struct_classes/score_collection.rb +33 -0
  17. data/lib/html_compilation/classes/struct_classes/suppressed_page_rules.rb +8 -0
  18. data/lib/html_compilation/data/html_data/app_data.yaml +39 -0
  19. data/lib/html_compilation/data/html_data/page_data.yaml +37 -0
  20. data/lib/html_compilation/data/html_data/row_data.yaml +4 -0
  21. data/lib/html_compilation/data/html_data/style_script.yaml +167 -0
  22. data/lib/html_compilation/execution.rb +18 -0
  23. data/lib/html_compilation/modules/image_interaction.rb +14 -0
  24. data/lib/html_compilation/modules/yaml_interaction.rb +26 -0
  25. data/lib/html_cs_run_parse.rb +6 -0
  26. metadata +53 -3
@@ -0,0 +1,62 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+ require 'page_html'
3
+ class AppHTML < HTML
4
+ attr_accessor(:pages)
5
+ def initialize(object)
6
+ self.send("data_location=", File.expand_path("../../../data/html_data/app_data.yaml", __FILE__))
7
+ self.send("pages=", object.pages)
8
+ super(object)
9
+ end
10
+
11
+ def build
12
+ #build the adr section
13
+ adr = read_yaml(data_location, "APPLICATION_DATA_ROW")
14
+ score = object.calculate_app_score
15
+ errors = object.calculate_total_errors
16
+ page_number = object.pages.length
17
+ adrs = [score, errors, page_number].map do |section|
18
+ adr.gsub('sample', section.to_s)
19
+ end.join
20
+
21
+ #build the ADS Section
22
+ ads = read_yaml(data_location, "APPLICATION_DATA_SECTION")
23
+ ads.gsub!("sample", adrs)
24
+
25
+ #build the AOTS Section
26
+ aots = read_yaml(data_location, "APPLICATION_OVERVIEW_TABLE_SECTION")
27
+ aots.gsub!("sample", ads)
28
+
29
+ #build the CI section
30
+ ci = read_yaml(data_location, "CHART_IMAGE")
31
+
32
+ #build the AOS section
33
+ aos = read_yaml(data_location, "APPLICATION_OVERVIEW_SECTION")
34
+ aos.gsub!("sample", aots + ci)
35
+
36
+ #building the page sections
37
+ page_rows = object.pages.map do |page|
38
+ PageHTML.new(page).build
39
+ end.join
40
+
41
+ #build the HB section
42
+ hb = read_yaml(data_location, "HTML_BODY")
43
+ hb.gsub!("sample", aos + page_rows)
44
+
45
+ #build the app section
46
+ ats = read_yaml(data_location, "APPLICATION_TITLE_SECTION")
47
+ ats.gsub!('sample', object.application_name + " utilizing: " + object.env)
48
+
49
+ #build the html section
50
+ html = read_yaml(data_location, "HTML")
51
+ html.gsub!("sample", ats + hb)
52
+
53
+ #add the style sheet to the beginning
54
+ ssloc = File.expand_path("../../../data/html_data/style_script.yaml", __FILE__)
55
+ style = read_yaml(ssloc, "STYLE")
56
+ html = style + html
57
+
58
+ #add the script to the end
59
+ script = read_yaml(ssloc, "SCRIPT")
60
+ html = html + script
61
+ end
62
+ end
@@ -0,0 +1,70 @@
1
+ $:.unshift File.dirname(__FILE__) + '/../../modules'
2
+ require 'yaml_interaction'
3
+ require 'gchart'
4
+
5
+ class Graph
6
+ attr_accessor(:chart)
7
+ include YAMLInteraction
8
+ attr_reader(:graph_length)
9
+
10
+
11
+ def initialize
12
+ @graph_length = 30
13
+ end
14
+
15
+ def generate_graph(app_object, ddl = "./data")
16
+ gs = "/graph_scores.yaml"
17
+ app = app_object.application_name.upcase.tr(' ', '_')
18
+ score = app_object.calculate_app_score
19
+ update_yaml(app, score, ddl + gs)
20
+ values = array_slicer(read_yaml(ddl + gs, app).split(',').map(&:to_i))
21
+ max = values.sort.last.to_i
22
+ split = (max / 5).to_i
23
+ value = 0
24
+ string = '0|'
25
+ values.length > graph_length ? end_range = graph_length : end_range = values.length
26
+ 4.times {value += split; string += value.to_s + '|'}
27
+ self.send("chart=", Gchart.new({:type => 'bar',
28
+ :data => values,
29
+ :axis_with_labels => 'x,y',
30
+ :axis_labels => [(1..end_range).to_a.reverse, string],
31
+ :axis_range => [nil, [0, max]],
32
+ :title => "#{app.downcase.tr('_', ' ')} #{app_object.env}",
33
+ :legend => ['total score'],
34
+ :bg => {:color => 'white', :type => 'solid'},
35
+ :bar_colors => 'ADEFD1FF', :size => '1000x200',
36
+ :filename => "#{ddl}/output/files/chart.png"}))
37
+ end
38
+
39
+ def populate_graph
40
+ chart.file
41
+ end
42
+
43
+ def array_slicer(values)
44
+ if values.length > graph_length
45
+ output = values[((values.length - 1) - (graph_length - 1))..(values.length - 1)]
46
+ else
47
+ output = values
48
+ end
49
+ output
50
+ end
51
+
52
+ def update_yaml(app, score, dl)
53
+ app_up = app.upcase.tr(' ', '_')
54
+ if !app_listed(app_up, dl)
55
+ key_value_add(dl, app_up, score.to_s)
56
+ else
57
+ cur_val = read_yaml(dl, app_up)
58
+ key_value_add(dl, app_up, cur_val + "," + score.to_s)
59
+ end
60
+ end
61
+
62
+ def app_listed(app, dl)
63
+ if read_yaml(dl, app) != nil
64
+ true
65
+ else
66
+ false
67
+ end
68
+ end
69
+
70
+ end
@@ -0,0 +1,27 @@
1
+ $:.unshift File.dirname(__FILE__) + '/../../modules'
2
+ require 'yaml_interaction'
3
+
4
+ class HTML
5
+ attr_accessor(:data_location, :object)
6
+ include YAMLInteraction
7
+
8
+ def initialize(object)
9
+ @object = object
10
+ end
11
+
12
+ def htmlify(string)
13
+ subs = {"&" => "&amp;", '<' => "&lt;", '>' => "&gt;"}
14
+ subs.each do |key, value|
15
+ if string.to_s.include?(key)
16
+ begin
17
+ string.gsub!(key, value)
18
+ rescue NoMethodError => e
19
+ print e.message
20
+ end
21
+ end
22
+ end
23
+ string
24
+ end
25
+ end
26
+
27
+
@@ -0,0 +1,91 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+ require 'row_html'
3
+ class PageHTML < HTML
4
+ attr_accessor(:rows)
5
+ def initialize(object)
6
+ self.send("data_location=", File.expand_path("../../../data/html_data/page_data.yaml", __FILE__))
7
+ self.send("rows=", object.rows)
8
+ super(object)
9
+ end
10
+
11
+ def build
12
+ #populate warning headers
13
+ row_headers = warning_header_gen
14
+
15
+ #populate list of warning from the row
16
+ row_content = rows.map do |row|
17
+ rhtml = RowHTML.new(row)
18
+ rhtml.build
19
+ end.join
20
+
21
+ #populate the warning list area as a whole.
22
+ warn_list = read_yaml(data_location, "WARNING_LIST_AREA")
23
+ warn_list.gsub!('header_sample', row_headers)
24
+ warn_list.gsub!('rows_sample', row_content)
25
+
26
+ #generate the page info section
27
+ page_info = read_yaml(data_location, "PAGE_INFO")
28
+ url = gen_url_section
29
+ image = gen_image_section
30
+ sup_rule_area = gen_sup_rules_area
31
+ page_info.gsub!('sample', url + image + sup_rule_area)
32
+
33
+ #generate the content section which combines page_info and warn_list
34
+ content = read_yaml(data_location, "CONTENT")
35
+ content.gsub!('sample', page_info + warn_list)
36
+
37
+ #generate the collapsible_button_section
38
+ cb = read_yaml(data_location, "COLLAPSIBLE_BUTTON")
39
+ cb.gsub!("Sample Page Name", object.page)
40
+ cb.gsub!("sample total number of errors", object.rows.length.to_s)
41
+ cb.gsub!("sample page score", object.score.to_s)
42
+
43
+ #generate the whole page content section
44
+ cls = read_yaml(data_location, "COLLAPSIBLE_LIST_SECTION")
45
+ cls.gsub!("sample", cb + content)
46
+
47
+ cls
48
+ end
49
+
50
+ def warning_header_gen
51
+ headers = read_yaml(data_location, "WARNING_LIST_HEADERS")
52
+ output = rows[0].values.map do |key|
53
+ headers.gsub("sample", key)
54
+ end
55
+ output.push(headers.gsub("sample", "instances"))
56
+ output.join.to_s
57
+ end
58
+
59
+ def gen_image_section
60
+ if object.image != nil
61
+ html = read_yaml(data_location, "PAGE_IMAGE")
62
+ output = html.gsub("sample", htmlify(object.page))
63
+ else
64
+ output = ""
65
+ end
66
+ output
67
+ end
68
+
69
+ def gen_url_section
70
+ if object.url != nil
71
+ html = read_yaml(data_location, "PAGE_URL")
72
+ output = html.gsub("sample", htmlify(object.url))
73
+ else
74
+ output = ""
75
+ end
76
+ output
77
+ end
78
+
79
+ def gen_sup_rules_area
80
+ if object.page_suppressed_rules != nil
81
+ table_value = read_yaml(data_location, "PAGE_SUPPRESSED_RULES_TABLE_VALUES")
82
+ psr = object.page_suppressed_rules.map do |rule|
83
+ table_value.gsub("sample","<strong>Guideline: </strong>" + htmlify(rule.guideline) + "<strong> Content: </strong>" + htmlify(rule.content))
84
+ end
85
+ output = read_yaml(data_location, "PAGE_SUPPRESSED_RULES_AREA").gsub("sample", psr.join.to_s)
86
+ else
87
+ output = ""
88
+ end
89
+ output
90
+ end
91
+ end
@@ -0,0 +1,13 @@
1
+ class RowHTML < HTML
2
+ def build
3
+ self.send("data_location=", File.expand_path("../../../data/html_data/row_data.yaml", __FILE__))
4
+ row = read_yaml(data_location, "TR")
5
+ data_cell = read_yaml(data_location, "TD")
6
+ cells = object.values.map do |key|
7
+ data_cell.gsub("sample", (htmlify(object.send(key)).to_s))
8
+ end
9
+ cells.push(data_cell.gsub("sample", htmlify(object.instances.to_i.to_s)))
10
+ row.gsub("sample", cells.join.to_s)
11
+ end
12
+
13
+ end
@@ -0,0 +1,28 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+ require 'base_object'
3
+ class Application < BaseObject
4
+ attr_accessor(:values, :application_name, :pages, :graph, :env)
5
+
6
+ def calculate_app_score
7
+ counter = 0
8
+ pages.each do |page|
9
+ counter += page.score
10
+ end
11
+ counter
12
+ end
13
+
14
+ def calculate_total_errors
15
+ counter = 0
16
+ pages.each do |page|
17
+ counter += page.rows.length
18
+ end
19
+ counter
20
+ end
21
+
22
+ def remove_duplicates
23
+ pages.reverse.each do |page|
24
+ page.remove_duplicates(self)
25
+ end
26
+ end
27
+
28
+ end
@@ -0,0 +1,12 @@
1
+ class BaseObject
2
+ def initialize
3
+ @values = []
4
+ end
5
+
6
+ def set_value(variable, content)
7
+ self.send("#{variable}=", content)
8
+ unless @values.include?(variable)
9
+ @values.push(variable)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,99 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+ $:.unshift File.dirname(__FILE__) + '/../../modules'
3
+ $:.unshift File.dirname(__FILE__) + '/../struct_classes'
4
+ require 'base_object'
5
+ require 'yaml_interaction'
6
+ require 'suppressed_page_rules'
7
+ class Page < BaseObject
8
+ include YAMLInteraction
9
+ attr_accessor(:page, :url, :image, :rows, :values, :page_suppressed_rules, :app, :score)
10
+
11
+ def access_spr(df_yaml_loc = "./data/suppressed_rules.yaml")
12
+ yaml = read_yaml(df_yaml_loc, app.application_name)
13
+ output = []
14
+ levels = ["GLOBAL", "APP", page.upcase.tr(' ', '_')]
15
+ yaml.each do |key, value|
16
+ if levels.include?(key)
17
+ value.each do |value|
18
+ hash = eval(value)
19
+ output.push(SuppressedPageRules.new(hash[:guideline], hash[:content]))
20
+ end
21
+
22
+ end
23
+ end
24
+ set_value("page_suppressed_rules", output)
25
+ page_suppressed_rules
26
+ end
27
+
28
+ def remove_suppressed_rows
29
+ page_suppressed_rules.each do |rule|
30
+ rows.delete_if do |row|
31
+ include_content?(row, rule)
32
+ end
33
+ end
34
+ end
35
+
36
+ def remove_duplicates(app)
37
+ remove_duplicate_rows_external(app, self)
38
+ remove_duplicate_rows_internal
39
+ end
40
+
41
+ def remove_duplicate_rows_external(app, page)
42
+ app.pages.each do |app_page|
43
+ unless (app_page == page)
44
+ app_page.rows.each do |app_row|
45
+ page.rows.delete_if do |row|
46
+ same = same_content?(app_row, row)
47
+ if same
48
+ app_row.send("instances=", app_row.instances.to_i + 1)
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ def remove_duplicate_rows_internal
57
+ duplicate_rows = rows.clone.keep_if do |row_a|
58
+ rows.each do |row_b|
59
+ if row_a == row_b
60
+ @same = false
61
+ else
62
+ @same = same_content?(row_b, row_a)
63
+ if @same
64
+ row_a.send("instances=", row_b.instances.to_f + 0.5)
65
+ row_b.send("instances=", row_a.instances.to_f + 0.5)
66
+ end
67
+ end
68
+ end
69
+ @same
70
+ end
71
+ duplicate_rows.each do |duplicate_row|
72
+ rows.delete_if do |row|
73
+ duplicate_row == row
74
+ end
75
+ end
76
+ duplicate_rows
77
+ end
78
+
79
+ def calc_page_score
80
+ page_score = 0
81
+ rows.each do |row|
82
+ page_score += row.score
83
+ end
84
+ page_score
85
+ end
86
+
87
+ private
88
+
89
+ def include_content?(base, comparison)
90
+ base.guideline.include?(comparison.guideline) && base.content.include?(comparison.content)
91
+ end
92
+
93
+ def same_content?(base, comparison)
94
+ base.guideline == comparison.guideline && base.content == comparison.content
95
+ end
96
+ end
97
+
98
+
99
+
@@ -0,0 +1,22 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+ require 'base_object'
3
+
4
+ class Row < BaseObject
5
+ def initialize
6
+ super
7
+ send("instances=", 1)
8
+ end
9
+ attr_accessor(:error_warning, :guideline, :error_description, :html_path, :content, :score, :values, :instances)
10
+
11
+ def calculate_score_value(collection_element)
12
+ dv = 1
13
+ collection_element.guidelines.each do |sg|
14
+ if guideline.include?(sg.guideline)
15
+ dv = sg.score
16
+ end
17
+ end
18
+ set_value("score", dv)
19
+ end
20
+
21
+ end
22
+
@@ -0,0 +1,23 @@
1
+ $:.unshift File.dirname(__FILE__) + '/../builders'
2
+ require 'graph'
3
+
4
+ class Conditioning
5
+ def main_condition(app, skip_value = false, ddl = "./data")
6
+ app.pages.each do |page|
7
+ unless skip_value == 'suppressed_rows'
8
+ page.remove_suppressed_rows
9
+ end
10
+ unless skip_value == 'duplicates'
11
+ app.remove_duplicates
12
+ end
13
+ end
14
+
15
+ app.pages.each do |page|
16
+ page.set_value('score', page.calc_page_score)
17
+ end
18
+
19
+ gp = Graph.new
20
+ gp.generate_graph(app, ddl)
21
+ app.set_value("graph", gp)
22
+ end
23
+ end