Anonymous
Anonymous is a light-weight gem that makes anonymizing ActiveRecord models easy! Remember, friends don't let friends use production data in staging/development.
Installation
Add this line to your application's Gemfile:
gem 'anonymous'And then execute:
$ bundle
Usage
Usage With ActiveRecord
To use this gem in your ActiveRecord models you need to do two things.
- Include the
Anonymous::ActiveRecordmodule in your model - Define a private method
anonymization_definitionswith the anonymization definitions inside it.
class User < ApplicationRecord
include Anonymous::ActiveRecord
private
def anonymization_definitions
{
name: ["Bob Dylan", "Tony Blair"].sample,
email: -> (user_email) { "fake_#{user_email}" },
phone_number: -> (phone) { phone[0..-4] + 3.times.map{rand(10)}.join },
}
end
endThe return value of anonymization_definitions should be a Hash where the keys
are the names of the attribute to be anonymized and the values are either a
Proc object or the value to be filled in for the anonymized attribute.
If you use a proc or lambda as the argument then the attribute value will be provided to you in the proc's first argument. This is useful when you want your anonymized value to be a transformation of the original.
It is recommended that you use this gem in conjunction with a fake data generation library like faker.
def anonymization_definitions
{
first_name: Faker::Name.first_name,
email: Faker::Internet.unique.email,
}
endThen when you have set up the gem correctly you can call anonymize and
anonymize! on the model.
user = User.create(
name: "John Smith",
email: "john.smith@example.com",
phone_number: "+447875477389"
)
user.anonymize! # or user.anonymize
user.reload
user.email
=> "fake_john.smith@example.com"
user.name
=> "Bob Dylan"
user.phone_number
=> "+447875477412"The only difference between anonymize! and anonymize is that the former
calls update_attributes! and the latter calls update_attributes.
Configuration
You can configure the gem to alter the anonymisation behaviour.
# config/initializers/anonymous.rb
Anonymous.configure do |config|
config.max_anonymize_retries = 0
endConfiguration Options
- max_anonymize_retries Under some situations (like if an RecordNotUnique error is raised when updating) the gem will retry the anonymization process. By default it will only do this once.
Development
After checking out the repo, run bin/setup to install dependencies. Then, run
bundle exec rake appraisal spec to run the tests. You can also run
bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install.
To release a new version, update the version number in version.rb, then run
bundle install and bundle exec appraisal install, and finally run bundle exec rake release, which will create a git tag for the version, push git
commits and tags, and push the .gem file to
rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/jamesstonehill/anonymous.
Some ideas for feature contributions:
- Support for ORMs other than ActiveRecord.
- More comprehensive retry functionality in Anonymous::ActiveRecord. A the moment we only retry if we get an ActiveRecord::RecordNotUnique unique error. I didn't want to blindly rescue all errors, but it seems like that there are other times we would want to retry.
License
The gem is available as open source under the terms of the MIT License.