module Roqua::CsvExport
Constants
- DB
- VERSION
Public Class Methods
generate(**attrs)
click to toggle source
Generate te export files. When done, output_path will contain a directory for each export_version. Each directory will contain csv file for each questionnare. @see Config#initialize Config
for list of attributes
# File lib/roqua/csv_export.rb, line 24 def self.generate(**attrs) require 'csv' require 'json' config = Config.new(**attrs) load_db(DB, config.sqlite_path) create_indexes FileUtils.mkdir_p config.output_path do_export config.export_versions, config end
Private Class Methods
create_indexes()
click to toggle source
# File lib/roqua/csv_export.rb, line 49 def self.create_indexes Sequel.extension :migration Sequel.migration do change do alter_table(:responses) do add_index :questionnaire_key end end end end
do_export(export_versions, config)
click to toggle source
# File lib/roqua/csv_export.rb, line 64 def self.do_export(export_versions, config) questionnaire_keys.each do |questionnaire_key| responses = CsvExport::Models::Response \ .eager(:dossier, :team, :entered_by, :respondent, :response_values, :response_flags, :response_textvars, :team, measurement: :protocol) .where(questionnaire_key: questionnaire_key) .order(:id) CsvExportQuestionnaireVersion.with_versions_for(questionnaire_key, config) do |versions| responses.paged_each do |response| versions.each do |version| version.write_response(response) end end end end end
load_db(db, path)
click to toggle source
# File lib/roqua/csv_export.rb, line 37 def self.load_db(db, path) source = SQLite3::Database.new(path.to_s) db.synchronize do |memory_db| backup = SQLite3::Backup.new(memory_db, 'main', source, 'main') backup.step(-1) backup.finish end ensure source.close end
questionnaire_keys()
click to toggle source
# File lib/roqua/csv_export.rb, line 60 def self.questionnaire_keys Models::Response.distinct.select_map(:questionnaire_key) end