Sha256: 0e90cb14a855566ced521317e59d100447b466215d6bdf9e81b7be55968290f9

Contents?: true

Size: 1.01 KB

Versions: 2

Compression:

Stored size: 1.01 KB

Contents

# This code is free software; you can redistribute it and/or modify it under
# the terms of the new BSD License.
#
# Copyright (c) 2009-2010, Sebastian Staudt

module Rubikon

  # A class for displaying and managing throbbers
  #
  # @author Sebastian Staudt
  # @see Application::InstanceMethods#throbber
  # @since 0.2.0
  class Throbber < Thread

    SPINNER = '-\|/'

    # Creates and runs a Throbber that outputs to the given IO stream while the
    # given thread is alive
    #
    # @param [IO] ostream the IO stream the throbber should be written to
    # @param [Thread] thread The thread that should be watched
    # @see Application::InstanceMethods#throbber
    def initialize(ostream, thread)
      proc = Proc.new do |os, thr|
          step = 0
          os.putc 32
          while thr.alive?
            os << "\b#{SPINNER[step].chr}"
            os.flush
            step = (step + 1) % 4
            sleep 0.25
          end
        os.putc 8
      end

      super { proc.call(ostream, thread) }
    end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rubikon-0.5.1 lib/rubikon/throbber.rb
rubikon-0.5.0 lib/rubikon/throbber.rb