Class: Rich::Spinner
- Inherits:
-
Object
- Object
- Rich::Spinner
- Defined in:
- lib/rich/progress.rb
Overview
A spinning animation indicator
Instance Attribute Summary collapse
-
#frames ⇒ Array<String>
readonly
Spinner frames.
-
#speed ⇒ Float
readonly
Speed (seconds per frame).
-
#style ⇒ Style?
readonly
Style.
Instance Method Summary collapse
-
#advance ⇒ String
Advance to next frame.
-
#frame ⇒ String
Get current frame.
-
#initialize(frames: ProgressStyle::DOTS, style: nil, speed: 0.1) ⇒ Spinner
constructor
A new instance of Spinner.
-
#reset ⇒ Object
Reset to first frame.
-
#to_segment ⇒ Segment
Get segment for current frame.
-
#update ⇒ Boolean
Update if enough time has passed.
Constructor Details
#initialize(frames: ProgressStyle::DOTS, style: nil, speed: 0.1) ⇒ Spinner
Returns a new instance of Spinner.
36 37 38 39 40 41 42 |
# File 'lib/rich/progress.rb', line 36 def initialize(frames: ProgressStyle::DOTS, style: nil, speed: 0.1) @frames = frames @style = style.is_a?(String) ? Style.parse(style) : style @speed = speed @frame_index = 0 @last_update = Time.now end |
Instance Attribute Details
#frames ⇒ Array<String> (readonly)
Returns Spinner frames.
28 29 30 |
# File 'lib/rich/progress.rb', line 28 def frames @frames end |
#speed ⇒ Float (readonly)
Returns Speed (seconds per frame).
34 35 36 |
# File 'lib/rich/progress.rb', line 34 def speed @speed end |
#style ⇒ Style? (readonly)
Returns Style.
31 32 33 |
# File 'lib/rich/progress.rb', line 31 def style @style end |
Instance Method Details
#advance ⇒ String
Advance to next frame
52 53 54 55 56 |
# File 'lib/rich/progress.rb', line 52 def advance @frame_index = (@frame_index + 1) % @frames.length @last_update = Time.now frame end |
#frame ⇒ String
Get current frame
46 47 48 |
# File 'lib/rich/progress.rb', line 46 def frame @frames[@frame_index % @frames.length] end |
#reset ⇒ Object
Reset to first frame
76 77 78 79 |
# File 'lib/rich/progress.rb', line 76 def reset @frame_index = 0 @last_update = Time.now end |
#to_segment ⇒ Segment
Get segment for current frame
71 72 73 |
# File 'lib/rich/progress.rb', line 71 def to_segment Segment.new(frame, style: @style) end |
#update ⇒ Boolean
Update if enough time has passed
60 61 62 63 64 65 66 67 |
# File 'lib/rich/progress.rb', line 60 def update if Time.now - @last_update >= @speed advance true else false end end |