boot_polish 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/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ .yardoc
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
data/.pairs ADDED
@@ -0,0 +1,21 @@
1
+ pairs:
2
+ bw: Brent Wheeldon; brent
3
+ co: Cathy O'Connell; cathy
4
+ nm: Nick Monje; nmonje
5
+ eg: Evan Goodberry; egoodberry
6
+ bm: Ben Moss; bmoss
7
+ ck: Chien Kuo; ckuo
8
+ ec: Edwin Chong; echong
9
+ ab: Adam Berlin; aberlin
10
+ ra: Rasheed Abdul-Aziz; rabdulaziz
11
+ rm: Ryan McGarvey; ryan
12
+ jm: Johnny Mukai; johnny
13
+ js: James Somers; james
14
+ mt: Mark Thorn; mark
15
+ me: Maia Engeli; maia
16
+ mf: Michael Frederick; mike
17
+ gd: Geoffrey Ducharme; geoffrey
18
+ ak: Alex Kramer; alex
19
+ email:
20
+ prefix: pair
21
+ domain: pivotallabs.com
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ group :test do
4
+ gem 'rake'
5
+ end
6
+
7
+ # Specify your gem's dependencies in boot_polish.gemspec
8
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,40 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ boot_polish (0.0.1)
5
+ rubytree
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ coderay (1.0.8)
11
+ diff-lcs (1.1.3)
12
+ json (1.7.6)
13
+ method_source (0.8.1)
14
+ pry (0.9.10)
15
+ coderay (~> 1.0.5)
16
+ method_source (~> 0.8)
17
+ slop (~> 3.3.1)
18
+ rake (10.0.3)
19
+ rspec (2.12.0)
20
+ rspec-core (~> 2.12.0)
21
+ rspec-expectations (~> 2.12.0)
22
+ rspec-mocks (~> 2.12.0)
23
+ rspec-core (2.12.2)
24
+ rspec-expectations (2.12.1)
25
+ diff-lcs (~> 1.1.3)
26
+ rspec-mocks (2.12.1)
27
+ rubytree (0.8.3)
28
+ json (>= 1.7.5)
29
+ structured_warnings (>= 0.1.3)
30
+ slop (3.3.3)
31
+ structured_warnings (0.1.3)
32
+
33
+ PLATFORMS
34
+ ruby
35
+
36
+ DEPENDENCIES
37
+ boot_polish!
38
+ pry
39
+ rake
40
+ rspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Rasheed Abdul-Aziz
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,60 @@
1
+ # BootPolish
2
+
3
+ [![Build Status](https://travis-ci.org/zephyr-dev/boot_polish.png)](https://travis-ci.org/zephyr-dev/boot_polish)
4
+
5
+ Boot time introspection to help you get under the heroku 60 second timeout.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem 'boot_polish'
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install boot_polish
20
+
21
+ ## Usage
22
+
23
+ Add the following line to your 'config/boot.rb' right after the require 'rubygems'
24
+
25
+ require 'boot_polish'
26
+
27
+ I personally wrap it in a guard:
28
+
29
+ if ENV["BENCHMARK_REQUIRES"] && ENV["BENCHMARK_REQUIRES"] == 'true'
30
+ require 'boot_polish'
31
+ end
32
+
33
+ During startup, you'll see all the requires and their associated times.
34
+ The default renderer is leaf-first, where the very deepest require is shown first,
35
+ with each subsequent outdentation showing the aggregate time for the require and
36
+ its children.
37
+
38
+ For example:
39
+
40
+ 0.0020 for require c/4
41
+ 0.0187 for require c/3
42
+ 0.0009 for require c/2
43
+ 0.0002 for require c/1/z
44
+ 0.0015 for require c/1
45
+ 0.0250 for require c
46
+ 0.0002 for require b
47
+ 0.0002 for require a
48
+
49
+ 'a' and 'b' had no children requires
50
+ 'c' required c/1 (which required c/1/z), c/2, c/3 and c/4
51
+
52
+ 'c' had a time of 0.0250 which was a cumulative of it's time and all it's child requires.
53
+
54
+ ## Todo
55
+
56
+ * Make it possible to specify the renderer used by the require_benchmark
57
+ * Introduce some basic network logging (on socket)
58
+ * Introduce basic HTTP logging
59
+ * Introduce a plugin architecture for testing specific hogs (fog, postgress, etc)
60
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'boot_polish/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "boot_polish"
8
+ gem.version = BootPolish::VERSION
9
+ gem.authors = ["Rasheed Abdul-Aziz"]
10
+ gem.email = ["rasheed@pivotallabs.com"]
11
+ gem.description = %q{Boot time introspection to help you get under the heroku 60 second timeout.}
12
+ gem.summary = %q{Boot time introspection to help you get under the heroku 60 second timeout.}
13
+ gem.homepage = "https://github.com/zephyr-dev/boot_polish"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_dependency "rubytree"
21
+
22
+ gem.add_development_dependency "rspec"
23
+ gem.add_development_dependency "pry"
24
+ end
@@ -0,0 +1,10 @@
1
+ require 'boot_polish/base'
2
+ require 'boot_polish/nested_benchmark'
3
+ require 'boot_polish/default_renderer'
4
+
5
+ def require(file)
6
+ BootPolish::Base.require_benchmark.nest "require #{file}" do
7
+ super(file)
8
+ end
9
+ end
10
+
@@ -0,0 +1,9 @@
1
+ require 'boot_polish/nested_benchmark'
2
+
3
+ module BootPolish
4
+ class Base
5
+ def self.require_benchmark
6
+ @require_benchmark ||= NestedBenchmark.new
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,33 @@
1
+ module BootPolish
2
+ class DefaultRenderer
3
+
4
+ def initialize(output = nil)
5
+ @output = output || STDOUT
6
+ @indent = -1
7
+ end
8
+
9
+ def descend
10
+ @indent += 1
11
+ end
12
+
13
+ def exception(method, exception)
14
+ @output << "#{indent}#{method} raised #{exception.message}\n"
15
+ end
16
+
17
+ def benchmark method, time
18
+ @output << format("#{indent}%.4f for #{method}\n", time.real)
19
+ end
20
+
21
+ def ascend
22
+ @indent -= 1
23
+ end
24
+
25
+ private
26
+
27
+ def indent
28
+ " " * @indent
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,48 @@
1
+ require 'benchmark'
2
+
3
+ module BootPolish
4
+ class NestedBenchmark
5
+
6
+ attr_accessor :visitor
7
+
8
+ def initialize(visitor = nil)
9
+ @visitor = visitor || DefaultRenderer.new
10
+ end
11
+
12
+ def nest method, &block
13
+ result = nil
14
+
15
+ before_call
16
+
17
+ time_to_run = Benchmark.measure do
18
+ begin
19
+ result = yield
20
+ rescue Exception => e
21
+ after_call(method, nil, e)
22
+ raise e
23
+ end
24
+ end
25
+
26
+ after_call(method, time_to_run)
27
+
28
+ result
29
+ end
30
+
31
+ private
32
+
33
+ def before_call
34
+ @visitor.descend
35
+ end
36
+
37
+ def after_call(method, time_to_run, exception = nil)
38
+ if exception
39
+ @visitor.exception(method, exception)
40
+ else
41
+ @visitor.benchmark(method, time_to_run)
42
+ end
43
+
44
+ @visitor.ascend
45
+ end
46
+
47
+ end
48
+ end
@@ -0,0 +1,49 @@
1
+ require 'tree'
2
+ module BootPolish
3
+ class TreeRenderer
4
+
5
+ def initialize(output = nil)
6
+ @output = output || STDOUT
7
+ @tree = Tree::TreeNode.new("ROOT", "Root Content")
8
+ @current_node = @tree
9
+ end
10
+
11
+ def descend
12
+ new_node = Tree::TreeNode.new("node-#{@current_node.level}-#{@current_node.children.count}")
13
+ @current_node << new_node
14
+ @current_node = new_node
15
+ end
16
+
17
+ def exception(method, exception)
18
+ @current_node.content = { method: method, exception: exception }
19
+ end
20
+
21
+ def benchmark method, time
22
+ @current_node.content = { method: method, time: time }
23
+ end
24
+
25
+ def ascend
26
+ render(@current_node) if @current_node.parent.name == "ROOT"
27
+ @current_node = @current_node.parent
28
+ end
29
+ private
30
+
31
+ def render(current_node)
32
+ result = current_node.content
33
+ @output << " " * (current_node.level - 1)
34
+ if result[:exception]
35
+ @output << "#{result[:method]} raised exception: #{result[:exception].message}"
36
+ else
37
+ @output << format("%.4f for #{result[:method]}", result[:time].real)
38
+ end
39
+ @output << "\n"
40
+
41
+ current_node.children.each do |child|
42
+ render child
43
+ end
44
+ @output.flush
45
+ end
46
+
47
+ end
48
+
49
+ end
@@ -0,0 +1,3 @@
1
+ module BootPolish
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+ require 'boot_polish/base'
3
+
4
+ module BootPolish
5
+ describe Base do
6
+ describe ".require_benchmark" do
7
+ it "is memoized" do
8
+ BootPolish::Base.require_benchmark.should === BootPolish::Base.require_benchmark
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,54 @@
1
+ require "spec_helper"
2
+ require "boot_polish/default_renderer"
3
+
4
+ module BootPolish
5
+ describe DefaultRenderer do
6
+ describe "instance" do
7
+
8
+ let(:output) { double(:output) }
9
+ let(:time) { double(:time, real: 9.99) }
10
+ let(:renderer) { DefaultRenderer.new(output) }
11
+
12
+ describe "#benchmark" do
13
+ it "outputs the method and real time" do
14
+ output.should_receive(:<<).with(/(footle)+/)
15
+
16
+ renderer.descend
17
+ renderer.benchmark("footle", time)
18
+ renderer.ascend
19
+ end
20
+ end
21
+
22
+ describe "#exception" do
23
+ it "outputs the method and the error" do
24
+ output.should_receive(:<<).with(/(footle)+.*(dootle)+/)
25
+
26
+ renderer.descend
27
+ renderer.exception("footle", Exception.new("dootle"))
28
+ renderer.ascend
29
+ end
30
+ end
31
+
32
+ describe "#ascend and #descend" do
33
+ it "indents two spaces for each descend after the first" do
34
+ output.should_receive(:<<).with(/footle/).ordered
35
+ output.should_receive(:<<).with(/^ .*wankle/).ordered
36
+ output.should_receive(:<<).with(/spittle/).ordered
37
+
38
+ renderer.descend
39
+ renderer.benchmark("footle", time)
40
+ renderer.descend
41
+ renderer.benchmark("wankle", time)
42
+ renderer.ascend
43
+ renderer.ascend
44
+
45
+ renderer.descend
46
+ renderer.benchmark("spittle", time)
47
+ renderer.ascend
48
+ end
49
+
50
+ end
51
+ end
52
+ end
53
+ end
54
+
@@ -0,0 +1,60 @@
1
+ require "spec_helper"
2
+ require "boot_polish/nested_benchmark"
3
+
4
+ module BootPolish
5
+ describe NestedBenchmark do
6
+
7
+ describe "instance" do
8
+
9
+ let(:visitor) { double(:visitor, benchmark: nil, descend: nil, ascend: nil) }
10
+ let(:nested_benchmark) { NestedBenchmark.new( visitor ) }
11
+
12
+ describe "#visitor" do
13
+ context "is passed into new" do
14
+ it "is the same as the initalized value" do
15
+ nested_benchmark.visitor.should == visitor
16
+ end
17
+
18
+ it "can be changed" do
19
+ another_visitor = double(:another_visitor)
20
+ nested_benchmark.visitor = another_visitor
21
+ nested_benchmark.visitor.should == another_visitor
22
+ end
23
+ end
24
+
25
+ context "it is not passed into new" do
26
+ it "defaults to a new instance of DefaultRenderer" do
27
+ renderer = double(:renderer)
28
+ DefaultRenderer.should_receive(:new).and_return(renderer)
29
+
30
+ nested_benchmark = NestedBenchmark.new
31
+
32
+ nested_benchmark.visitor.should == renderer
33
+ end
34
+ end
35
+
36
+ end
37
+
38
+ describe "#nest" do
39
+ it "returns the blocks evaluated value" do
40
+ nested_benchmark.nest("holas") do
41
+ 77
42
+ end.should == 77
43
+ end
44
+ end
45
+
46
+ it "visits and yields in the correct order" do
47
+ block_content = double(:block_content)
48
+
49
+ visitor.should_receive(:descend).ordered
50
+ block_content.should_receive(:yield!).ordered
51
+ visitor.should_receive(:benchmark).with("Hi", kind_of(Benchmark::Tms)).ordered
52
+ visitor.should_receive(:ascend).ordered
53
+
54
+ nested_benchmark.nest("Hi") do
55
+ block_content.yield!
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,64 @@
1
+ require "spec_helper"
2
+ require "boot_polish/tree_renderer"
3
+
4
+ module BootPolish
5
+ describe TreeRenderer do
6
+ describe "instance" do
7
+
8
+ let(:output) { double(:output) }
9
+ let(:time) { double(:time, real: 9.99) }
10
+ let(:renderer) { TreeRenderer.new(output) }
11
+
12
+ before do
13
+ output.should_receive(:flush).any_number_of_times
14
+ output.should_receive(:<<).with("\n").any_number_of_times
15
+ end
16
+
17
+ describe "#benchmark" do
18
+ it "outputs the method and real time" do
19
+ output.should_receive(:<<).with(/(footle)+/)
20
+ output.should_receive(:<<).with(anything).any_number_of_times
21
+
22
+ renderer.descend
23
+ renderer.benchmark("footle", time)
24
+ renderer.ascend
25
+ end
26
+ end
27
+
28
+ describe "#exception" do
29
+ it "outputs the method and the error" do
30
+ output.should_receive(:<<).with(/(footle)+.*(dootle)+/)
31
+ output.should_receive(:<<).with(anything).any_number_of_times
32
+
33
+ renderer.descend
34
+ renderer.exception("footle", Exception.new("dootle"))
35
+ renderer.ascend
36
+ end
37
+ end
38
+
39
+ describe "#ascend and #descend" do
40
+ it "indents two spaces for each descend after the first" do
41
+ output.should_receive(:<<).with("").ordered
42
+ output.should_receive(:<<).with(/footle/).ordered
43
+ output.should_receive(:<<).with(" ").ordered
44
+ output.should_receive(:<<).with(/wankle/).ordered
45
+ output.should_receive(:<<).with("").ordered
46
+ output.should_receive(:<<).with(/spittle/).ordered
47
+
48
+ renderer.descend
49
+ renderer.benchmark("footle", time)
50
+ renderer.descend
51
+ renderer.benchmark("wankle", time)
52
+ renderer.ascend
53
+ renderer.ascend
54
+
55
+ renderer.descend
56
+ renderer.benchmark("spittle", time)
57
+ renderer.ascend
58
+ end
59
+
60
+ end
61
+ end
62
+ end
63
+ end
64
+
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+ require 'boot_polish'
3
+
4
+ describe "adding benchmarking aspects" do
5
+ describe ".require" do
6
+ it "benchmarks the require using require_benchmark.nest" do
7
+ benchmark = double(:benchmark)
8
+
9
+ benchmark.should_receive(:nest).
10
+ with("require fixtures/dummy.rb").
11
+ and_yield()
12
+
13
+ benchmark.should_receive(:nest).
14
+ any_number_of_times.
15
+ with(anything).
16
+ and_yield()
17
+
18
+
19
+ BootPolish::Base.should_receive(:require_benchmark).
20
+ any_number_of_times.
21
+ and_return(benchmark)
22
+
23
+ require('fixtures/dummy.rb').should be_true
24
+ end
25
+
26
+ end
27
+ end
File without changes
@@ -0,0 +1,10 @@
1
+ require 'rspec'
2
+ require 'pry'
3
+ $:.unshift File.expand_path('..', __FILE__)
4
+ $:.unshift File.expand_path('../../lib', __FILE__)
5
+
6
+ RSpec.configure do |config|
7
+ config.before(:each) do
8
+ @lib_dir = File.expand_path('../../lib', __FILE__)
9
+ end
10
+ end
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: boot_polish
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Rasheed Abdul-Aziz
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rubytree
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: pry
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ description: Boot time introspection to help you get under the heroku 60 second timeout.
63
+ email:
64
+ - rasheed@pivotallabs.com
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - .gitignore
70
+ - .pairs
71
+ - .travis.yml
72
+ - Gemfile
73
+ - Gemfile.lock
74
+ - LICENSE.txt
75
+ - README.md
76
+ - Rakefile
77
+ - boot_polish.gemspec
78
+ - lib/boot_polish.rb
79
+ - lib/boot_polish/base.rb
80
+ - lib/boot_polish/default_renderer.rb
81
+ - lib/boot_polish/nested_benchmark.rb
82
+ - lib/boot_polish/tree_renderer.rb
83
+ - lib/boot_polish/version.rb
84
+ - spec/boot_polish/base_spec.rb
85
+ - spec/boot_polish/default_renderer_spec.rb
86
+ - spec/boot_polish/nested_benchmark_spec.rb
87
+ - spec/boot_polish/tree_renderer_spec.rb
88
+ - spec/boot_polish_spec.rb
89
+ - spec/fixtures/dummy.rb
90
+ - spec/spec_helper.rb
91
+ homepage: https://github.com/zephyr-dev/boot_polish
92
+ licenses: []
93
+ post_install_message:
94
+ rdoc_options: []
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ segments:
104
+ - 0
105
+ hash: -3906148387546673340
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ segments:
113
+ - 0
114
+ hash: -3906148387546673340
115
+ requirements: []
116
+ rubyforge_project:
117
+ rubygems_version: 1.8.24
118
+ signing_key:
119
+ specification_version: 3
120
+ summary: Boot time introspection to help you get under the heroku 60 second timeout.
121
+ test_files:
122
+ - spec/boot_polish/base_spec.rb
123
+ - spec/boot_polish/default_renderer_spec.rb
124
+ - spec/boot_polish/nested_benchmark_spec.rb
125
+ - spec/boot_polish/tree_renderer_spec.rb
126
+ - spec/boot_polish_spec.rb
127
+ - spec/fixtures/dummy.rb
128
+ - spec/spec_helper.rb