Я предлагаю это решение, поскольку Алексей отвечает, я думаю, вы потеряете некоторую читабельность.
module DownloadReportHelper
class << self
def pdf_file_name(report)
report_date = report.created_at.strftime("%y-%m-%d")
contract_name = report.activities[0].contract.name.gsub("/", "_")
[ contract_name, report_date, report.reference.to_s ].join('_')
end
def generate_public_and_internal_pdf(report, current_company)
FileUtils.mkdir_p( "tmp/pdf/#{dirname(report, current_company)}" )
[ generate_public_pdf(report, current_company), generate_internal_pdf(report, current_company) ]
end
def generate_public_pdf(report, current_company)
@pdf_type = :public
@pdf_instance = ReportPdf.new(current_company, report, [])
generate_file(report, current_company)
end
def generate_internal_pdf(report, current_company)
@pdf_type = :internal
@pdf_instance = ReportPdf.new(current_company, report, [], "internal")
generate_file(report, current_company)
end
private
def generate_file(report, current_company)
@pdf_instance.generate_file(filepath(report, current_company))
"#{Rails.root}/tmp/pdf/#{filepath(report, current_company)}"
end
def dirname(report, current_company)
"#{current_company.subdomain}/reports/#{report.reference}"
end
def filepath(report, current_company)
attachement_name = pdf_file_name(report)
if @pdf_type == :internal
attachement_name = attachement_name + '_internal'
end
"#{dirname(report, current_company)}/#{attachement_name}.pdf"
end
end
end
Если вам на самом деле не нужны generate_public_pdf
и generate_internal_pdf
для вызова из класса, а просто вспомогательные функции для generate_public_and_internal_pdf
, тогда вы можете также сделать переменные класса report
и current_company
и увеличить читаемость.
Решение зависит от того, как вы собираетесь использовать код.