Sha256: c43e9f0caf20968d808aee672267b4b24a486382133409ce0e6a87c7035f5b61
Contents?: true
Size: 1.61 KB
Versions: 1
Compression:
Stored size: 1.61 KB
Contents
# (c) 2017 Ribose Inc. # module AttrMasker module Performer class ActiveRecord def mask unless defined? ::ActiveRecord raise AttrMasker::Error, "ActiveRecord undefined. Nothing to do!" end # Do not want production environment to be masked! # if Rails.env.production? raise AttrMasker::Error, "Attempted to run in production environment." end all_models.each do |klass| next if klass.masker_attributes.empty? mask_class(klass) end end private def mask_class(klass) progressbar_for_model(klass) do |bar| klass.all.each do |model| mask_object model bar.increment end end end # For each masker attribute, mask it, and save it! # def mask_object(instance) klass = instance.class updates = klass.masker_attributes.reduce({}) do |acc, masker_attr| attr_name = masker_attr[0] column_name = masker_attr[1][:column_name] || attr_name masker_value = instance.mask(attr_name) acc.merge!(column_name => masker_value) end klass.all.update(instance.id, updates) end def progressbar_for_model(klass) bar = ProgressBar.create( title: klass.name, total: klass.count, throttle_rate: 0.1, format: %q[%t %c/%C (%j%%) %B %E], ) yield bar ensure bar.finish end def all_models ::ActiveRecord::Base.descendants.select(&:table_exists?) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
attr_masker-0.1.0 | lib/attr_masker/performer.rb |