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 ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
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
@@ -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">&nbsp;</p>
201
+ <p id="duration">&nbsp;</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
@@ -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
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'spektacular'
8
+
9
+ class Test::Unit::TestCase
10
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestSpektacular < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
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