-
Notifications
You must be signed in to change notification settings - Fork 13
/
irb.rb
executable file
·66 lines (50 loc) · 1.69 KB
/
irb.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env ruby
# encoding: utf-8
# This file is supposed to make inspecting AMQ client easier.
# How does it work:
# 1) This file is executed.
# 2) We load irb, redefine where IRB looks for .irbrc and start IRB.
# 3) IRB loads .irbrc, which we redefined, so it loads this file again.
# However now the second branch of "if __FILE__ == $0" gets executed,
# so it runs our custom code which loads the original .irbrc and then
# it redefines some IRB settings. In this case it add IRB hook which
# is executed after IRB is started.
# Although it looks unnecessarily complicated, I can't see any easier
# solution to this problem in case that you need to patch original settings.
# Obviously in case you don't have the need, you'll be happy with simple:
# require "irb"
#
# require_relative "lib/amq/protocol/client.rb"
# include AMQ::Protocol
#
# IRB.start(__FILE__)
require "irb"
require "bundler"
Bundler.setup
Bundler.require(:default)
$LOAD_PATH.unshift(File.expand_path("../lib", __FILE__))
if __FILE__ == $0
puts "~ Using #{__FILE__} as an executable ..."
def IRB.rc_file_generators
yield Proc.new { |_| __FILE__ }
end
IRB.start(__FILE__)
else
begin
irbrc = File.join(ENV["HOME"], ".irbrc")
puts "~ Using #{__FILE__} as a custom .irbrc .."
require "amq/client.rb"
include AMQ::Client
require "amq/protocol/client"
include AMQ
require "stringio"
def fd(data)
Frame.decode(StringIO.new(data))
end
puts "~ Loading original #{irbrc} ..."
load irbrc
puts "Loading finished."
rescue Exception => exception # it just discards all the exceptions!
abort exception.message + "\n - " + exception.backtrace.join("\n - ")
end
end