Sha256: e2785bb7aad9650c5eba66add39f1ea96eb0104f50ad0e5cd83ca64fd0e616f5

Contents?: true

Size: 1.95 KB

Versions: 4

Compression:

Stored size: 1.95 KB

Contents

# frozen_string_literal: true

module Passweird
  # The LeetSpeak class is responsible for converting a given string
  # into leet speak (1337 5p34k) and converting it back to normal text.
  #
  # Example usage:
  #   leet_speak = Passweird::LeetSpeak.new("example")
  #   leet_string = leet_speak.leet
  #   # => "3x4mpl3"
  #   normal_string = leet_speak.unleeted
  #   # => "example"
  class LeetSpeak
    attr_reader :given_string

    LEET_CHAR_EQUIVALENTS = {
      "T" => "7", "t" => "7",
      "E" => "3", "e" => "3",
      "I" => "1", "i" => "1",
      "L" => "1", "l" => "1",
      "O" => "0", "o" => "0",
      "S" => "5", "s" => "5",
      "A" => "4", "a" => "4",
      "G" => "6", "g" => "6",
      "B" => "8", "b" => "8"
    }.freeze

    def self.leet(given_string)
      new(given_string).leet
    end

    def self.leet_all(array_of_strings)
      raise ArgumentError, "array_of_strings must be an Array" unless array_of_strings.is_a?(Array)

      array_of_strings.map { |string| leet(string) }
    end

    def self.unleeted(given_string)
      new(given_string).unleeted
    end

    def self.unleet_all(array_of_strings)
      raise ArgumentError, "array_of_strings must be an Array" unless array_of_strings.is_a?(Array)

      array_of_strings.map { |string| unleeted(string) }
    end

    def initialize(given_string)
      raise ArgumentError, "given_string must be a String" unless given_string.is_a?(String)

      @given_string = given_string
    end

    # Converts the given_string to leet speak
    #
    # @return [String] the converted leet speak string
    def leet
      given_string.gsub(/[#{LEET_CHAR_EQUIVALENTS.keys.join}]/, LEET_CHAR_EQUIVALENTS)
    end

    def leet?
      given_string != leet
    end

    # Converts the leet speak string back to normal text
    #
    # @return [String] the converted normal text string
    def unleeted
      given_string.gsub(/[#{LEET_CHAR_EQUIVALENTS.values.join}]/, LEET_CHAR_EQUIVALENTS.invert)
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
passweird-0.1.3 lib/passweird/leet_speak.rb
passweird-0.1.2 lib/passweird/leet_speak.rb
passweird-0.1.1 lib/passweird/leet_speak.rb
passweird-0.1.0 lib/passweird/leet_speak.rb