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%]


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

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.



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

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.



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

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.



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

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



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

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.



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

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.



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

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