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