class Fontlike::Transmuter

Constants

ALL_CHAR_BASE_LOWER
ALL_CHAR_BASE_UPPER
CHAR_BASE
DEFAULT_BASE

Attributes

lower_base[RW]
upper_base[RW]

Public Class Methods

new(options) click to toggle source
# File lib/fontlike/transmuter.rb, line 19
def initialize(options)
  if options[:style] == :random
    self.upper_base = lambda { ALL_CHAR_BASE_UPPER.sample }
    self.lower_base = lambda { ALL_CHAR_BASE_LOWER.sample }
  else
    up = CHAR_BASE.fetch(options[:style], DEFAULT_BASE).fetch(:upper)
    lw = CHAR_BASE.fetch(options[:style], DEFAULT_BASE).fetch(:lower)

    self.upper_base = lambda { up }
    self.lower_base = lambda { lw }
  end
end

Public Instance Methods

transmute(str) click to toggle source
# File lib/fontlike/transmuter.rb, line 32
def transmute(str)
  str.split("").map do |char|
    if char.match(/[A-Z]/)
      *prefix, suffix = upper_base.call
      last = suffix + char.ord - 'A'.ord
      [*prefix, last].pack('U*')
    elsif char.match(/[a-z]/)
      *prefix, suffix = lower_base.call
      last = suffix + char.ord - 'a'.ord
      [*prefix, last].pack('U*')
    else
      char
    end
  end.join("")
end