class AttrMasker::Maskers::Replacing

Replacing masker replaces every character of string which is being masked with replacement one, preserving the length of the masked string (provided that a replacement string contains a single character, which is a typical case). Optionally, non-alphanumeric characters like dashes or spaces may be left unchanged.

@example Would mask “Adam West” as “XXXXXXXXX”

class User < ActiveRecord::Base
  m = AttrMasker::Maskers::Replacing.new(replacement: "X")
  attr_masker :name, :masker => m
end

@example Would mask “123-456-789” as “XXX-XXX-XXX”

class User < ActiveRecord::Base
  m = AttrMasker::Maskers::Replacing.new(
      replacement: "X", alphanum_only: true)
  attr_masker :phone, :masker => m
end

Attributes

alphanum_only[R]
replacement[R]

Public Class Methods

new(replacement: "*", alphanum_only: false) click to toggle source

@param replacement [String] replacement string @param alphanum_only [Boolean] whether to leave non-alphanumeric

characters unchanged or not
# File lib/attr_masker/maskers/replacing.rb, line 30
def initialize(replacement: "*", alphanum_only: false)
  replacement = "" if replacement.nil?
  @replacement = replacement
  @alphanum_only = alphanum_only
end

Public Instance Methods

call(value:, **_opts) click to toggle source
# File lib/attr_masker/maskers/replacing.rb, line 36
def call(value:, **_opts)
  return value unless value.is_a? String

  if alphanum_only
    value.gsub(/[[:alnum:]]/, replacement)
  else
    replacement * value.size
  end
end