cuke_sniffer 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -32,8 +32,8 @@ module CukeSniffer
32
32
  # Formats the section data for a summary object
33
33
  def self.console_summary(name, summary)
34
34
  " #{name}\n" +
35
- " Min: #{summary[:min]} (#{summary[:min_file]})\n" +
36
- " Max: #{summary[:max]} (#{summary[:max_file]})\n" +
35
+ " Min: #{summary[:min]}\n" +
36
+ " Max: #{summary[:max]}\n" +
37
37
  " Average: #{summary[:average]}\n"
38
38
  end
39
39
 
@@ -84,16 +84,9 @@ module CukeSniffer
84
84
 
85
85
  # Returns the Rules erb page that utilizes sub page sections of enabled and disabled rules
86
86
  def self.rules_template(cuke_sniffer)
87
- enabled_rules = sub_rules_template(cuke_sniffer, true, "Enabled Rules")
88
- disabled_rules = sub_rules_template(cuke_sniffer, false, "Disabled Rules")
89
87
  ERB.new(extract_markup("rules.html.erb")).result(binding)
90
88
  end
91
89
 
92
- # Returns the sub rules erb page for enabled status of a rule
93
- def self.sub_rules_template(cuke_sniffer, state, heading)
94
- ERB.new(extract_markup("sub_rules.html.erb")).result(binding)
95
- end
96
-
97
90
  # Creates a xml file with the collected project details
98
91
  # file_name defaults to "cuke_sniffer.xml" unless specified
99
92
  # cuke_sniffer.output_xml
@@ -109,16 +102,6 @@ module CukeSniffer
109
102
  end
110
103
  end
111
104
 
112
- # Formats a list of rule conditions into a compact string of 5 or less elements per row.
113
- def self.convert_array_condition_into_list_of_strings(condition_list)
114
- result = []
115
- while condition_list.size > 0
116
- five_words = condition_list.slice!(0, 5)
117
- result << five_words.join(", ")
118
- end
119
- result
120
- end
121
-
122
105
  # Sorts all of the lists on a cuke_sniffer object to be in descending order for each objects score.
123
106
  def self.sort_cuke_sniffer_lists(cuke_sniffer)
124
107
  cuke_sniffer.features = cuke_sniffer.features.sort_by { |feature| feature.total_score }.reverse
@@ -0,0 +1,133 @@
1
+ <link rel="stylesheet" type="text/css">
2
+
3
+ <style>
4
+ .new_sub_section {
5
+ border: 2px solid #509f50;
6
+ padding: 2px;
7
+ display: none;
8
+ overflow:auto;
9
+ }
10
+
11
+ .title {
12
+ padding-left: 1%;
13
+ width: 25%;
14
+ background-color: #509f50;
15
+ color: white;
16
+ border-top: 0;
17
+ border-bottom: 0;
18
+ font-weight: bold;
19
+ font-size: 21pt;
20
+ cursor: pointer;
21
+ font-family: Arial;
22
+ border-top-left-radius: 15px;
23
+ border-top-right-radius: 15px;
24
+ }
25
+
26
+ .function_bar {
27
+ background-color: #509f50;
28
+ display: none;
29
+ }
30
+
31
+ .help {
32
+ cursor: hand;
33
+ }
34
+
35
+ .disabled_title_row {
36
+ background-color:#aca8a5;
37
+ cursor: hand;
38
+ padding-left: 2px;
39
+ }
40
+
41
+ .white_title_row {
42
+ cursor: hand;
43
+ padding-left: 2px;
44
+ }
45
+
46
+ .blue_title_row {
47
+ background-color:#ccffff;
48
+ cursor: hand;
49
+ padding-left: 2px;
50
+ }
51
+
52
+ .white_row {
53
+ padding-left: 2px;
54
+ }
55
+
56
+ .blue_row {
57
+ background-color:#ccffff;
58
+ padding-left: 2px;
59
+ }
60
+
61
+ .colored_subsection {
62
+ width:100%;
63
+ padding-left: 8px;
64
+ }
65
+
66
+ .shrink_section {
67
+ border: 2px solid #509f50;
68
+ display: none;
69
+ }
70
+
71
+ .table_top {
72
+ width: 20%;
73
+ font-size: 14pt;
74
+ padding: 0;
75
+ }
76
+
77
+ .divide_row {
78
+ border-bottom: 1px solid black;
79
+ }
80
+
81
+ .red_number {
82
+ color: red;
83
+ font-weight: bold;
84
+ display: inline;
85
+ }
86
+
87
+ .notes {
88
+ font-weight: bold;
89
+ }
90
+
91
+ .sub_section {
92
+ display: none;
93
+ margin-left: 1%;
94
+ margin-right: 1%;
95
+ border-top: 2px solid #509f50;
96
+ }
97
+
98
+ .empty_set_message {
99
+ font-weight: bold;
100
+ margin-left: 1%;
101
+ }
102
+
103
+ .rule_notes {
104
+ margin-left: 1%;
105
+ border-left: 2px solid #90ee90;
106
+ border-top: 2px solid #90ee90;
107
+ display: block;
108
+ clear: left;
109
+ padding-bottom: 0%;
110
+ text-indent: 0%;
111
+ padding-left: 0.5%;
112
+ margin-bottom: 0.5%;
113
+ }
114
+
115
+ .rule_style {
116
+ margin: 0;
117
+ text_indent: 3%;
118
+
119
+ }
120
+
121
+ .rule_heading {
122
+ font-weight: bold;
123
+ margin: 0.25%;
124
+ }
125
+
126
+ ol {
127
+ list-style-type: none;
128
+ display: block;
129
+ padding-left: 1%
130
+
131
+ }
132
+
133
+ </style>
@@ -1,36 +1,63 @@
1
- <div class="title" onclick="toggleById('dead_steps_data', this)">
2
- Dead Steps +
3
- </div>
4
- <div class="shrink_section" id="dead_steps_data">
5
- <% dead_steps = cuke_sniffer.get_dead_steps %>
6
- <% dead_steps.delete(:total) %>
7
- <% dead_step_count = dead_steps.values.flatten.count %>
8
- <% if dead_step_count == 0 %>
9
- <div class="empty_set_message">No dead steps found!</div>
10
- <% elsif dead_step_count == 1 %>
11
- <div class="empty_set_message" style="color: red"><%= dead_step_count %> Dead Step found.</div>
12
- <% else %>
13
- <div class="empty_set_message" style="color: red"><%= dead_step_count %> Dead Steps found.</div>
14
- <% end %>
15
-
16
- <table style="width: 100%">
17
- <% dead_steps.each_key do |file_name| %>
18
- <tr>
19
- <td>
20
- <div style="text-indent: 2%;font-weight: bold;"><%= file_name.gsub(cuke_sniffer.step_definitions_location, "") %>
21
- .rb
22
- </div>
23
- <table style="width: 100%; padding-left: 3%;">
24
- <% dead_steps[file_name].each do |regex| %>
25
- <tr>
26
- <td style="width: 3%"><%= regex.match(/(?<line>\d+):/)[:line] %></td>
27
- <td><%= regex.match(/:(?<regex>.*)/)[:regex] %></td>
28
- </tr>
29
- <% end %>
30
- </table>
31
- </td>
32
- </tr>
33
- <% end %>
34
- </table>
35
- </div>
1
+ <div class="title" onclick="toggleById('dead_steps_data', this); updateDisplayStatus(document.getElementById('dead_steps_function_bar'));updateDivScroll('dead_steps_data', 'dead_steps_table');">
2
+ Dead Steps +
3
+ </div>
4
+ <div id="dead_steps_function_bar" class="function_bar">
5
+ <input type="button" class="function_button" value="Collapse All" onclick="collapseAll('dead_step_detail')" />
6
+ <input type="button" class="function_button" value="Expand All" onclick="expandAllShiftingRows('dead_step_detail')" />
7
+ </div>
8
+ <div class="new_sub_section" id="dead_steps_data">
9
+ <% dead_steps = cuke_sniffer.get_dead_steps %>
10
+ <% dead_steps.delete(:total) %>
11
+ <% dead_step_count = dead_steps.values.flatten.count %>
12
+ <% if !cuke_sniffer.cataloged? %>
13
+ <div class="notes">Steps were not cataloged.</div>
14
+ <% elsif dead_step_count == 0 %>
15
+ <div class="notes">No dead steps found!</div>
16
+ <% elsif dead_step_count == 1 %>
17
+ <div class="notes"><%= dead_step_count %> Dead Step found.</div>
18
+ <% else %>
19
+ <div class="notes"><%= dead_step_count %> Dead Steps found.</div>
20
+ <% end %>
21
+ <% unless dead_steps.empty? or !cuke_sniffer.cataloged? %>
22
+ <table id="dead_steps_table" style="width:100%; border-top: 2px solid #509f50" border="0" cellspacing="0">
23
+ <% index = 0 %>
24
+ <% dead_steps.each_key do |file_name| %>
25
+ <% if index.odd? %>
26
+ <tr class="notes blue_title_row" onclick="updateDisplayStatus(document.getElementById('dead_step_file_detail_<%=index%>')); updateDivScroll('dead_steps_data', 'dead_steps_table');">
27
+ <% else %>
28
+ <tr class="notes white_title_row" onclick="updateDisplayStatus(document.getElementById('dead_step_file_detail_<%=index%>')); updateDivScroll('dead_steps_data', 'dead_steps_table');">
29
+ <% end %>
30
+ <td class="red_number" style="width: 1%"><%= dead_steps[file_name].size %></td>
31
+ <td id="dead_step_file_<%= index %>">
32
+ <%= file_name.gsub(cuke_sniffer.step_definitions_location, "") %>
33
+ </td>
34
+ <td style="text-align: right; width:5%" valign="top">
35
+ <a href="file:///<%= file_name.gsub(/:\d+$/, "") %>.rb" title="Note: Links to file on system this report was generated.">
36
+ (open file)
37
+ </a>
38
+ </td>
39
+ </tr>
40
+
41
+ <% if index.odd? %>
42
+ <tr class="blue_row dead_step_detail" id="dead_step_file_detail_<%= index %>" style="display: none;">
43
+ <% else %>
44
+ <tr class="white_row dead_step_detail" id="dead_step_file_detail_<%= index %>" style="display: none;">
45
+ <% end %>
46
+ <td colspan="3">
47
+ <table id="sub_detail_table_<%= index %>" style="width:100%;">
48
+ <% dead_steps[file_name].each do |regex| %>
49
+ <tr>
50
+ <td style="text-indent: 8px;"><%= regex.match(/:(?<regex>.*)/)[:regex] %></td>
51
+ <td style="text-align: right;">Line: <%= regex.match(/(?<line>\d+):/)[:line] %></td>
52
+ </tr>
53
+ <% end %>
54
+ </table>
55
+ </td>
56
+ </tr>
57
+
58
+ <% index += 1 %>
59
+ <% end %>
60
+ </table>
61
+ <% end %>
62
+ </div>
36
63
  <br style="clear:both">
@@ -1,60 +1,114 @@
1
- <div class="title" onclick="toggleById('features_data', this)">
1
+ <div class="title" onclick="toggleById('features_data', this);updateDisplayStatus(document.getElementById('feature_function_bar'));updateDivScroll('features_data', 'features_table');">
2
2
  Features +
3
3
  </div>
4
- <div class="shrink_section" id="features_data">
4
+
5
+ <div id="feature_function_bar" class="function_bar">
6
+ <input type="button" class="function_button" value="Collapse All" onclick="collapseAll('feature_detail')" />
7
+ <input type="button" class="function_button" value="Expand All" onclick="expandAllShiftingRows('feature_detail')" />
8
+ </div>
9
+
10
+ <div class="new_sub_section" id="features_data">
5
11
  <% if cuke_sniffer.features.count == 0 %>
6
12
  <div class="empty_set_message">There were no Features to sniff in '<%= cuke_sniffer.features_location %>'!</div>
7
13
  <% elsif cuke_sniffer.features.count >= 1 && cuke_sniffer.scenarios.count >=1 && cuke_sniffer.summary[:features][:total_score] ==0 && cuke_sniffer.summary[:scenarios][:total_score] ==0 %>
8
14
  <div class="empty_set_message">Excellent! No smells found for Features and Scenarios!</div>
9
15
  <% end %>
10
- <% index = 0 %>
11
- <% cuke_sniffer.features.each do |feature| %>
12
- <% next if feature.total_score <= 0 %>
13
- <div style="cursor: pointer; padding-top: 3px" onclick="updateDisplayStatus(document.getElementById('feature_<%=index%>'))">
14
- <div class="red_number" style="float:left"><%= feature.total_score + feature.scenarios_score %></div>
15
- <div class="notes"><%= feature.name %></div>
16
- </div>
17
- <div id="feature_<%= index %>" class="sub_section">
18
- <div style="text-indent: 4%; float: left; width: 45%; border-right: 2px solid #add8e6; padding-bottom: 4px">
19
- <% if feature.rules_hash.empty? %>
20
- <pre style="margin: 0;"> </pre>
21
- <% end %>
22
- <% feature.rules_hash.each_key do |rule| %>
23
- <pre style="margin: 0;"><%= rule %></pre>
24
- <% end %>
25
- </div>
26
- <div style="text-indent: 1%; padding-bottom: 4px">
27
- <%= feature.location.gsub(cuke_sniffer.features_location, "") %>
28
- </div>
29
- <br style="clear:both">
30
16
 
31
- <div>
32
- <% unless feature.background.nil? or feature.background.score > 0 %>
33
- <div class="red_number" style="float:left; padding-left: 1%"><%= feature.background.score %></div>
34
- <div style="float: left; width: 45%;"><%= feature.background.type + ": " + feature.background.name %></div>
35
- <div style="margin-left:1%;float: left; border-left: 2px solid #90ee90; border-top: 2px solid #90ee90;text-indent: 1%;">
36
- <% feature.background.rules_hash.each_key do |rule| %>
37
- <pre style="margin: 0; text_indent: 3%;"><%= rule %></pre>
38
- <% end %>
39
- </div>
40
- <br style="clear:both">
41
- <% end %>
42
- </div>
43
- <div>
44
- <% feature.scenarios.each do |scenario| %>
45
- <% next if scenario.score <= 0 %>
46
- <div class="red_number" style="float:left; padding-left: 1%"><%= scenario.score %></div>
47
- <div style="float: left; width: 45%;"><%= scenario.type + ": " + scenario.name %></div>
48
- <div style="margin-left:1%;float: left; border-left: 2px solid #90ee90; border-top: 2px solid #90ee90; text-indent: 1%">
49
- <% scenario.rules_hash.each_key do |rule| %>
50
- <pre style="margin: 0; text_indent: 3%;"><%= rule %></pre>
51
- <% end %>
52
- </div>
53
- <br style="clear:both">
54
- <% end %>
55
- </div>
56
- </div>
57
- <% index += 1 %>
58
- <% end %>
17
+ <table id="features_table" border="0" cellspacing="0" style="width:100%;padding-left: 2px">
18
+ <% index = 0 %>
19
+ <% cuke_sniffer.features.each do |feature| %>
20
+ <% next if feature.total_score == 0 %>
21
+ <% if index.odd? %>
22
+ <tr class="notes blue_title_row" style="cursor: hand;" onclick="updateDisplayStatus(document.getElementById('feature_detail_<%=index%>'));updateDivScroll('features_data', 'features_table');">
23
+ <% else %>
24
+ <tr class="notes white_title_row" style="cursor: hand;" onclick="updateDisplayStatus(document.getElementById('feature_detail_<%=index%>'));updateDivScroll('features_data', 'features_table');">
25
+ <% end %>
26
+ <td valign="top" class="red_number" style="width:1%">
27
+ <%= feature.total_score %>
28
+ </td>
29
+ <td style="padding-left: 2px; width:100%;">
30
+ <% if feature.name.to_s.empty? %>
31
+ No Feature Description
32
+ <% else %>
33
+ <%= feature.name %>
34
+ <% end %>
35
+ </td>
36
+ </tr>
37
+ <% if index.odd? %>
38
+ <tr id="feature_detail_<%= index %>" class="blue_row feature_detail" style="display:none;">
39
+ <% else %>
40
+ <tr id="feature_detail_<%= index %>" class="white_row feature_detail" style="display:none;">
41
+ <% end %>
42
+
43
+ <td colspan="2">
44
+ <table border="0" cellspacing="0" class="colored_subsection">
45
+ <tr>
46
+ <td>
47
+ <% SummaryHelper::sort_improvement_list(feature.rules_hash).each do |phrase, count| %>
48
+ <div>
49
+ <div style="color:red; display:inline-block;">
50
+ <%= count %>
51
+ </div>
52
+ <div style="display:inline-block;">
53
+ <%= phrase %>
54
+ </div>
55
+ </div>
56
+ <% end %>
57
+ </td>
58
+ <td style="text-align: right;">
59
+ <a href="file:///<%= feature.location.gsub(/:\d+$/, "") %>" title="Note: Links to file on system this report was generated.">
60
+ <%= feature.location.gsub(cuke_sniffer.features_location, '') %>
61
+ </a>
62
+ </td>
63
+ </tr>
64
+ <% unless feature.background.nil? %>
65
+ <tr>
66
+ <td valign="top" style="border-top: 2px solid #509f50">
67
+ <div style="display:inline;" class="red_number"><%= feature.background.score %></div>
68
+ <div style="display:inline; padding-left: 2px; width:100%;"><%= feature.background.type %>
69
+ : <%= feature.background.name %></div>
70
+ </td>
71
+ <td valign="top" style="padding-left:2px;border-top: 2px solid #509f50;">
72
+ <% SummaryHelper::sort_improvement_list(feature.background.rules_hash).each do |phrase, count| %>
73
+ <div>
74
+ <div style="color:red; display:inline-block;">
75
+ <%= count %>
76
+ </div>
77
+ <div style="display:inline-block; padding-left:2px;">
78
+ <%= phrase %>
79
+ </div>
80
+ </div>
81
+ <% end %>
82
+ </td>
83
+ </tr>
84
+ <% end %>
85
+ <% feature.scenarios.each do |scenario| %>
86
+ <% next if scenario.score == 0 %>
87
+ <tr>
88
+ <td valign="top" style="border-top: 2px solid #509f50">
89
+ <div style="display:inline;" class="red_number"><%= scenario.score %></div>
90
+ <div style="display:inline; padding-left: 2px; width:100%;"><%= scenario.type %>
91
+ : <%= scenario.name %></div>
92
+ </td>
93
+ <td valign="top" style="padding-left:2px;border-top: 2px solid #509f50">
94
+ <% SummaryHelper::sort_improvement_list(scenario.rules_hash).each do |phrase, count| %>
95
+ <div>
96
+ <div style="color:red; display:inline-block;">
97
+ <%= count %>
98
+ </div>
99
+ <div style="display:inline-block;">
100
+ <%= phrase %>
101
+ </div>
102
+ </div>
103
+ <% end %>
104
+ </td>
105
+ </tr>
106
+ <% end %>
107
+ </table>
108
+ </td>
109
+ </tr>
110
+ <% index += 1 %>
111
+ <% end %>
112
+ </table>
59
113
  </div>
60
114
  <br style="clear:both">
@@ -1,49 +1,79 @@
1
- <div class="title" onclick="toggleById('hooks_data', this)">
2
- Hooks +
3
- </div>
4
- <div class="shrink_section" id="hooks_data">
5
- <% if cuke_sniffer.hooks.count == 0 %>
6
- <div class="empty_set_message">There were no Hooks to sniff in '<%= cuke_sniffer.hooks_location %>'!</div>
7
- <% elsif cuke_sniffer.hooks.count >= 1 && cuke_sniffer.summary[:hooks][:total_score] ==0 %>
8
- <div class="empty_set_message">Excellent! No smells found for Hooks!</div>
9
- <% end %>
10
- <% index = 0 %>
11
- <% cuke_sniffer.hooks.each do |hook| %>
12
- <% next if hook.score <= 0 %>
13
- <div style="cursor: pointer; padding-top: 3px" onclick="updateDisplayStatus(document.getElementById('hook_<%=index%>'))">
14
- <div class="red_number" style="float:left"><%= hook.score %></div>
15
- <% tags = "(" %>
16
- <% hook.tags.each do |tag| %>
17
- <% tags << tag %>
18
- <% tags << ", " unless tag == hook.tags.last %>
19
- <% end %>
20
- <% tags += ")" %>
21
- <% parameters = "| " %>
22
- <% hook.parameters.each do |parameter| %>
23
- <% parameters << parameter %>
24
- <% parameters << ", " unless parameter == hook.parameters.last %>
25
- <% end %>
26
- <% parameters += " |" %>
27
- <% name = hook.type %>
28
- <% name += tags unless tags == "()" %>
29
- <% name += " do " %>
30
- <% name += parameters unless parameters == "| |" %>
31
- <div class="notes"><%= name %></div>
32
- </div>
33
- <div id="hook_<%= index %>" style="display:none;">
34
- <div class="sub_section" style="display:block;">
35
- <div style="text-indent: 4%; float: left; width: 45%; border-right: 2px solid #add8e6;">
36
- <% hook.rules_hash.each_key do |rule| %>
37
- <pre style="margin: 0;"><%= rule %></pre>
38
- <% end %>
39
- </div>
40
- <div style="text-indent: 1%">
41
- <%= hook.location.gsub(cuke_sniffer.hooks_location, "") %>
42
- </div>
43
- <br style="clear:both">
44
- </div>
45
- </div>
46
- <% index += 1 %>
47
- <% end %>
48
- </div>
1
+ <div class="title" onclick="toggleById('hooks_data', this);updateDisplayStatus(document.getElementById('hooks_function_bar'));updateDivScroll('hooks_data', 'hooks_table');">
2
+ Hooks +
3
+ </div>
4
+
5
+ <div id="hooks_function_bar" class="function_bar">
6
+ <input type="button" class="function_button" value="Collapse All" onclick="collapseAll('hook_detail')" />
7
+ <input type="button" class="function_button" value="Expand All" onclick="expandAllShiftingRows('hook_detail')" />
8
+ </div>
9
+
10
+ <div class="new_sub_section" id="hooks_data">
11
+ <% if cuke_sniffer.hooks.count == 0 %>
12
+ <div class="empty_set_message">There were no Hooks to sniff in '<%= cuke_sniffer.hooks_location %>'!</div>
13
+ <% elsif cuke_sniffer.hooks.count >= 1 && cuke_sniffer.summary[:hooks][:total_score] ==0 %>
14
+ <div class="empty_set_message">Excellent! No smells found for Hooks!</div>
15
+ <% end %>
16
+ <table id="hooks_table" style="width:100%;" border="0" cellspacing="0">
17
+ <% index = 0 %>
18
+ <% cuke_sniffer.hooks.each do |hook| %>
19
+ <% next if hook.score <= 0 %>
20
+ <% if index.odd? %>
21
+ <tr class="notes blue_title_row" onclick="updateDisplayStatus(document.getElementById('hook_detail_<%=index%>'));updateDivScroll('hooks_data', 'hooks_table');">
22
+ <% else %>
23
+ <tr class="notes white_title_row" onclick="updateDisplayStatus(document.getElementById('hook_detail_<%=index%>'));updateDivScroll('hooks_data', 'hooks_table');">
24
+ <% end %>
25
+ <td id="hook_score_<%= index %>" valign="top" style="width:1%; color: red">
26
+ <%= hook.score %>
27
+ </td>
28
+ <td id="hook_name_<%= index %>" style="text-indent: 2px;">
29
+ <% tags = "(" %>
30
+ <% hook.tags.each do |tag| %>
31
+ <% tags << tag %>
32
+ <% tags << ", " unless tag == hook.tags.last %>
33
+ <% end %>
34
+ <% tags += ")" %>
35
+ <% parameters = "| " %>
36
+ <% hook.parameters.each do |parameter| %>
37
+ <% parameters << parameter %>
38
+ <% parameters << ", " unless parameter == hook.parameters.last %>
39
+ <% end %>
40
+ <% parameters += " |" %>
41
+ <% name = hook.type %>
42
+ <% name += tags unless tags == "()" %>
43
+ <% name += " do " %>
44
+ <% name += parameters unless parameters == "| |" %>
45
+ <%= name %>
46
+ </td>
47
+ </td>
48
+ </tr>
49
+
50
+ <% if index.odd? %>
51
+ <tr id="hook_detail_<%= index %>" class="blue_row hook_detail" style="display: none;">
52
+ <% else %>
53
+ <tr id="hook_detail_<%= index %>" class="white_row hook_detail" style="display: none;">
54
+ <% end %>
55
+
56
+ <td colspan="2">
57
+ <% SummaryHelper::sort_improvement_list(hook.rules_hash).each do |phrase, count| %>
58
+ <div style="text-indent: 10px;">
59
+ <div style="color:red; display:inline-block;">
60
+ <%= count %>
61
+ </div>
62
+ <div style="display:inline-block;">
63
+ <%= phrase %>
64
+ </div>
65
+ </div>
66
+ <% end %>
67
+ </td>
68
+ <td valign="top" style="text-align: right">
69
+ <a href="file:///<%= hook.location.gsub(/:\d+$/, "") %>" title="Note: Links to file on system this report was generated.">
70
+ <%= hook.location.gsub(cuke_sniffer.hooks_location, '') %>
71
+ </a>
72
+ </td>
73
+ </tr>
74
+
75
+ <% index += 1 %>
76
+ <% end %>
77
+ </table>
78
+ </div>
49
79
  <br style="clear:both">