ruby-progressbar 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -2,4 +2,8 @@ source "http://rubygems.org"
2
2
 
3
3
  gem 'rake'
4
4
 
5
+ platforms :ruby do
6
+ gem 'ruby-prof', '~> 0.11.2'
7
+ end
8
+
5
9
  gemspec
data/Guardfile CHANGED
@@ -1,6 +1,10 @@
1
+ notification :tmux,
2
+ :success => 'colour22',
3
+ :failed => 'colour52',
4
+ :display_message => true
5
+
1
6
  guard 'rspec', :version => 2 do
2
7
  watch(%r{^spec/.+_spec\.rb$})
3
8
  watch(%r{^lib/(.+)\.rb$}) { 'spec' }
4
9
  watch('spec/spec_helper.rb') { 'spec' }
5
10
  end
6
-
@@ -59,6 +59,8 @@ class ProgressBar
59
59
  end
60
60
 
61
61
  def percentage_completed
62
+ return 100 if total == 0
63
+
62
64
  # progress / total * 100
63
65
  #
64
66
  # Doing this way so we can avoid converting each
@@ -4,18 +4,40 @@ class ProgressBar
4
4
  attr_reader :molecules
5
5
 
6
6
  def initialize(format_string)
7
- @molecules = parse(format_string)
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
- @format_string = options[:format] || DEFAULT_FORMAT_STRING
8
- @title = options[:title] || DEFAULT_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(format_string = DEFAULT_FORMAT_STRING)
14
- @format_string = format_string
15
- @format = ProgressBar::Format::Base.new(format_string)
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 process
34
- @format_string.dup.tap do |processed_string|
35
- @format.non_bar_molecules.each do |molecule|
36
- processed_string.gsub!("%#{molecule.key}", self.send(molecule.method_name).to_s)
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
- def dynamic_width
38
- dynamic_width_stty.nonzero? || dynamic_width_tput
39
- end
40
-
41
- def dynamic_width_stty
42
- %x{stty size 2>/dev/null}.split[1].to_i
43
- end
44
-
45
- def dynamic_width_tput
46
- %x{tput cols 2>/dev/null}.to_i
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?
@@ -8,15 +8,15 @@ class ProgressBar
8
8
 
9
9
  private
10
10
  def self.unmocked_time_method
11
- time_mocking_library_mapping.values.find { |method| @@time.respond_to? method }
11
+ time_mocking_library_methods.find { |method| @@time.respond_to? method }
12
12
  end
13
13
 
14
- def self.time_mocking_library_mapping
15
- {
16
- :timecop => :now_without_mock_time,
17
- :delorean => :now_without_delorean,
18
- :actual => :now
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
@@ -1,3 +1,3 @@
1
1
  class ProgressBar
2
- VERSION = '1.0.1'
2
+ VERSION = '1.0.2'
3
3
  end
@@ -34,11 +34,10 @@ THEDOCTOR
34
34
  s.require_paths = ["lib"]
35
35
  #= Manifest =#
36
36
 
37
- s.add_development_dependency('bundler', '~> 1.0')
38
- s.add_development_dependency('rspec', '~> 2.8')
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.0')
42
- s.add_development_dependency('guard-rspec', '~> 0.6')
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
-
@@ -0,0 +1,5 @@
1
+ # bundle exec ruby-prof --printer=graph_html --file=../results.html --require 'ruby-progressbar' --sort=total ./spec/fixtures/benchmark.rb
2
+
3
+ bar = ProgressBar.create(:length => 80, :start => 0, :total => 100000)
4
+
5
+ 100000.times { bar.increment }
@@ -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.1
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-08-28 00:00:00.000000000 Z
13
+ date: 2012-10-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: bundler
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: '1.0'
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: '1.0'
30
+ version: '2.11'
31
31
  - !ruby/object:Gem::Dependency
32
- name: rspec
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: '2.8'
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: '2.8'
46
+ version: '0.5'
47
47
  - !ruby/object:Gem::Dependency
48
- name: timecop
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.3.5
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.3.5
62
+ version: '0.5'
63
63
  - !ruby/object:Gem::Dependency
64
- name: simplecov
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: '0.5'
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: '0.5'
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.0'
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.0'
94
+ version: '2.1'
95
95
  - !ruby/object:Gem::Dependency
96
- name: guard-rspec
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.6'
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.6'
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