ruby-progressbar 1.0.1 → 1.0.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/Gemfile +4 -0
- data/Guardfile +5 -1
- data/lib/progress_bar/components/progressable.rb +2 -0
- data/lib/progress_bar/format/base.rb +26 -4
- data/lib/progress_bar/formatter.rb +9 -24
- data/lib/progress_bar/length_calculator.rb +19 -10
- data/lib/progress_bar/time.rb +7 -7
- data/lib/progress_bar/version.rb +1 -1
- data/ruby-progressbar.gemspec +5 -6
- data/spec/fixtures/benchmark.rb +5 -0
- data/spec/progress_bar/components/progressable_spec.rb +8 -0
- metadata +22 -26
data/Gemfile
CHANGED
data/Guardfile
CHANGED
@@ -4,18 +4,40 @@ class ProgressBar
|
|
4
4
|
attr_reader :molecules
|
5
5
|
|
6
6
|
def initialize(format_string)
|
7
|
-
@
|
7
|
+
@format_string = format_string
|
8
|
+
@molecules = parse(format_string)
|
8
9
|
end
|
9
10
|
|
11
|
+
def process(environment)
|
12
|
+
processed_string = @format_string.dup
|
13
|
+
|
14
|
+
non_bar_molecules.each do |molecule|
|
15
|
+
processed_string.gsub!("%#{molecule.key}", environment.send(molecule.method_name).to_s)
|
16
|
+
end
|
17
|
+
|
18
|
+
remaining_molecules = bar_molecules.size
|
19
|
+
placeholder_length = remaining_molecules * 2
|
20
|
+
|
21
|
+
processed_string.gsub! '%%', '%'
|
22
|
+
|
23
|
+
leftover_bar_length = environment.send(:length) - processed_string.length + placeholder_length
|
24
|
+
|
25
|
+
bar_molecules.each do |molecule|
|
26
|
+
processed_string.gsub!("%#{molecule.key}", environment.send(molecule.method_name, leftover_bar_length).to_s)
|
27
|
+
end
|
28
|
+
|
29
|
+
processed_string
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
10
33
|
def non_bar_molecules
|
11
|
-
molecules.select { |molecule| !molecule.bar_molecule? }
|
34
|
+
@non_bar_molecules ||= molecules.select { |molecule| !molecule.bar_molecule? }
|
12
35
|
end
|
13
36
|
|
14
37
|
def bar_molecules
|
15
|
-
molecules.select { |molecule| molecule.bar_molecule? }
|
38
|
+
@bar_molecules ||= molecules.select { |molecule| molecule.bar_molecule? }
|
16
39
|
end
|
17
40
|
|
18
|
-
private
|
19
41
|
def parse(format_string)
|
20
42
|
molecules = []
|
21
43
|
|
@@ -4,17 +4,15 @@ class ProgressBar
|
|
4
4
|
DEFAULT_TITLE = 'Progress'
|
5
5
|
|
6
6
|
def initialize(options)
|
7
|
-
|
8
|
-
@title
|
7
|
+
self.format_string = options[:format] || DEFAULT_FORMAT_STRING
|
8
|
+
@title = options[:title] || DEFAULT_TITLE
|
9
9
|
|
10
10
|
super(options)
|
11
11
|
end
|
12
12
|
|
13
|
-
def format(
|
14
|
-
|
15
|
-
@format
|
16
|
-
|
17
|
-
process
|
13
|
+
def format(new_format_string = DEFAULT_FORMAT_STRING)
|
14
|
+
self.format_string = new_format_string
|
15
|
+
@format.process(self)
|
18
16
|
end
|
19
17
|
|
20
18
|
def title=(title)
|
@@ -30,23 +28,10 @@ class ProgressBar
|
|
30
28
|
end
|
31
29
|
|
32
30
|
private
|
33
|
-
def
|
34
|
-
@format_string
|
35
|
-
@
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
remaining_molecule_match_data = processed_string.scan(/%[a-zA-Z]/) || []
|
40
|
-
remaining_molecules = remaining_molecule_match_data.size
|
41
|
-
placeholder_length = remaining_molecules * 2
|
42
|
-
|
43
|
-
processed_string.gsub! '%%', '%'
|
44
|
-
|
45
|
-
leftover_bar_length = length - processed_string.length + placeholder_length
|
46
|
-
|
47
|
-
@format.bar_molecules.each do |molecule|
|
48
|
-
processed_string.gsub!("%#{molecule.key}", self.send(molecule.method_name, leftover_bar_length).to_s)
|
49
|
-
end
|
31
|
+
def format_string=(format_string)
|
32
|
+
if @format_string != format_string
|
33
|
+
@format_string = format_string
|
34
|
+
@format = ProgressBar::Format::Base.new(format_string)
|
50
35
|
end
|
51
36
|
end
|
52
37
|
|
@@ -34,16 +34,25 @@ class ProgressBar
|
|
34
34
|
80
|
35
35
|
end
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
37
|
+
begin
|
38
|
+
require 'io/console'
|
39
|
+
|
40
|
+
def dynamic_width
|
41
|
+
rows, columns = IO.console.winsize
|
42
|
+
columns
|
43
|
+
end
|
44
|
+
rescue LoadError
|
45
|
+
def dynamic_width
|
46
|
+
dynamic_width_stty.nonzero? || dynamic_width_tput
|
47
|
+
end
|
48
|
+
|
49
|
+
def dynamic_width_stty
|
50
|
+
%x{stty size 2>/dev/null}.split[1].to_i
|
51
|
+
end
|
52
|
+
|
53
|
+
def dynamic_width_tput
|
54
|
+
%x{tput cols 2>/dev/null}.to_i
|
55
|
+
end
|
47
56
|
end
|
48
57
|
|
49
58
|
def unix?
|
data/lib/progress_bar/time.rb
CHANGED
@@ -8,15 +8,15 @@ class ProgressBar
|
|
8
8
|
|
9
9
|
private
|
10
10
|
def self.unmocked_time_method
|
11
|
-
|
11
|
+
time_mocking_library_methods.find { |method| @@time.respond_to? method }
|
12
12
|
end
|
13
13
|
|
14
|
-
def self.
|
15
|
-
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:
|
19
|
-
|
14
|
+
def self.time_mocking_library_methods
|
15
|
+
[
|
16
|
+
:now_without_mock_time, # Timecop
|
17
|
+
:now_without_delorean, # Delorean
|
18
|
+
:now # Actual
|
19
|
+
]
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
data/lib/progress_bar/version.rb
CHANGED
data/ruby-progressbar.gemspec
CHANGED
@@ -34,11 +34,10 @@ THEDOCTOR
|
|
34
34
|
s.require_paths = ["lib"]
|
35
35
|
#= Manifest =#
|
36
36
|
|
37
|
-
s.add_development_dependency('
|
38
|
-
s.add_development_dependency('
|
39
|
-
s.add_development_dependency('timecop', '~> 0.3.5')
|
37
|
+
s.add_development_dependency('rspec', '~> 2.11')
|
38
|
+
s.add_development_dependency('timecop', '~> 0.5')
|
40
39
|
s.add_development_dependency('simplecov', '~> 0.5')
|
41
|
-
s.add_development_dependency('guard', '~> 1.
|
42
|
-
s.add_development_dependency('guard-rspec', '~>
|
40
|
+
s.add_development_dependency('guard', '~> 1.4')
|
41
|
+
s.add_development_dependency('guard-rspec', '~> 2.1')
|
42
|
+
s.add_development_dependency('rb-fsevent', '~> 0.9')
|
43
43
|
end
|
44
|
-
|
@@ -27,4 +27,12 @@ describe ProgressBar::Components::Progressable do
|
|
27
27
|
ProgressableClass.new.smoothing.should eql 0.1
|
28
28
|
end
|
29
29
|
end
|
30
|
+
|
31
|
+
describe '#percentage_completed' do
|
32
|
+
it 'returns the default total if total is zero' do
|
33
|
+
subject.total = 0
|
34
|
+
|
35
|
+
subject.percentage_completed.should eql 100
|
36
|
+
end
|
37
|
+
end
|
30
38
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-progressbar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,16 +10,16 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-10-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: rspec
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '2.11'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -27,15 +27,15 @@ dependencies:
|
|
27
27
|
requirements:
|
28
28
|
- - ~>
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version: '
|
30
|
+
version: '2.11'
|
31
31
|
- !ruby/object:Gem::Dependency
|
32
|
-
name:
|
32
|
+
name: timecop
|
33
33
|
requirement: !ruby/object:Gem::Requirement
|
34
34
|
none: false
|
35
35
|
requirements:
|
36
36
|
- - ~>
|
37
37
|
- !ruby/object:Gem::Version
|
38
|
-
version: '
|
38
|
+
version: '0.5'
|
39
39
|
type: :development
|
40
40
|
prerelease: false
|
41
41
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -43,15 +43,15 @@ dependencies:
|
|
43
43
|
requirements:
|
44
44
|
- - ~>
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
46
|
+
version: '0.5'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
48
|
+
name: simplecov
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: '0.5'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
57
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -59,15 +59,15 @@ dependencies:
|
|
59
59
|
requirements:
|
60
60
|
- - ~>
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: 0.
|
62
|
+
version: '0.5'
|
63
63
|
- !ruby/object:Gem::Dependency
|
64
|
-
name:
|
64
|
+
name: guard
|
65
65
|
requirement: !ruby/object:Gem::Requirement
|
66
66
|
none: false
|
67
67
|
requirements:
|
68
68
|
- - ~>
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version: '
|
70
|
+
version: '1.4'
|
71
71
|
type: :development
|
72
72
|
prerelease: false
|
73
73
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -75,15 +75,15 @@ dependencies:
|
|
75
75
|
requirements:
|
76
76
|
- - ~>
|
77
77
|
- !ruby/object:Gem::Version
|
78
|
-
version: '
|
78
|
+
version: '1.4'
|
79
79
|
- !ruby/object:Gem::Dependency
|
80
|
-
name: guard
|
80
|
+
name: guard-rspec
|
81
81
|
requirement: !ruby/object:Gem::Requirement
|
82
82
|
none: false
|
83
83
|
requirements:
|
84
84
|
- - ~>
|
85
85
|
- !ruby/object:Gem::Version
|
86
|
-
version: '1
|
86
|
+
version: '2.1'
|
87
87
|
type: :development
|
88
88
|
prerelease: false
|
89
89
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -91,15 +91,15 @@ dependencies:
|
|
91
91
|
requirements:
|
92
92
|
- - ~>
|
93
93
|
- !ruby/object:Gem::Version
|
94
|
-
version: '1
|
94
|
+
version: '2.1'
|
95
95
|
- !ruby/object:Gem::Dependency
|
96
|
-
name:
|
96
|
+
name: rb-fsevent
|
97
97
|
requirement: !ruby/object:Gem::Requirement
|
98
98
|
none: false
|
99
99
|
requirements:
|
100
100
|
- - ~>
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version: '0.
|
102
|
+
version: '0.9'
|
103
103
|
type: :development
|
104
104
|
prerelease: false
|
105
105
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -107,7 +107,7 @@ dependencies:
|
|
107
107
|
requirements:
|
108
108
|
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '0.
|
110
|
+
version: '0.9'
|
111
111
|
description: ! 'Ruby/ProgressBar is an extremely flexible text progress bar library
|
112
112
|
for Ruby.
|
113
113
|
|
@@ -152,6 +152,7 @@ files:
|
|
152
152
|
- lib/progressbar.rb
|
153
153
|
- lib/ruby-progressbar.rb
|
154
154
|
- ruby-progressbar.gemspec
|
155
|
+
- spec/fixtures/benchmark.rb
|
155
156
|
- spec/progress_bar/base_spec.rb
|
156
157
|
- spec/progress_bar/components/bar_spec.rb
|
157
158
|
- spec/progress_bar/components/elapsed_timer_spec.rb
|
@@ -176,18 +177,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
176
177
|
- - ! '>='
|
177
178
|
- !ruby/object:Gem::Version
|
178
179
|
version: '0'
|
179
|
-
segments:
|
180
|
-
- 0
|
181
|
-
hash: 2269240367279208668
|
182
180
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
183
181
|
none: false
|
184
182
|
requirements:
|
185
183
|
- - ! '>='
|
186
184
|
- !ruby/object:Gem::Version
|
187
185
|
version: '0'
|
188
|
-
segments:
|
189
|
-
- 0
|
190
|
-
hash: 2269240367279208668
|
191
186
|
requirements: []
|
192
187
|
rubyforge_project: ruby-progressbar
|
193
188
|
rubygems_version: 1.8.24
|
@@ -195,6 +190,7 @@ signing_key:
|
|
195
190
|
specification_version: 3
|
196
191
|
summary: Ruby/ProgressBar is a flexible text progress bar library for Ruby.
|
197
192
|
test_files:
|
193
|
+
- spec/fixtures/benchmark.rb
|
198
194
|
- spec/progress_bar/base_spec.rb
|
199
195
|
- spec/progress_bar/components/bar_spec.rb
|
200
196
|
- spec/progress_bar/components/elapsed_timer_spec.rb
|