benchmeth 0.1.1 → 0.2.0

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.
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