Sha256: 7f9dca03751fd12166424dffd55929c07ea076300f5bf73fa887c39fd8fdb8fd

Contents?: true

Size: 695 Bytes

Versions: 3

Compression:

Stored size: 695 Bytes

Contents

module Delayed
  module Runnable
    def start
      trap('TERM') { quit! }
      trap('INT') { quit! }

      say "Starting #{self.class.name}"

      Delayed.lifecycle.run_callbacks(:execute, nil) do
        loop do
          run!
          break if stop?
        end
      end
    ensure
      on_exit!
    end

    private

    def on_exit!; end

    def interruptable_sleep(seconds)
      IO.select([pipe[0]], nil, nil, seconds)
    end

    def stop
      pipe[1].close
    end

    def stop?
      pipe[1].closed?
    end

    def quit!
      Thread.new { say 'Exiting...' }.tap do |t|
        stop
        t.join
      end
    end

    def pipe
      @pipe ||= IO.pipe
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
delayed-0.2.0 lib/delayed/runnable.rb
delayed-0.1.1 lib/delayed/runnable.rb
delayed-0.1.0 lib/delayed/runnable.rb