db_obfuscation 0.0.1

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.
Files changed (70) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/Gemfile +13 -0
  4. data/Gemfile.lock +83 -0
  5. data/LICENSE +21 -0
  6. data/README.md +121 -0
  7. data/TODO +15 -0
  8. data/bin/console +25 -0
  9. data/bin/db_obfuscation +121 -0
  10. data/bin/obfuscation_test +54 -0
  11. data/cli/db_dump.rb +29 -0
  12. data/cli/migrator.rb +26 -0
  13. data/cli/seeder.rb +52 -0
  14. data/db_obfuscation.gemspec +25 -0
  15. data/features/bin/dump.feature +21 -0
  16. data/features/bin/obfuscation.feature +12 -0
  17. data/features/bin/test_database_tasks.feature +16 -0
  18. data/features/support.rb +1 -0
  19. data/lib/db_obfuscation.rb +50 -0
  20. data/lib/db_obfuscation/batch_formulator.rb +26 -0
  21. data/lib/db_obfuscation/config.rb +43 -0
  22. data/lib/db_obfuscation/database.rb +8 -0
  23. data/lib/db_obfuscation/environment.rb +14 -0
  24. data/lib/db_obfuscation/filtering.rb +56 -0
  25. data/lib/db_obfuscation/filtering/column.rb +40 -0
  26. data/lib/db_obfuscation/filtering/truncation.rb +18 -0
  27. data/lib/db_obfuscation/obfuscation_strategy.rb +22 -0
  28. data/lib/db_obfuscation/obfuscator.rb +65 -0
  29. data/lib/db_obfuscation/query_builder.rb +62 -0
  30. data/lib/db_obfuscation/truncation.rb +39 -0
  31. data/lib/db_obfuscation/util/trigger.rb +83 -0
  32. data/lib/db_obfuscation/version.rb +4 -0
  33. data/spec/cli/db_dump_spec.rb +33 -0
  34. data/spec/cli/migrator_spec.rb +59 -0
  35. data/spec/cli/seeder_spec.rb +33 -0
  36. data/spec/config/database.yml +5 -0
  37. data/spec/config/table_strategies/table_1.yml +3 -0
  38. data/spec/config/table_strategies/table_2.yml +4 -0
  39. data/spec/config/table_strategies/truncation_table_1.yml +3 -0
  40. data/spec/config/table_strategies/whitelisted_table_1.yml +3 -0
  41. data/spec/config/truncation_patterns.yml +2 -0
  42. data/spec/config/whitelisted_tables.yml +1 -0
  43. data/spec/db_obfuscation/batch_formulator_spec.rb +36 -0
  44. data/spec/db_obfuscation/config_spec.rb +60 -0
  45. data/spec/db_obfuscation/database_spec.rb +10 -0
  46. data/spec/db_obfuscation/filtering/column_spec.rb +82 -0
  47. data/spec/db_obfuscation/filtering/truncation_spec.rb +41 -0
  48. data/spec/db_obfuscation/filtering_spec.rb +39 -0
  49. data/spec/db_obfuscation/obfuscation_strategy_spec.rb +43 -0
  50. data/spec/db_obfuscation/obfuscator_spec.rb +150 -0
  51. data/spec/db_obfuscation/query_builder_spec.rb +259 -0
  52. data/spec/db_obfuscation/truncation_spec.rb +31 -0
  53. data/spec/db_obfuscation/util/trigger_spec.rb +126 -0
  54. data/spec/integration/obfuscation_spec.rb +69 -0
  55. data/spec/spec_helper.rb +3 -0
  56. data/spec/test_db_setup/migrations/1_add_table_1.rb +18 -0
  57. data/spec/test_db_setup/migrations/2_add_table_2.rb +19 -0
  58. data/spec/test_db_setup/migrations/3_add_truncation_table_1.rb +14 -0
  59. data/spec/test_db_setup/migrations/4_add_whitelisted_table_1.rb +14 -0
  60. data/spec/test_db_setup/migrations/5_add_table_without_any_user_defined_obfuscation_strategies.rb +18 -0
  61. data/spec/test_db_setup/migrations/6_add_table_without_any_obfuscatable_columns.rb +15 -0
  62. data/spec/test_db_setup/migrations/7_add_audit_truncation_table.rb +13 -0
  63. data/spec/test_db_setup/seeds/audit_truncation_table.yml +7 -0
  64. data/spec/test_db_setup/seeds/table_1.yml +13 -0
  65. data/spec/test_db_setup/seeds/table_2.yml +15 -0
  66. data/spec/test_db_setup/seeds/table_without_any_obfuscatable_columns.yml +7 -0
  67. data/spec/test_db_setup/seeds/table_without_any_user_defined_obfuscation_strategies.yml +13 -0
  68. data/spec/test_db_setup/seeds/truncation_table_1.yml +9 -0
  69. data/spec/test_db_setup/seeds/whitelisted_table_1.yml +9 -0
  70. metadata +159 -0
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+ require 'db_obfuscation/truncation'
3
+
4
+ module DbObfuscation
5
+ describe Truncation do
6
+ describe '.truncate' do
7
+ around(:each) do |example|
8
+ DB.transaction(rollback: :always) do
9
+ example.run
10
+ end
11
+ end
12
+
13
+ it 'truncates tables that match the user specified truncation patterns' do
14
+ expect(DB[:truncation_table_1].all.count).to be > 0
15
+ expect(DB[:audit_truncation_table].all.count).to be > 0
16
+ described_class.truncate
17
+
18
+ expect(DB[:truncation_table_1].all.count).to eq 0
19
+ expect(DB[:audit_truncation_table].all.count).to eq 0
20
+ end
21
+
22
+ end
23
+
24
+ describe '.tables' do
25
+ it 'returns the list of truncation tables' do
26
+ expect(described_class.tables).to match_array [:truncation_table_1,
27
+ :audit_truncation_table]
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,126 @@
1
+ require 'spec_helper'
2
+ require 'db_obfuscation/util/trigger'
3
+
4
+ def create_trigger_function
5
+ DbObfuscation::DB.run <<-sql
6
+ create or replace function fake_function() returns trigger
7
+ as $$ begin end $$ language plpgsql;
8
+ sql
9
+ end
10
+
11
+ def drop_trigger_function
12
+ DbObfuscation::DB.run <<-sql
13
+ drop function fake_function()
14
+ sql
15
+ end
16
+
17
+ def create_trigger(table_name)
18
+ create_trigger_function
19
+
20
+ <<-sql
21
+ CREATE TRIGGER audit_#{table_name}
22
+ AFTER UPDATE ON #{table_name}
23
+ FOR EACH ROW
24
+ EXECUTE PROCEDURE fake_function();
25
+ sql
26
+ end
27
+
28
+ def drop_trigger(table_name)
29
+ DbObfuscation::DB.run <<-sql
30
+ DROP TRIGGER audit_#{table_name}
31
+ ON #{table_name}
32
+ sql
33
+
34
+ drop_trigger_function
35
+ end
36
+
37
+ def trigger_status
38
+ <<-sql
39
+ SELECT triggers.tgenabled as status,
40
+ tables.relname as table_name
41
+ FROM pg_trigger triggers, pg_class tables
42
+ WHERE triggers.tgrelid = tables.oid
43
+ AND tables.relname !~ '^pg_'
44
+ AND triggers.tgname LIKE 'audit_%'
45
+ sql
46
+ end
47
+
48
+ module DbObfuscation::Util
49
+ describe Trigger do
50
+ around(:each) do |example|
51
+ DbObfuscation::DB.run(create_trigger('table_1')) rescue nil
52
+ DbObfuscation::DB.run(create_trigger('table_2')) rescue nil
53
+
54
+ example.run
55
+
56
+ DbObfuscation::DB.run(drop_trigger('table_1')) rescue nil
57
+ DbObfuscation::DB.run(drop_trigger('table_2')) rescue nil
58
+ end
59
+
60
+ it 'returns tables with triggers' do
61
+ tables_with_triggers = ['table_1', 'table_2']
62
+ expect(described_class.tables).to match_array(
63
+ tables_with_triggers
64
+ )
65
+ end
66
+
67
+ it 'drops all the triggers in the database' do
68
+ described_class.drop(:all)
69
+ expect(described_class.tables).to eq([])
70
+ end
71
+
72
+ it 'drops triggers for given table' do
73
+ described_class.drop('table_1')
74
+ expect(described_class.tables).to eq(['table_2'])
75
+ end
76
+
77
+ it 'disable trigger for given table' do
78
+ status = [
79
+ { status: 'D', table_name: 'table_1' },
80
+ { status: 'O', table_name: 'table_2' },
81
+ ]
82
+ described_class.disable('table_1')
83
+ expect(DbObfuscation::DB[trigger_status].all).to match_array(status)
84
+ end
85
+
86
+ it 'disables triggers for all the tables' do
87
+ status = [
88
+ { status: 'D', table_name: 'table_1' },
89
+ { status: 'D', table_name: 'table_2' },
90
+ ]
91
+ described_class.disable(:all)
92
+ expect(DbObfuscation::DB[trigger_status].all).to match_array(status)
93
+ end
94
+
95
+ it 'enables trigger for given table' do
96
+ status = [
97
+ { status: 'O', table_name: 'table_1' },
98
+ { status: 'D', table_name: 'table_2' },
99
+ ]
100
+ described_class.disable(:all)
101
+ described_class.enable('table_1')
102
+ expect(DbObfuscation::DB[trigger_status].all).to match_array(status)
103
+ end
104
+
105
+ it 'enables all the triggers' do
106
+ status = [
107
+ { status: 'O', table_name: 'table_1' },
108
+ { status: 'O', table_name: 'table_2' },
109
+ ]
110
+ described_class.disable(:all)
111
+ described_class.enable(:all)
112
+ expect(DbObfuscation::DB[trigger_status].all).to match_array(status)
113
+ end
114
+
115
+ describe '.trigger?' do
116
+ it 'returns true if table has a trigger' do
117
+ expect(described_class.exists?('table_1')).to eq true
118
+ end
119
+
120
+ it 'returns false if table does not have a trigger' do
121
+ expect(described_class.exists?('whitelisted_table_1')).
122
+ to eq false
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+ require 'db_obfuscation'
3
+ require 'db_obfuscation/truncation'
4
+
5
+ describe 'DbObfuscation' do
6
+ around(:each) do |example|
7
+ DbObfuscation::DB.transaction(rollback: :always) do
8
+ example.run
9
+ end
10
+ end
11
+
12
+ it 'replaces existing data columns with fake data' do
13
+ record = DbObfuscation::DB[:table_1].first
14
+ original_value = record[:field_1]
15
+ expect(original_value).to eq 'original_field_1_1'
16
+
17
+ DbObfuscation.obfuscate(100)
18
+
19
+ record = DbObfuscation::DB[:table_1].where(id: record[:id]).first
20
+ obfuscated_value = record[:field_1]
21
+ expect(obfuscated_value).to_not eq 'original_field_1_1'
22
+ end
23
+
24
+ it 'obfuscates date field when included in the config file' do
25
+ record = DbObfuscation::DB[:table_1].first
26
+ original_date = record[:date_field]
27
+ expect(original_date.to_s).to eq '2001-01-01'
28
+
29
+ DbObfuscation.obfuscate(100)
30
+
31
+ record = DbObfuscation::DB[:table_1].where(id: record[:id]).first
32
+ obfuscated_date = record[:date_field]
33
+ expect(obfuscated_date.to_s).to_not eq '2001-01-01'
34
+ end
35
+
36
+ it 'does not obfuscate whitelisted column for a table' do
37
+ record = DbObfuscation::DB[:table_2].first
38
+ original_value = record[:field_2]
39
+ expect(original_value).to eq 'original_field_2_1'
40
+
41
+ DbObfuscation.obfuscate(100)
42
+
43
+ record = DbObfuscation::DB[:table_2].where(id: record[:id]).first
44
+ obfuscated_value = record[:field_2]
45
+ expect(obfuscated_value).to eq 'original_field_2_1'
46
+ end
47
+
48
+ it 'does not obfuscate the whitelisted tables' do
49
+ record = DbObfuscation::DB[:whitelisted_table_1].first
50
+ original_value = record[:field_1]
51
+ expect(original_value).to eq 'whitelisted_field_1_1'
52
+
53
+ DbObfuscation.obfuscate(100)
54
+
55
+ record = DbObfuscation::DB[:whitelisted_table_1].where(id: record[:id]).first
56
+ obfuscated_value = record[:field_1]
57
+ expect(obfuscated_value).to eq 'whitelisted_field_1_1'
58
+ end
59
+
60
+ it 'truncates the truncation table list' do
61
+ original_data_count = DbObfuscation::DB[:truncation_table_1].count
62
+ expect(original_data_count).to be > 0
63
+
64
+ DbObfuscation::Truncation.truncate
65
+
66
+ new_data_count = DbObfuscation::DB[:truncation_table_1].count
67
+ expect(new_data_count).to eq 0
68
+ end
69
+ end
@@ -0,0 +1,3 @@
1
+ require 'db_obfuscation/environment'
2
+ DbObfuscation.config_dir = DbObfuscation::ROOT.join('spec/config')
3
+ DbObfuscation.logging = Logger.new('test_logs')
@@ -0,0 +1,18 @@
1
+ Sequel.migration do
2
+ up do
3
+ create_table(:table_1) do
4
+ primary_key :id, type: Bignum
5
+ String :field_1
6
+ String :field_2
7
+ Date :date_field
8
+ DateTime :created_at
9
+ DateTime :updated_at
10
+ TrueClass :boolean_field
11
+ Bignum :integer_field
12
+ end
13
+ end
14
+
15
+ down do
16
+ drop_table(:table_1)
17
+ end
18
+ end
@@ -0,0 +1,19 @@
1
+ Sequel.migration do
2
+ up do
3
+ create_table(:table_2) do
4
+ primary_key :id, type: Bignum
5
+ String :field_1
6
+ String :field_2
7
+ Date :date_field
8
+ DateTime :created_at
9
+ DateTime :updated_at
10
+ TrueClass :boolean_field
11
+ Bignum :integer_field
12
+ foreign_key :table_1_id, :table_1, type: Bignum, key: :id
13
+ end
14
+ end
15
+
16
+ down do
17
+ drop_table(:table_2)
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ Sequel.migration do
2
+ up do
3
+ create_table(:truncation_table_1) do
4
+ primary_key :id, type: Bignum
5
+ String :field_1
6
+ String :field_2
7
+ foreign_key :table_1_id, :table_1, type: Bignum, key: :id
8
+ end
9
+ end
10
+
11
+ down do
12
+ drop_table(:truncation_table_1)
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ Sequel.migration do
2
+ up do
3
+ create_table(:whitelisted_table_1) do
4
+ primary_key :id, type: Bignum
5
+ String :field_1
6
+ String :field_2
7
+ foreign_key :table_1_id, :table_1, type: Bignum, key: :id
8
+ end
9
+ end
10
+
11
+ down do
12
+ drop_table(:whitelisted_table_1)
13
+ end
14
+ end
@@ -0,0 +1,18 @@
1
+ Sequel.migration do
2
+ up do
3
+ create_table(:table_without_any_user_defined_obfuscation_strategies) do
4
+ primary_key :id, type: Bignum
5
+ String :field_1
6
+ String :field_2
7
+ Date :date_field
8
+ DateTime :created_at
9
+ DateTime :updated_at
10
+ TrueClass :boolean_field
11
+ Bignum :integer_field
12
+ end
13
+ end
14
+
15
+ down do
16
+ drop_table(:table_without_any_user_defined_obfuscation_strategies)
17
+ end
18
+ end
@@ -0,0 +1,15 @@
1
+ Sequel.migration do
2
+ up do
3
+ create_table(:table_without_any_obfuscatable_columns) do
4
+ primary_key :id, type: Bignum
5
+ DateTime :created_at
6
+ DateTime :updated_at
7
+ TrueClass :boolean_field
8
+ Bignum :integer_field
9
+ end
10
+ end
11
+
12
+ down do
13
+ drop_table(:table_without_any_obfuscatable_columns)
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ Sequel.migration do
2
+ up do
3
+ create_table(:audit_truncation_table) do
4
+ primary_key :id, type: Bignum
5
+ String :field_1
6
+ String :field_2
7
+ end
8
+ end
9
+
10
+ down do
11
+ drop_table(:audit_truncation_table)
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ row1:
2
+ field_1: 'truncation_field_1_1'
3
+ field_2: 'truncation_field_2_1'
4
+
5
+ row2:
6
+ field_1: 'truncation_field_1_2'
7
+ field_2: 'truncation_field_2_2'
@@ -0,0 +1,13 @@
1
+ row1:
2
+ field_1: 'original_field_1_1'
3
+ field_2: 'original_field_2_1'
4
+ date_field: '1/1/2001'
5
+ boolean_field: true
6
+ integer_field: 21
7
+
8
+ row2:
9
+ field_1: 'original_field_1_2'
10
+ field_2: 'original_field_2_2'
11
+ date_field: '1/2/2001'
12
+ boolean_field: false
13
+ integer_field: 22
@@ -0,0 +1,15 @@
1
+ row1:
2
+ field_1: 'original_field_1_1'
3
+ field_2: 'original_field_2_1'
4
+ date_field: '1/1/2001'
5
+ boolean_field: true
6
+ integer_field: 21
7
+ table_1_id: 1
8
+
9
+ row2:
10
+ field_1: 'original_field_1_2'
11
+ field_2: 'original_field_2_2'
12
+ date_field: '1/2/2001'
13
+ boolean_field: false
14
+ integer_field: 22
15
+ table_1_id: 2
@@ -0,0 +1,7 @@
1
+ row1:
2
+ boolean_field: true
3
+ integer_field: 21
4
+
5
+ row2:
6
+ boolean_field: false
7
+ integer_field: 22
@@ -0,0 +1,13 @@
1
+ row1:
2
+ field_1: 'original_field_1_1'
3
+ field_2: 'original_field_2_1'
4
+ date_field: '1/1/2001'
5
+ boolean_field: true
6
+ integer_field: 21
7
+
8
+ row2:
9
+ field_1: 'original_field_1_2'
10
+ field_2: 'original_field_2_2'
11
+ date_field: '1/2/2001'
12
+ boolean_field: false
13
+ integer_field: 22
@@ -0,0 +1,9 @@
1
+ row1:
2
+ field_1: 'truncation_field_1_1'
3
+ field_2: 'truncation_field_2_1'
4
+ table_1_id: 1
5
+
6
+ row2:
7
+ field_1: 'truncation_field_1_2'
8
+ field_2: 'truncation_field_2_2'
9
+ table_1_id: 2
@@ -0,0 +1,9 @@
1
+ row1:
2
+ field_1: 'whitelisted_field_1_1'
3
+ field_2: 'whitelisted_field_2_1'
4
+ table_1_id: 1
5
+
6
+ row2:
7
+ field_1: 'whitelisted_field_1_2'
8
+ field_2: 'whitelisted_field_2_2'
9
+ table_1_id: 2
metadata ADDED
@@ -0,0 +1,159 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: db_obfuscation
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Case Commons, LLC
8
+ - Rajat Agrawal
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2015-07-21 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: |2
15
+ db_obfuscation is a gem that helps to prepare a production size obfuscated database. This obfuscated database can be used for internal testing purposes like user acceptance testing, QA/Regression testing. db_obfuscation takes a production database and updates data in every row in each table with fake data. db_obfuscation ensures that associations between different tables are still maintained.
16
+ email:
17
+ - casebook-dev@googlegroups.com
18
+ - agrawal.rajat.89@gmail.com
19
+ executables:
20
+ - db_obfuscation
21
+ extensions: []
22
+ extra_rdoc_files: []
23
+ files:
24
+ - ".gitignore"
25
+ - Gemfile
26
+ - Gemfile.lock
27
+ - LICENSE
28
+ - README.md
29
+ - TODO
30
+ - bin/console
31
+ - bin/db_obfuscation
32
+ - bin/obfuscation_test
33
+ - cli/db_dump.rb
34
+ - cli/migrator.rb
35
+ - cli/seeder.rb
36
+ - db_obfuscation.gemspec
37
+ - features/bin/dump.feature
38
+ - features/bin/obfuscation.feature
39
+ - features/bin/test_database_tasks.feature
40
+ - features/support.rb
41
+ - lib/db_obfuscation.rb
42
+ - lib/db_obfuscation/batch_formulator.rb
43
+ - lib/db_obfuscation/config.rb
44
+ - lib/db_obfuscation/database.rb
45
+ - lib/db_obfuscation/environment.rb
46
+ - lib/db_obfuscation/filtering.rb
47
+ - lib/db_obfuscation/filtering/column.rb
48
+ - lib/db_obfuscation/filtering/truncation.rb
49
+ - lib/db_obfuscation/obfuscation_strategy.rb
50
+ - lib/db_obfuscation/obfuscator.rb
51
+ - lib/db_obfuscation/query_builder.rb
52
+ - lib/db_obfuscation/truncation.rb
53
+ - lib/db_obfuscation/util/trigger.rb
54
+ - lib/db_obfuscation/version.rb
55
+ - spec/cli/db_dump_spec.rb
56
+ - spec/cli/migrator_spec.rb
57
+ - spec/cli/seeder_spec.rb
58
+ - spec/config/database.yml
59
+ - spec/config/table_strategies/table_1.yml
60
+ - spec/config/table_strategies/table_2.yml
61
+ - spec/config/table_strategies/truncation_table_1.yml
62
+ - spec/config/table_strategies/whitelisted_table_1.yml
63
+ - spec/config/truncation_patterns.yml
64
+ - spec/config/whitelisted_tables.yml
65
+ - spec/db_obfuscation/batch_formulator_spec.rb
66
+ - spec/db_obfuscation/config_spec.rb
67
+ - spec/db_obfuscation/database_spec.rb
68
+ - spec/db_obfuscation/filtering/column_spec.rb
69
+ - spec/db_obfuscation/filtering/truncation_spec.rb
70
+ - spec/db_obfuscation/filtering_spec.rb
71
+ - spec/db_obfuscation/obfuscation_strategy_spec.rb
72
+ - spec/db_obfuscation/obfuscator_spec.rb
73
+ - spec/db_obfuscation/query_builder_spec.rb
74
+ - spec/db_obfuscation/truncation_spec.rb
75
+ - spec/db_obfuscation/util/trigger_spec.rb
76
+ - spec/integration/obfuscation_spec.rb
77
+ - spec/spec_helper.rb
78
+ - spec/test_db_setup/migrations/1_add_table_1.rb
79
+ - spec/test_db_setup/migrations/2_add_table_2.rb
80
+ - spec/test_db_setup/migrations/3_add_truncation_table_1.rb
81
+ - spec/test_db_setup/migrations/4_add_whitelisted_table_1.rb
82
+ - spec/test_db_setup/migrations/5_add_table_without_any_user_defined_obfuscation_strategies.rb
83
+ - spec/test_db_setup/migrations/6_add_table_without_any_obfuscatable_columns.rb
84
+ - spec/test_db_setup/migrations/7_add_audit_truncation_table.rb
85
+ - spec/test_db_setup/seeds/audit_truncation_table.yml
86
+ - spec/test_db_setup/seeds/table_1.yml
87
+ - spec/test_db_setup/seeds/table_2.yml
88
+ - spec/test_db_setup/seeds/table_without_any_obfuscatable_columns.yml
89
+ - spec/test_db_setup/seeds/table_without_any_user_defined_obfuscation_strategies.yml
90
+ - spec/test_db_setup/seeds/truncation_table_1.yml
91
+ - spec/test_db_setup/seeds/whitelisted_table_1.yml
92
+ homepage: https://github.com/CaseCommonsDevOps/db_obfuscation
93
+ licenses:
94
+ - MIT
95
+ metadata: {}
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ requirements: []
111
+ rubyforge_project:
112
+ rubygems_version: 2.4.2
113
+ signing_key:
114
+ specification_version: 4
115
+ summary: A gem to obfuscate a production database with fake values for testing with
116
+ a production size database
117
+ test_files:
118
+ - features/bin/dump.feature
119
+ - features/bin/obfuscation.feature
120
+ - features/bin/test_database_tasks.feature
121
+ - features/support.rb
122
+ - spec/cli/db_dump_spec.rb
123
+ - spec/cli/migrator_spec.rb
124
+ - spec/cli/seeder_spec.rb
125
+ - spec/config/database.yml
126
+ - spec/config/table_strategies/table_1.yml
127
+ - spec/config/table_strategies/table_2.yml
128
+ - spec/config/table_strategies/truncation_table_1.yml
129
+ - spec/config/table_strategies/whitelisted_table_1.yml
130
+ - spec/config/truncation_patterns.yml
131
+ - spec/config/whitelisted_tables.yml
132
+ - spec/db_obfuscation/batch_formulator_spec.rb
133
+ - spec/db_obfuscation/config_spec.rb
134
+ - spec/db_obfuscation/database_spec.rb
135
+ - spec/db_obfuscation/filtering/column_spec.rb
136
+ - spec/db_obfuscation/filtering/truncation_spec.rb
137
+ - spec/db_obfuscation/filtering_spec.rb
138
+ - spec/db_obfuscation/obfuscation_strategy_spec.rb
139
+ - spec/db_obfuscation/obfuscator_spec.rb
140
+ - spec/db_obfuscation/query_builder_spec.rb
141
+ - spec/db_obfuscation/truncation_spec.rb
142
+ - spec/db_obfuscation/util/trigger_spec.rb
143
+ - spec/integration/obfuscation_spec.rb
144
+ - spec/spec_helper.rb
145
+ - spec/test_db_setup/migrations/1_add_table_1.rb
146
+ - spec/test_db_setup/migrations/2_add_table_2.rb
147
+ - spec/test_db_setup/migrations/3_add_truncation_table_1.rb
148
+ - spec/test_db_setup/migrations/4_add_whitelisted_table_1.rb
149
+ - spec/test_db_setup/migrations/5_add_table_without_any_user_defined_obfuscation_strategies.rb
150
+ - spec/test_db_setup/migrations/6_add_table_without_any_obfuscatable_columns.rb
151
+ - spec/test_db_setup/migrations/7_add_audit_truncation_table.rb
152
+ - spec/test_db_setup/seeds/audit_truncation_table.yml
153
+ - spec/test_db_setup/seeds/table_1.yml
154
+ - spec/test_db_setup/seeds/table_2.yml
155
+ - spec/test_db_setup/seeds/table_without_any_obfuscatable_columns.yml
156
+ - spec/test_db_setup/seeds/table_without_any_user_defined_obfuscation_strategies.yml
157
+ - spec/test_db_setup/seeds/truncation_table_1.yml
158
+ - spec/test_db_setup/seeds/whitelisted_table_1.yml
159
+ has_rdoc: