Module: PgAnonymize::ActiveRecordAnonymizer::ClassMethods
- Defined in:
- lib/pg_anonymize.rb
Instance Method Summary collapse
- #after_anonymize ⇒ Object
- #anonymize_with(options) ⇒ Object
- #dump_anonymized ⇒ Object
- #replace_columns ⇒ Object
- #skip_columns ⇒ Object
- #skip_on_anonymize ⇒ Object
- #skip_on_anonymize? ⇒ Boolean
Instance Method Details
#after_anonymize ⇒ Object
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() [:skip_columns]&.each { |cn| skip_columns << cn } [:replace_columns]&.each { |cn| replace_columns << cn } @after_anonymize = [:after] if [:after] end |
#dump_anonymized ⇒ Object
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_columns ⇒ Object
18 19 20 |
# File 'lib/pg_anonymize.rb', line 18 def replace_columns @replace_columns ||= [] end |
#skip_columns ⇒ Object
14 15 16 |
# File 'lib/pg_anonymize.rb', line 14 def skip_columns @skip_columns ||= [] end |
#skip_on_anonymize ⇒ Object
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 |