data-anonymization 0.3.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -1
- data/.rvmrc +1 -1
- data/.travis.yml +2 -0
- data/Gemfile +2 -0
- data/README.md +295 -258
- data/bin/datanon +57 -0
- data/data-anonymization.gemspec +2 -1
- data/examples/blacklist_dsl.rb +42 -0
- data/examples/mongodb_blacklist_dsl.rb +38 -0
- data/examples/mongodb_whitelist_dsl.rb +44 -0
- data/examples/whitelist_dsl.rb +63 -0
- data/lib/core/database.rb +21 -3
- data/lib/core/field.rb +5 -2
- data/lib/core/fields_missing_strategy.rb +30 -0
- data/lib/core/table_errors.rb +32 -0
- data/lib/data-anonymization.rb +11 -0
- data/lib/parallel/table.rb +8 -1
- data/lib/strategy/base.rb +35 -14
- data/lib/strategy/blacklist.rb +1 -1
- data/lib/strategy/field/anonymize_array.rb +28 -0
- data/lib/strategy/field/contact/random_address.rb +12 -0
- data/lib/strategy/field/contact/random_city.rb +12 -0
- data/lib/strategy/field/contact/random_phone_number.rb +4 -0
- data/lib/strategy/field/contact/random_province.rb +12 -0
- data/lib/strategy/field/contact/random_zipcode.rb +12 -0
- data/lib/strategy/field/datetime/anonymize_date.rb +15 -0
- data/lib/strategy/field/datetime/anonymize_datetime.rb +19 -0
- data/lib/strategy/field/datetime/anonymize_time.rb +19 -0
- data/lib/strategy/field/datetime/date_delta.rb +10 -0
- data/lib/strategy/field/datetime/date_time_delta.rb +9 -0
- data/lib/strategy/field/datetime/time_delta.rb +8 -0
- data/lib/strategy/field/default_anon.rb +4 -1
- data/lib/strategy/field/email/gmail_template.rb +8 -0
- data/lib/strategy/field/email/random_email.rb +7 -0
- data/lib/strategy/field/email/random_mailinator_email.rb +5 -0
- data/lib/strategy/field/fields.rb +4 -0
- data/lib/strategy/field/name/random_first_name.rb +10 -0
- data/lib/strategy/field/name/random_full_name.rb +10 -2
- data/lib/strategy/field/name/random_last_name.rb +9 -0
- data/lib/strategy/field/name/random_user_name.rb +5 -0
- data/lib/strategy/field/number/random_big_decimal_delta.rb +6 -0
- data/lib/strategy/field/number/random_float.rb +4 -0
- data/lib/strategy/field/number/random_float_delta.rb +6 -0
- data/lib/strategy/field/number/random_integer.rb +4 -0
- data/lib/strategy/field/number/random_integer_delta.rb +6 -0
- data/lib/strategy/field/string/formatted_string_numbers.rb +10 -6
- data/lib/strategy/field/string/lorem_ipsum.rb +9 -0
- data/lib/strategy/field/string/random_formatted_string.rb +39 -0
- data/lib/strategy/field/string/random_string.rb +6 -0
- data/lib/strategy/field/string/random_url.rb +7 -1
- data/lib/strategy/field/string/select_from_database.rb +7 -5
- data/lib/strategy/field/string/select_from_file.rb +7 -0
- data/lib/strategy/field/string/select_from_list.rb +8 -0
- data/lib/strategy/field/string/string_template.rb +11 -0
- data/lib/strategy/mongodb/anonymize_field.rb +44 -0
- data/lib/strategy/mongodb/blacklist.rb +29 -0
- data/lib/strategy/mongodb/whitelist.rb +62 -0
- data/lib/strategy/strategies.rb +10 -1
- data/lib/strategy/whitelist.rb +7 -2
- data/lib/thor/helpers/mongodb_dsl_generator.rb +66 -0
- data/lib/thor/helpers/rdbms_dsl_generator.rb +36 -0
- data/lib/thor/templates/mongodb_whitelist_template.erb +15 -0
- data/lib/thor/templates/whitelist_template.erb +21 -0
- data/lib/utils/database.rb +4 -0
- data/lib/utils/parallel_progress_bar.rb +24 -0
- data/lib/utils/progress_bar.rb +34 -22
- data/lib/utils/random_string.rb +3 -2
- data/lib/utils/random_string_chars_only.rb +3 -5
- data/lib/utils/template_helper.rb +44 -0
- data/lib/version.rb +1 -1
- data/spec/acceptance/mongodb_blacklist_spec.rb +75 -0
- data/spec/acceptance/mongodb_whitelist_spec.rb +107 -0
- data/spec/core/fields_missing_strategy_spec.rb +26 -0
- data/spec/strategy/field/name/random_first_name_spec.rb +1 -1
- data/spec/strategy/field/name/random_full_name_spec.rb +12 -7
- data/spec/strategy/field/name/random_last_name_spec.rb +1 -1
- data/spec/strategy/field/string/random_formatted_string_spec.rb +39 -0
- data/spec/strategy/field/string/select_from_file_spec.rb +21 -0
- data/spec/strategy/mongodb/anonymize_field_spec.rb +52 -0
- data/spec/utils/random_float_spec.rb +12 -0
- data/spec/utils/random_string_char_only_spec.rb +12 -0
- data/spec/utils/template_helper_spec.rb +14 -0
- metadata +56 -6
- data/blacklist_dsl.rb +0 -17
- data/blacklist_nosql_dsl.rb +0 -36
- data/whitelist_dsl.rb +0 -42
data/lib/strategy/blacklist.rb
CHANGED
@@ -7,7 +7,7 @@ module DataAnon
|
|
7
7
|
database_field_name = record.attributes.select { |k,v| k.downcase == field }.keys[0]
|
8
8
|
field_value = record.attributes[database_field_name]
|
9
9
|
unless field_value.nil? || is_primary_key?(database_field_name)
|
10
|
-
field = DataAnon::Core::Field.new(database_field_name, field_value, index, record)
|
10
|
+
field = DataAnon::Core::Field.new(database_field_name, field_value, index, record, @name)
|
11
11
|
record[database_field_name] = strategy.anonymize(field)
|
12
12
|
end
|
13
13
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module DataAnon
|
2
|
+
module Strategy
|
3
|
+
module Field
|
4
|
+
|
5
|
+
|
6
|
+
class AnonymizeArray
|
7
|
+
|
8
|
+
def self.user_defaults user_defaults
|
9
|
+
@@user_defaults = user_defaults
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize strategy
|
13
|
+
@strategy = strategy
|
14
|
+
end
|
15
|
+
|
16
|
+
def anonymize field
|
17
|
+
field.value.collect do |v|
|
18
|
+
strategy = @strategy || @@user_defaults[v.class.to_s.downcase.to_sym]
|
19
|
+
strategy.anonymize DataAnon::Core::Field.new(field.name, v, field.row_number, field.ar_record, field.table_name)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -2,6 +2,18 @@ module DataAnon
|
|
2
2
|
module Strategy
|
3
3
|
module Field
|
4
4
|
|
5
|
+
# Generates address using the [geojson](http://www.geojson.org/geojson-spec.html) format file. The default US/UK file chooses randomly from 300 addresses.
|
6
|
+
# The large data set can be downloaded from [here](http://www.infochimps.com/datasets/simplegeo-places-dump)
|
7
|
+
#
|
8
|
+
# !!!ruby
|
9
|
+
# anonymize('Address').using FieldStrategy::RandomAddress.region_US
|
10
|
+
#
|
11
|
+
# !!!ruby
|
12
|
+
# anonymize('Address').using FieldStrategy::RandomAddress.region_UK
|
13
|
+
#
|
14
|
+
# !!!ruby
|
15
|
+
# # get your own geo_json file and use it
|
16
|
+
# anonymize('Address').using FieldStrategy::RandomAddress.new('my_geo_json.json')
|
5
17
|
|
6
18
|
class RandomAddress < GeojsonBase
|
7
19
|
|
@@ -2,6 +2,18 @@ module DataAnon
|
|
2
2
|
module Strategy
|
3
3
|
module Field
|
4
4
|
|
5
|
+
# Similar to RandomAddress, generates city using the [geojson](http://www.geojson.org/geojson-spec.html) format file. The default US/UK file chooses randomly from 300 addresses.
|
6
|
+
# The large data set can be downloaded from [here](http://www.infochimps.com/datasets/simplegeo-places-dump)
|
7
|
+
#
|
8
|
+
# !!!ruby
|
9
|
+
# anonymize('City').using FieldStrategy::RandomCity.region_US
|
10
|
+
#
|
11
|
+
# !!!ruby
|
12
|
+
# anonymize('City').using FieldStrategy::RandomCity.region_UK
|
13
|
+
#
|
14
|
+
# !!!ruby
|
15
|
+
# # get your own geo_json file and use it
|
16
|
+
# anonymize('City').using FieldStrategy::RandomCity.new('my_geo_json.json')
|
5
17
|
|
6
18
|
class RandomCity < GeojsonBase
|
7
19
|
|
@@ -2,6 +2,10 @@ module DataAnon
|
|
2
2
|
module Strategy
|
3
3
|
module Field
|
4
4
|
|
5
|
+
# Keeping the format same it changes each digit in the string with random digit.
|
6
|
+
#
|
7
|
+
# !!!ruby
|
8
|
+
# anonymize('PhoneNumber').using FieldStrategy::RandomPhoneNumber.new
|
5
9
|
|
6
10
|
class RandomPhoneNumber < FormattedStringNumber
|
7
11
|
|
@@ -2,6 +2,18 @@ module DataAnon
|
|
2
2
|
module Strategy
|
3
3
|
module Field
|
4
4
|
|
5
|
+
# Similar to RandomAddress, generates province using the [geojson](http://www.geojson.org/geojson-spec.html) format file. The default US/UK file chooses randomly from 300 addresses.
|
6
|
+
# The large data set can be downloaded from [here](http://www.infochimps.com/datasets/simplegeo-places-dump)
|
7
|
+
#
|
8
|
+
# !!!ruby
|
9
|
+
# anonymize('Province').using FieldStrategy::RandomProvince.region_US
|
10
|
+
#
|
11
|
+
# !!!ruby
|
12
|
+
# anonymize('Province').using FieldStrategy::RandomProvince.region_UK
|
13
|
+
#
|
14
|
+
# !!!ruby
|
15
|
+
# # get your own geo_json file and use it
|
16
|
+
# anonymize('Province').using FieldStrategy::RandomProvince.new('my_geo_json.json')
|
5
17
|
|
6
18
|
class RandomProvince < GeojsonBase
|
7
19
|
|
@@ -2,6 +2,18 @@ module DataAnon
|
|
2
2
|
module Strategy
|
3
3
|
module Field
|
4
4
|
|
5
|
+
# Similar to RandomAddress, generates zipcode using the [geojson](http://www.geojson.org/geojson-spec.html) format file. The default US/UK file chooses randomly from 300 addresses.
|
6
|
+
# The large data set can be downloaded from [here](http://www.infochimps.com/datasets/simplegeo-places-dump)
|
7
|
+
#
|
8
|
+
# !!!ruby
|
9
|
+
# anonymize('Address').using FieldStrategy::RandomZipcode.region_US
|
10
|
+
#
|
11
|
+
# !!!ruby
|
12
|
+
# anonymize('Address').using FieldStrategy::RandomZipcode.region_UK
|
13
|
+
#
|
14
|
+
# !!!ruby
|
15
|
+
# # get your own geo_json file and use it
|
16
|
+
# anonymize('Address').using FieldStrategy::RandomZipcode.new('my_geo_json.json')
|
5
17
|
|
6
18
|
class RandomZipcode < GeojsonBase
|
7
19
|
|
@@ -2,6 +2,21 @@ module DataAnon
|
|
2
2
|
module Strategy
|
3
3
|
module Field
|
4
4
|
|
5
|
+
# Anonmizes day and month fields within natural range based on true/false input for that field. By defaut both fields are
|
6
|
+
# anonymized
|
7
|
+
#
|
8
|
+
# !!!ruby
|
9
|
+
# # anonymizes month and leaves day unchanged
|
10
|
+
# anonymize('DateOfBirth').using FieldStrategy::AnonymizeDate.new(true,false)
|
11
|
+
#
|
12
|
+
# In addition to customizing which fields you want anonymized, there are some helper methods which allow for quick anonymization
|
13
|
+
#
|
14
|
+
# ```ruby
|
15
|
+
# # anonymizes only the month field
|
16
|
+
# anonymize('DateOfBirth').using FieldStrategy::AnonymizeDate.only_month
|
17
|
+
# # anonymizes only the day field
|
18
|
+
# anonymize('DateOfBirth').using FieldStrategy::AnonymizeDate.only_day
|
19
|
+
|
5
20
|
class AnonymizeDate
|
6
21
|
|
7
22
|
|
@@ -2,6 +2,25 @@ module DataAnon
|
|
2
2
|
module Strategy
|
3
3
|
module Field
|
4
4
|
|
5
|
+
# Anonymizes each field(except year and seconds) within the natural range (e.g. hour between 1-24 and day within the month) based on true/false
|
6
|
+
# input for that field. By default, all fields are anonymized.
|
7
|
+
#
|
8
|
+
# !!!ruby
|
9
|
+
# # anonymizes month and hour fields, leaving the day and minute fields untouched
|
10
|
+
# anonymize('DateOfBirth').using FieldStrategy::AnonymizeDateTime.new(true,false,true,false)
|
11
|
+
#
|
12
|
+
# In addition to customizing which fields you want anonymized, there are some helper methods which allow for quick anonymization
|
13
|
+
#
|
14
|
+
# !!!ruby
|
15
|
+
# # anonymizes only the month field
|
16
|
+
# anonymize('DateOfBirth').using FieldStrategy::AnonymizeDateTime.only_month
|
17
|
+
# # anonymizes only the day field
|
18
|
+
# anonymize('DateOfBirth').using FieldStrategy::AnonymizeDateTime.only_day
|
19
|
+
# # anonymizes only the hour field
|
20
|
+
# anonymize('DateOfBirth').using FieldStrategy::AnonymizeDateTime.only_hour
|
21
|
+
# # anonymizes only the minute field
|
22
|
+
# anonymize('DateOfBirth').using FieldStrategy::AnonymizeDateTime.only_minute
|
23
|
+
|
5
24
|
class AnonymizeDateTime < AnonymizeTime
|
6
25
|
|
7
26
|
private
|
@@ -2,6 +2,25 @@ module DataAnon
|
|
2
2
|
module Strategy
|
3
3
|
module Field
|
4
4
|
|
5
|
+
# Anonymizes each field(except year and seconds) within the natural range (e.g. hour between 1-24 and day within the month) based on true/false
|
6
|
+
# input for that field. By default, all fields are anonymized.
|
7
|
+
#
|
8
|
+
# !!!ruby
|
9
|
+
# # anonymizes month and hour fields, leaving the day and minute fields untouched
|
10
|
+
# anonymize('DateOfBirth').using FieldStrategy::AnonymizeTime.new(true,false,true,false)
|
11
|
+
#
|
12
|
+
# In addition to customizing which fields you want anonymized, there are some helper methods which allow for quick anonymization
|
13
|
+
#
|
14
|
+
# !!!ruby
|
15
|
+
# # anonymizes only the month field
|
16
|
+
# anonymize('DateOfBirth').using FieldStrategy::AnonymizeTime.only_month
|
17
|
+
# # anonymizes only the day field
|
18
|
+
# anonymize('DateOfBirth').using FieldStrategy::AnonymizeTime.only_day
|
19
|
+
# # anonymizes only the hour field
|
20
|
+
# anonymize('DateOfBirth').using FieldStrategy::AnonymizeTime.only_hour
|
21
|
+
# # anonymizes only the minute field
|
22
|
+
# anonymize('DateOfBirth').using FieldStrategy::AnonymizeTime.only_minute
|
23
|
+
|
5
24
|
class AnonymizeTime
|
6
25
|
|
7
26
|
DEFAULT_ANONYMIZATION = true
|
@@ -2,6 +2,16 @@ module DataAnon
|
|
2
2
|
module Strategy
|
3
3
|
module Field
|
4
4
|
|
5
|
+
# Shifts date randomly within given delta range. Default shits date within 10 days + or -
|
6
|
+
#
|
7
|
+
# !!!ruby
|
8
|
+
# anonymize('DateOfBirth').using FieldStrategy::AnonymizeDate.new
|
9
|
+
#
|
10
|
+
# !!!ruby
|
11
|
+
# # shifts date within 25 days
|
12
|
+
# anonymize('DateOfBirth').using FieldStrategy::DateDelta.new(25)
|
13
|
+
#
|
14
|
+
|
5
15
|
class DateDelta
|
6
16
|
|
7
17
|
DEFAULT_DAY_DELTA = 10
|
@@ -2,6 +2,15 @@ module DataAnon
|
|
2
2
|
module Strategy
|
3
3
|
module Field
|
4
4
|
|
5
|
+
# Shifts data randomly within given range. Default shifts date within 10 days + or - and shifts time within 30 minutes.
|
6
|
+
#
|
7
|
+
# !!!ruby
|
8
|
+
# anonymize('DateOfBirth').using FieldStrategy::DateTimeDelta.new
|
9
|
+
#
|
10
|
+
# !!!ruby
|
11
|
+
# # shifts date within 20 days and time within 50 minutes
|
12
|
+
# anonymize('DateOfBirth').using FieldStrategy::DateTimeDelta.new(20, 50)
|
13
|
+
|
5
14
|
class DateTimeDelta
|
6
15
|
|
7
16
|
DEFAULT_DAY_DELTA = 10
|
@@ -2,6 +2,14 @@ module DataAnon
|
|
2
2
|
module Strategy
|
3
3
|
module Field
|
4
4
|
|
5
|
+
# Shifts data randomly within given range. Default shifts date within 10 days + or - and shifts time within 30 minutes.
|
6
|
+
#
|
7
|
+
# !!!ruby
|
8
|
+
# anonymize('DateOfBirth').using FieldStrategy::TimeDelta.new
|
9
|
+
#
|
10
|
+
# !!!ruby
|
11
|
+
# # shifts date within 20 days and time within 50 minutes
|
12
|
+
# anonymize('DateOfBirth').using FieldStrategy::TimeDelta.new(20, 50)
|
5
13
|
|
6
14
|
class TimeDelta < DateTimeDelta
|
7
15
|
end
|
@@ -12,17 +12,20 @@ module DataAnon
|
|
12
12
|
:datetime => FieldStrategy::DateTimeDelta.new,
|
13
13
|
:time => FieldStrategy::TimeDelta.new,
|
14
14
|
:date => FieldStrategy::DateDelta.new,
|
15
|
+
:array => FieldStrategy::AnonymizeArray.new(nil),
|
15
16
|
:trueclass => FieldStrategy::RandomBoolean.new,
|
17
|
+
:"bson::objectid" => FieldStrategy::Whitelist.new,
|
16
18
|
:falseclass => FieldStrategy::RandomBoolean.new
|
17
19
|
}
|
18
20
|
|
19
21
|
def initialize user_defaults = {}
|
20
22
|
@user_defaults = DEFAULT_STRATEGIES.merge user_defaults
|
23
|
+
FieldStrategy::AnonymizeArray.user_defaults @user_defaults
|
21
24
|
end
|
22
25
|
|
23
26
|
def anonymize field
|
24
27
|
strategy = @user_defaults[field.value.class.to_s.downcase.to_sym]
|
25
|
-
raise "No strategy defined for datatype #{field.value.class}. Use 'default_field_strategies' option in your script. Refer to http://sunitparekh.github.com/data-anonymization/#default-field-strategies for more details. " unless strategy
|
28
|
+
raise "No strategy defined for datatype #{field.value.class}. Use 'default_field_strategies' option in your script. Refer to http://sunitparekh.github.com/data-anonymization/#default-field-strategies for more details. #{field.inspect}" unless strategy
|
26
29
|
strategy.anonymize field
|
27
30
|
end
|
28
31
|
|
@@ -1,6 +1,14 @@
|
|
1
1
|
module DataAnon
|
2
2
|
module Strategy
|
3
3
|
module Field
|
4
|
+
|
5
|
+
# Generates a valid unique gmail address by taking advantage of the gmail + strategy. Takes in a valid gmail username and
|
6
|
+
# generates emails of the form username+<number>@gmail.com
|
7
|
+
#
|
8
|
+
# !!!ruby
|
9
|
+
# anonymize('Email').using FieldStrategy::GmailTemplate.new('username')
|
10
|
+
#
|
11
|
+
|
4
12
|
class GmailTemplate
|
5
13
|
|
6
14
|
def initialize username = 'someusername'
|
@@ -2,6 +2,13 @@ module DataAnon
|
|
2
2
|
module Strategy
|
3
3
|
module Field
|
4
4
|
|
5
|
+
# Generates email randomly using the given HOSTNAME and TLD.
|
6
|
+
# By defaults generates hostname randomly along with email id.
|
7
|
+
#
|
8
|
+
# !!!ruby
|
9
|
+
# anonymize('Email').using FieldStrategy::RandomEmail.new('thoughtworks','com')
|
10
|
+
#
|
11
|
+
|
5
12
|
class RandomEmail
|
6
13
|
|
7
14
|
TLDS = ['com','org','net','edu','gov','mil','biz','info']
|
@@ -2,6 +2,11 @@ module DataAnon
|
|
2
2
|
module Strategy
|
3
3
|
module Field
|
4
4
|
|
5
|
+
# Generates random email using mailinator hostname. e.g. <randomstring>@mailinator.com
|
6
|
+
#
|
7
|
+
# !!!ruby
|
8
|
+
# anonymize('Email').using FieldStrategy::RandomMailinatorEmail.new
|
9
|
+
|
5
10
|
class RandomMailinatorEmail
|
6
11
|
|
7
12
|
def initialize
|
@@ -3,12 +3,16 @@ require 'strategy/field/random_boolean'
|
|
3
3
|
|
4
4
|
require 'strategy/field/anonymous'
|
5
5
|
|
6
|
+
#array
|
7
|
+
require 'strategy/field/anonymize_array'
|
8
|
+
|
6
9
|
# string
|
7
10
|
require 'strategy/field/string/lorem_ipsum'
|
8
11
|
require 'strategy/field/string/string_template'
|
9
12
|
require 'strategy/field/string/random_string'
|
10
13
|
require 'strategy/field/string/random_url'
|
11
14
|
require 'strategy/field/string/formatted_string_numbers'
|
15
|
+
require 'strategy/field/string/random_formatted_string'
|
12
16
|
|
13
17
|
require 'strategy/field/string/select_from_file'
|
14
18
|
require 'strategy/field/string/select_from_list'
|
@@ -2,6 +2,16 @@ module DataAnon
|
|
2
2
|
module Strategy
|
3
3
|
module Field
|
4
4
|
|
5
|
+
# Randomly picks up first name from the predefined list in the file. Default [file](https://raw.github.com/sunitparekh/data-anonymization/master/resources/first_names.txt) is part of the gem.
|
6
|
+
# File should contain first name on each line.
|
7
|
+
#
|
8
|
+
# !!!ruby ```ruby
|
9
|
+
# anonymize('FirstName').using FieldStrategy::RandomFirstName.new
|
10
|
+
#
|
11
|
+
# !!!ruby
|
12
|
+
# anonymize('FirstName').using FieldStrategy::RandomFirstName.new('my_first_names.txt')
|
13
|
+
#
|
14
|
+
|
5
15
|
class RandomFirstName < SelectFromFile
|
6
16
|
|
7
17
|
def initialize file_path = nil
|
@@ -2,6 +2,14 @@ module DataAnon
|
|
2
2
|
module Strategy
|
3
3
|
module Field
|
4
4
|
|
5
|
+
# Generates full name using the RandomFirstName and RandomLastName strategies.
|
6
|
+
#
|
7
|
+
# !!!ruby
|
8
|
+
# anonymize('FullName').using FieldStrategy::RandomFullName.new
|
9
|
+
#
|
10
|
+
# !!!ruby
|
11
|
+
# anonymize('FullName').using FieldStrategy::RandomLastName.new('my_first_names.txt', 'my_last_names.txt')
|
12
|
+
|
5
13
|
class RandomFullName
|
6
14
|
|
7
15
|
def initialize first_names = nil, last_names = nil
|
@@ -13,10 +21,10 @@ module DataAnon
|
|
13
21
|
|
14
22
|
name_words = field.value.split(' ')
|
15
23
|
|
16
|
-
anonymized_first_name = @first_name_anonymizer.anonymize(
|
24
|
+
anonymized_first_name = @first_name_anonymizer.anonymize(field)
|
17
25
|
anonymized_last_name = ""
|
18
26
|
for counter in (1..name_words.size-1)
|
19
|
-
anonymized_last_name = anonymized_last_name + " " + @last_name_anonymizer.anonymize(
|
27
|
+
anonymized_last_name = anonymized_last_name + " " + @last_name_anonymizer.anonymize(field)
|
20
28
|
end
|
21
29
|
|
22
30
|
return anonymized_first_name + anonymized_last_name
|
@@ -2,6 +2,15 @@ module DataAnon
|
|
2
2
|
module Strategy
|
3
3
|
module Field
|
4
4
|
|
5
|
+
# Randomly picks up last name from the predefined list in the file. Default [file](https://raw.github.com/sunitparekh/data-anonymization/master/resources/last_names.txt) is part of the gem.
|
6
|
+
# File should contain last name on each line.
|
7
|
+
#
|
8
|
+
# !!!ruby
|
9
|
+
# anonymize('LastName').using FieldStrategy::RandomLastName.new
|
10
|
+
#
|
11
|
+
# !!!ruby
|
12
|
+
# anonymize('LastName').using FieldStrategy::RandomLastName.new('my_last_names.txt')
|
13
|
+
|
5
14
|
class RandomLastName < SelectFromFile
|
6
15
|
|
7
16
|
def initialize file_path = nil
|
@@ -3,6 +3,12 @@ require 'bigdecimal'
|
|
3
3
|
module DataAnon
|
4
4
|
module Strategy
|
5
5
|
module Field
|
6
|
+
|
7
|
+
# Shifts the current value randomly within given delta + and -. Default is 10.0
|
8
|
+
#
|
9
|
+
# !!!ruby
|
10
|
+
# anonymize('points').using FieldStrategy::RandomFloatDelta.new(2.5)
|
11
|
+
|
6
12
|
class RandomBigDecimalDelta
|
7
13
|
|
8
14
|
def initialize delta = 100.0
|