Class: IRB::JobManager (Ruby 2.3.7)
Description: Class : IRB::JobManager - Ruby 2.3.7

- Home
- Core 2.3.7
- Std-lib 2.3.7
- Downloads

Support for the Ruby 2.3 series has ended. See here for reference.

### Home Classes Methods

### In Files

- irb/ext/multi-irb.rb

### Parent

Object

### Methods

- ::new
- #delete
- #insert
- #inspect
- #irb
- #kill
- #main_irb
- #main_thread
- #n_jobs
- #search
- #switch
- #thread

### Class/Module Index

Quicksearch

- IRB::Abort
- IRB::Context
- IRB::ContextExtender
- IRB::ExtendCommandBundle
- IRB::FileInputMethod
- IRB::Frame
- IRB::InputMethod
- IRB::Inspector
- IRB::Irb
- IRB::IrbLoader
- IRB::JobManager
- IRB::LoadAbort
- IRB::MethodExtender
- IRB::Notifier
- IRB::Notifier::AbstractNotifier
- IRB::Notifier::CompositeNotifier
- IRB::Notifier::LeveledNotifier
- IRB::Notifier::NoMsgNotifier
- IRB::OutputMethod
- IRB::ReadlineInputMethod
- IRB::StdioInputMethod
- IRB::StdioOutputMethod
- IRB::WorkSpace
- Object
- XMP
- XMP::StringInputMethod

No matching classes.

# IRB::JobManager

### Attributes

current_job[RW]

The active irb session

### Public Class Methods

new() click to toggle source

Creates a new JobManager object

                   # File irb/ext/multi-irb.rb, line 18
    def initialize
      @jobs = []
      @current_job = nil
    end

### Public Instance Methods

delete(key) click to toggle source

Deletes the job at the given `key`.

                   # File irb/ext/multi-irb.rb, line 122
    def delete(key)
      case key
      when Integer
        IRB.fail NoSuchJob, key unless @jobs[key]
        @jobs[key] = nil
      else
        catch(:EXISTS) do
          @jobs.each_index do
            |i|
            if @jobs[i] and (@jobs[i][0] == key ||
                @jobs[i][1] == key ||
                @jobs[i][1].context.main.equal?(key))
              @jobs[i] = nil
              throw :EXISTS
            end
          end
          IRB.fail NoSuchJob, key
        end
      end
      until assoc = @jobs.pop; end unless @jobs.empty?
      @jobs.push assoc
    end

insert(irb) click to toggle source

Add the given `irb` session to the jobs Array.

                   # File irb/ext/multi-irb.rb, line 57
    def insert(irb)
      @jobs.push [Thread.current, irb]
    end

inspect() click to toggle source

Outputs a list of jobs, see the irb command `irb_jobs`, or `jobs`.

                   # File irb/ext/multi-irb.rb, line 146
    def inspect
      ary = []
      @jobs.each_index do
        |i|
        th, irb = @jobs[i]
        next if th.nil?

        if th.alive?
          if th.stop?
            t_status = "stop"
          else
            t_status = "running"
          end
        else
          t_status = "exited"
        end
        ary.push format("#%d->%s on %s (%s: %s)",
          i,
          irb.context.irb_name,
          irb.context.main,
          th,
          t_status)
      end
      ary.join("\n")
    end

irb(key) click to toggle source

Returns the irb session for the given `key` object, see search for more information.

                   # File irb/ext/multi-irb.rb, line 41
    def irb(key)
      _, irb = search(key)
      irb
    end

kill(*keys) click to toggle source

Terminates the irb sessions specified by the given `keys`.

Raises an IrbAlreadyDead exception if one of the given `keys` is already terminated.

See Thread#exit for more information.

                   # File irb/ext/multi-irb.rb, line 84
    def kill(*keys)
      for key in keys
        th, _ = search(key)
        IRB.fail IrbAlreadyDead unless th.alive?
        th.exit
      end
    end

main_irb() click to toggle source

Returns the top level irb session.

                   # File irb/ext/multi-irb.rb, line 52
    def main_irb
      @jobs[0][1]
    end

main_thread() click to toggle source

Returns the top level thread.

                   # File irb/ext/multi-irb.rb, line 47
    def main_thread
      @jobs[0][0]
    end

n_jobs() click to toggle source

The total number of irb sessions, used to set `irb_name` of the current Context.

                   # File irb/ext/multi-irb.rb, line 28
    def n_jobs
      @jobs.size
    end

search(key) click to toggle source

Returns the associated job for the given `key`.

If given an Integer, it will return the `key` index for the jobs Array.

When an instance of Irb is given, it will return the irb session associated with `key`.

If given an instance of Thread, it will return the associated thread `key` using Object#=== on the jobs Array.

Otherwise returns the irb session with the same top-level binding as the given `key`.

Raises a NoSuchJob exception if no job can be found with the given `key`.

                   # File irb/ext/multi-irb.rb, line 106
    def search(key)
      job = case key
            when Integer
              @jobs[key]
            when Irb
              @jobs.find{|k, v| v.equal?(key)}
            when Thread
              @jobs.assoc(key)
            else
              @jobs.find{|k, v| v.context.main.equal?(key)}
            end
      IRB.fail NoSuchJob, key if job.nil?
      job
    end

switch(key) click to toggle source

Changes the current active irb session to the given `key` in the jobs Array.

Raises an IrbAlreadyDead exception if the given `key` is no longer alive.

If the given irb session is already active, an IrbSwitchedToCurrentThread exception is raised.

                   # File irb/ext/multi-irb.rb, line 68
    def switch(key)
      th, irb = search(key)
      IRB.fail IrbAlreadyDead unless th.alive?
      IRB.fail IrbSwitchedToCurrentThread if th == Thread.current
      @current_job = irb
      th.run
      Thread.stop
      @current_job = irb(Thread.current)
    end

thread(key) click to toggle source

Returns the thread for the given `key` object, see search for more information.

                   # File irb/ext/multi-irb.rb, line 34
    def thread(key)
      th, = search(key)
      th
    end