Skip to content

Instantly share code, notes, and snippets.

@mboeh
Created February 13, 2021 23:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mboeh/5f5ba557f4759bcdac1a3ff8f5a5b807 to your computer and use it in GitHub Desktop.
Save mboeh/5f5ba557f4759bcdac1a3ff8f5a5b807 to your computer and use it in GitHub Desktop.
playing with some styles for obfuscating text
class NoiseCensor
def initialize(chars = "&^%@*#")
@noise = chars.split(//).shuffle.cycle
end
def censor(text)
@noise.take(text.length).join
end
end
class StarCensor
def initialize(star = '*')
@star = star
end
def censor(text)
@star * text.length
end
end
class JumbleCensor
def censor(text)
newtext = text = text.split(//)
newtext = text.shuffle until newtext != text
newtext.join
end
end
class VoidCensor
def censor(text)
''
end
end
class DevowelizeCensor
def initialize(base = VoidCensor.new, vowels: "aeiou")
@base = base
@regex = /[#{vowels}]/i
end
def censor(text)
text.gsub(@regex) {|char| @base.censor(char) }
end
end
class InnerCensor
def initialize(base)
@base = base
end
def censor(text)
text[0] + @base.censor(text[1..-2]) + text[-1]
end
end
class TextRedactor
def initialize(censor, forbidden_words)
@censor = censor
@forbidden_words = forbidden_words
end
def redact(text)
text.gsub(/\b(\w+)\b/) {|word|
if @forbidden_words.include?(word.downcase)
@censor.censor(word)
else
word
end
}
end
end
bad_text = <<EOF
Are you interested in cryptocurrency, diamond hands, or Tesla? Then I've got a great website for you: Reddit.
- Love, Elon Musk
EOF
bad_words = %w[cryptocurrency tesla reddit elon musk diamond]
[NoiseCensor, StarCensor, JumbleCensor, DevowelizeCensor].each do |censor|
puts "== #{censor} == "
puts
redactor = TextRedactor.new(InnerCensor.new(censor.new), bad_words)
puts redactor.redact(bad_text)
puts
end
== NoiseCensor ==
Are you interested in c^*#@&%^*#@&%y, d^*#@&d hands, or T^*#a? Then I've got a great website for you: R^*#@t.
- Love, E^*n M^*k
== StarCensor ==
Are you interested in c************y, d*****d hands, or T***a? Then I've got a great website for you: R****t.
- Love, E**n M**k
== JumbleCensor ==
Are you interested in cpunrcytrorecy, dmoiand hands, or Tlesa? Then I've got a great website for you: Rdedit.
- Love, Eoln Msuk
== DevowelizeCensor ==
Are you interested in cryptcrrncy, dmnd hands, or Tsla? Then I've got a great website for you: Rddt.
- Love, Eln Msk
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment