c_extensions/c_formats_no_parens.rb
tests/_examples/c_extensions/c_formats_no_parens.rb in the metorex repository.
# A C extension formatting text the way rb_sprintf, rb_raise and rb_warn do,
# with PRIsVALUE writing a VALUE's to_s, or its inspect with the + flag.
require "tmpdir"
require "stringio"
require_relative "build_helper"
class Odd
def to_s
5
end
end
directory = Dir.mktmpdir
require build_extension("c_formats.c", "c_formats", directory)
formats = CFormats.new
p formats.numbers
p formats.floats
p formats.texts "café"
p formats.texts("café").encoding
p formats.texts :sym
p formats.numbers.encoding
p formats.pointer_text
p formats.unknown
p formats.appended(+"one")
report { formats.raised ArgumentError, [1, 2] }
report { formats.raised KeyError, nil }
$stderr = StringIO.new
$VERBOSE = false
formats.warned "this"
$VERBOSE = true
formats.warned "that"
$VERBOSE = nil
formats.warned "nothing"
warned = $stderr.string
$stderr = STDERR
puts warned.gsub(/^.*\//, "").gsub(File.basename(__FILE__), "example.rb")
$VERBOSE = false
p formats.bytes
p formats.bytes.map(&:encoding).uniq
p formats.as_strings 12
p formats.as_strings "text"
p formats.as_strings(Odd.new)[0].start_with? "#<Odd"
FileUtils.rm_rf directory
Output:
"-7| 42|3 |00009|123456789012|-5|4000000000|ff|FF|10|17|-2|z|%"
"3.14|1.500000e+03|0.0001| 2.500|1.250000"
"plain|abc|ab |[café]|[\"café\"]"
#<Encoding:UTF-8>
"plain|abc|ab |[sym]|[:sym]"
#<Encoding:BINARY (ASCII-8BIT)>
true
"y and "
"one and 2 more"
ArgumentError: bad [1, 2] at 7
KeyError: bad at 7
example.rb:31: warning: careful with this
example.rb:33: warning: careful with that
example.rb:33: warning: only when verbose: 1
["a\x00b", "c string", ""]
[#<Encoding:BINARY (ASCII-8BIT)>]
["12", "12"]
["text", "\"text\""]
true