lib/sus/output/status.rb



# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2021-2024, by Samuel Williams.

module Sus
	module Output
		class Status
			def self.register(output)
				output[:free] ||= output.style(:blue)
				output[:busy] ||= output.style(:orange)
			end
			
			def initialize(state = :free, context = nil)
				@state = state
				@context = context
			end
			
			INDICATORS = {
				busy: ["◑", "◒", "◐", "◓"],
				free: ["◌"]
			}
			
			def update(state, context = nil)
				@state = state
				@context = context
			end
			
			def indicator
				if indicators = INDICATORS[@state]
					return indicators[(Time.now.to_f * 10) % indicators.size]
				end
				
				return " "
			end
			
			def print(output)
				output.write(
					@state, self.indicator, " "
				)
				
				output.write(@context)
				
				output.puts
			end
		end
	end
end