Merge branch 'master' into 499-admin-wildcard-search

This commit is contained in:
Thiago Youssef 2022-04-05 14:18:04 +03:00
parent f93286c2e6
commit fd6e625d25
49 changed files with 382 additions and 160 deletions

View file

@ -0,0 +1,29 @@
class CsvGenerator
class << self
def generate_csv(objects)
class_name = objects.first.class
return default_generation(objects) unless custom_csv?(class_name)
CSV.generate do |csv|
csv << class_name.csv_header
objects.each { |object| csv << object.as_csv_row }
end
end
private
def default_generation(objects)
CSV.generate do |csv|
csv << objects.column_names
objects.all.find_each { |object| csv << object.attributes.values_at(*objects.column_names) }
end
end
def custom_csv?(class_name)
[
Version::DomainVersion, Version::ContactVersion, Domain,
Contact, Invoice, Account, AccountActivity
].include?(class_name)
end
end
end

View file

@ -0,0 +1,28 @@
class ObjectVersionsParser
def initialize(version)
@version = version
end
def parse
model = @version.item_type.constantize
attributes = only_present_fields(model)
history_object = model.new(attributes)
attach_existing_fields(history_object) unless @version.event == 'destroy'
history_object
end
private
def attach_existing_fields(history_object)
@version.object_changes.to_h.each do |key, value|
method_name = "#{key}=".to_sym
history_object.public_send(method_name, value.last) if history_object.respond_to?(method_name)
end
end
def only_present_fields(model)
field_names = model.column_names
@version.object.to_h.select { |key, _value| field_names.include?(key) }
end
end