bumbler 0.6.0 → 0.9.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
2
  SHA256:
3
- metadata.gz: 5a60e2a6c84fbfe256e680819c7e7782fbe1b02c8719967d98debdf89dcb85ca
4
- data.tar.gz: 2c94bb726e5f97523fff0c80674f60119e5b247d62d3d5e047594aa2bacd7835
3
+ metadata.gz: 7ad7fe2ebf27b55813bffb1ba59a966c14f9c3eda4b9df33d568754072549e1e
4
+ data.tar.gz: e64f75c85c1b996dd5cdfc2ddc1fc2d318e3809464788758578a2799864e6f7f
5
5
  SHA512:
6
- metadata.gz: f7644c6cdb5b218d01fa3b9c47835a3be6e1a9260dc94d15d9628b021b4653f1330963c7084cba7947e9569858f92174fadd7510a088a0407dfeefde413b7860
7
- data.tar.gz: 4f5019ba1b21b83ef31a40be91fe911ad915d0d1030527206476485d81c8342e8db3f7e2c47582d71ffdbedbf4fe5439244f5e8bc774274971b06b2da44b5f95
6
+ metadata.gz: 75412e45f8d0764be03b8a7c657d477cc51be29b25ff74b614dfacac3440b2e3d0d2ed8442af3de0da0288cc7cb982a883889e2571edb284a281ced58408c9dd
7
+ data.tar.gz: d1c438a7d9f168ab285c16c53a10ffbe505a6b312d6667b2a201d8e6d4049a25576809cc781991593656380bfa6df75aaa305343c1cd3ca1d9b7c5e92d7b2cf3
data/README.md CHANGED
@@ -6,7 +6,7 @@ Find slow loading gems in your [Bundler](http://gembundler.com/)-based projects!
6
6
  Bumbler tracks how long the main require of each gem takes,
7
7
  for example with `gem 'bar'` it tracks `require 'bar'`. If the gem name and the require name are different,
8
8
  add `require:` manually for correct time tracking, for example `gem 'bar-foo', require: 'bar_foo'`.
9
- This reuquire tracking can sometimes lead to false positives, because of dependencies,
9
+ This require tracking can sometimes lead to false positives, because of dependencies,
10
10
  for example `foo` requires `rails` which leads to `foo` being marked as slow.
11
11
 
12
12
  For rails projects it loads `config/environment.rb`, for all others it runs `Bundler.require *Bundler.groups`.
data/bin/bumbler CHANGED
@@ -21,7 +21,9 @@ OptionParser.new do |parser|
21
21
 
22
22
  Options:
23
23
  BANNER
24
- parser.on("-t", "--threshold MILLISECONDS", Integer, "Threshold in ms to be listed as slow") { |t| options[:threshold] = t }
24
+ parser.on("-t", "--threshold MILLISECONDS", Integer, "Threshold in ms to be listed as slow") do |t|
25
+ options[:threshold] = t
26
+ end
25
27
  parser.on("--initializers", "Show load time of initializers") { options[:initializers] = true }
26
28
  parser.on("--all", "Show all load times") { options[:all] = true }
27
29
  parser.on("-h", "--help", "Show this.") { puts parser; exit }
@@ -37,7 +39,7 @@ if options[:initializers]
37
39
  add_load_path.call # bundler kicks us out
38
40
  require 'bumbler/track_initializers'
39
41
  require './config/environment'
40
- elsif File.exist?('./config/environment')
42
+ elsif File.exist?('./config/environment.rb')
41
43
  require 'bumbler/go'
42
44
  require './config/environment'
43
45
  add_load_path.call # bundler kicks us out
@@ -22,7 +22,7 @@ module Bumbler
22
22
  @require_map = {}
23
23
  @gem_state = {}
24
24
 
25
- ::Bundler.environment.current_dependencies.each do |spec|
25
+ ::Bundler.load.current_dependencies.each do |spec|
26
26
  gem_name = spec.name
27
27
  @gem_state[gem_name] = {}
28
28
 
data/lib/bumbler/hooks.rb CHANGED
@@ -13,9 +13,29 @@ module Bumbler
13
13
 
14
14
  # Inject our custom handling of require into the Kernel.
15
15
  def hook_require!
16
- @hooking_require = true
16
+ hook_instance_require!
17
+ hook_singleton_require!
18
+ end
19
+
20
+ def hook_instance_require!
21
+ @hooking_instance_require = true
22
+
23
+ ::Kernel.module_eval do
24
+ orig_instance_require = instance_method(:require)
25
+ define_method(:require) do |path, *args|
26
+ ::Bumbler::Hooks.handle_require(path) do
27
+ orig_instance_require.bind(self).call(path, *args)
28
+ end
29
+ end
30
+ private :require
31
+ end
32
+
33
+ @hooking_instance_require = nil
34
+ end
35
+
36
+ def hook_singleton_require!
37
+ @hooking_singleton_require = true
17
38
 
18
- # There are two independent require methods. Joy!
19
39
  ::Kernel.module_eval do
20
40
  class << self
21
41
  orig_public_require = Kernel.public_method(:require)
@@ -25,33 +45,35 @@ module Bumbler
25
45
  end
26
46
  end
27
47
  end
28
-
29
- orig_instance_require = instance_method(:require)
30
- define_method(:require) do |path, *args|
31
- ::Bumbler::Hooks.handle_require(path) do
32
- orig_instance_require.bind(self).call(path, *args)
33
- end
34
- end
35
48
  end
36
49
 
37
- @hooking_require = nil
50
+ @hooking_singleton_require = nil
38
51
  end
39
52
 
40
53
  # Even better: Other gems hook require as well. The instance method one at least.
41
54
  def watch_require!
42
55
  ::Kernel.module_eval do
43
56
  # It isn't previously defined in Kernel. This could be a bit dangerous, though.
44
- def self.method_added(method_name, *_args)
45
- if method_name == :require && !::Bumbler::Hooks.hooking_require?
46
- # Fix those hooks.
47
- ::Bumbler::Hooks.hook_require!
57
+ def self.method_added(method_name, *_args) # rubocop:disable Lint/MissingSuper
58
+ if method_name == :require && !Bumbler::Hooks.hooking_instance_require?
59
+ ::Bumbler::Hooks.hook_instance_require!
60
+ end
61
+ end
62
+
63
+ def self.singleton_method_added(method_name, *_args) # rubocop:disable Lint/MissingSuper
64
+ if method_name == :require && !Bumbler::Hooks.hooking_singleton_require?
65
+ ::Bumbler::Hooks.hook_singleton_require!
48
66
  end
49
67
  end
50
68
  end
51
69
  end
52
70
 
53
- def hooking_require?
54
- @hooking_require
71
+ def hooking_instance_require?
72
+ @hooking_instance_require
73
+ end
74
+
75
+ def hooking_singleton_require?
76
+ @hooking_singleton_require
55
77
  end
56
78
 
57
79
  # Actually do something about a require here.
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  # TODO: replace with ruby-progressbar dependency
3
+ require 'io/console'
4
+
3
5
  module Bumbler
4
6
  module Progress
5
7
  @item_count = 0
@@ -36,7 +38,8 @@ module Bumbler
36
38
  end
37
39
 
38
40
  def tty_width
39
- `tput cols`.to_i || 80
41
+ # console_winsize: https://github.com/ruby/ruby/blob/f27eb8148f5a72bbacfebfecc7de9305471bb5c9/ext/io/console/console.c#L796
42
+ IO.console.winsize[1]
40
43
  end
41
44
 
42
45
  def bar(width)
@@ -1,14 +1,18 @@
1
1
  # frozen_string_literal: true
2
- Rails::Engine.prepend(Module.new do
3
- def load(file, *)
4
- initializer = file.sub(Rails.root.to_s, ".")
5
- Bumbler::Hooks.benchmark(initializer) { super }.last
2
+ Rails::Engine.prepend(
3
+ Module.new do
4
+ def load(file, *)
5
+ initializer = file.sub(Rails.root.to_s, ".")
6
+ Bumbler::Hooks.benchmark(initializer) { super }.last
7
+ end
6
8
  end
7
- end)
9
+ )
8
10
 
9
- Rails::Initializable::Initializer.prepend(Module.new do
10
- def run(*)
11
- name = (@name.is_a?(Symbol) ? @name.inspect : @name)
12
- Bumbler::Hooks.benchmark(name) { super }.last
11
+ Rails::Initializable::Initializer.prepend(
12
+ Module.new do
13
+ def run(*)
14
+ name = (@name.is_a?(Symbol) ? @name.inspect : @name)
15
+ Bumbler::Hooks.benchmark(name) { super }.last
16
+ end
13
17
  end
14
- end)
18
+ )
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Bumbler
3
- VERSION = '0.6.0'
3
+ VERSION = '0.9.0'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bumbler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian MacLeod
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-26 00:00:00.000000000 Z
11
+ date: 2022-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bump
@@ -97,14 +97,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
97
97
  requirements:
98
98
  - - ">="
99
99
  - !ruby/object:Gem::Version
100
- version: 2.3.0
100
+ version: 2.7.0
101
101
  required_rubygems_version: !ruby/object:Gem::Requirement
102
102
  requirements:
103
103
  - - ">="
104
104
  - !ruby/object:Gem::Version
105
105
  version: '0'
106
106
  requirements: []
107
- rubygems_version: 3.0.3
107
+ rubygems_version: 3.1.6
108
108
  signing_key:
109
109
  specification_version: 4
110
110
  summary: Find slowly loading gems for your Bundler-based projects