class Rack::AddressMunging::Strategy::Hex

The :Hex munging strategy

Will replace email addresses and mailto href attributes values with an hexadecimal HTML entities alternative.

Public Instance Methods

apply(munged, original) click to toggle source
# File lib/rack/address_munging/strategy/hex.rb, line 13
def apply(munged, original)
  original.each do |part|
    part = part.dup if part.frozen?
    part.gsub!(REGEXP_MAILTO) { |m| maybe_encode(m) }
    part.gsub!(REGEXP_EMAIL)  { |m| maybe_encode(m) }
    munged.write part
  end
end

Private Instance Methods

encode(str) click to toggle source
# File lib/rack/address_munging/strategy/hex.rb, line 29
def encode(str)
  to_s(str).unpack('C*').map { |c| format('&#%<c>d;', c: c) }.join
end
maybe_encode(string) click to toggle source
# File lib/rack/address_munging/strategy/hex.rb, line 24
def maybe_encode(string)
  s = to_s(string)
  email?(s.gsub(/^mailto:/, '')) ? encode(s) : s
end
to_s(string) click to toggle source

Normalize a match as a string (gsub return ActiveSupport::SafeBuffer when ActiveSupport is loaded)

# File lib/rack/address_munging/strategy/hex.rb, line 35
def to_s(string)
  string.respond_to?(:to_str) ? string.to_str : string.try(:to_s)
end