Sha256: 1a7bd39222e1dc7fbde52f386fbd4433cea4370816017959c8ddf4e972390731

Contents?: true

Size: 1.98 KB

Versions: 4

Compression:

Stored size: 1.98 KB

Contents

require 'csv'
require 'json'
require 'fileutils'
require 'colorize'

module Spout
  module Commands
    class Exporter
      def initialize(standard_version, argv)
        @csv_file = argv[1].to_s
        @standard_version = standard_version
        expanded_export!
      end

      private

      def expanded_export!
        folder = "dd/#{@standard_version}"
        puts "      create".colorize( :green ) + "  #{folder}"
        FileUtils.mkpath folder

        generic_export(folder, 'variables', %w(id display_name description type units domain labels calculation))
        generic_export(folder, 'domains', %w(value display_name description), true)
        generic_export(folder, 'forms', %w(id display_name code_book))
      end

      def generic_export(folder, type, keys, include_domain_name = false)
        export_file = "#{type}.csv"
        puts "      export".colorize( :blue ) + "  #{folder}/#{export_file}"
        CSV.open("#{folder}/#{export_file}", "wb") do |csv|
          if include_domain_name
            csv << ['folder', 'domain_id'] + keys
          else
            csv << ['folder'] + keys
          end
          Dir.glob("#{type}/**/*.json").sort.each do |file|
            if json = JSON.parse(File.read(file)) rescue false
              relative_folder = generic_folder_path(file, type)
              if include_domain_name
                domain_name = extract_domain_name(file)
                json.each do |hash|
                  csv << [relative_folder, domain_name] + keys.collect{|key| hash[key]}
                end
              else
                csv << [relative_folder] + keys.collect{|key| json[key].kind_of?(Array) ? json[key].join(';') : json[key].to_s}
              end
            end
          end
        end
      end

      def generic_folder_path(file, type)
        file.gsub(/#{type}\//, '').split('/')[0..-2].join('/')
      end

      def extract_domain_name(file)
        file.gsub(/domains\//, '').split('/').last.to_s.gsub(/.json/, '')
      end

    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
spout-0.9.0.beta2 lib/spout/commands/exporter.rb
spout-0.9.0.beta1 lib/spout/commands/exporter.rb
spout-0.8.0 lib/spout/commands/exporter.rb
spout-0.8.0.rc5 lib/spout/commands/exporter.rb