class Idna::Client

Public Class Methods

lib_load!() click to toggle source
# File lib/idna/client.rb, line 7
def lib_load!
  ffi_lib Idna::Configure.ffi_lib

  attach_function :idna_to_ascii_8z, %i[string pointer int], :int
  attach_function :idna_to_unicode_8z8z, %i[string pointer int], :int
end

Public Instance Methods

to_ascii(string, skip_useless: false) click to toggle source
# File lib/idna/client.rb, line 15
def to_ascii(string, skip_useless: false)
  return unless string
  return string if skip_useless && string.ascii_only?

  pointer = FFI::MemoryPointer.new :pointer
  int = idna_to_ascii_8z(string, pointer, 0x0001)
  Idna::Error.handling(int) unless int == 0
  result = pointer.read_pointer.read_string
  pointer.free

  result
end
to_unicode(string, skip_useless: false) click to toggle source
# File lib/idna/client.rb, line 28
def to_unicode(string, skip_useless: false)
  return unless string
  return string if skip_useless && !string.ascii_only?

  pointer = FFI::MemoryPointer.new :pointer
  int = idna_to_unicode_8z8z(string, pointer, 0x0001)
  Idna::Error.handling(int) unless int == 0
  result = pointer.read_pointer.read_string
  pointer.free

  result.force_encoding('UTF-8')
end