Sha256: 1cf7bd426b0bb75de9deed40d50c660e50006c9dd8c74c530a04b40603d96e3d

Contents?: true

Size: 1.58 KB

Versions: 2

Compression:

Stored size: 1.58 KB

Contents

require 'kenny_speak/version'

#
# To Follow
#
class KennySpeak
    def initialize
        @letters = ['mmm', 'mmp', 'mmf', 'mpm', 'mpp', 'mpf', 'mfm', 'mfp', 'mff', 'pmm', 'pmp', 'pmf', 'ppm', 'ppp', 'ppf', 'pfm', 'pfp', 'pff', 'fmm', 'fmp', 'fmf', 'fpm', 'fpp', 'fpf', 'ffm', 'ffp']
    end

    def to_kenny(str)
        result = ''

        str.split('').each do |c|
            result << if c =~ /[[:alpha:]]/
                          kenny_from_letter(c)
                      else
                          c
                      end
        end
        result
    end

    def from_kenny(str)
        result = ''

        str.gsub(/\s+/m, ' ').strip.split(' ').each do |word|
            word.scan(/.{1,3}/).each do |tuple|
                result << letter_from_kenny(tuple)
            end
            result << ' '
        end
        result.rstrip
    end

    private

    def kenny_from_letter(letter)
        upper = false

        upper = true if letter =~ /[[:upper:]]/

        tmp = letter.downcase

        offset = tmp.ord - 97

        tuple = @letters[offset]

        return tuple.capitalize if upper

        tuple
    end

    def letter_from_kenny(tuple)
        return tuple if tuple.length != 3                # Not a tuple
        return tuple if tuple[/[a-zA-Z0-9]+/] != tuple   # Not just letters

        upper = false

        upper = true if tuple.chr =~ /[[:upper:]]/

        tmp = tuple.downcase

        offset = @letters.index(tmp)

        return tuple if offset.nil?

        letter = (offset.to_i + 97).chr

        return letter.upcase if upper

        letter
    end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
kenny_speak-1.0.0 lib/kenny_speak.rb
kenny_speak-0.1.0 lib/kenny_speak.rb