Sha256: 88c35193357339fd201e3c8d56f993efaecef44777658d0ea9e1bbfc8ae90a87
Contents?: true
Size: 1.79 KB
Versions: 1
Compression:
Stored size: 1.79 KB
Contents
require "polo/sql_translator" require "polo/configuration" module Polo class Translator # Public: Creates a new Polo::Collector # # selects - An array of SELECT queries # def initialize(selects, configuration=Configuration.new) @selects = selects @configuration = configuration end # Public: Translates SELECT queries into INSERTS. # def translate SqlTranslator.new(instances, @configuration).to_sql.uniq end def instances active_record_instances = @selects.flat_map do |select| select[:klass].find_by_sql(select[:sql]).to_a end if fields = @configuration.blacklist obfuscate!(active_record_instances, fields) end active_record_instances end private def obfuscate!(instances, fields) instances.each do |instance| next if intersection(instance.attributes.keys, fields).empty? fields.each do |field, strategy| field = field.to_s if table = table_name(field) field = field_name(field) end correct_table = table.nil? || instance.class.table_name == table if correct_table && value = instance.attributes[field] instance.send("#{field}=", new_field_value(field, strategy, value)) end end end end def field_name(field) field.to_s.include?('.') ? field.split('.').last : field.to_s end def table_name(field) field.to_s.include?('.') ? field.split('.').first : nil end def intersection(attrs, fields) attrs & fields.map { |pair| field_name(pair.first) } end def new_field_value(field, strategy, value) if strategy.nil? value.split("").shuffle.join else strategy.call(value) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
polo-0.3.0 | lib/polo/translator.rb |