Sha256: 4de81b16b3c13720d1a200dc328bab581de2bcf63933bf0345eff34711c95a23

Contents?: true

Size: 1.4 KB

Versions: 7

Compression:

Stored size: 1.4 KB

Contents

module Vedeu

  module Runtime

    # Provides the main loop for a Vedeu application.
    #
    class MainLoop

      trap('SIGTERM') { stop! }
      trap('TERM')    { stop! }
      trap('INT')     { stop! }

      class << self

        # :nocov:
        # Start the main loop.
        #
        # @return [void]
        # @yieldreturn [void] The client application.
        def start!
          @started = true
          @loop    = true

          while @loop
            yield

            Vedeu::Cursors::Cursor.hide_cursor

            Vedeu::Terminal::Buffer.render

            Vedeu::Cursors::Cursor.show_cursor

            safe_exit_point!
          end
        rescue Vedeu::Error::Interrupt
          Vedeu.log(type:    :info,
                    message: 'Vedeu execution interrupted, exiting.')
        end
        # :nocov:

        # Signal that we wish to terminate the running application.
        #
        # @return [void]
        def stop!
          @loop = false
        end

        # :nocov:
        # Check the application has started and we wish to continue
        # running.
        #
        # @raise [Vedeu::Error::Interrupt] When we wish to terminate
        #   the running application.
        # @return [void]
        def safe_exit_point!
          fail Vedeu::Error::Interrupt if @started && !@loop
        end
        # :nocov:

      end # Eigenclass

    end # MainLoop

  end # Runtime

end # Vedeu

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
vedeu-0.6.19 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.18 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.17 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.16 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.15 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.14 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.13 lib/vedeu/runtime/main_loop.rb