benchmeth 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 06caf16f70d677e519ca32bb7c1074fd691435c0
4
- data.tar.gz: d2008e32f84b5027d3cccc740928aee6e1fdc333
2
+ SHA256:
3
+ metadata.gz: 02f90c97b8afdc34db17a600c5927231d4ca14cedb2680041952695789daa14c
4
+ data.tar.gz: 159e262d33720193f70d30cadb0d4ca6908894e87130ab4faeb70daa70c7b96e
5
5
  SHA512:
6
- metadata.gz: a2f7f3bf7f8d966ccb45814e77b8576fe308e96ff5e7b27e2e9de95ab17976a14b8b02631e6ed23673bd51a3a8d80225d33ea08f1ee5e196011f13ec38a26f3b
7
- data.tar.gz: 5f686662e3d458cf66e46d4345e2f1f8939755484086611544922c6e66d48373f2039e04b67ea4badb3a019da5616b1ddc8c3c54c1efd74d1a5d7d8bc73e7393
6
+ metadata.gz: b9ef7c3f9ade012da933b74ae7da18a696f7a6b9339191970ee43a78e295ee83563410c2e06bf6ea0d6b0b25727ff8fcbc85c9a1fcd9227b2c1325292703ac5e
7
+ data.tar.gz: c203a49b6235877692c839449d478838f25aaa6525d4f76fed4c22376d40fc674ec4dec720d7121e8883a15be77b2eba971b57cf32d377917556084884dfaa78
data/CHANGELOG.md CHANGED
@@ -1,7 +1,12 @@
1
- ## 0.1.1
1
+ ## 0.2.0 (2022-09-06)
2
+
3
+ - Use monotonic time
4
+ - Dropped support for Ruby < 2.7
5
+
6
+ ## 0.1.1 (2017-03-31)
2
7
 
3
8
  - Added `use_notifications` option
4
9
 
5
- ## 0.1.0
10
+ ## 0.1.0 (2011-10-14)
6
11
 
7
12
  - First release
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 Andrew Kane
1
+ Copyright (c) 2014-2022 Andrew Kane
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -29,7 +29,7 @@ end
29
29
  Add this line to your application’s Gemfile:
30
30
 
31
31
  ```ruby
32
- gem 'benchmeth'
32
+ gem "benchmeth"
33
33
  ```
34
34
 
35
35
  ## How to Use
@@ -50,9 +50,9 @@ end
50
50
 
51
51
  To call a method without benchmarking, append `_without_benchmark` to the name.
52
52
 
53
- ## ActiveSupport Notifications
53
+ ## Active Support Notifications
54
54
 
55
- You can switch to ActiveSupport notifications with:
55
+ You can switch to Active Support notifications with:
56
56
 
57
57
  ```ruby
58
58
  Benchmeth.use_notifications = true
@@ -61,7 +61,7 @@ Benchmeth.use_notifications = true
61
61
  And subscribe with:
62
62
 
63
63
  ```ruby
64
- ActiveSupport::Notifications.subscribe "benchmark.benchmeth" do |*args|
64
+ ActiveSupport::Notifications.monotonic_subscribe "benchmark.benchmeth" do |*args|
65
65
  event = ActiveSupport::Notifications::Event.new(*args)
66
66
  puts "%s : %d ms" % [event.payload[:name], event.duration]
67
67
  end
@@ -75,3 +75,12 @@ Everyone is encouraged to help improve this project. Here are a few ways you can
75
75
  - Fix bugs and [submit pull requests](https://github.com/ankane/benchmeth/pulls)
76
76
  - Write, clarify, or fix documentation
77
77
  - Suggest or add new features
78
+
79
+ To get started with development:
80
+
81
+ ```sh
82
+ git clone https://github.com/ankane/benchmeth.git
83
+ cd benchmeth
84
+ bundle install
85
+ bundle exec rake test
86
+ ```
@@ -1,3 +1,3 @@
1
1
  module Benchmeth
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/benchmeth.rb CHANGED
@@ -5,22 +5,25 @@ $benchmeth_main = self
5
5
 
6
6
  module Benchmeth
7
7
  class << self
8
- attr_accessor :use_notifications
8
+ attr_accessor :use_notifications, :on_benchmark_block
9
9
  end
10
10
  self.use_notifications = false
11
-
12
- DEFAULT_BLOCK = lambda do |method, realtime|
11
+ self.on_benchmark_block = lambda do |method, realtime|
13
12
  puts "%s : %d ms" % [method, realtime * 1000]
14
13
  end
15
14
 
16
15
  def self.on_benchmark(&block)
17
16
  if block_given?
18
- @on_benchmark_block = block
17
+ self.on_benchmark_block = block
19
18
  else
20
- @on_benchmark_block || DEFAULT_BLOCK
19
+ self.on_benchmark_block
21
20
  end
22
21
  end
23
22
 
23
+ def self.monotonic_time
24
+ Process.clock_gettime(Process::CLOCK_MONOTONIC)
25
+ end
26
+
24
27
  module ClassMethods
25
28
  def benchmark(*method_names)
26
29
  method_names.each do |method_name|
@@ -45,9 +48,9 @@ module Benchmeth
45
48
  send(:"#{method_name}_without_benchmark", *args, &block)
46
49
  end
47
50
  else
48
- start_time = Time.now
51
+ start_time = Benchmeth.monotonic_time
49
52
  result = send(:"#{method_name}_without_benchmark", *args, &block)
50
- realtime = Time.now - start_time
53
+ realtime = Benchmeth.monotonic_time - start_time
51
54
  Benchmeth.on_benchmark.call("#{method_prefix}#{method_name}", realtime)
52
55
  result
53
56
  end
@@ -64,4 +67,4 @@ module Benchmeth
64
67
  end
65
68
 
66
69
  Object.extend Benchmeth::ClassMethods
67
- Object.send :include, Benchmeth::InstanceMethods
70
+ Object.include Benchmeth::InstanceMethods
metadata CHANGED
@@ -1,94 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: benchmeth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-31 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: minitest
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: activesupport
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- description: The super easy way to benchmark methods
70
- email:
71
- - andrew@chartkick.com
11
+ date: 2022-09-06 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email: andrew@ankane.org
72
15
  executables: []
73
16
  extensions: []
74
17
  extra_rdoc_files: []
75
18
  files:
76
- - ".gitignore"
77
19
  - CHANGELOG.md
78
- - Gemfile
79
20
  - LICENSE.txt
80
21
  - README.md
81
- - Rakefile
82
- - benchmeth.gemspec
83
22
  - lib/benchmeth.rb
84
23
  - lib/benchmeth/version.rb
85
- - test/benchmeth_test.rb
86
- - test/test_helper.rb
87
24
  homepage: https://github.com/ankane/benchmeth
88
25
  licenses:
89
26
  - MIT
90
27
  metadata: {}
91
- post_install_message:
28
+ post_install_message:
92
29
  rdoc_options: []
93
30
  require_paths:
94
31
  - lib
@@ -96,18 +33,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
96
33
  requirements:
97
34
  - - ">="
98
35
  - !ruby/object:Gem::Version
99
- version: '0'
36
+ version: '2.7'
100
37
  required_rubygems_version: !ruby/object:Gem::Requirement
101
38
  requirements:
102
39
  - - ">="
103
40
  - !ruby/object:Gem::Version
104
41
  version: '0'
105
42
  requirements: []
106
- rubyforge_project:
107
- rubygems_version: 2.6.8
108
- signing_key:
43
+ rubygems_version: 3.3.7
44
+ signing_key:
109
45
  specification_version: 4
110
46
  summary: The super easy way to benchmark methods
111
- test_files:
112
- - test/benchmeth_test.rb
113
- - test/test_helper.rb
47
+ test_files: []
data/.gitignore DELETED
@@ -1,14 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- *.bundle
11
- *.so
12
- *.o
13
- *.a
14
- mkmf.log
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in benchmeth.gemspec
4
- gemspec
data/Rakefile DELETED
@@ -1,8 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
-
4
- task default: :test
5
- Rake::TestTask.new do |t|
6
- t.libs << "test"
7
- t.pattern = "test/**/*_test.rb"
8
- end
data/benchmeth.gemspec DELETED
@@ -1,25 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "benchmeth/version"
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "benchmeth"
8
- spec.version = Benchmeth::VERSION
9
- spec.authors = ["Andrew Kane"]
10
- spec.email = ["andrew@chartkick.com"]
11
- spec.summary = "The super easy way to benchmark methods"
12
- spec.description = "The super easy way to benchmark methods"
13
- spec.homepage = "https://github.com/ankane/benchmeth"
14
- spec.license = "MIT"
15
-
16
- spec.files = `git ls-files -z`.split("\x0")
17
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
20
-
21
- spec.add_development_dependency "bundler"
22
- spec.add_development_dependency "rake"
23
- spec.add_development_dependency "minitest"
24
- spec.add_development_dependency "activesupport"
25
- end
@@ -1,12 +0,0 @@
1
- require_relative "test_helper"
2
-
3
- class TestBenchmeth < Minitest::Test
4
- def test_instance_method
5
- car = Car.new
6
- car.boom(60)
7
- end
8
-
9
- def test_class_method
10
- Car.boom2
11
- end
12
- end
data/test/test_helper.rb DELETED
@@ -1,31 +0,0 @@
1
- require "bundler/setup"
2
- Bundler.require(:default)
3
- require "minitest/autorun"
4
- require "minitest/pride"
5
- require "active_support"
6
-
7
- class Car
8
- def start(speed)
9
- sleep(1)
10
- end
11
- benchmark :start
12
-
13
- def boom(speed)
14
- sleep(1)
15
- end
16
- benchmark :boom #, payload: -> (speed) { speed * 10000000 }
17
-
18
- def self.boom2
19
- sleep(1)
20
- end
21
- class << self
22
- benchmark :boom2
23
- end
24
- end
25
-
26
- ActiveSupport::Notifications.subscribe "benchmark.benchmeth" do |*args|
27
- event = ActiveSupport::Notifications::Event.new(*args)
28
- puts "[AS] %s : %d ms" % [event.payload[:name], event.duration]
29
- end
30
-
31
- # Benchmeth.use_notifications = true