Maintenance of Ruby 2.0.0 ended on February 24, 2016. Read more
An irb inspector
In order to create your own custom inspector there are two things you should be aware of:
Inspector uses inspect_value, or
inspect_proc
, for output of return values.
This also allows for an optional init+, or init_proc
,
which is called when the inspector is activated.
Knowing this, you can create a rudimentary inspector as follows:
irb(main):001:0> ins = IRB::Inspector.new(proc{ |v| "omg! #{v}" }) irb(main):001:0> IRB.CurrentContext.inspect_mode = ins # => omg! #<IRB::Inspector:0x007f46f7ba7d28> irb(main):001:0> "what?" #=> omg! what?
Default inspectors available to irb, this includes:
:pp
Using Kernel#pretty_inspect
:yaml
Using YAML.dump
:marshal
Using Marshal.dump
Example
Inspector.def_inspector(key, init_p=nil){|v| v.inspect} Inspector.def_inspector([key1,..], init_p=nil){|v| v.inspect} Inspector.def_inspector(key, inspector) Inspector.def_inspector([key1,...], inspector)
# File irb/inspector.rb, line 63 def self.def_inspector(key, arg=nil, &block) # if !block_given? # case arg # when nil, Proc # inspector = IRB::Inspector(init_p) # when Inspector # inspector = init_p # else # IRB.Raise IllegalParameter, init_p # end # init_p = nil # else # inspector = IRB::Inspector(block, init_p) # end if block_given? inspector = IRB::Inspector(block, arg) else inspector = arg end case key when Array for k in key def_inspector(k, inspector) end when Symbol INSPECTORS[key] = inspector INSPECTORS[key.to_s] = inspector when String INSPECTORS[key] = inspector INSPECTORS[key.intern] = inspector else INSPECTORS[key] = inspector end end