toy-progress 0.0.1 → 0.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.
Files changed (4) hide show
  1. data/Rakefile +1 -1
  2. data/TODO +2 -1
  3. data/lib/progress.rb +84 -24
  4. metadata +2 -2
data/Rakefile CHANGED
@@ -4,7 +4,7 @@ require 'rubygems/specification'
4
4
  require 'date'
5
5
 
6
6
  GEM = "progress"
7
- GEM_VERSION = "0.0.1"
7
+ GEM_VERSION = "0.0.2"
8
8
  AUTHOR = "toy"
9
9
  EMAIL = "ivan@workisfun.ru"
10
10
  HOMEPAGE = ""
data/TODO CHANGED
@@ -1 +1,2 @@
1
- TODO:
1
+ TODO: good specs
2
+ TODO: good gem
data/lib/progress.rb CHANGED
@@ -1,40 +1,100 @@
1
+ require 'singleton'
2
+
1
3
  class Progress
4
+ include Singleton
5
+
6
+ # start progress indication
7
+ # ==== Examples
8
+ # Progress.start('Test', 1000)
9
+ # ...
10
+ # Progress.step
11
+ # ...
12
+ # Progress.stop('Test', 1000)
13
+ #
14
+ # Progress.start('Test', 1000) do
15
+ # ...
16
+ # Progress.step
17
+ # ...
18
+ # end
2
19
  def self.start(name, total = 100)
3
- @io ||= $stdout
4
- @io.sync = true
5
-
6
- @each = total / 1000
7
- @count = 0
20
+ levels << new(name, total, levels.length)
21
+ print_message
22
+ if block_given?
23
+ yield
24
+ stop
25
+ end
26
+ end
8
27
 
9
- @current = 0
10
- @total = total
28
+ def self.step
29
+ levels[-1].step
30
+ print_message
31
+ end
32
+
33
+ def self.stop
34
+ levels.pop.stop
35
+ unless levels.empty?
36
+ print_message
37
+ else
38
+ puts
39
+ end
40
+ end
41
+
42
+ # :nodoc:
43
+ def self.io=(io)
44
+ @io = io
45
+ end
46
+
47
+ # :nodoc:
48
+ def initialize(name, total, level)
11
49
  @name = name + ': %s'
12
- message highight('...')
13
- yield
14
- message percent
15
- @io.puts
50
+ @total = total
51
+ @level = level
52
+ @current = 0
53
+ start
16
54
  end
17
55
 
18
- def self.step
56
+ # :nodoc:
57
+ def start
58
+ self.message = '...'
59
+ end
60
+
61
+ # :nodoc:
62
+ def step
19
63
  @current += 1
20
- if (@count += 1) >= @each
21
- message highight(percent)
22
- @count = 0
23
- end
64
+ self.message = percent
24
65
  end
25
66
 
26
- private
67
+ # :nodoc:
68
+ def stop
69
+ self.message = percent
70
+ end
27
71
 
28
- def self.percent
29
- '%5.1f%%' % (@current * 100.0 / @total)
72
+ # :nodoc:
73
+ def message
74
+ @message
75
+ end
76
+
77
+ protected
78
+
79
+ def self.print_message
80
+ message = levels.map{ |level| level.message } * ' > '
81
+ @io ||= $stdout
82
+ @io.sync = true
83
+ @io.print "\r" + message.ljust(@previous_length || 0).gsub(/\d+\.\d+/){ |s| s == '100.0' ? s : "\e[1m#{s}\e[0m" }
84
+ @previous_length = message.length
30
85
  end
31
-
32
- def self.message(s)
33
- @io.print "\r\e[0K#{@name % s}"
86
+
87
+ def self.levels
88
+ @levels ||= []
89
+ end
90
+
91
+ def percent
92
+ '%5.1f%%' % (@current * 100.0 / @total)
34
93
  end
35
94
 
36
- def self.highight(s)
37
- "\e[1m#{s}\e[0m"
95
+ def message=(s)
96
+ formatted = s.ljust(6)[0, 6]
97
+ @message = @name % formatted
38
98
  end
39
99
  end
40
100
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toy-progress
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - toy
@@ -9,7 +9,7 @@ autorequire: progress
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-08-11 00:00:00 -07:00
12
+ date: 2008-10-31 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15