spektacular 0.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.
- data/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +17 -0
- data/Rakefile +52 -0
- data/VERSION +1 -0
- data/lib/spektacular.rb +428 -0
- data/spektacular.gemspec +51 -0
- data/test/helper.rb +10 -0
- data/test/test_spektacular.rb +7 -0
- metadata +75 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 damselem
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
= spektacular
|
2
|
+
|
3
|
+
Description goes here.
|
4
|
+
|
5
|
+
== Note on Patches/Pull Requests
|
6
|
+
|
7
|
+
* Fork the project.
|
8
|
+
* Make your feature addition or bug fix.
|
9
|
+
* Add tests for it. This is important so I don't break it in a
|
10
|
+
future version unintentionally.
|
11
|
+
* Commit, do not mess with rakefile, version, or history.
|
12
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
13
|
+
* Send me a pull request. Bonus points for topic branches.
|
14
|
+
|
15
|
+
== Copyright
|
16
|
+
|
17
|
+
Copyright (c) 2010 damselem. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "spektacular"
|
8
|
+
gem.summary = %Q{RSpec formatter}
|
9
|
+
gem.description = %Q{An improved HTML RSpec formatter}
|
10
|
+
gem.email = "damselem@gmail.com"
|
11
|
+
gem.homepage = "http://github.com/damselem/spektacular"
|
12
|
+
gem.authors = ["damselem"]
|
13
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
14
|
+
end
|
15
|
+
Jeweler::GemcutterTasks.new
|
16
|
+
rescue LoadError
|
17
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
18
|
+
end
|
19
|
+
|
20
|
+
require 'rake/testtask'
|
21
|
+
Rake::TestTask.new(:test) do |test|
|
22
|
+
test.libs << 'lib' << 'test'
|
23
|
+
test.pattern = 'test/**/test_*.rb'
|
24
|
+
test.verbose = true
|
25
|
+
end
|
26
|
+
|
27
|
+
begin
|
28
|
+
require 'rcov/rcovtask'
|
29
|
+
Rcov::RcovTask.new do |test|
|
30
|
+
test.libs << 'test'
|
31
|
+
test.pattern = 'test/**/test_*.rb'
|
32
|
+
test.verbose = true
|
33
|
+
end
|
34
|
+
rescue LoadError
|
35
|
+
task :rcov do
|
36
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
task :test => :check_dependencies
|
41
|
+
|
42
|
+
task :default => :test
|
43
|
+
|
44
|
+
require 'rake/rdoctask'
|
45
|
+
Rake::RDocTask.new do |rdoc|
|
46
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
47
|
+
|
48
|
+
rdoc.rdoc_dir = 'rdoc'
|
49
|
+
rdoc.title = "spektacular #{version}"
|
50
|
+
rdoc.rdoc_files.include('README*')
|
51
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
52
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
data/lib/spektacular.rb
ADDED
@@ -0,0 +1,428 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'rspec/core/formatters/base_text_formatter'
|
3
|
+
|
4
|
+
module RSpec
|
5
|
+
module Core
|
6
|
+
module Formatters
|
7
|
+
class HtmlFormatter < BaseTextFormatter
|
8
|
+
include ERB::Util # for the #h method
|
9
|
+
|
10
|
+
def method_missing(m, *a, &b)
|
11
|
+
# no-op
|
12
|
+
end
|
13
|
+
|
14
|
+
def message(message)
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(output)
|
18
|
+
super(output)
|
19
|
+
@example_group_number = 0
|
20
|
+
@example_number = 0
|
21
|
+
@header_red = nil
|
22
|
+
end
|
23
|
+
|
24
|
+
# The number of the currently running example_group
|
25
|
+
def example_group_number
|
26
|
+
@example_group_number
|
27
|
+
end
|
28
|
+
|
29
|
+
# The number of the currently running example (a global counter)
|
30
|
+
def example_number
|
31
|
+
@example_number
|
32
|
+
end
|
33
|
+
|
34
|
+
def start(example_count)
|
35
|
+
super(example_count)
|
36
|
+
@output.puts html_header
|
37
|
+
@output.puts report_header
|
38
|
+
@output.flush
|
39
|
+
end
|
40
|
+
|
41
|
+
def example_group_started(example_group)
|
42
|
+
super(example_group)
|
43
|
+
@example_group_red = false
|
44
|
+
@example_group_number += 1
|
45
|
+
unless example_group_number == 1
|
46
|
+
@output.puts " </dl>"
|
47
|
+
@output.puts "</div>"
|
48
|
+
end
|
49
|
+
@output.puts "<div class=\"example_group\">"
|
50
|
+
@output.puts " <dl>"
|
51
|
+
@output.puts " <dt id=\"example_group_#{example_group_number}\">#{h(example_group.description)}</dt>"
|
52
|
+
@output.flush
|
53
|
+
end
|
54
|
+
|
55
|
+
def start_dump
|
56
|
+
@output.puts " </dl>"
|
57
|
+
@output.puts "</div>"
|
58
|
+
@output.flush
|
59
|
+
end
|
60
|
+
|
61
|
+
def example_started(example)
|
62
|
+
super(example)
|
63
|
+
@example_number += 1
|
64
|
+
end
|
65
|
+
|
66
|
+
def example_passed(example)
|
67
|
+
move_progress
|
68
|
+
@output.puts " <script type=\"text/javascript\">changeClass('example_group_#{example_group_number}');</script>"
|
69
|
+
@output.puts " <dd class=\"spec passed\"><span class=\"passed_spec_name\">#{h(example.description)}</span></dd>"
|
70
|
+
@output.flush
|
71
|
+
end
|
72
|
+
|
73
|
+
def example_failed(example)
|
74
|
+
counter = 0
|
75
|
+
exception = example.metadata[:execution_result][:exception_encountered]
|
76
|
+
extra = extra_failure_content(exception)
|
77
|
+
failure_style = 'failed'
|
78
|
+
failure_style = RSpec::Core::PendingExampleFixedError === exception ? 'pending_fixed' : 'failed'
|
79
|
+
@output.puts " <script type=\"text/javascript\">makeRed('rspec-header');</script>" unless @header_red
|
80
|
+
@header_red = true
|
81
|
+
@output.puts " <script type=\"text/javascript\">changeClass('example_group_#{example_group_number}');</script>"
|
82
|
+
@output.puts " <script type=\"text/javascript\">makeRed('example_group_#{example_group_number}');</script>" unless @example_group_red
|
83
|
+
@example_group_red = true
|
84
|
+
move_progress
|
85
|
+
@output.puts " <dd class=\"spec #{failure_style}\">"
|
86
|
+
@output.puts " <span class=\"failed_spec_name\">#{h(example.description)}</span>"
|
87
|
+
@output.puts " <div class=\"failure\" id=\"failure_#{counter}\">"
|
88
|
+
@output.puts " <div class=\"message\"><pre>#{h(exception.message)}</pre></div>" unless exception.nil?
|
89
|
+
@output.puts " <div class=\"backtrace\"><pre>#{format_backtrace(exception.backtrace, example).join("\n")}</pre></div>" if exception
|
90
|
+
@output.puts extra unless extra == ""
|
91
|
+
@output.puts " </div>"
|
92
|
+
@output.puts " </dd>"
|
93
|
+
@output.flush
|
94
|
+
end
|
95
|
+
|
96
|
+
def example_pending(example)
|
97
|
+
message = example.metadata[:execution_result][:pending_message]
|
98
|
+
@output.puts " <script type=\"text/javascript\">changeClass('example_group_#{example_group_number}');</script>"
|
99
|
+
@output.puts " <script type=\"text/javascript\">makeYellow('rspec-header');</script>" unless @header_red
|
100
|
+
@output.puts " <script type=\"text/javascript\">makeYellow('example_group_#{example_group_number}');</script>" unless @example_group_red
|
101
|
+
move_progress
|
102
|
+
@output.puts " <dd class=\"spec not_implemented\"><span class=\"not_implemented_spec_name\">#{h(example.description)} (PENDING: #{h(message)})</span></dd>"
|
103
|
+
@output.flush
|
104
|
+
end
|
105
|
+
|
106
|
+
# Override this method if you wish to output extra HTML for a failed spec. For example, you
|
107
|
+
# could output links to images or other files produced during the specs.
|
108
|
+
#
|
109
|
+
def extra_failure_content(exception)
|
110
|
+
require 'rspec/core/formatters/snippet_extractor'
|
111
|
+
@snippet_extractor ||= SnippetExtractor.new
|
112
|
+
" <pre class=\"ruby\"><code>#{@snippet_extractor.snippet(exception)}</code></pre>"
|
113
|
+
end
|
114
|
+
|
115
|
+
def move_progress
|
116
|
+
@output.puts " <script type=\"text/javascript\">moveProgressBar('#{percent_done}');</script>"
|
117
|
+
@output.flush
|
118
|
+
end
|
119
|
+
|
120
|
+
def percent_done
|
121
|
+
result = 100.0
|
122
|
+
if @example_count > 0
|
123
|
+
result = ((example_number).to_f / @example_count.to_f * 1000).to_i / 10.0
|
124
|
+
end
|
125
|
+
result
|
126
|
+
end
|
127
|
+
|
128
|
+
def dump_failures
|
129
|
+
end
|
130
|
+
|
131
|
+
def dump_pending
|
132
|
+
end
|
133
|
+
|
134
|
+
def dump_summary(duration, example_count, failure_count, pending_count)
|
135
|
+
# TODO - kill dry_run?
|
136
|
+
if dry_run?
|
137
|
+
totals = "This was a dry-run"
|
138
|
+
else
|
139
|
+
totals = "#{example_count} example#{'s' unless example_count == 1}, #{failure_count} failure#{'s' unless failure_count == 1}"
|
140
|
+
totals << ", #{pending_count} pending" if pending_count > 0
|
141
|
+
end
|
142
|
+
@output.puts "<script type=\"text/javascript\">document.getElementById('duration').innerHTML = \"Finished in <strong>#{duration} seconds</strong>\";</script>"
|
143
|
+
@output.puts "<script type=\"text/javascript\">document.getElementById('totals').innerHTML = \"#{totals}\";</script>"
|
144
|
+
@output.puts "</div>"
|
145
|
+
@output.puts "</div>"
|
146
|
+
@output.puts "</body>"
|
147
|
+
@output.puts "</html>"
|
148
|
+
@output.flush
|
149
|
+
end
|
150
|
+
|
151
|
+
def html_header
|
152
|
+
<<-EOF
|
153
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
154
|
+
<!DOCTYPE html
|
155
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
156
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
157
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
158
|
+
<head>
|
159
|
+
<title>RSpec results</title>
|
160
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
161
|
+
<meta http-equiv="Expires" content="-1" />
|
162
|
+
<meta http-equiv="Pragma" content="no-cache" />
|
163
|
+
<style type="text/css">
|
164
|
+
body {
|
165
|
+
margin: 0;
|
166
|
+
padding: 0;
|
167
|
+
background: #fff;
|
168
|
+
font-size: 80%;
|
169
|
+
}
|
170
|
+
</style>
|
171
|
+
<script type="text/javascript">
|
172
|
+
// <![CDATA[
|
173
|
+
#{global_scripts}
|
174
|
+
// ]]>
|
175
|
+
</script>
|
176
|
+
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
|
177
|
+
<script type="text/javascript">
|
178
|
+
// <![CDATA[
|
179
|
+
#{jquery_scripts}
|
180
|
+
// ]]>
|
181
|
+
</script>
|
182
|
+
<style type="text/css">
|
183
|
+
#{global_styles}
|
184
|
+
</style>
|
185
|
+
</head>
|
186
|
+
<body>
|
187
|
+
EOF
|
188
|
+
end
|
189
|
+
|
190
|
+
def report_header
|
191
|
+
<<-EOF
|
192
|
+
<div class="rspec-report">
|
193
|
+
|
194
|
+
<div id="rspec-header">
|
195
|
+
<div id="label">
|
196
|
+
<h1>RSpec Code Examples</h1>
|
197
|
+
</div>
|
198
|
+
|
199
|
+
<div id="summary">
|
200
|
+
<p id="totals"> </p>
|
201
|
+
<p id="duration"> </p>
|
202
|
+
</div>
|
203
|
+
</div>
|
204
|
+
|
205
|
+
<div class="results">
|
206
|
+
<a id="toogle" href="#">Collapse</a>
|
207
|
+
EOF
|
208
|
+
end
|
209
|
+
|
210
|
+
def jquery_scripts
|
211
|
+
<<-EOF
|
212
|
+
var pare = 0;
|
213
|
+
|
214
|
+
function changeClass(selector) {
|
215
|
+
var str = "#" + selector;
|
216
|
+
$(str).addClass("last");
|
217
|
+
}
|
218
|
+
|
219
|
+
function addParentKey(index) {
|
220
|
+
var sel = "#example_group_" + index ;
|
221
|
+
var b = $(sel).attr("class");
|
222
|
+
if (b != "last"){
|
223
|
+
$(sel).parentsUntil("div.results").last().attr("class","example_group_" + pare.toString());
|
224
|
+
pare = pare + 1;
|
225
|
+
}
|
226
|
+
}
|
227
|
+
|
228
|
+
function findLastId(){
|
229
|
+
var i = $("dt[id*='example_group']").last().attr("id").split("_")[2];
|
230
|
+
return i;
|
231
|
+
}
|
232
|
+
|
233
|
+
$(document).ready(function(){
|
234
|
+
$(".last").toggle(
|
235
|
+
function () {
|
236
|
+
$(this).siblings().hide();
|
237
|
+
},
|
238
|
+
function () {
|
239
|
+
$(this).siblings().show();
|
240
|
+
}
|
241
|
+
);
|
242
|
+
|
243
|
+
$("dt[id*='example_group_'][class!='last']").toggle(
|
244
|
+
function () {
|
245
|
+
$(this).parent().parent().nextUntil("div[class*=example_group_]").hide();
|
246
|
+
},
|
247
|
+
function () {
|
248
|
+
$(this).parent().parent().nextUntil("div[class*=example_group_]").show();
|
249
|
+
}
|
250
|
+
);
|
251
|
+
|
252
|
+
var last = parseInt(findLastId());
|
253
|
+
for(i=1;i<last+1;i++){
|
254
|
+
addParentKey(i);
|
255
|
+
}
|
256
|
+
|
257
|
+
$("#toogle").toggle(
|
258
|
+
function(e){
|
259
|
+
e.preventDefault();
|
260
|
+
$(this).html("Expand");
|
261
|
+
$("dt[id*='example_group_']").trigger("click");
|
262
|
+
},
|
263
|
+
function(e){
|
264
|
+
e.preventDefault();
|
265
|
+
$(this).html("Collapse");
|
266
|
+
$("dt[id*='example_group_']").trigger("click");
|
267
|
+
}
|
268
|
+
);
|
269
|
+
})
|
270
|
+
EOF
|
271
|
+
end
|
272
|
+
|
273
|
+
def global_scripts
|
274
|
+
<<-EOF
|
275
|
+
function moveProgressBar(percentDone) {
|
276
|
+
document.getElementById("rspec-header").style.width = percentDone +"%";
|
277
|
+
}
|
278
|
+
function makeRed(element_id) {
|
279
|
+
document.getElementById(element_id).style.background = '#C40D0D';
|
280
|
+
document.getElementById(element_id).style.color = '#FFFFFF';
|
281
|
+
}
|
282
|
+
|
283
|
+
function makeYellow(element_id) {
|
284
|
+
if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D')
|
285
|
+
{
|
286
|
+
document.getElementById(element_id).style.background = '#FAF834';
|
287
|
+
document.getElementById(element_id).style.color = '#000000';
|
288
|
+
}
|
289
|
+
else
|
290
|
+
{
|
291
|
+
document.getElementById(element_id).style.background = '#FAF834';
|
292
|
+
document.getElementById(element_id).style.color = '#000000';
|
293
|
+
}
|
294
|
+
}
|
295
|
+
EOF
|
296
|
+
end
|
297
|
+
|
298
|
+
def global_styles
|
299
|
+
<<-EOF
|
300
|
+
#rspec-header {
|
301
|
+
background: #65C400; color: #fff; height: 4em;
|
302
|
+
}
|
303
|
+
|
304
|
+
.rspec-report h1 {
|
305
|
+
margin: 0px 10px 0px 10px;
|
306
|
+
padding: 10px;
|
307
|
+
font-family: "Lucida Grande", Helvetica, sans-serif;
|
308
|
+
font-size: 1.8em;
|
309
|
+
position: absolute;
|
310
|
+
}
|
311
|
+
|
312
|
+
#summary {
|
313
|
+
margin: 0; padding: 5px 10px;
|
314
|
+
font-family: "Lucida Grande", Helvetica, sans-serif;
|
315
|
+
text-align: right;
|
316
|
+
top: 0px;
|
317
|
+
right: 0px;
|
318
|
+
float:right;
|
319
|
+
}
|
320
|
+
|
321
|
+
#summary p {
|
322
|
+
margin: 0 0 0 2px;
|
323
|
+
}
|
324
|
+
|
325
|
+
#summary #totals {
|
326
|
+
font-size: 1.2em;
|
327
|
+
}
|
328
|
+
|
329
|
+
.example_group {
|
330
|
+
margin: 0 10px 5px;
|
331
|
+
background: #fff;
|
332
|
+
}
|
333
|
+
|
334
|
+
dl {
|
335
|
+
margin: 0; padding: 0 0 5px;
|
336
|
+
font: normal 11px "Lucida Grande", Helvetica, sans-serif;
|
337
|
+
}
|
338
|
+
|
339
|
+
dt {
|
340
|
+
padding: 3px;
|
341
|
+
background: #65C400;
|
342
|
+
color: #fff;
|
343
|
+
font-weight: bold;
|
344
|
+
}
|
345
|
+
|
346
|
+
dt.last {
|
347
|
+
margin-left: 10px;
|
348
|
+
}
|
349
|
+
|
350
|
+
dd {
|
351
|
+
margin: 5px 0 5px 25px;
|
352
|
+
padding: 3px 3px 3px 18px;
|
353
|
+
}
|
354
|
+
|
355
|
+
dd.spec.passed {
|
356
|
+
border-left: 5px solid #65C400;
|
357
|
+
border-bottom: 1px solid #65C400;
|
358
|
+
background: #DBFFB4; color: #3D7700;
|
359
|
+
}
|
360
|
+
|
361
|
+
dd.spec.failed {
|
362
|
+
border-left: 5px solid #C20000;
|
363
|
+
border-bottom: 1px solid #C20000;
|
364
|
+
color: #C20000; background: #FFFBD3;
|
365
|
+
}
|
366
|
+
|
367
|
+
dd.spec.not_implemented {
|
368
|
+
border-left: 5px solid #FAF834;
|
369
|
+
border-bottom: 1px solid #FAF834;
|
370
|
+
background: #FCFB98; color: #131313;
|
371
|
+
}
|
372
|
+
|
373
|
+
dd.spec.pending_fixed {
|
374
|
+
border-left: 5px solid #0000C2;
|
375
|
+
border-bottom: 1px solid #0000C2;
|
376
|
+
color: #0000C2; background: #D3FBFF;
|
377
|
+
}
|
378
|
+
|
379
|
+
.backtrace {
|
380
|
+
color: #000;
|
381
|
+
font-size: 12px;
|
382
|
+
}
|
383
|
+
|
384
|
+
a {
|
385
|
+
color: #BE5C00;
|
386
|
+
}
|
387
|
+
|
388
|
+
/* Ruby code, style similar to vibrant ink */
|
389
|
+
.ruby {
|
390
|
+
font-size: 12px;
|
391
|
+
font-family: monospace;
|
392
|
+
color: white;
|
393
|
+
background-color: black;
|
394
|
+
padding: 0.1em 0 0.2em 0;
|
395
|
+
}
|
396
|
+
|
397
|
+
.ruby .keyword { color: #FF6600; }
|
398
|
+
.ruby .constant { color: #339999; }
|
399
|
+
.ruby .attribute { color: white; }
|
400
|
+
.ruby .global { color: white; }
|
401
|
+
.ruby .module { color: white; }
|
402
|
+
.ruby .class { color: white; }
|
403
|
+
.ruby .string { color: #66FF00; }
|
404
|
+
.ruby .ident { color: white; }
|
405
|
+
.ruby .method { color: #FFCC00; }
|
406
|
+
.ruby .number { color: white; }
|
407
|
+
.ruby .char { color: white; }
|
408
|
+
.ruby .comment { color: #9933CC; }
|
409
|
+
.ruby .symbol { color: white; }
|
410
|
+
.ruby .regex { color: #44B4CC; }
|
411
|
+
.ruby .punct { color: white; }
|
412
|
+
.ruby .escape { color: white; }
|
413
|
+
.ruby .interp { color: white; }
|
414
|
+
.ruby .expr { color: white; }
|
415
|
+
|
416
|
+
.ruby .offending { background-color: gray; }
|
417
|
+
.ruby .linenum {
|
418
|
+
width: 75px;
|
419
|
+
padding: 0.1em 1em 0.2em 0;
|
420
|
+
color: #000000;
|
421
|
+
background-color: #FFFBD3;
|
422
|
+
}
|
423
|
+
EOF
|
424
|
+
end
|
425
|
+
end
|
426
|
+
end
|
427
|
+
end
|
428
|
+
end
|
data/spektacular.gemspec
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{spektacular}
|
8
|
+
s.version = "0.0.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["damselem"]
|
12
|
+
s.date = %q{2010-09-22}
|
13
|
+
s.description = %q{An improved HTML RSpec formatter}
|
14
|
+
s.email = %q{damselem@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"LICENSE",
|
23
|
+
"README.rdoc",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"lib/spektacular.rb",
|
27
|
+
"spektacular.gemspec",
|
28
|
+
"test/helper.rb",
|
29
|
+
"test/test_spektacular.rb"
|
30
|
+
]
|
31
|
+
s.homepage = %q{http://github.com/damselem/spektacular}
|
32
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
33
|
+
s.require_paths = ["lib"]
|
34
|
+
s.rubygems_version = %q{1.3.7}
|
35
|
+
s.summary = %q{RSpec formatter}
|
36
|
+
s.test_files = [
|
37
|
+
"test/helper.rb",
|
38
|
+
"test/test_spektacular.rb"
|
39
|
+
]
|
40
|
+
|
41
|
+
if s.respond_to? :specification_version then
|
42
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
43
|
+
s.specification_version = 3
|
44
|
+
|
45
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
46
|
+
else
|
47
|
+
end
|
48
|
+
else
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
data/test/helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: spektacular
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- damselem
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-09-22 00:00:00 +02:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: An improved HTML RSpec formatter
|
22
|
+
email: damselem@gmail.com
|
23
|
+
executables: []
|
24
|
+
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files:
|
28
|
+
- LICENSE
|
29
|
+
- README.rdoc
|
30
|
+
files:
|
31
|
+
- .document
|
32
|
+
- .gitignore
|
33
|
+
- LICENSE
|
34
|
+
- README.rdoc
|
35
|
+
- Rakefile
|
36
|
+
- VERSION
|
37
|
+
- lib/spektacular.rb
|
38
|
+
- spektacular.gemspec
|
39
|
+
- test/helper.rb
|
40
|
+
- test/test_spektacular.rb
|
41
|
+
has_rdoc: true
|
42
|
+
homepage: http://github.com/damselem/spektacular
|
43
|
+
licenses: []
|
44
|
+
|
45
|
+
post_install_message:
|
46
|
+
rdoc_options:
|
47
|
+
- --charset=UTF-8
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 0
|
57
|
+
version: "0"
|
58
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
version: "0"
|
66
|
+
requirements: []
|
67
|
+
|
68
|
+
rubyforge_project:
|
69
|
+
rubygems_version: 1.3.7
|
70
|
+
signing_key:
|
71
|
+
specification_version: 3
|
72
|
+
summary: RSpec formatter
|
73
|
+
test_files:
|
74
|
+
- test/helper.rb
|
75
|
+
- test/test_spektacular.rb
|