ru-slow 0.0.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +24 -8
- data/lib/ru-slow.rb +75 -1
- data/lib/ru-slow/kernel.rb +33 -0
- data/lib/ru-slow/version.rb +1 -1
- data/ru-slow.gemspec +1 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1962a2d99ee07c1e7a6ecce47f8323d26adc867
|
4
|
+
data.tar.gz: 67c54554493d1926262bc584985f22cabfc23405
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4ea3b0f80494d451105b4b39a042891d68dc5d51156dcd146195e790a5a2be899b9b6e7d487d1846bc8b16a62bc9daf931c4b5f9fe7b2b4799f7bea9182b741
|
7
|
+
data.tar.gz: 03af3edefd7b79039cc8d4588f65ecedd582a0a41680e1ed6cecc4f0bf0b67a37443f3b23e62004e6e298ff4091076140823ac1f91bfcc09fe1dfdd5900f790f
|
data/README.md
CHANGED
@@ -17,14 +17,6 @@ Add this line to your application's Gemfile:
|
|
17
17
|
gem 'ru-slow'
|
18
18
|
```
|
19
19
|
|
20
|
-
And then execute:
|
21
|
-
|
22
|
-
$ bundle
|
23
|
-
|
24
|
-
Or install it yourself as:
|
25
|
-
|
26
|
-
$ gem install ru-slow
|
27
|
-
|
28
20
|
|
29
21
|
Usage
|
30
22
|
-----
|
@@ -34,6 +26,9 @@ Require the file at the very top of your application:
|
|
34
26
|
require 'ru-slow'
|
35
27
|
```
|
36
28
|
|
29
|
+
You **must** have a `Gemfile` in the root of your project in order for
|
30
|
+
ru-slow to find the correct project directory.
|
31
|
+
|
37
32
|
|
38
33
|
Contributing
|
39
34
|
------------
|
@@ -42,3 +37,24 @@ Contributing
|
|
42
37
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
43
38
|
4. Push to the branch (`git push origin my-new-feature`)
|
44
39
|
5. Create new Pull Request
|
40
|
+
|
41
|
+
|
42
|
+
License & Authors
|
43
|
+
-----------------
|
44
|
+
- Seth Vargo (sethvargo@gmail.com)
|
45
|
+
|
46
|
+
```text
|
47
|
+
Copyright 2013, Seth Vargo <sethvargo@gmail.com>
|
48
|
+
|
49
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
50
|
+
you may not use this file except in compliance with the License.
|
51
|
+
You may obtain a copy of the License at
|
52
|
+
|
53
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
54
|
+
|
55
|
+
Unless required by applicable law or agreed to in writing, software
|
56
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
57
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
58
|
+
See the License for the specific language governing permissions and
|
59
|
+
limitations under the License.
|
60
|
+
```
|
data/lib/ru-slow.rb
CHANGED
@@ -1,4 +1,78 @@
|
|
1
|
-
require '
|
1
|
+
require 'benchmark'
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
require 'ru-slow/kernel'
|
2
5
|
|
3
6
|
module RuSlow
|
7
|
+
extend self
|
8
|
+
|
9
|
+
attr_accessor :root
|
10
|
+
|
11
|
+
#
|
12
|
+
# Add a new call to the profiler.
|
13
|
+
#
|
14
|
+
# @param [String] name
|
15
|
+
# the name of the thing to benchmark (like a label)
|
16
|
+
# @param [Benchmark] result
|
17
|
+
# the result of the benchmark
|
18
|
+
#
|
19
|
+
# @return [Boolean]
|
20
|
+
# true if the benchmark was added, false if the benchmark already
|
21
|
+
# exists
|
22
|
+
#
|
23
|
+
def add(name, result)
|
24
|
+
if profiler.has_key?(name)
|
25
|
+
false
|
26
|
+
else
|
27
|
+
line = caller[1].split(' ', 2).first[0..-4]
|
28
|
+
|
29
|
+
if line.include?(root)
|
30
|
+
profiler[name] = result
|
31
|
+
true
|
32
|
+
else
|
33
|
+
false
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
#
|
39
|
+
# Generate the report.
|
40
|
+
#
|
41
|
+
def report!
|
42
|
+
by_time = profiler.sort_by { |_, t| -t.total }
|
43
|
+
padding = by_time.map(&:first).group_by(&:size).max.last.first.length
|
44
|
+
|
45
|
+
puts "\n"*3
|
46
|
+
puts "Label".ljust(padding) + ' Real'
|
47
|
+
puts '-'*padding + '---------'
|
48
|
+
|
49
|
+
by_time.each do |label, benchmark|
|
50
|
+
puts label.ljust(padding) + ' ' + benchmark.real.to_s
|
51
|
+
end
|
52
|
+
rescue => e
|
53
|
+
Kernel.warn "There was an error running the report: #{e.message}"
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
# @return [Hash]
|
59
|
+
def profiler
|
60
|
+
@profiler ||= {}
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
#
|
65
|
+
# Calculate the calling lib path when ru-slow is required.
|
66
|
+
#
|
67
|
+
kaller = Pathname.new(caller.last.split(':', 2).first).expand_path
|
68
|
+
root = nil
|
69
|
+
kaller.ascend do |dir|
|
70
|
+
path = dir.join('Gemfile')
|
71
|
+
|
72
|
+
if path.exist?
|
73
|
+
root = dir.to_s
|
74
|
+
break
|
75
|
+
end
|
4
76
|
end
|
77
|
+
|
78
|
+
RuSlow.root = root
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Kernel
|
2
|
+
alias_method :old_require, :require
|
3
|
+
def require(name)
|
4
|
+
# Don't benchmark requires outside of this project
|
5
|
+
return old_require(name) if name.start_with?('/')
|
6
|
+
|
7
|
+
# Store a local variable for the result of the benchmark, so the original
|
8
|
+
# method can return true/false as it would have.
|
9
|
+
old_result = false
|
10
|
+
|
11
|
+
# Profile the result
|
12
|
+
RuSlow.add("require '#{name}'", Benchmark.measure { old_result = old_require(name) })
|
13
|
+
|
14
|
+
# Return the original result
|
15
|
+
return old_result
|
16
|
+
end
|
17
|
+
|
18
|
+
alias_method :old_load, :load
|
19
|
+
def load(name, wrap = false)
|
20
|
+
# Don't benchmark requires outside of this project
|
21
|
+
return old_load(name) if name.start_with?('/')
|
22
|
+
|
23
|
+
# Profile the result
|
24
|
+
RuSlow.add("load '#{name}'", Benchmark.measure { old_load(name, wrap) })
|
25
|
+
|
26
|
+
# ALways return true
|
27
|
+
return true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
Kernel.at_exit do
|
32
|
+
RuSlow.report!
|
33
|
+
end
|
data/lib/ru-slow/version.rb
CHANGED
data/ru-slow.gemspec
CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
20
|
spec.require_paths = ['lib']
|
21
21
|
|
22
|
+
# Development dependencies
|
22
23
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
23
24
|
spec.add_development_dependency 'rake', '~> 10.1'
|
24
25
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ru-slow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Seth Vargo
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- README.md
|
53
53
|
- Rakefile
|
54
54
|
- lib/ru-slow.rb
|
55
|
+
- lib/ru-slow/kernel.rb
|
55
56
|
- lib/ru-slow/version.rb
|
56
57
|
- ru-slow.gemspec
|
57
58
|
homepage: https://github.com/sethvargo/ru-slow
|