benchmeth 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,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in benchmeth.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,73 @@
1
+ # Benchmeth
2
+
3
+ The super easy way to benchmark methods.
4
+
5
+ ```ruby
6
+ gem "benchmeth"
7
+ ```
8
+
9
+ Just say which methods to benchmark and what you'd like to do with the results.
10
+
11
+ ```ruby
12
+ def compute
13
+ puts "CRUNCH!!"
14
+ end
15
+
16
+ benchmeth :compute do |method_name, realtime|
17
+ puts "%s : %.2f ms" % [method_name, realtime * 1000]
18
+ # Or log them.
19
+ end
20
+
21
+ compute
22
+
23
+ # Output:
24
+ # CRUNCH!!
25
+ # compute : 0.09 ms
26
+ ```
27
+
28
+ To call a method without benchmarking, use:
29
+
30
+ ```ruby
31
+ compute_without_benchmark
32
+ ```
33
+
34
+ ## Instance Methods
35
+
36
+ ```ruby
37
+ class Person
38
+
39
+ def work(seconds)
40
+ puts "Working for #{seconds} seconds"
41
+ sleep(seconds)
42
+ end
43
+
44
+ def play
45
+ puts "Time to play!"
46
+ sleep(rand * 4)
47
+ end
48
+
49
+ # 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
53
+
54
+ end
55
+ ```
56
+
57
+ ## Class Methods
58
+
59
+ ```ruby
60
+ class Person
61
+
62
+ def self.count
63
+ 2
64
+ end
65
+
66
+ class << self
67
+ benchmeth :count do |method_name, realtime|
68
+ puts "%s : %.2f ms" % [method_name, realtime * 1000]
69
+ end
70
+ end
71
+
72
+ end
73
+ ```
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
data/benchmeth.gemspec ADDED
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/benchmeth/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Andrew Kane"]
6
+ gem.email = ["andrew@getformidable.com"]
7
+ gem.description = %q{The super easy way to benchmark methods}
8
+ gem.summary = %q{The super easy way to benchmark methods}
9
+ gem.homepage = "https://github.com/ankane/benchmeth"
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "benchmeth"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Benchmeth::VERSION
17
+ end
data/lib/benchmeth.rb ADDED
@@ -0,0 +1,38 @@
1
+ require "benchmeth/version"
2
+ require "benchmark"
3
+
4
+ module Benchmeth
5
+
6
+ def self.included(base)
7
+ base.send :extend, ClassMethods
8
+ base.send :include, InstanceMethods
9
+ end
10
+
11
+ module ClassMethods
12
+
13
+ def benchmeth(*method_names, &block)
14
+ method_names.each do |method_name|
15
+ method_name = method_name.to_sym
16
+ self.send :alias_method, :"#{method_name}_without_benchmark", method_name
17
+ self.send :define_method, method_name do |*args|
18
+ result = nil
19
+ realtime = Benchmark.realtime { result = self.send(:"#{method_name}_without_benchmark", *args) }
20
+ block.call(method_name, realtime)
21
+ result
22
+ end
23
+ end
24
+ end
25
+
26
+ end
27
+
28
+ module InstanceMethods
29
+
30
+ def benchmeth(*method_names, &block)
31
+ self.class.benchmeth(*method_names, &block)
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
38
+ Object.send :include, Benchmeth
@@ -0,0 +1,3 @@
1
+ module Benchmeth
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,52 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: benchmeth
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Andrew Kane
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-10-14 00:00:00.000000000Z
13
+ dependencies: []
14
+ description: The super easy way to benchmark methods
15
+ email:
16
+ - andrew@getformidable.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - README.md
24
+ - Rakefile
25
+ - benchmeth.gemspec
26
+ - lib/benchmeth.rb
27
+ - lib/benchmeth/version.rb
28
+ homepage: https://github.com/ankane/benchmeth
29
+ licenses: []
30
+ post_install_message:
31
+ rdoc_options: []
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ requirements: []
47
+ rubyforge_project:
48
+ rubygems_version: 1.8.10
49
+ signing_key:
50
+ specification_version: 3
51
+ summary: The super easy way to benchmark methods
52
+ test_files: []