Class: Rich::Spinner

Inherits:
Object
  • Object
show all
Defined in:
lib/rich/progress.rb

Overview

A spinning animation indicator

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#framesArray<String> (readonly)

Returns Spinner frames.

Returns:

  • (Array<String>)

    Spinner frames



28
29
30
# File 'lib/rich/progress.rb', line 28

def frames
  @frames
end

#speedFloat (readonly)

Returns Speed (seconds per frame).

Returns:

  • (Float)

    Speed (seconds per frame)



34
35
36
# File 'lib/rich/progress.rb', line 34

def speed
  @speed
end

#styleStyle? (readonly)

Returns Style.

Returns:



31
32
33
# File 'lib/rich/progress.rb', line 31

def style
  @style
end

Instance Method Details

#advanceString

Advance to next frame

Returns:

  • (String)

    Current frame after advance



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

#frameString

Get current frame

Returns:

  • (String)


46
47
48
# File 'lib/rich/progress.rb', line 46

def frame
  @frames[@frame_index % @frames.length]
end

#resetObject

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_segmentSegment

Get segment for current frame

Returns:



71
72
73
# File 'lib/rich/progress.rb', line 71

def to_segment
  Segment.new(frame, style: @style)
end

#updateBoolean

Update if enough time has passed

Returns:

  • (Boolean)

    True if frame changed



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