benchmeth 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -6,23 +6,32 @@ The super easy way to benchmark methods.
6
6
  gem "benchmeth"
7
7
  ```
8
8
 
9
- Just say which methods to benchmark and what you'd like to do with the results.
9
+ Just say which methods to benchmark.
10
10
 
11
11
  ```ruby
12
12
  def compute
13
- puts "CRUNCH!!"
13
+ sleep(1)
14
14
  end
15
15
 
16
- benchmeth :compute do |method_name, realtime|
17
- puts "%s : %.2f ms" % [method_name, realtime * 1000]
18
- # Or log them.
19
- end
16
+ benchmark :compute
20
17
 
21
18
  compute
19
+ ```
20
+
21
+ By default, benchmark data is written to STDOUT
22
+
23
+ ```
24
+ compute : 1000 ms
25
+ ```
26
+
27
+ but you can easily do whatever you want with it.
22
28
 
23
- # Output:
24
- # CRUNCH!!
25
- # compute : 0.09 ms
29
+ ```ruby
30
+ Benchmeth.on_benchmark do |method, realtime|
31
+ logger.info "#{method} took #{realtime} seconds!"
32
+ # The default is:
33
+ # puts "%s : %d ms" % [method, realtime * 1000]
34
+ end
26
35
  ```
27
36
 
28
37
  To call a method without benchmarking, use:
@@ -47,11 +56,20 @@ class Person
47
56
  end
48
57
 
49
58
  # This must come after the methods are defined.
50
- benchmeth :work, :play do |method_name, realtime|
51
- puts "%s : %.2f ms" % [method_name, realtime * 1000]
52
- end
59
+ benchmark :work, :play
53
60
 
54
61
  end
62
+
63
+ person = Person.new
64
+ person.work(1)
65
+ person.play
66
+ ```
67
+
68
+ Like rdoc, instance methods are denoted with a pound sign (#).
69
+
70
+ ```
71
+ Person#work : 1000 ms
72
+ Person#play : 500 ms
55
73
  ```
56
74
 
57
75
  ## Class Methods
@@ -59,15 +77,21 @@ end
59
77
  ```ruby
60
78
  class Person
61
79
 
62
- def self.count
63
- 2
80
+ def self.find(id)
81
+ puts "Found person #{id}!"
64
82
  end
65
83
 
66
84
  class << self
67
- benchmeth :count do |method_name, realtime|
68
- puts "%s : %.2f ms" % [method_name, realtime * 1000]
69
- end
85
+ benchmark :find
70
86
  end
71
87
 
72
88
  end
89
+
90
+ Person.find(1)
91
+ ```
92
+
93
+ Like rdoc, class methods are denoted with a dot (.).
94
+
95
+ ```
96
+ Person.find : 0 ms
73
97
  ```
data/lib/benchmeth.rb CHANGED
@@ -1,23 +1,49 @@
1
1
  require "benchmeth/version"
2
2
  require "benchmark"
3
3
 
4
+ # :( Global
5
+ $benchmeth_main = self
6
+
4
7
  module Benchmeth
8
+ DEFAULT_BLOCK = lambda do |method, realtime|
9
+ puts "%s : %d ms" % [method, realtime * 1000]
10
+ end
5
11
 
6
12
  def self.included(base)
7
13
  base.send :extend, ClassMethods
8
14
  base.send :include, InstanceMethods
9
15
  end
10
16
 
17
+ def self.on_benchmark(&block)
18
+ if block_given?
19
+ @on_benchmark_block = block
20
+ else
21
+ @on_benchmark_block || DEFAULT_BLOCK
22
+ end
23
+ end
24
+
11
25
  module ClassMethods
12
26
 
13
- def benchmeth(*method_names, &block)
27
+ def benchmark(*method_names)
14
28
  method_names.each do |method_name|
15
29
  method_name = method_name.to_sym
16
30
  self.send :alias_method, :"#{method_name}_without_benchmark", method_name
17
31
  self.send :define_method, method_name do |*args|
18
32
  result = nil
19
- realtime = Benchmark.realtime { result = self.send(:"#{method_name}_without_benchmark", *args) }
20
- block.call(method_name, realtime)
33
+ method_prefix = nil
34
+ realtime = Benchmark.realtime do
35
+ result = self.send(:"#{method_name}_without_benchmark", *args)
36
+ method_prefix =
37
+ case self
38
+ when $benchmeth_main
39
+ ""
40
+ when Class
41
+ "#{self.name}."
42
+ else
43
+ "#{self.class.name}#"
44
+ end
45
+ end
46
+ Benchmeth.on_benchmark.call("#{method_prefix}#{method_name}", realtime)
21
47
  result
22
48
  end
23
49
  end
@@ -27,8 +53,8 @@ module Benchmeth
27
53
 
28
54
  module InstanceMethods
29
55
 
30
- def benchmeth(*method_names, &block)
31
- self.class.benchmeth(*method_names, &block)
56
+ def benchmark(*method_names, &block)
57
+ self.class.benchmark(*method_names, &block)
32
58
  end
33
59
 
34
60
  end
@@ -1,3 +1,3 @@
1
1
  module Benchmeth
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: benchmeth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: