Sha256: 6a1e0ff36129ee19074a16405a0c182fe14f4bd02154340bad8562b3485c6016

Contents?: true

Size: 1.4 KB

Versions: 16

Compression:

Stored size: 1.4 KB

Contents

require "csv"

module Ddr::Index
  class CSVQueryResult < AbstractQueryResult

    MAX_ROWS         = 10**8 # Just set to a really high number :)
    CSV_MV_SEPARATOR = ";"

    delegate :headers, :to_s, :to_csv, to: :table

    def delete_empty_columns!
      table.by_col!.delete_if { |c, vals| vals.all?(&:nil?) }
    end

    def each(&block)
      table.by_row!.each(&block)
    end

    def [](index_or_header)
      table.by_col_or_row![index_or_header]
    end

    def table
      @table ||= CSV.parse(data, csv_opts)
    end

    def csv_opts
      { headers:        csv_headers,
        return_headers: false,
        write_headers:  true,
      }
    end

    def solr_csv_opts
      { "csv.mv.separator" => CSV_MV_SEPARATOR,
        "csv.header"       => solr_csv_header?,
        "rows"             => solr_csv_rows,
        "wt"               => "csv",
      }
    end

    def query_field_headings
      query.fields.map { |f| f.respond_to?(:heading) ? f.heading : f.to_s }
    end

    def csv_headers
      query.fields.empty? ? :first_row : query_field_headings
    end

    def solr_csv_header?
      csv_headers == :first_row
    end

    def solr_csv_rows
      query.rows || MAX_ROWS
    end

    def solr_csv_params
      params.merge(solr_csv_opts)
    end

    def data
      raw = Connection.get("select", params: solr_csv_params)
      raw.gsub(/\\#{CSV_MV_SEPARATOR}/, CSV_MV_SEPARATOR)
    end

  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
ddr-models-2.6.2 lib/ddr/index/csv_query_result.rb
ddr-models-2.6.1 lib/ddr/index/csv_query_result.rb
ddr-models-2.6.0 lib/ddr/index/csv_query_result.rb
ddr-models-2.6.0.rc4 lib/ddr/index/csv_query_result.rb
ddr-models-2.6.0.rc3 lib/ddr/index/csv_query_result.rb
ddr-models-2.6.0.rc2 lib/ddr/index/csv_query_result.rb
ddr-models-2.6.0.rc1 lib/ddr/index/csv_query_result.rb
ddr-models-2.5.3 lib/ddr/index/csv_query_result.rb
ddr-models-2.5.2 lib/ddr/index/csv_query_result.rb
ddr-models-2.5.1 lib/ddr/index/csv_query_result.rb
ddr-models-2.5.0 lib/ddr/index/csv_query_result.rb
ddr-models-2.5.0.rc1 lib/ddr/index/csv_query_result.rb
ddr-models-2.4.16 lib/ddr/index/csv_query_result.rb
ddr-models-2.4.15 lib/ddr/index/csv_query_result.rb
ddr-models-2.4.14 lib/ddr/index/csv_query_result.rb
ddr-models-2.4.13 lib/ddr/index/csv_query_result.rb