class Faker::String

def char_space_ratio

def char_space_ratio
  sample [2, [3] * 5, [5] * 17, [7] * 11, 11, 191].flatten
end

def random(length: 32)

Returns:
  • (String) -

Parameters:
  • length (Integer, Range, Array) -- The length of produced string and/or specific UTF-8 characters to use.
def random(length: 32)
  utf8string select_a length
end

def select_a(length)

def select_a(length)
  if length.class.included_modules.include? Enumerable
    select_a sample(length.to_enum.to_a)
  else
    length # recursive base case
  end
end

def space_or_utf8_char(ratio)

def space_or_utf8_char(ratio)
  sample [32.chr(Encoding::UTF_8), [utf8character] * ratio].flatten
end

def utf8character

def utf8character
  sample([
           rand(32..90),           # latin alphabet
           rand(128),              # 7-bit ASCII
           rand(0xd800),           # utf-8 codepoints below utf-16 surrogate halves
           rand(57_344..1_114_111) # utf-8 codepoints above utf-16 surrogate halves
         ]).chr(Encoding::UTF_8)
end

def utf8string(length)

def utf8string(length)
  ratio = char_space_ratio
  (1..length.to_i).map do
    space_or_utf8_char ratio
  end.join
end