class Roqua::CsvExport::ExportVersions
Reads json files with export_version info and caches them.
Public Class Methods
new(mapping_files_directory_path)
click to toggle source
# File lib/roqua/csv_export/export_versions.rb, line 7 def initialize(mapping_files_directory_path) @base_dir = mapping_files_directory_path @export_versions = {} end
Public Instance Methods
[](key)
click to toggle source
Returns column information for specified version for each variable in each questionnaire.
Each column_hash looks like:
{"key": "tot", "sub_key": "other", "header": "all_quests_tot_o", "source_type": "score"}
Where header is the header within the csv file.
@return [Hash] !{“fields” => {“oq45” => [{column_hash}, …}}
# File lib/roqua/csv_export/export_versions.rb, line 22 def [](key) @export_versions[key] ||= ::JSON.parse(File.read(File.join(@base_dir, "#{key}.json"))) end
dig(key, *keys)
click to toggle source
# File lib/roqua/csv_export/export_versions.rb, line 26 def dig(key, *keys) self[key].dig(*keys) end
keys()
click to toggle source
@return [Array<String>] all the available versions, sorted oldest first.
# File lib/roqua/csv_export/export_versions.rb, line 31 def keys Dir["#{@base_dir}/*.json"].map {|f| File.basename(f, File.extname(f)) }.sort end
mapping_for(questionnaire_key, export_version_key)
click to toggle source
Returns mapping for the questionnaire. First tries given export_version_key, but if the questonnaires wasn't defined then yet, it finds the first export_version that did define it. @return [Array<Hash>] @see []
# File lib/roqua/csv_export/export_versions.rb, line 40 def mapping_for(questionnaire_key, export_version_key) dig(export_version_key, 'fields', questionnaire_key) \ || keys.lazy .reject { |key| key <= export_version_key } .map { |key| dig(key, 'fields', questionnaire_key) } .reject(&:nil?) .first end