class Roqua::CsvExport::CsvExportQuestionnaireVersion
Used to write a single csv file for one export_version of one questionnaire.
Attributes
Public Class Methods
@param export_version_key
[String] used to build directory name. @param export_version_mapping
[Array<Hash>] Information on each column for the csv file in order. @param config [Config] @see ExportVersions#[]
ExportsVersions for format of mapping.
# File lib/roqua/csv_export/csv_export_questionnaire_version.rb, line 42 def initialize(export_version_key, export_version_mapping:, config:) @config = config @export_version_key = export_version_key @export_version_mapping = export_version_mapping end
Creates new object with given params and calls open
on it. @return [CsvExportQuestionnaireVersion]
# File lib/roqua/csv_export/csv_export_questionnaire_version.rb, line 32 def self.open(*args) self.new(*args).tap do |questionnaire_version| questionnaire_version.open end end
For each version in export_versions, call {.open}, yield the instances and {#close} them.
@yield [questionnaire_versions] @yieldparam version [Array<CsvExportQuestionnaireVersion>] @return [void]
# File lib/roqua/csv_export/csv_export_questionnaire_version.rb, line 14 def self.with_versions_for(questionnaire_key, config) versions = config.export_versions.keys.map do |export_version_key| open export_version_key, export_version_mapping: config.export_versions.mapping_for(questionnaire_key, export_version_key), config: config end.compact yield versions ensure versions&.each do |version| version.close end end
Public Instance Methods
close the file. @return [void]
# File lib/roqua/csv_export/csv_export_questionnaire_version.rb, line 66 def close file.close end
opens file to write and writes headers to it. @return [void]
# File lib/roqua/csv_export/csv_export_questionnaire_version.rb, line 50 def open `mkdir -p #{export_version_path}` @file = CSV.open(csv_path, "w", col_sep: ';', force_quotes: true) @file << export_version_mapping.map { |column| column['header'] } end
write the respomse to the file in the format of export_version @param response [Models::Response]
# File lib/roqua/csv_export/csv_export_questionnaire_version.rb, line 58 def write_response(response) file << export_version_mapping \ .map { |column| get_value(column, response) } .map { |value| format(value) } end
Private Instance Methods
# File lib/roqua/csv_export/csv_export_questionnaire_version.rb, line 80 def csv_path # find questionnaire key for the export_version (should be added explicitly to export_version json) path_key = export_version_mapping.find{ |m| m['key'] == 'completed_at'}['header'][0..-14] export_version_path.join("#{path_key}_#{Time.now.strftime("%Y-%m-%d")}.csv") end
# File lib/roqua/csv_export/csv_export_questionnaire_version.rb, line 76 def export_version_path config.output_path.join("#{config.organization_key}_#{export_version_key}") end
# File lib/roqua/csv_export/csv_export_questionnaire_version.rb, line 96 def format(value) case value when Time, Date, DateTime value.strftime("%d-%m-%Y %H:%M:%S") when Hash value.to_json when String value.tr("\r\n", ' ') else value end end
# File lib/roqua/csv_export/csv_export_questionnaire_version.rb, line 86 def get_value(column, response) case column['source_type'] when 'metadata' then MetaData.send(column['key'], response) when 'variable' then response.variable(column['key']) when 'score' then response.score(column['key'], column['sub_key']) when 'flag' then response.flag(column['key']) == '1' ? 'true' : '' when 'textvar' then response.textvar(column['key']) end end