Class: ActiveStash::Assess::ColumnNameRules

Inherits:
Object
  • Object
show all
Defined in:
lib/active_stash/assess/column_name_rules.rb

Overview

Rules for checking column names for sensitive data.

Constant Summary collapse

ERR_PII =
"AS0001"
ERR_PHI =
"AS0002"
ERR_FINANCIAL =
"AS0003"
ERR_AUTH =
"AS0004"
RULES =
{ name: 'last_name', display_name: 'names', column_names: %w[name fname firstname lastname lname surname], error_code: ERR_PII },
{ name: 'phone', display_name: 'phone numbers', column_names: %w[phone phonenumber], error_code: ERR_PII },
{ name: 'date_of_birth', display_name: 'dates of birth', column_names: %w[dateofbirth birthday dob], error_code: ERR_PII },
{ name: 'address', display_name: 'addresses', column_names: %w[address city suburb state county country zip zipcode postalcode postcode postal], error_code: ERR_PII },
{ name: 'oauth_token', display_name: 'OAuth tokens', column_names: %w[accesstoken refreshtoken], error_code: ERR_AUTH },
{ name: 'email', display_name: 'emails', column_names: ['email'], error_code: ERR_PII },
{ name: 'ip_address', display_name: 'IP addresses', column_names: %w[ip ipaddress], error_code: ERR_PII },
{ name: 'credit_card_number', display_name: 'credit card numbers', column_names: %w[ccn creditcardnumber], error_code: ERR_FINANCIAL },
{ name: 'social_security_number', display_name: 'social security numbers', column_names: %w[ssn socialsecuritynumber], error_code: ERR_PII },
{ name: 'gender', display_name: 'genders', column_names: ['gender'], error_code: ERR_PII },
{ name: 'nationality', display_name: 'nationalities', column_names: ['nationality'], error_code: ERR_PII },
{ name: 'tax_file_number', display_name: 'tax file numbers', column_names: %w[tfn taxfilenumber], error_code: ERR_FINANCIAL },
{ name: 'medicare_number', display_name: 'medicare numbers', column_names: ['medicarenumber'], error_code: ERR_PHI }

Class Method Summary collapse

Class Method Details

.check(field_names) ⇒ Hash<String, Array>

Check the given field names for names of fields that likely contain sensitive data.

Field names are singularized and underscores are removed before checks run.

and values contain an array of hashes with details on the checks.

Returns:

  • (Hash<String, Array>)

    a hash where keys are the names of fields that likely contain sensitive data



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/active_stash/assess/column_name_rules.rb', line 34

def self.check(field_names)
  {}.tap do |matches|
    field_names.each do |field_name|
      matches[field_name] ||= []

      normalized_field_name = field_name.gsub("_", "").singularize
      suspects = RULES.select { |rule| rule[:column_names].include?(normalized_field_name) }

      if suspects.size > 0
        matches[field_name] << suspects
        matches[field_name].flatten!
      end
    end
  end
end