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