ugly_face 0.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 (60) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/ChangeLog +2 -0
  4. data/Gemfile +13 -0
  5. data/Guardfile +19 -0
  6. data/LICENSE +21 -0
  7. data/README.md +25 -0
  8. data/Rakefile +19 -0
  9. data/autotrader.png +0 -0
  10. data/cucumber.yml +4 -0
  11. data/features/feature_pages.feature +110 -0
  12. data/features/pretty_face_report.feature +81 -0
  13. data/features/step_definitions/report_steps.rb +36 -0
  14. data/features/support/_feature_header.erb +2 -0
  15. data/features/support/_suite_header.erb +2 -0
  16. data/features/support/env.rb +20 -0
  17. data/features/support/error_display.rb +16 -0
  18. data/features/support/hooks.rb +11 -0
  19. data/features/support/logo.png +0 -0
  20. data/fixtures/advanced.feature +57 -0
  21. data/fixtures/background.feature +10 -0
  22. data/fixtures/basic.feature +20 -0
  23. data/fixtures/failing_background.feature +7 -0
  24. data/fixtures/more/more.feature +8 -0
  25. data/fixtures/onemore/deep/more.feature +8 -0
  26. data/fixtures/onemore/more.feature +8 -0
  27. data/fixtures/step_definitions/advanced_steps.rb +34 -0
  28. data/fixtures/step_definitions/basic_steps.rb +25 -0
  29. data/fixtures/support/env.rb +3 -0
  30. data/lib/.DS_Store +0 -0
  31. data/lib/ugly_face/.DS_Store +0 -0
  32. data/lib/ugly_face/formatter/html.rb +289 -0
  33. data/lib/ugly_face/formatter/report.rb +285 -0
  34. data/lib/ugly_face/formatter/view_helper.rb +61 -0
  35. data/lib/ugly_face/templates/_main_header.erb +1 -0
  36. data/lib/ugly_face/templates/_page_header.erb +2 -0
  37. data/lib/ugly_face/templates/_step.erb +39 -0
  38. data/lib/ugly_face/templates/debug.png +0 -0
  39. data/lib/ugly_face/templates/failed.png +0 -0
  40. data/lib/ugly_face/templates/feature.erb +143 -0
  41. data/lib/ugly_face/templates/logo.png +0 -0
  42. data/lib/ugly_face/templates/main.erb +162 -0
  43. data/lib/ugly_face/templates/passed.png +0 -0
  44. data/lib/ugly_face/templates/pending.png +0 -0
  45. data/lib/ugly_face/templates/screenshot.png +0 -0
  46. data/lib/ugly_face/templates/skipped.png +0 -0
  47. data/lib/ugly_face/templates/style.css +346 -0
  48. data/lib/ugly_face/templates/table_failed.png +0 -0
  49. data/lib/ugly_face/templates/table_passed.png +0 -0
  50. data/lib/ugly_face/templates/table_pending.png +0 -0
  51. data/lib/ugly_face/templates/table_skipped.png +0 -0
  52. data/lib/ugly_face/templates/table_undefined.png +0 -0
  53. data/lib/ugly_face/templates/undefined.png +0 -0
  54. data/lib/ugly_face/version.rb +3 -0
  55. data/lib/ugly_face.rb +45 -0
  56. data/spec/lib/customization_spec.rb +23 -0
  57. data/spec/lib/html_formatter_spec.rb +140 -0
  58. data/spec/spec_helper.rb +5 -0
  59. data/ugly_face.gemspec +29 -0
  60. metadata +199 -0
@@ -0,0 +1,143 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns='http://www.w3.org/1999/xhtml'>
3
+ <head>
4
+ <link href='<%= feature.directory_prefix_for(feature.file) %>stylesheets/style.css' type='text/css' rel='stylesheet' />
5
+ <meta charset="utf-8">
6
+ <title>Feature Results</title>
7
+ </head>
8
+
9
+ <body>
10
+
11
+ <div style="clear: both; width: 100%; background-color: #F6F6F6;">
12
+ <!--<a href="<%= feature.directory_prefix_for(feature.file) + feature.parent_filename %>" style="color=#0071BC;">&lt; Back</a>-->
13
+ <a href="<%= feature.directory_prefix_for(feature.file) %>index.html" style="color=#0071BC;">&lt; Back</a>
14
+ </div>
15
+
16
+ <div style="float:left; clear:both;">
17
+ <div class="header_logo">
18
+ <img src="<%= feature.directory_prefix_for(feature.file) %>images/<%= logo %>" width="100px" />
19
+ </div>
20
+ <div class="header_description" >
21
+ <% if customize %>
22
+ <%= render "feature_header" %>
23
+ <% else %>
24
+ <%= render "page_header", :feature => feature %>
25
+ <% end %>
26
+
27
+ <table class="run_stats">
28
+ <tr>
29
+ <th>Screenshots?: </th>
30
+ <td><%= ENV['SCREENSHOTS'] %></td>
31
+ <th>Started: </th>
32
+ <td><%= feature.start_time.strftime("%A %B %-d, %Y at %H:%M:%S") %></td>
33
+ </tr>
34
+ <tr>
35
+ <th>Debug?: </th>
36
+ <td><%= ENV['DEBUG'] %></td>
37
+ <th>Duration: </th>
38
+ <td><%= feature.formatted_duration(feature.duration) %></td>
39
+ </tr>
40
+ </table>
41
+ <% if feature.description? %>
42
+ <pre class="description run_stats">Story<br/><%= feature.description %></pre>
43
+ <% end %>
44
+ </div>
45
+ </div>
46
+
47
+ <div class="summary_body">
48
+ <table class="StatTable">
49
+ <tr>
50
+ <th>Summary</th>
51
+ <th>Executed</th>
52
+ <th class="passed"><%= raw(feature.table_image_for('passed', feature.file)) %> Passed</th>
53
+ <th class="failed"><%= raw(feature.table_image_for('failed', feature.file)) %> Failed</th>
54
+ <th class="skipped"><%= raw(feature.table_image_for('skipped', feature.file)) %> Skipped</th>
55
+ <th class="undefined"><%= raw(feature.table_image_for('undefined', feature.file)) %> Undefined</th>
56
+ <th class="pending" ><%= raw(feature.table_image_for('pending', feature.file)) %> Pending</th>
57
+ <th>Average Duration</th>
58
+ </tr>
59
+
60
+ <tr class="summary_row_header">
61
+ <td>Scenarios</td>
62
+ <td><%= feature.scenarios.length %></td>
63
+ <td><%= raw(feature.scenario_summary_for :passed) %></td>
64
+ <td><%= raw(feature.scenario_summary_for :failed) %></td>
65
+ <td><%= raw(feature.scenario_summary_for :skipped) %></td>
66
+ <td><%= raw(feature.scenario_summary_for :undefined) %></td>
67
+ <td><%= raw(feature.scenario_summary_for :pending) %></td>
68
+ <td><%= feature.scenario_average_duration %></td>
69
+ </tr>
70
+ <tr class="summary_row_header">
71
+ <td>Steps</td>
72
+ <td><%= feature.steps.length %></td>
73
+ <td><%= raw(feature.step_summary_for :passed) %></td>
74
+ <td><%= raw(feature.step_summary_for :failed) %></td>
75
+ <td><%= raw(feature.step_summary_for :skipped) %></td>
76
+ <td><%= raw(feature.step_summary_for :undefined) %></td>
77
+ <td><%= raw(feature.step_summary_for :pending) %></td>
78
+ <td><%= feature.step_average_duration %></td>
79
+ </tr>
80
+
81
+
82
+ </table>
83
+ </div>
84
+
85
+ <div class="feature_background">
86
+ <div class="scenario_list">
87
+ <% if feature.has_background? %>
88
+ <br />
89
+ <h2 class="scenarios">Background: <%= feature.background_title.name %></h2>
90
+ <% end %>
91
+ <table cellspacing="0" cellpadding="4" border="0" width="100%">
92
+ <% feature.background_steps.each do |step| %>
93
+ <tr>
94
+ <td><%= raw(feature.image_tag_for(step.status, feature.file)) %></td>
95
+ <td>
96
+ <%= render "step", step: step %>
97
+ </td>
98
+ </tr>
99
+ <% end %>
100
+ </table>
101
+ <br />
102
+ <h2 class="scenarios">Scenarios:</h2>
103
+ <% feature.scenarios.each do |scenario| %>
104
+ <table cellspacing="0" cellpadding="4" class="scenario" width="100%">
105
+ <tr >
106
+ <th colspan="3" class="<%= scenario.status.to_s %>"><%= scenario.name %> (<%= scenario.duration.round(1) %>s)</th>
107
+ </tr>
108
+ <% scenario.steps.each do |step| %>
109
+ <tr class="borderSeparator">
110
+ <td class="image_tag"> <%= raw(feature.image_tag_for(step.status, feature.file)) %></td>
111
+ <td class="<%= "skipped_step" if step.status == :skipped %>">
112
+ <%= render "step", step: step %>
113
+ </td>
114
+ <td class="stepDuration"><%= step.duration.round(1) %>s</td>
115
+ </tr>
116
+ <% end %>
117
+ <% if scenario.has_image? %>
118
+ <tr class="borderSeparator">
119
+ <td class="image_tag"> <%= raw(feature.image_tag_for('screenshot', feature.file)) %></td>
120
+ <td class= "scenarioImages">
121
+ <% scenario.image.length.times do |i| %>
122
+ | <a href='' onclick="img=document.getElementById('<%= scenario.image_id[i] %>'); img.style.display = (img.style.display == 'none' ? 'block' : 'none');return false"><%= "#{scenario.image_label[i]}" %></a> |
123
+ <img id='<%= scenario.image_id[i] %>' style='display: none' src='<%= feature.directory_prefix_for(feature.file) %>images/<%= scenario.image[i] %>'/>
124
+ <% end %>
125
+ </td>
126
+ <td></td>
127
+ </tr>
128
+ <% end %>
129
+ <tr class="borderSeparator">
130
+ <td class="image_tag"> <%= raw(feature.image_tag_for('debug', feature.file)) %></td>
131
+ <td class= "debugData"> <%= raw(UglyFace.pop_scenario) %></td>
132
+ <td></td>
133
+ </tr>
134
+ </table>
135
+ <br /><br />
136
+ <% end %>
137
+ </div>
138
+ </div>
139
+ <div class="footer">
140
+ Generated by Bueller Reports (Pretty Face Fork)
141
+ </div>
142
+ </body>
143
+ </html>
Binary file
@@ -0,0 +1,162 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns='http://www.w3.org/1999/xhtml'>
3
+ <head>
4
+ <link href='stylesheets/style.css' type='text/css' rel='stylesheet' />
5
+ <meta charset="utf-8">
6
+ <title>Run Results</title>
7
+ </head>
8
+
9
+ <body>
10
+ <div style="float: left; clear:both;">
11
+ <div class="header_logo">
12
+ <img src='images/<%= logo %>' width="155px" />
13
+ </div>
14
+ <div class="header_description">
15
+ <% if report.custom_suite_header? %>
16
+ <%= render "suite_header" %>
17
+ <% else %>
18
+ <%= render "main_header" %>
19
+ <% end %>
20
+ <br>
21
+ <table class="run_stats">
22
+ <tr>
23
+ <th>Environment: </th>
24
+ <td><%= ENV['TARGET'] %></td>
25
+ <th>Started: </th>
26
+ <td><%= report.start_time %></td>
27
+ </tr>
28
+ <tr>
29
+ <th>Location: </th>
30
+ <td><%= ENV['NODE'] %></td>
31
+ <th>Duration: </th>
32
+ <td><%= report.total_duration %></td>
33
+ </tr>
34
+ <tr>
35
+ <th>Browser: </th>
36
+ <td><%= ENV['CLIENT'] %></td>
37
+ <th>Debug?: </th>
38
+ <td><%= ENV['DEBUG'] %></td>
39
+ </tr>
40
+ <tr>
41
+ <th>Scope: </th>
42
+ <td><%= ENV['SCOPE'] %></td>
43
+ <th>Screenshots?: </th>
44
+ <td><%= ENV['SCREENSHOTS'] %></td>
45
+ </tr>
46
+ </table>
47
+ </div>
48
+ </div>
49
+ <div class="summary_body">
50
+ <table class="StatTable">
51
+ <tr>
52
+ <th>Summary</th>
53
+ <th>Executed</th>
54
+ <th class="passed"><img src="images/table_passed.png"> Passed</th>
55
+ <th class="failed"><img src="images/table_failed.png">Failed</th>
56
+ <th class="skipped"><img src="images/table_skipped.png">Skipped</th>
57
+ <th class="undefined"><img src="images/table_undefined.png">Undefined</th>
58
+ <th class="pending"><img src="images/table_pending.png">Pending</th>
59
+ <th>Average Duration</th>
60
+ </tr>
61
+ <tr class="summary_row_header">
62
+ <td>Scenarios</td>
63
+ <td><%= report.scenario_count %></td>
64
+ <td><%= raw(report.scenarios_summary_for :passed) %></td>
65
+ <td><%= raw(report.scenarios_summary_for :failed) %></td>
66
+ <td><%= raw(report.scenarios_summary_for :skipped) %></td>
67
+ <td><%= raw(report.scenarios_summary_for :undefined) %></td>
68
+ <td><%= raw(report.scenarios_summary_for :pending) %></td>
69
+ <td><%= report.scenario_average_duration(report.features) %></td>
70
+ </tr>
71
+ <tr class="summary_row_header">
72
+ <td >Steps</td>
73
+ <td><%= report.step_count %></td>
74
+ <td><%= raw(report.steps_summary_for :passed) %></td>
75
+ <td><%= raw(report.steps_summary_for :failed) %></td>
76
+ <td><%= raw(report.steps_summary_for :skipped) %></td>
77
+ <td><%= raw(report.steps_summary_for :undefined) %></td>
78
+ <td><%= raw(report.steps_summary_for :pending) %></td>
79
+ <td><%= report.step_average_duration(report.features) %></td>
80
+ </tr>
81
+ </table>
82
+ </div>
83
+
84
+ <div class="failures">
85
+ <br />
86
+ <h2>Tests With Failures:</h2>
87
+ <br />
88
+ <table cellspacing="0" cellpadding="7" border="0">
89
+ <tr style="background-color: #E0E0E0;">
90
+ <th></th>
91
+ <th style="text-align: left;">Feature</th>
92
+ <th style="text-align: left;">Scenario</th>
93
+ <th style="text-align: left;">File</th>
94
+ </tr>
95
+ <% report.features.each do |feature| %>
96
+ <% feature.scenarios.each do |scenario| %>
97
+ <% if report.failed_scenario? scenario %>
98
+ <tr>
99
+ <td><img src="images/failed.png" width="20"/></td>
100
+ <td><%= feature.title %> </td>
101
+ <td><%= scenario.name %></td>
102
+ <td style="color: gray;"><%= scenario.file_colon_line %></td>
103
+ </tr>
104
+ <% end %>
105
+ <% end %>
106
+ <% end %>
107
+ </table>
108
+
109
+ <section class="feature-overview">
110
+ <br />
111
+ <h2 class="scenarios">Feature Overview:</h2>
112
+ <br />
113
+
114
+ <table cellspacing="0" cellpadding="7" border="0">
115
+ <tr>
116
+ <th>Feature</th>
117
+ <th>File</th>
118
+ <th>Passed</th>
119
+ <th>Failed</th>
120
+ <th>Pending</th>
121
+ <th>Undefined</th>
122
+ <th>Skipped</th>
123
+ <th>Duration</th>
124
+ </tr>
125
+ <% report.features.each do |feature| %>
126
+ <tr>
127
+ <td class="feature_title">
128
+ <a href="<%= feature.file %>"><%= feature.title %></a>
129
+ </td>
130
+ <td>
131
+ <%= feature.file %>
132
+ </td>
133
+ <td>
134
+ <%= feature.scenarios_for(:passed).length %>
135
+ </td>
136
+ <td>
137
+ <%= feature.scenarios_for(:failed).length %>
138
+ </td>
139
+ <td>
140
+ <%= feature.scenarios_for(:pending).length %>
141
+ </td>
142
+ <td>
143
+ <%= feature.scenarios_for(:undefined).length %>
144
+ </td>
145
+ <td>
146
+ <%= feature.scenarios_for(:skipped).length %>
147
+ </td>
148
+ <td>
149
+ <%= feature.formatted_duration(feature.duration) %>
150
+ </td>
151
+ </tr>
152
+ <% end %>
153
+ </table>
154
+ </section>
155
+ </div>
156
+
157
+ <div class="footer">
158
+ Generated by Bueller Reports (Pretty Face Fork)
159
+ </div>
160
+
161
+ </body>
162
+ </html>
Binary file
Binary file
Binary file
@@ -0,0 +1,346 @@
1
+ /* Colors:
2
+
3
+ light-gray: #F9F9F9;
4
+ mid-gray: #F2F2F2;
5
+ dark-gray: #E0E0E0;
6
+ extra-dark-gray: #AEAEAE;
7
+ aqua: #4B7CAB;
8
+
9
+ */
10
+
11
+ body {
12
+ font-family: Verdana,Helvetica,sans-serif;
13
+ font-size: 0.80em;
14
+ color: #1A1A1A;
15
+ width: 90%;
16
+ margin-left: auto;
17
+ margin-right: auto;
18
+ }
19
+
20
+ pre {
21
+ white-space: pre-wrap; /* css-3 */
22
+ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
23
+ white-space: -pre-wrap; /* Opera 4-6 */
24
+ white-space: -o-pre-wrap; /* Opera 7 */
25
+ word-wrap: break-word; /* Internet Explorer 5.5+ */
26
+ }
27
+
28
+ a, a:visited {
29
+ color: #0071BC;
30
+ text-decoration:none;
31
+ }
32
+
33
+
34
+ a:hover {
35
+ text-decoration:underline;
36
+ }
37
+
38
+ h2 {
39
+ font-size: 1.3em;
40
+ margin: 0;
41
+ }
42
+
43
+ .header_logo {
44
+ float: left;
45
+ width: 155px;
46
+ }
47
+
48
+ .header_description {
49
+ float: right;
50
+ padding: 2px;
51
+ }
52
+
53
+ .run_stats{
54
+ font-size: 0.9em;
55
+ }
56
+
57
+ .run_stats td{
58
+ padding: 0 25px 0 0px;
59
+ }
60
+
61
+ .run_stats th{
62
+ text-align: right;
63
+ }
64
+
65
+ .StatTable{
66
+ width: 100%;
67
+ table-layout: fixed;
68
+ background-color: #fff;
69
+ border-collapse: separate;
70
+ border-spacing: 6px;
71
+ }
72
+
73
+ .StatTable th {
74
+ vertical-align: middle;
75
+ background-color: #f7f0f0;
76
+ padding: 3px;
77
+ text-align: center;
78
+ }
79
+
80
+ .StatTable tr {background-color: #f9f9f9;}
81
+ .StatTable th img {
82
+ vertical-align: middle;
83
+ padding-right: 10px;
84
+ }
85
+
86
+ .StatTable td {
87
+ padding: 6px;
88
+ margin:10px
89
+ }
90
+
91
+ div.feature_background {
92
+ border-top: 1px solid #d8d7d5;
93
+ clear:both;
94
+ }
95
+ div.scenario_list {
96
+ width: 70%;
97
+ margin:0 auto;
98
+ float: center;
99
+ background-color: white;
100
+ padding: 10px;
101
+ }
102
+
103
+ .summary_body {
104
+ clear: both;
105
+ }
106
+ .summary_row_header {
107
+ text-align: center;
108
+ font-size: 1em;
109
+ }
110
+ .summary td {
111
+ font-size: 1em;
112
+ text-align: center;
113
+ }
114
+ .summary td:first-child {
115
+ font-size: inherit;
116
+ text-align: inherit;
117
+ width: inherit;
118
+ }
119
+ .percentage {
120
+ color: #808080;
121
+ font-size: .7em;
122
+ }
123
+
124
+ td.stepDuration {
125
+ text-align: right;
126
+ padding-right: 5%;
127
+ font-weight: bold;
128
+ }
129
+
130
+ th.failed {
131
+ background-color: #FF1D25;
132
+ color: white;
133
+ }
134
+
135
+ th.passed {
136
+ background-color: #90c447;
137
+ color: white;
138
+ }
139
+
140
+ th.pending {
141
+ background-color: #fbb03b;
142
+ color: white;
143
+ }
144
+
145
+ th.undefined {
146
+ background-color: #2e3192;
147
+ color: white;
148
+ }
149
+
150
+ th.skipped {
151
+ background-color: #ed1e79;
152
+ color: white;
153
+ }
154
+
155
+ td.skipped_step{
156
+ background-color: #F9CFE1;
157
+ }
158
+ .footer {
159
+ width: 100%;
160
+ background-color: #4B7CAB;
161
+ float: left;
162
+ margin-left: -7px;
163
+ margin-top: 25px;
164
+ font-family: Verdana;
165
+ font-size: 1em;
166
+ color: white;
167
+ clear: both;
168
+ }
169
+ .failures {
170
+ width: 100%;
171
+ float: left;
172
+ }
173
+ .failures h2 {
174
+ color: #A00000;
175
+ margin-top: 5px;
176
+ margin-left: 5px;
177
+ }
178
+ .scenarios h2 {
179
+ color: #4B7CAB;
180
+ margin-top: 15px;
181
+ margin-left: 5px;
182
+ }
183
+ .results h2 {
184
+ color: #282828;
185
+ }
186
+ .summary h2 {
187
+ color: white;
188
+ margin-left: 5px;
189
+ margin-top: 5px;
190
+ }
191
+ .feature_title {
192
+ background-color: #F0F0F0;
193
+ font-size: 1em;
194
+ }
195
+ table.scenario {
196
+ border-width: 2px;
197
+ border-color: #cccccc;
198
+ border-style: solid;
199
+ border-collapse: collapse;
200
+ }
201
+
202
+ .borderSeparator {
203
+ border-top: 1px solid #ccc;
204
+ }
205
+
206
+ td.image_tag {
207
+ text-align: left;
208
+ width: 30px;
209
+ }
210
+ .description {
211
+ width: 100%;
212
+ font-family: inherit
213
+ }
214
+
215
+ .img_container img {
216
+ max-width: 100%;
217
+ max-height: 100%;
218
+ }
219
+
220
+ .failures tr:nth-child(odd) {
221
+ background-color:#F9F9F9;
222
+ }
223
+ .failures tr:nth-child(even) {
224
+ background-color:#F2F2F2;
225
+ }
226
+
227
+ .failures tr td {
228
+ border-top:1px solid #AEAEAE;
229
+ }
230
+ .failures tr:last-child td:first-child {
231
+ border-radius: 0px 0px 0px 18px;
232
+ }
233
+ .failures tr:last-child td:last-child {
234
+ border-radius: 0px 0px 18px 0px;
235
+ }
236
+
237
+ table.param_table {
238
+ border-collapse: collapse;
239
+ text-align: center;
240
+ }
241
+ .param_table th,.param_table td {
242
+ border: 1px solid #E0E0E0;
243
+ padding-left: 10px;
244
+ padding-right: 10px;
245
+ text-align: left;
246
+ }
247
+
248
+ .multiline_arg {
249
+ padding-left: 15px;
250
+ padding-right: 15px;
251
+ background-color:#F2F2F2;
252
+ }
253
+
254
+ .feature-overview th {
255
+ background-color: #E0E0E0;
256
+ text-align: left;
257
+ }
258
+
259
+ .error {
260
+ color: black;
261
+ background-color: #f9e708;
262
+ border-color: #eed3d7;
263
+ }
264
+
265
+ .message td {
266
+ padding: 5px;
267
+ font-weight: bold;
268
+ }
269
+
270
+ .detail td {
271
+ margin-left: 10px;
272
+ padding: 7px;
273
+ font-weight: normal;
274
+
275
+ }
276
+
277
+ .ruby {
278
+ font-size: 12px;
279
+ font-family: monospace;
280
+ color: white;
281
+ background: black;
282
+ padding: 0.1em 0 0.2em 0;
283
+ }
284
+ .ruby .keyword {
285
+ color: #ff6600;
286
+ }
287
+ .ruby .constant {
288
+ color: #339999;
289
+ }
290
+ .ruby .attribute {
291
+ color: white;
292
+ }
293
+ .ruby .global {
294
+ color: white;
295
+ }
296
+ .ruby .module {
297
+ color: white;
298
+ }
299
+ .ruby .class {
300
+ color: white;
301
+ }
302
+ .ruby .string {
303
+ color: #66ff00;
304
+ }
305
+ .ruby .ident {
306
+ color: white;
307
+ }
308
+ .ruby .method {
309
+ color: #ffcc00;
310
+ }
311
+ .ruby .number {
312
+ color: white;
313
+ }
314
+ .ruby .char {
315
+ color: white;
316
+ }
317
+ .ruby .comment {
318
+ color: #9933cc;
319
+ }
320
+ .ruby .symbol {
321
+ color: white;
322
+ }
323
+ .ruby .regex {
324
+ color: #44b4cc;
325
+ }
326
+ .ruby .punct {
327
+ color: white;
328
+ }
329
+ .ruby .escape {
330
+ color: white;
331
+ }
332
+ .ruby .interp {
333
+ color: white;
334
+ }
335
+ .ruby .expr {
336
+ color: white;
337
+ }
338
+ .ruby .offending {
339
+ background: #333333;
340
+ }
341
+ .ruby .linenum {
342
+ width: 75px;
343
+ padding: 0.1em 1em 0.2em 0;
344
+ color: black;
345
+ background: #fffbd3;
346
+ }
@@ -0,0 +1,3 @@
1
+ module UglyFace
2
+ VERSION = "0.1"
3
+ end