class Polo::Translator
Public Class Methods
new(selects, configuration=Configuration.new)
click to toggle source
Public: Creates a new Polo::Collector
selects - An array of SELECT queries
# File lib/polo/translator.rb, line 11 def initialize(selects, configuration=Configuration.new) @selects = selects @configuration = configuration end
Public Instance Methods
instances()
click to toggle source
# File lib/polo/translator.rb, line 22 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
translate()
click to toggle source
Public: Translates SELECT queries into INSERTS.
# File lib/polo/translator.rb, line 18 def translate SqlTranslator.new(instances, @configuration).to_sql.uniq end
Private Instance Methods
field_name(field)
click to toggle source
# File lib/polo/translator.rb, line 56 def field_name(field) field.to_s.include?('.') ? field.split('.').last : field.to_s end
intersection(attrs, fields)
click to toggle source
# File lib/polo/translator.rb, line 64 def intersection(attrs, fields) attrs & fields.map { |pair| field_name(pair.first) } end
new_field_value(field, strategy, instance)
click to toggle source
# File lib/polo/translator.rb, line 68 def new_field_value(field, strategy, instance) value = instance.attributes[field] if strategy.nil? value.split("").shuffle.join else strategy.arity == 1 ? strategy.call(value) : strategy.call(value, instance) end end
obfuscate!(instances, fields)
click to toggle source
# File lib/polo/translator.rb, line 36 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 && instance.attributes[field] instance.send("#{field}=", new_field_value(field, strategy, instance)) end end end end
table_name(field)
click to toggle source
# File lib/polo/translator.rb, line 60 def table_name(field) field.to_s.include?('.') ? field.split('.').first : nil end