pg_anonymize 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5e2b48748cae6af48751961d313fed03a6b6fa30ab58e73071ecd12beffcf1ef
4
- data.tar.gz: 78160e36bbefc3b8a72fc52144e9636714d8f8482bdc8029bdf60bd4c2441ba9
3
+ metadata.gz: bedd6ba17d4bbf0effd6d773d6309cb9f222438dcd7a3d83d2dded96e9ece85a
4
+ data.tar.gz: 905ec1b02d74f67fd4df99b4aa4f6958aee49c5648842b39cd8dacf6ab486e6f
5
5
  SHA512:
6
- metadata.gz: 5f81d4a21cd5001459f3e01e0a50304886a149dd5e5352028d0bef420f844a43dc5672d6f9801c672187cfea5b9f7e9411fa5a632f79248869de3b1d2a8500fc
7
- data.tar.gz: c9765beb919fb8621215156528384a18e4cbba41c8af91fec76c8dbb6e7134a9ef498a6cbc46fd81a89186e255ab4f68114bd0b156702a7aa62cad4159191573
6
+ metadata.gz: 59e3658c73e1b10d5b4b7afd1ddc4823920099af389a93ff34641bcea38d195c5450c48cb5cdb43788c3962c94c4aaf69c4273eb5c7fc64ea7939e74797fabc5
7
+ data.tar.gz: 10cd581cf25b3444b203b367ac70c86ae0e82a0bdc26a6f61436a9e8c51dca43d9212b3a8165ba933cd94952eadcf96a16556159c373a7de951556fb785b06c3
@@ -2,67 +2,6 @@
2
2
 
3
3
  require 'pg_anonymize/version'
4
4
 
5
- module PgAnonymize
6
- module ActiveRecordAnonymizer
7
- module ClassMethods
8
- def anonymize_with(options)
9
- options[:skip_columns]&.each { |cn| skip_columns << cn }
10
- options[:replace_columns]&.each { |cn| replace_columns << cn }
11
- @after_anonymize = options[:after] if options[:after]
12
- end
5
+ class PgAnonymize
13
6
 
14
- def skip_columns
15
- @skip_columns ||= []
16
- end
17
-
18
- def replace_columns
19
- @replace_columns ||= []
20
- end
21
-
22
- def after_anonymize
23
- @after_anonymize
24
- end
25
-
26
- def skip_on_anonymize
27
- @skip_on_anonymize = true
28
- end
29
-
30
- def skip_on_anonymize?
31
- @skip_on_anonymize
32
- end
33
-
34
- def dump_anonymized
35
- Rails.application.eager_load!
36
- klasses = ApplicationRecord.descendants - [Delayed::Backend::ActiveRecord::Job, Doorkeeper::AccessGrant, Doorkeeper::AccessToken, Doorkeeper::Application, WaitFor, AppLog]
37
- klasses.each do |klass|
38
- (puts "-- skipping #{name}" if klass.skip_on_anonymize?; next) if klass.abstract_class? || klass.skip_on_anonymize?
39
- puts "-- #{klass.name} replace_columns: #{klass.replace_columns}, skip_columns: #{klass.skip_columns}"
40
- conn = klass.connection.raw_connection
41
- puts "DELETE FROM #{klass.table_name};"
42
- puts "COPY #{klass.table_name} (#{(klass.column_names - klass.skip_columns).map { |c| "\"#{c}\"" }.join(', ')}) FROM STDIN;"
43
- klass.replace_columns.tap do |rc|
44
- 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;")
45
- end
46
- buf = ''
47
- $stdout.puts(buf) while buf = conn.get_copy_data
48
- puts '\\.'
49
- end
50
-
51
- klasses.each do |klass|
52
- if block = klass.after_anonymize
53
- puts "-- #{klass.name}.after_anonymize"
54
- puts block.call
55
- end
56
- end
57
- end
58
- end
59
-
60
- def self.included(klass)
61
- klass.send :extend, PgAnonymize::ActiveRecordAnonymizer::ClassMethods
62
- end
63
- end
64
-
65
- class ApplicationRecord
66
- include PgAnonymize::ActiveRecordAnonymizer
67
- end
68
7
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PgAnonymize
4
- VERSION = '0.2.1'
4
+ VERSION = '0.2.3'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_anonymize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arash Kashani
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-21 00:00:00.000000000 Z
11
+ date: 2017-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -164,7 +164,6 @@ files:
164
164
  - bin/console
165
165
  - bin/setup
166
166
  - lib/pg_anonymize.rb
167
- - lib/pg_anonymize/anonymizer.rb
168
167
  - lib/pg_anonymize/version.rb
169
168
  - pg_anonymize.gemspec
170
169
  homepage: https://github.com/akashani62/pg_anonymize
@@ -1,94 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module PgAnonymize
4
- class Anonymizer
5
- class << ::ActiveRecord::Base
6
- def do
7
- end
8
-
9
- def anonymize_with(options)
10
- options[:skip_columns]&.each { |cn| skip_columns << cn }
11
- options[:replace_columns]&.each { |cn| replace_columns << cn }
12
- @after_anonymize = options[:after] if options[:after]
13
- end
14
-
15
- def skip_columns
16
- @skip_columns ||= []
17
- end
18
-
19
- def replace_columns
20
- @replace_columns ||= []
21
- end
22
-
23
- attr_reader :after_anonymize
24
-
25
- def skip_on_anonymize
26
- @skip_on_anonymize = true
27
- end
28
-
29
- def skip_on_anonymize?
30
- @skip_on_anonymize
31
- end
32
-
33
- def dump_anonymized
34
- Rails.application.eager_load!
35
- klasses = ActiveRecord::Base.descendants - [Delayed::Backend::ActiveRecord::Job, Doorkeeper::AccessGrant, Doorkeeper::AccessToken, Doorkeeper::Application, WaitFor, AppLog]
36
- klasses.each do |klass|
37
- (puts "-- skipping #{name}" if klass.skip_on_anonymize?; next) if klass.abstract_class? || klass.skip_on_anonymize?
38
- puts "-- #{klass.name} replace_columns: #{klass.replace_columns}, skip_columns: #{klass.skip_columns}"
39
- conn = klass.connection.raw_connection
40
- puts "DELETE FROM #{klass.table_name};"
41
- puts "COPY #{klass.table_name} (#{(klass.column_names - klass.skip_columns).map { |c| "\"#{c}\"" }.join(', ')}) FROM STDIN;"
42
- klass.replace_columns.tap do |rc|
43
- 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;")
44
- end
45
- buf = ''
46
- $stdout.puts(buf) while buf = conn.get_copy_data
47
- puts '\\.'
48
- end
49
-
50
- klasses.each do |klass|
51
- if block = klass.after_anonymize
52
- puts "-- #{klass.name}.after_anonymize"
53
- puts block.call
54
- end
55
- end
56
- end
57
- end
58
- def sql_text
59
- puts "DELETE FROM #{table};"
60
- puts "COPY #{table} (#{copy_map}) FROM STDIN;"
61
- conn.exec copy
62
- $stdout.puts(buf) while conn.get_copy_data
63
- puts '\\.'
64
- end
65
-
66
- def buf
67
- ''
68
- end
69
-
70
- def copy_map
71
- columns.map { |c| "\"#{c}\"" }.join(', ')
72
- end
73
-
74
- def copy
75
- "COPY (SELECT #{columns} FROM #{table}) TO STDOUT;"
76
- end
77
-
78
- def columns
79
- columns.map { |_cn| dont_know_what_to_call_this }
80
- end
81
-
82
- def dont_know_what_to_call_this
83
- rc.include?(cn.to_sym) ? encrypt : dont_encrypt
84
- end
85
-
86
- def dont_encrypt
87
- "\"#{cn}\""
88
- end
89
-
90
- def encrypt
91
- 'md5(random()::text)'
92
- end
93
- end
94
- end