Module: PgAnonymize::ActiveRecordAnonymizer::ClassMethods

Defined in:
lib/pg_anonymize.rb

Instance Method Summary collapse

Instance Method Details

#after_anonymizeObject



22
23
24
# File 'lib/pg_anonymize.rb', line 22

def after_anonymize
  @after_anonymize
end

#anonymize_with(options) ⇒ Object



8
9
10
11
12
# File 'lib/pg_anonymize.rb', line 8

def anonymize_with(options)
  options[:skip_columns]&.each { |cn| skip_columns << cn }
  options[:replace_columns]&.each { |cn| replace_columns << cn }
  @after_anonymize = options[:after] if options[:after]
end

#dump_anonymizedObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/pg_anonymize.rb', line 34

def dump_anonymized
  Rails.application.eager_load!
  klasses = ApplicationRecord.descendants - [Delayed::Backend::ActiveRecord::Job, Doorkeeper::AccessGrant, Doorkeeper::AccessToken, Doorkeeper::Application, WaitFor, AppLog]
  klasses.each do |klass|
    (puts "-- skipping #{name}" if klass.skip_on_anonymize?; next) if klass.abstract_class? || klass.skip_on_anonymize?
    puts "-- #{klass.name} replace_columns: #{klass.replace_columns}, skip_columns: #{klass.skip_columns}"
    conn = klass.connection.raw_connection
    puts "DELETE FROM #{klass.table_name};"
    puts "COPY #{klass.table_name} (#{(klass.column_names - klass.skip_columns).map { |c| "\"#{c}\"" }.join(', ')}) FROM STDIN;"
    klass.replace_columns.tap do |rc|
      conn.exec("COPY (SELECT #{(klass.column_names - klass.skip_columns).map { |cn| "#{rc.include?(cn.to_sym) ? 'md5(random()::text)' : "\"#{cn}\""} AS #{cn}" }.join(', ')} FROM #{klass.table_name}) TO STDOUT;")
    end
    buf = ''
    $stdout.puts(buf) while buf = conn.get_copy_data
    puts '\\.'
  end

  klasses.each do |klass|
    if block = klass.after_anonymize
      puts "-- #{klass.name}.after_anonymize"
      puts block.call
    end
  end
end

#replace_columnsObject



18
19
20
# File 'lib/pg_anonymize.rb', line 18

def replace_columns
  @replace_columns ||= []
end

#skip_columnsObject



14
15
16
# File 'lib/pg_anonymize.rb', line 14

def skip_columns
  @skip_columns ||= []
end

#skip_on_anonymizeObject



26
27
28
# File 'lib/pg_anonymize.rb', line 26

def skip_on_anonymize
  @skip_on_anonymize = true
end

#skip_on_anonymize?Boolean



30
31
32
# File 'lib/pg_anonymize.rb', line 30

def skip_on_anonymize?
  @skip_on_anonymize
end