Skip to content

Commit

Permalink
issue-218: use erb formatter instead of regex
Browse files Browse the repository at this point in the history
  • Loading branch information
¨caiovelp¨ committed Jan 8, 2025
1 parent 14086d3 commit 657c0e3
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 50 deletions.
65 changes: 18 additions & 47 deletions app/helpers/assertions_pdf_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,38 +4,21 @@
module AssertionsPdfHelper
include AssertionHelperConcern

def mask_cpf(cpf)
cpf.gsub(/(\d{3})(\d{3})(\d{3})(\d{2})/, '\1.\2.\3-\4')
def format_text(bindings, template)
formatter = ErbFormatter.new(bindings)
formatter.format(template)
end

def format_date(date)
I18n.l(date, format: :long, locale: :'pt-BR')
end

def replace_placeholders(template, values, records = [])
template = template.dup
values.each do |key, value|
template.gsub!("<%= var('#{key}') %>", value.to_s)
end

record_template = template.scan(/<% records.each do \|record\| %>(.*?)<% end %>/m).flatten.first
unless record_template.nil?
record_text = records.map do |record|
record_content = record_template.dup
record.each do |key, value|
record_content.gsub!("<%= record['#{key}'] %>", value.to_s)
end
record_content
end.join("")
template.gsub!(/<% records.each do \|record\| %>.*?<% end %>/m, record_text)
def find_unique_columns(columns, rows)
columns.select do |column|
rows.all? { |row| row[columns.index(column)] == rows.first[columns.index(column)] }
end

template
end

def assertion_box_text_print(pdf, template, values, records = [], box_width, box_height)
def assertion_box_text_print(pdf, template, bindings, box_width, box_height)
pdf.move_down 30
text = replace_placeholders(template, values, records)

text = format_text(bindings, template)

lines = pdf.text_box text, at: [(pdf.bounds.width - box_width) / 2, pdf.cursor], width: box_width, height: box_height, align: :justify, inline_format: true, dry_run: true

Expand All @@ -57,31 +40,19 @@ def assertion_table(pdf, options = {})
rows = results[:rows]
columns = results[:columns]

# Identifica registros com colunas com valores idênticos para cada linha
unique_columns = columns.select do |column|
rows.all? { |row| row[columns.index(column)] == rows.first[columns.index(column)] }
end

# Recupera os valores únicos para as colunas identificadas
values = unique_columns.index_with do |column|
rows.first[columns.index(column)]
end
values['cpf_aluno'] = mask_cpf(values['cpf_aluno']) if values.key?('cpf_aluno')
values['data'] = format_date(Date.parse(values['data'])) if values.key?('data')

# Prepara os registros para impressão excluindo as colunas identificadas como únicas
records = rows.each_with_index.map do |row, index|
record = { 'counter' => (index + 1).to_s }
columns.each do |column|
next if unique_columns.include?(column)
record[column] = row[columns.index(column)]
end
record
if results[:rows].size == 1
bindings = {}.merge(Hash[columns.zip(rows.first)])
else
unique_columns = find_unique_columns(columns, rows)
bindings = {
rows: rows,
columns: columns
}.merge(Hash[unique_columns.zip(rows.first.values_at(*unique_columns.map { |col| columns.index(col) }))])
end

box_width = 500
box_height = 560

assertion_box_text_print(pdf, template, values, records, box_width, box_height)
assertion_box_text_print(pdf, template, bindings, box_width, box_height)
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def up
VALUES (
'Declaração de participante externo em defesa de tese',
#{query_id},
'A quem possa interessar, Declaramos que o professor <%= var(''nome_professor'') %> participou da banca de defesa da dissertação de <%= var(''nivel_aluno'') %> de <%= var(''nome_aluno'') %>, no dia <%= var(''data'') %>.',
'A quem possa interessar, declaramos que o professor(a) <%= var('nome_professor') %> participou da banca de defesa da dissertação de <%= var('nivel_aluno') %> de <%= var('nome_aluno') %>, no dia <%= localize(var('data'),:longdate) %>.',
CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def up
VALUES (
'Declaração da ata de defesa',
#{query_id},
'Declaro, para os devidos fins, que a Banca Examinadora da Defesa de Dissertação de Mestrado intitulada “<%= var(''titulo_tese'') %>”, apresentada pelo aluno <%= var(''nome_aluno'') %>, no dia <%= var(''data'') %>, no no Instituto de Computação da Universidade Federal Fluminense, foi composta pelos seguintes membros:
'Declaro, para os devidos fins, que a Banca Examinadora da Defesa de Dissertação de Mestrado intitulada “<%= var('titulo_tese') %>”, apresentada pelo aluno <%= var('nome_aluno') %>, no dia <%= localize(var('data'), :longdate) %>, no $REPLACE_UNIVERSITY, foi composta pelos seguintes membros:
<% records.each do |record| %>
- Prof. <%= record[''nome_professor''] %>, <%= record[''codigo_instituicao''] %>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ def up
'DECLARAÇÃO - Disciplinas de aluno avulso',
'SELECT
s.name as nome_aluno,
s.cpf as cpf_aluno,
c.name as nome_disciplina,
c.workload as carga_horaria,
cs.year as ano_disciplina,
Expand Down

0 comments on commit 657c0e3

Please sign in to comment.