bumbler 0.1.1 → 0.1.2
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/bumbler.gemspec +1 -2
- data/lib/bumbler.rb +3 -0
- data/lib/bumbler/bundler.rb +7 -0
- data/lib/bumbler/hooks.rb +5 -0
- data/lib/bumbler/progress.rb +48 -13
- metadata +1 -2
- data/lib/bumbler/version.rb +0 -3
data/bumbler.gemspec
CHANGED
data/lib/bumbler.rb
CHANGED
data/lib/bumbler/bundler.rb
CHANGED
@@ -7,6 +7,13 @@ module Bumbler
|
|
7
7
|
return @require_map[path]
|
8
8
|
end
|
9
9
|
|
10
|
+
def self.require_started(path)
|
11
|
+
gem_name = self.gem_for_require(path)
|
12
|
+
return unless gem_name
|
13
|
+
|
14
|
+
Bumbler::Progress.item_started(:bundler, gem_name)
|
15
|
+
end
|
16
|
+
|
10
17
|
def self.require_finished(path, load_time)
|
11
18
|
self.read_bundler_environment if @gem_state.nil?
|
12
19
|
|
data/lib/bumbler/hooks.rb
CHANGED
@@ -54,6 +54,11 @@ module Bumbler
|
|
54
54
|
gem_name = Bumbler::Bundler.gem_for_require(path)
|
55
55
|
return yield unless gem_name
|
56
56
|
|
57
|
+
# Track load starts
|
58
|
+
@previous_gems ||= {}
|
59
|
+
Bumbler::Bundler.require_started(path) unless @previous_gems[gem_name]
|
60
|
+
@previous_gems[gem_name] = true
|
61
|
+
|
57
62
|
# Let's time them
|
58
63
|
start = Time.now.to_f
|
59
64
|
result = yield
|
data/lib/bumbler/progress.rb
CHANGED
@@ -11,19 +11,26 @@ module Bumbler
|
|
11
11
|
self.registry[type][name] = {}
|
12
12
|
end
|
13
13
|
|
14
|
+
def self.item_started(type, name)
|
15
|
+
@curr_item = {:type => type, :name => name}
|
16
|
+
|
17
|
+
self.render_progress
|
18
|
+
end
|
19
|
+
|
14
20
|
def self.item_finished(type, name, time)
|
15
21
|
self.registry[type][name] = {:time => time}
|
16
22
|
|
17
23
|
@loaded_items ||= 0
|
18
24
|
@loaded_items += 1
|
19
25
|
|
20
|
-
|
21
|
-
|
26
|
+
@prev_item = {:type => type, :name => name, :time => time}
|
27
|
+
@curr_item = nil if @curr_item && @curr_item[:name] == @prev_item[:name] && @curr_item[:type] == @prev_item[:type]
|
28
|
+
|
29
|
+
self.render_progress
|
22
30
|
end
|
23
31
|
|
24
32
|
def self.start!
|
25
|
-
|
26
|
-
@item_count ||= 0
|
33
|
+
# No-op for now.
|
27
34
|
end
|
28
35
|
|
29
36
|
private
|
@@ -36,8 +43,8 @@ module Bumbler
|
|
36
43
|
`tput cols`.to_i || 80
|
37
44
|
end
|
38
45
|
|
39
|
-
def self.bar
|
40
|
-
inner_size =
|
46
|
+
def self.bar(width)
|
47
|
+
inner_size = width - 2
|
41
48
|
|
42
49
|
fill_size = ((@loaded_items.to_f / @item_count.to_f) * inner_size).to_i
|
43
50
|
fill = '#' * fill_size
|
@@ -46,15 +53,43 @@ module Bumbler
|
|
46
53
|
return "[#{fill}#{empty}]"
|
47
54
|
end
|
48
55
|
|
49
|
-
def self.render_progress
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
puts self.bar
|
56
|
+
def self.render_progress
|
57
|
+
unless $stdout.tty?
|
58
|
+
puts '(%s/%d) %s' % [@loaded_items.to_s.rjust(@item_count.to_s.size), @item_count, message]
|
59
|
+
return
|
55
60
|
end
|
56
61
|
|
57
|
-
|
62
|
+
# Do nothing if we don't have any items to load
|
63
|
+
return if @item_count == 0
|
64
|
+
|
65
|
+
width = self.tty_width
|
66
|
+
|
67
|
+
print "\r\e[A\r\e[A" if @outputted_once
|
68
|
+
@outputted_once = true
|
69
|
+
|
70
|
+
@loaded_items ||= 0
|
71
|
+
@item_count ||= 0
|
72
|
+
|
73
|
+
# Output components:
|
74
|
+
# [#######################################]
|
75
|
+
# (##/##) <current>... <prev> (####.##ms)
|
76
|
+
#
|
77
|
+
# Skip the current if there isn't enough room
|
78
|
+
count = '(%s/%d) ' % [@loaded_items.to_s.rjust(@item_count.to_s.size), @item_count]
|
79
|
+
current = @curr_item ? "#{@curr_item[:name]}... " : ''
|
80
|
+
prev = @prev_item ? '%s (%sms)' % [@prev_item[:name], ('%.2f' % @prev_item[:time]).rjust(7)] : ''
|
81
|
+
|
82
|
+
# Align the bottom row
|
83
|
+
space_for_current = width - (count.length + prev.length)
|
84
|
+
|
85
|
+
# Render the progress
|
86
|
+
puts self.bar(width)
|
87
|
+
|
88
|
+
if space_for_current >= current.length
|
89
|
+
puts count + current + prev.rjust(width - count.length - current.length)
|
90
|
+
else
|
91
|
+
puts count + prev.rjust(width - count.length)
|
92
|
+
end
|
58
93
|
end
|
59
94
|
end
|
60
95
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: bumbler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.1.
|
5
|
+
version: 0.1.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ian MacLeod
|
@@ -34,7 +34,6 @@ files:
|
|
34
34
|
- lib/bumbler/go.rb
|
35
35
|
- lib/bumbler/hooks.rb
|
36
36
|
- lib/bumbler/progress.rb
|
37
|
-
- lib/bumbler/version.rb
|
38
37
|
has_rdoc: true
|
39
38
|
homepage: https://github.com/nevir/Bumbler
|
40
39
|
licenses: []
|
data/lib/bumbler/version.rb
DELETED