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
 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
 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)
 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
 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)
 fail IrbAlreadyDead unless th.alive?
 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
 

AltStyle によって変換されたページ (->オリジナル) /