Module: IRB::IrbLoader

Included in:
ExtendCommand::Load, ExtendCommand::Require, ExtendCommand::Source
Defined in:
lib/irb/ext/loader.rb

Overview

Provides a few commands for loading files within an irb session.

See ExtendCommandBundle for more information.

Instance Method Summary collapse

Instance Method Details

#irb_load(fn, priv = nil) ⇒ Object

Loads the given file similarly to Kernel#load

Raises:

  • (LoadError)


27
28
29
30
31
32
# File 'lib/irb/ext/loader.rb', line 27

def irb_load(fn, priv = nil)
  path = search_file_from_ruby_path(fn)
  raise LoadError, "No such file to load -- #{fn}" unless path

  load_file(path, priv)
end

#load_file(path, priv = nil) ⇒ Object

Loads the given file in the current session’s context and evaluates it.

See Irb#suspend_input_method for more information.



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/irb/ext/loader.rb', line 73

def load_file(path, priv = nil)
  irb.suspend_name(path, File.basename(path)) do

  if priv
    ws = WorkSpace.new(Module.new)
  else
    ws = WorkSpace.new
  end
  irb.suspend_workspace(ws) do
    irb.suspend_input_method(FileInputMethod.new(path)) do
 |back_io|
 irb.signal_status(:IN_LOAD) do
#       p irb.conf
   if back_io.kind_of?(FileInputMethod)
    irb.eval_input
   else
    begin
irb.eval_input
    rescue LoadAbort
print "load abort!!\n"
    end
   end
 end
    end
  end
  end
end

#oldObject

:nodoc:



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/irb/ext/loader.rb', line 101

def old # :nodoc:
  back_io = @io
  back_path = @irb_path
  back_name = @irb_name
  back_scanner = @irb.scanner
  begin
  @io = FileInputMethod.new(path)
  @irb_name = File.basename(path)
  @irb_path = path
  @irb.signal_status(:IN_LOAD) do
    if back_io.kind_of?(FileInputMethod)
 @irb.eval_input
    else
 begin
   @irb.eval_input
 rescue LoadAbort
   print "load abort!!\n"
 end
    end
  end
  ensure
  @io = back_io
  @irb_name = back_name
  @irb_path = back_path
  @irb.scanner = back_scanner
  end
end

#search_file_from_ruby_path(fn) ⇒ Object

:nodoc:



34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/irb/ext/loader.rb', line 34

def search_file_from_ruby_path(fn) # :nodoc:
  if /^#{Regexp.quote(File::Separator)}/ =~ fn
  return fn if File.exist?(fn)
  return nil
  end

  for path in $:
  if File.exist?(f = File.join(path, fn))
    return f
  end
  end
  return nil
end

#source_file(path) ⇒ Object

Loads a given file in the current session and displays the source lines

See Irb#suspend_input_method for more information.



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/irb/ext/loader.rb', line 51

def source_file(path)
  irb.suspend_name(path, File.basename(path)) do
  irb.suspend_input_method(FileInputMethod.new(path)) do
    |back_io|
    irb.signal_status(:IN_LOAD) do
 if back_io.kind_of?(FileInputMethod)
   irb.eval_input
 else
   begin
    irb.eval_input
   rescue LoadAbort
    print "load abort!!\n"
   end
 end
    end
  end
  end
end