Class IRB::JobManager
In: lib/irb/ext/multi-irb.rb
Parent: Object

job management class

Methods

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

Attributes

current_job  [RW] 

Public Class methods

[Source]

    # File lib/irb/ext/multi-irb.rb, line 20
20:     def initialize
21:       # @jobs = [[thread, irb],...]
22:       @jobs = []
23:       @current_job = nil
24:     end

Public Instance methods

[Source]

     # File lib/irb/ext/multi-irb.rb, line 87
 87:     def delete(key)
 88:       case key
 89:       when Integer
 90:         IRB.fail NoSuchJob, key unless @jobs[key]
 91:         @jobs[key] = nil
 92:       else
 93:         catch(:EXISTS) do
 94:           @jobs.each_index do
 95:             |i|
 96:             if @jobs[i] and (@jobs[i][0] == key ||
 97:                              @jobs[i][1] == key ||
 98:                              @jobs[i][1].context.main.equal?(key))
 99:               @jobs[i] = nil
100:               throw :EXISTS
101:             end
102:           end
103:           IRB.fail NoSuchJob, key
104:         end
105:       end
106:       until assoc = @jobs.pop; end unless @jobs.empty?
107:       @jobs.push assoc
108:     end

[Source]

    # File lib/irb/ext/multi-irb.rb, line 50
50:     def insert(irb)
51:       @jobs.push [Thread.current, irb]
52:     end

[Source]

     # File lib/irb/ext/multi-irb.rb, line 110
110:     def inspect
111:       ary = []
112:       @jobs.each_index do
113:         |i|
114:         th, irb = @jobs[i]
115:         next if th.nil?
116: 
117:         if th.alive?
118:           if th.stop?
119:             t_status = "stop"
120:           else
121:             t_status = "running"
122:           end
123:         else
124:           t_status = "exited"
125:         end
126:         ary.push format("#%d->%s on %s (%s: %s)",
127:                         i, 
128:                         irb.context.irb_name, 
129:                         irb.context.main,
130:                         th,
131:                         t_status)
132:       end
133:       ary.join("\n")
134:     end

[Source]

    # File lib/irb/ext/multi-irb.rb, line 37
37:     def irb(key)
38:       th, irb = search(key)
39:       irb
40:     end

[Source]

    # File lib/irb/ext/multi-irb.rb, line 64
64:     def kill(*keys)
65:       for key in keys
66:         th, irb = search(key)
67:         IRB.fail IrbAlreadyDead unless th.alive?
68:         th.exit
69:       end
70:     end

[Source]

    # File lib/irb/ext/multi-irb.rb, line 46
46:     def main_irb
47:       @jobs[0][1]
48:     end

[Source]

    # File lib/irb/ext/multi-irb.rb, line 42
42:     def main_thread
43:       @jobs[0][0]
44:     end

[Source]

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

[Source]

    # File lib/irb/ext/multi-irb.rb, line 72
72:     def search(key)
73:       job = case key
74:       when Integer
75:         @jobs[key]
76:       when Irb
77:         @jobs.find{|k, v| v.equal?(key)}
78:       when Thread
79:         @jobs.assoc(key)
80:       else
81:         @jobs.find{|k, v| v.context.main.equal?(key)}
82:       end
83:       IRB.fail NoSuchJob, key if job.nil?
84:       job
85:     end

[Source]

    # File lib/irb/ext/multi-irb.rb, line 54
54:     def switch(key)
55:       th, irb = search(key)
56:       IRB.fail IrbAlreadyDead unless th.alive?
57:       IRB.fail IrbSwitchedToCurrentThread if th == Thread.current
58:       @current_job = irb
59:       th.run
60:       Thread.stop
61:       @current_job = irb(Thread.current)
62:     end

[Source]

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

[Validate]