Class: IRB::OutputMethod

Inherits:
Object show all
Extended by:
Exception2MessageMapper
Defined in:
lib/irb/output-method.rb

Overview

An abstract output class for IO in irb. This is mainly used internally by IRB::Notifier. You can define your own output method to use with Irb.new, or Context.new

Direct Known Subclasses

StdioOutputMethod

Instance Method Summary collapse

Instance Method Details

#parse_printf_format(format, opts) ⇒ Object

Returns an array of the given format and opts to be used by Kernel#sprintf, if there was a successful Regexp match in the given format from #printf

%
<flag>  [#0- +]
<minimum field width> (\*|\*[1-9][0-9]*\$|[1-9][0-9]*)
<precision>.(\*|\*[1-9][0-9]*\$|[1-9][0-9]*|)?
#<length modifier>(hh|h|l|ll|L|q|j|z|t)
<conversion specifier>[diouxXeEfgGcsb%]


53
54
55
# File 'lib/irb/output-method.rb', line 53

def parse_printf_format(format, opts)
  return format, opts if $1.size % 2 == 1
end

#pp(*objs) ⇒ Object

Prints the given objs calling Object#inspect on each.

See #puts for more detail.



69
70
71
# File 'lib/irb/output-method.rb', line 69

def pp(*objs)
  puts(*objs.collect{|obj| obj.inspect})
end

#ppx(prefix, *objs) ⇒ Object

Prints the given objs calling Object#inspect on each and appending the given prefix.

See #puts for more detail.



77
78
79
# File 'lib/irb/output-method.rb', line 77

def ppx(prefix, *objs)
  puts(*objs.collect{|obj| prefix+obj.inspect})
end

Open this method to implement your own output method, raises a NotImplementedError if you don't define #print in your own class.



25
26
27
# File 'lib/irb/output-method.rb', line 25

def print(*opts)
  OutputMethod.Raise NotImplementedError, "print"
end

#printf(format, *opts) ⇒ Object

Extends IO#printf to format the given opts for Kernel#sprintf using #parse_printf_format



36
37
38
39
40
41
# File 'lib/irb/output-method.rb', line 36

def printf(format, *opts)
  if /(%*)%I/ =~ format
  format, opts = parse_printf_format(format, opts)
  end
  print sprintf(format, *opts)
end

#printn(*opts) ⇒ Object

Prints the given opts, with a newline delimiter.



30
31
32
# File 'lib/irb/output-method.rb', line 30

def printn(*opts)
  print opts.join(" "), "\n"
end

#puts(*objs) ⇒ Object

Calls #print on each element in the given objs, followed by a newline character.



59
60
61
62
63
64
# File 'lib/irb/output-method.rb', line 59

def puts(*objs)
  for obj in objs
  print(*obj)
  print "\n"
  end
end