Module: IRB::IrbLoader

Included in:
Command::LoaderCommand
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)
[View source]

20
21
22
23
24
25
# File 'lib/irb/ext/loader.rb', line 20

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.

[View source]

69
70
71
72
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
# File 'lib/irb/ext/loader.rb', line 69

def load_file(path, priv = nil)
  irb = irb_context.irb
  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
      FileInputMethod.open(path) do |io|
        irb.suspend_input_method(io) 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
  end
end

#oldObject

:nodoc:

[View source]

99
100
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
# File 'lib/irb/ext/loader.rb', line 99

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)
    self.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
    self.irb_path = back_path
    @irb.scanner = back_scanner
  end
end

#search_file_from_ruby_path(fn) ⇒ Object

:nodoc:

[View source]

27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/irb/ext/loader.rb', line 27

def search_file_from_ruby_path(fn) # :nodoc:
  if File.absolute_path?(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.

[View source]

44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/irb/ext/loader.rb', line 44

def source_file(path)
  irb = irb_context.irb
  irb.suspend_name(path, File.basename(path)) do
    FileInputMethod.open(path) do |io|
      irb.suspend_input_method(io) 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
end