Class: MaskedDataGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/data_veil/mask_data_generator.rb

Class Method Summary collapse

Class Method Details

.generate_date_masked_value(config) ⇒ Object



32
33
34
35
36
# File 'lib/data_veil/mask_data_generator.rb', line 32

def self.generate_date_masked_value(config)
  start_date = Date.parse(config[:start_date] || "1970-01-01")
  end_date = Date.parse(config[:end_date] || Date.today.to_s)
  Faker::Date.between(from: start_date, to: end_date)
end

.generate_enum_masked_value(config) ⇒ Object

Raises:

  • (ArgumentError)


38
39
40
41
42
43
# File 'lib/data_veil/mask_data_generator.rb', line 38

def self.generate_enum_masked_value(config)
  values = config[:values]
  raise ArgumentError, "Enum values must be specified" if values.nil? || values.empty?

  values.sample
end

.generate_integer_masked_value(config) ⇒ Object



20
21
22
23
24
# File 'lib/data_veil/mask_data_generator.rb', line 20

def self.generate_integer_masked_value(config)
  min = config[:min] || 0
  max = config[:max] || 100
  Faker::Number.between(from: min, to: max)
end

.generate_masked_value(mask_type, config = {}) ⇒ Object



45
46
47
48
49
50
51
52
# File 'lib/data_veil/mask_data_generator.rb', line 45

def self.generate_masked_value(mask_type, config = {})
  strategy = mask_strategies[mask_type]
  raise ArgumentError, "Unknown mask type: #{mask_type}" unless strategy

  strategy.call(config.transform_keys(&:to_sym))
rescue StandardError => e
  raise ArgumentError, "Error generating masked value for #{mask_type}: #{e.message}"
end

.generate_password_masked_value(config) ⇒ Object



26
27
28
29
30
# File 'lib/data_veil/mask_data_generator.rb', line 26

def self.generate_password_masked_value(config)
  min_length = config[:min_length] || 10
  max_length = config[:max_length] || 20
  Faker::Internet.password(min_length: min_length, max_length: max_length)
end

.mask_strategiesObject



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/data_veil/mask_data_generator.rb', line 4

def self.mask_strategies
  @mask_strategies ||= {
    "uuid" => ->(_) { Faker::Internet.uuid },
    "email" => ->(_) { Faker::Internet.unique.email },
    "string" => ->(config) { Faker::Lorem.characters(number: config[:length] || 20) },
    "postcode" => ->(_) { Faker::Base.numerify("###-####", leading_zero: true) },
    "tel" => ->(_) { Faker::PhoneNumber.phone_number },
    "first_name" => ->(_) { Faker::Name.first_name },
    "last_name" => ->(_) { Faker::Name.last_name },
    "integer" => method(:generate_integer_masked_value),
    "password" => method(:generate_password_masked_value),
    "date" => method(:generate_date_masked_value),
    "enum" => method(:generate_enum_masked_value)
  }.freeze
end