data-anonymization 0.8.0 → 0.8.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -1
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +4 -3
  5. data/README.md +24 -8
  6. data/commands.txt +4 -0
  7. data/data-anonymization.gemspec +7 -7
  8. data/examples/blacklist_dsl.rb +3 -3
  9. data/examples/mongodb_blacklist_dsl.rb +5 -5
  10. data/examples/mongodb_whitelist_dsl.rb +7 -7
  11. data/examples/whitelist_dsl.rb +4 -4
  12. data/examples/whitelist_dsl_threads.rb +66 -0
  13. data/lib/core/field.rb +1 -1
  14. data/lib/core/table_errors.rb +1 -1
  15. data/lib/data-anonymization.rb +22 -22
  16. data/lib/strategy/base.rb +41 -1
  17. data/lib/strategy/blacklist.rb +3 -2
  18. data/lib/strategy/field/datetime/anonymize_time.rb +3 -3
  19. data/lib/strategy/field/default_anon.rb +1 -0
  20. data/lib/strategy/field/number/random_big_decimal_delta.rb +1 -1
  21. data/lib/strategy/field/string/random_url.rb +1 -1
  22. data/lib/strategy/field/string/select_from_database.rb +14 -7
  23. data/lib/strategy/strategies.rb +1 -1
  24. data/lib/thor/helpers/mongodb_dsl_generator.rb +2 -3
  25. data/lib/utils/database.rb +1 -1
  26. data/lib/utils/random_int.rb +2 -2
  27. data/lib/utils/template_helper.rb +4 -2
  28. data/lib/version.rb +1 -1
  29. data/spec/acceptance/mongodb_blacklist_spec.rb +39 -39
  30. data/spec/acceptance/mongodb_whitelist_spec.rb +45 -45
  31. data/spec/acceptance/rdbms_whitelist_spec.rb +1 -1
  32. data/spec/acceptance/rdbms_whitelist_with_primary_key_spec.rb +8 -8
  33. data/spec/core/fields_missing_strategy_spec.rb +15 -15
  34. data/spec/strategy/field/contact/random_address_spec.rb +2 -2
  35. data/spec/strategy/field/default_anon_spec.rb +3 -3
  36. data/spec/strategy/field/number/random_big_decimal_delta_spec.rb +1 -1
  37. data/spec/strategy/field/random_boolean_spec.rb +1 -1
  38. data/spec/strategy/field/whitelist_spec.rb +1 -1
  39. data/spec/strategy/mongodb/anonymize_field_spec.rb +11 -11
  40. data/spec/utils/database_spec.rb +4 -4
  41. data/spec/utils/template_helper_spec.rb +6 -6
  42. metadata +19 -18
@@ -1,26 +1,26 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe DataAnon::Core::FieldsMissingStrategy do
4
4
 
5
5
  FMS = DataAnon::Core::FieldsMissingStrategy
6
6
 
7
- it "should be able to add field for new table that doesn't exist" do
8
- users = FMS.new("users")
9
- users.missing("confirm_email")
10
- users.fields_missing_strategy.should == ["confirm_email"]
7
+ it 'should be able to add field for new table that doesnot exist' do
8
+ users = FMS.new('users')
9
+ users.missing('confirm_email')
10
+ users.fields_missing_strategy.should == ['confirm_email']
11
11
  end
12
12
 
13
- it "should be able to take care for same field appearing multiple time" do
14
- users = FMS.new("users")
15
- users.missing("confirm_email")
16
- users.missing("confirm_email")
17
- users.fields_missing_strategy.should == ["confirm_email"]
13
+ it 'should be able to take care for same field appearing multiple time' do
14
+ users = FMS.new('users')
15
+ users.missing('confirm_email')
16
+ users.missing('confirm_email')
17
+ users.fields_missing_strategy.should == ['confirm_email']
18
18
  end
19
19
 
20
- it "should be able to add multiple fields for table" do
21
- users = FMS.new("users")
22
- users.missing("confirm_email")
23
- users.missing("password_reset")
24
- users.fields_missing_strategy.should == ["confirm_email","password_reset"]
20
+ it 'should be able to add multiple fields for table' do
21
+ users = FMS.new('users')
22
+ users.missing('confirm_email')
23
+ users.missing('password_reset')
24
+ users.fields_missing_strategy.should == %w(confirm_email password_reset)
25
25
  end
26
26
  end
@@ -1,4 +1,4 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe DataAnon::Strategy::Field::RandomAddress do
4
4
 
@@ -7,6 +7,6 @@ describe DataAnon::Strategy::Field::RandomAddress do
7
7
 
8
8
  describe 'anonymized address should be different from original address' do
9
9
  let(:anonymized_address) {RandomAddress.region_US.anonymize(field)}
10
- it {anonymized_address.should_not eq("1 Infinite Loop")}
10
+ it {anonymized_address.should_not eq('1 Infinite Loop')}
11
11
  end
12
12
  end
@@ -1,4 +1,4 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe FieldStrategy::DefaultAnon do
4
4
 
@@ -29,14 +29,14 @@ describe FieldStrategy::DefaultAnon do
29
29
  let(:field) {DataAnon::Core::Field.new('int_field',2,1,nil)}
30
30
  let(:anonymized_value) {DefaultAnon.new.anonymize(field)}
31
31
 
32
- it { anonymized_value.should be_kind_of Fixnum }
32
+ it { anonymized_value.should be_kind_of Integer }
33
33
  end
34
34
 
35
35
  describe 'anonymized bignum value' do
36
36
  let(:field) {DataAnon::Core::Field.new('int_field',2348723489723847382947,1,nil)}
37
37
  let(:anonymized_value) {DefaultAnon.new.anonymize(field)}
38
38
 
39
- it { anonymized_value.should be_kind_of Bignum }
39
+ it { anonymized_value.should be_kind_of Integer }
40
40
  end
41
41
 
42
42
  describe 'anonymized string value' do
@@ -4,7 +4,7 @@ require 'bigdecimal'
4
4
  describe FieldStrategy::RandomBigDecimalDelta do
5
5
 
6
6
  RandomBigDecimalDelta = FieldStrategy::RandomBigDecimalDelta
7
- let(:field) {DataAnon::Core::Field.new('decimal_field',BigDecimal.new("53422342378687687342893.23324"),1,nil)}
7
+ let(:field) {DataAnon::Core::Field.new('decimal_field',BigDecimal("53422342378687687342893.23324"),1,nil)}
8
8
 
9
9
  describe 'anonymized big decimal should not be the same as original value' do
10
10
  let(:anonymized_value) {RandomBigDecimalDelta.new.anonymize(field)}
@@ -1,4 +1,4 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe FieldStrategy::RandomBoolean do
4
4
 
@@ -1,4 +1,4 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe FieldStrategy::Whitelist do
4
4
 
@@ -1,4 +1,4 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe DataAnon::Strategy::MongoDB::AnonymizeField do
4
4
 
@@ -6,30 +6,30 @@ describe DataAnon::Strategy::MongoDB::AnonymizeField do
6
6
  it 'should do callback recursive in case of sub document' do
7
7
  sub_document = {'key' => 'value'}
8
8
  field_strategy = {'key' => FieldStrategy::LoremIpsum.new}
9
- anonymization_strategy = double("AnonymizationStrategy")
10
- anonymization_strategy.should_receive(:anonymize_document).with(sub_document,1,field_strategy).and_return({'key' => "anonymized_value"})
9
+ anonymization_strategy = double('AnonymizationStrategy')
10
+ anonymization_strategy.should_receive(:anonymize_document).with(sub_document,1,field_strategy).and_return({'key' => 'anonymized_value'})
11
11
  field = DataAnon::Core::Field.new('sub_document_field', sub_document,1,nil)
12
12
  anonymize_field = DataAnon::Strategy::MongoDB::AnonymizeField.new(field, field_strategy,anonymization_strategy)
13
13
  anonymized_value = anonymize_field.anonymize
14
- anonymized_value['key'].should == "anonymized_value"
14
+ anonymized_value['key'].should == 'anonymized_value'
15
15
  end
16
16
 
17
17
  it 'should do callback recursive multiple time in case of array of sub document' do
18
18
  sub_documents = [{'key' => 'value1'},{'key' => 'value2'}]
19
19
  field_strategy = {'key' => FieldStrategy::LoremIpsum.new}
20
- anonymization_strategy = double("AnonymizationStrategy")
21
- anonymization_strategy.should_receive(:anonymize_document).with({'key' => 'value1'},1,field_strategy).and_return({'key' => "anonymized_value1"})
22
- anonymization_strategy.should_receive(:anonymize_document).with({'key' => 'value2'},1,field_strategy).and_return({'key' => "anonymized_value2"})
20
+ anonymization_strategy = double('AnonymizationStrategy')
21
+ anonymization_strategy.should_receive(:anonymize_document).with({'key' => 'value1'},1,field_strategy).and_return({'key' => 'anonymized_value1'})
22
+ anonymization_strategy.should_receive(:anonymize_document).with({'key' => 'value2'},1,field_strategy).and_return({'key' => 'anonymized_value2'})
23
23
  field = DataAnon::Core::Field.new('sub_document_field', sub_documents,1,nil)
24
24
  anonymize_field = DataAnon::Strategy::MongoDB::AnonymizeField.new(field, field_strategy,anonymization_strategy)
25
25
  anonymized_value = anonymize_field.anonymize
26
26
  anonymized_value.length.should == 2
27
- anonymized_value[0]['key'].should == "anonymized_value1"
28
- anonymized_value[1]['key'].should == "anonymized_value2"
27
+ anonymized_value[0]['key'].should == 'anonymized_value1'
28
+ anonymized_value[1]['key'].should == 'anonymized_value2'
29
29
  end
30
30
 
31
31
  it 'should anonymize array field data type' do
32
- anonymization_strategy = double("AnonymizationStrategy")
32
+ anonymization_strategy = double('AnonymizationStrategy')
33
33
  anonymization_strategy.should_not_receive(:anonymize_document)
34
34
  field = DataAnon::Core::Field.new('tags',['tag1','tag2'],1,nil)
35
35
  anonymize_field = DataAnon::Strategy::MongoDB::AnonymizeField.new(field,FieldStrategy::SelectFromList.new(['tag4','tag5','tag6','tag7','tag8']),anonymization_strategy)
@@ -40,7 +40,7 @@ describe DataAnon::Strategy::MongoDB::AnonymizeField do
40
40
  end
41
41
 
42
42
  it 'should anonymize field and return anonymized value using passed strategy' do
43
- anonymization_strategy = double("AnonymizationStrategy")
43
+ anonymization_strategy = double('AnonymizationStrategy')
44
44
  anonymization_strategy.should_not_receive(:anonymize_document)
45
45
  field = DataAnon::Core::Field.new('boolean_field',false,1,nil)
46
46
  anonymize_field = DataAnon::Strategy::MongoDB::AnonymizeField.new(field,FieldStrategy::RandomBoolean.new,anonymization_strategy)
@@ -16,10 +16,10 @@ describe 'Utils' do
16
16
  album.all.length > 0
17
17
  end
18
18
 
19
- it 'should test the connection to destination database' do
20
- album = DataAnon::Utils::DestinationTable.create 'Album', ['AlbumId']
21
- album.count.should == 0
22
- album.all.length == 0
19
+ it 'ignores inherited constants when creating a table with matching name' do
20
+ conditionals = DataAnon::Utils::SourceTable.create 'Conditionals'
21
+ conditionals.count.should == 0
22
+ conditionals.all.length == 0
23
23
  end
24
24
 
25
25
  end
@@ -1,14 +1,14 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
- describe "Template Helper" do
3
+ describe 'Template Helper' do
4
4
 
5
- it "should return a correctly formatted string based on input connection hash for source" do
6
- connection_hash = {:adapter => "test_adapter", :port => 5000}
5
+ it 'should return a correctly formatted string based on input connection hash for source' do
6
+ connection_hash = {adapter: 'test_adapter', port: 5000}
7
7
  DataAnon::Utils::TemplateHelper.source_connection_specs_rdbms(connection_hash).should eq(":adapter => 'test_adapter', :port => 5000")
8
8
  end
9
9
 
10
- it "should return a correctly formatted string based on input connection hash for destination" do
11
- connection_hash = {:adapter => "test_adapter", :port => 5000}
10
+ it 'should return a correctly formatted string based on input connection hash for destination' do
11
+ connection_hash = {adapter: 'test_adapter', port: 5000}
12
12
  DataAnon::Utils::TemplateHelper.destination_connection_specs_rdbms(connection_hash).should eq(":adapter => '<enter_value>', :port => '<enter_value>'")
13
13
  end
14
14
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: data-anonymization
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sunit Parekh
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-10-31 00:00:00.000000000 Z
13
+ date: 2020-05-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -18,70 +18,70 @@ dependencies:
18
18
  requirements:
19
19
  - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: '5.0'
21
+ version: '6.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - "~>"
27
27
  - !ruby/object:Gem::Version
28
- version: '5.0'
28
+ version: '6.0'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: composite_primary_keys
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - "~>"
34
34
  - !ruby/object:Gem::Version
35
- version: '9.0'
35
+ version: '12.0'
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - "~>"
41
41
  - !ruby/object:Gem::Version
42
- version: '9.0'
42
+ version: '12.0'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: activesupport
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: '5.0'
49
+ version: '6.0'
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - "~>"
55
55
  - !ruby/object:Gem::Version
56
- version: '5.0'
56
+ version: '6.0'
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: rgeo
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - "~>"
62
62
  - !ruby/object:Gem::Version
63
- version: '0.5'
63
+ version: '1.0'
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
68
  - - "~>"
69
69
  - !ruby/object:Gem::Version
70
- version: '0.5'
70
+ version: '1.0'
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: rgeo-geojson
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
75
  - - "~>"
76
76
  - !ruby/object:Gem::Version
77
- version: '0.4'
77
+ version: '2.0'
78
78
  type: :runtime
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
82
  - - "~>"
83
83
  - !ruby/object:Gem::Version
84
- version: '0.4'
84
+ version: '2.0'
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: powerbar
87
87
  requirement: !ruby/object:Gem::Requirement
@@ -102,28 +102,28 @@ dependencies:
102
102
  requirements:
103
103
  - - "~>"
104
104
  - !ruby/object:Gem::Version
105
- version: '1.9'
105
+ version: '1.12'
106
106
  type: :runtime
107
107
  prerelease: false
108
108
  version_requirements: !ruby/object:Gem::Requirement
109
109
  requirements:
110
110
  - - "~>"
111
111
  - !ruby/object:Gem::Version
112
- version: '1.9'
112
+ version: '1.12'
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: thor
115
115
  requirement: !ruby/object:Gem::Requirement
116
116
  requirements:
117
117
  - - "~>"
118
118
  - !ruby/object:Gem::Version
119
- version: '0.19'
119
+ version: 0.20.3
120
120
  type: :runtime
121
121
  prerelease: false
122
122
  version_requirements: !ruby/object:Gem::Requirement
123
123
  requirements:
124
124
  - - "~>"
125
125
  - !ruby/object:Gem::Version
126
- version: '0.19'
126
+ version: 0.20.3
127
127
  description: Data anonymization tool for RDBMS and MongoDB databases
128
128
  email:
129
129
  - parekh.sunit@gmail.com
@@ -146,11 +146,13 @@ files:
146
146
  - README.md
147
147
  - Rakefile
148
148
  - bin/datanon
149
+ - commands.txt
149
150
  - data-anonymization.gemspec
150
151
  - examples/blacklist_dsl.rb
151
152
  - examples/mongodb_blacklist_dsl.rb
152
153
  - examples/mongodb_whitelist_dsl.rb
153
154
  - examples/whitelist_dsl.rb
155
+ - examples/whitelist_dsl_threads.rb
154
156
  - lib/core/database.rb
155
157
  - lib/core/dsl.rb
156
158
  - lib/core/field.rb
@@ -296,8 +298,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
296
298
  - !ruby/object:Gem::Version
297
299
  version: '0'
298
300
  requirements: []
299
- rubyforge_project:
300
- rubygems_version: 2.5.1
301
+ rubygems_version: 3.1.2
301
302
  signing_key:
302
303
  specification_version: 4
303
304
  summary: Tool to create anonymized production data dump to use for performance and