db_obfuscation 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: