Sha256: 33b2afcf9896855be3eb459bf934131d42a90d9bc1a7d487f01502b6677d1ca9

Contents?: true

Size: 1.72 KB

Versions: 1

Compression:

Stored size: 1.72 KB

Contents

# lib/real_data_tests/data_anonymizer.rb
require 'faker'

module RealDataTests
  class DataAnonymizer
    def initialize(configuration)
      @configuration = configuration
    end

    def anonymize_records(records)
      records.map do |record|
        anonymize_record(record)
      end
    end

    def anonymize_record(record)
      return record unless should_anonymize?(record)

      anonymization_rules = @configuration.anonymization_rules[record.class.name]

      anonymization_rules.each do |attribute, anonymizer|
        begin
          new_value = case anonymizer
                     when String
                       # Handle legacy string-based Faker calls
                       process_faker_string(anonymizer)
                     when Proc, Lambda
                       # Handle lambda-based anonymizers
                       anonymizer.call(record)
                     else
                       raise Error, "Unsupported anonymizer type: #{anonymizer.class}"
                     end

          record.send("#{attribute}=", new_value)
        rescue => e
          raise Error, "Failed to anonymize #{attribute} using #{anonymizer.inspect}: #{e.message}"
        end
      end

      record
    end

    private

    def should_anonymize?(record)
      @configuration.anonymization_rules.key?(record.class.name)
    end

    def process_faker_string(faker_method)
      # Support legacy string format like "Faker::Name.first_name"
      faker_class, faker_method = faker_method.split('::')[1..].join('::').split('.')
      faker_class = Object.const_get("Faker::#{faker_class}")
      faker_class.send(faker_method)
    rescue => e
      raise Error, "Failed to process Faker method '#{faker_method}': #{e.message}"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
real_data_tests-0.1.0 lib/real_data_tests/data_anonymizer.rb