Class: Ddr::Index::CSVQueryResult

Inherits:
AbstractQueryResult show all
Defined in:
lib/ddr/index/csv_query_result.rb

Constant Summary collapse

MAX_ROWS =

Just set to a really high number :)

10**8
CSV_MV_SEPARATOR =
";"

Instance Attribute Summary

Attributes inherited from AbstractQueryResult

#query

Instance Method Summary collapse

Methods inherited from AbstractQueryResult

#count, #initialize

Constructor Details

This class inherits a constructor from Ddr::Index::AbstractQueryResult

Instance Method Details

#[](index_or_header) ⇒ Object



19
20
21
# File 'lib/ddr/index/csv_query_result.rb', line 19

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

#convert_escaped_newlinesObject



71
72
73
# File 'lib/ddr/index/csv_query_result.rb', line 71

def convert_escaped_newlines
  lambda { |f| f.gsub(/\\r/, "\r").gsub(/\\n/, "\n") rescue f }
end

#convert_semicolonsObject



67
68
69
# File 'lib/ddr/index/csv_query_result.rb', line 67

def convert_semicolons
  lambda { |f| f.gsub(/\\#{CSV_MV_SEPARATOR}/, CSV_MV_SEPARATOR) rescue f }
end

#csv_headersObject



47
48
49
# File 'lib/ddr/index/csv_query_result.rb', line 47

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

#csv_optsObject



27
28
29
30
31
32
33
# File 'lib/ddr/index/csv_query_result.rb', line 27

def csv_opts
  { headers:        csv_headers,
    converters:     [convert_semicolons, convert_escaped_newlines],
    return_headers: false,
    write_headers:  true,
  }
end

#dataObject



63
64
65
# File 'lib/ddr/index/csv_query_result.rb', line 63

def data
  Connection.get("select", params: solr_csv_params)
end

#delete_empty_columns!Object



11
12
13
# File 'lib/ddr/index/csv_query_result.rb', line 11

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

#each(&block) ⇒ Object



15
16
17
# File 'lib/ddr/index/csv_query_result.rb', line 15

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

#query_field_headingsObject



43
44
45
# File 'lib/ddr/index/csv_query_result.rb', line 43

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

#solr_csv_header?Boolean

Returns:

  • (Boolean)


51
52
53
# File 'lib/ddr/index/csv_query_result.rb', line 51

def solr_csv_header?
  csv_headers == :first_row
end

#solr_csv_optsObject



35
36
37
38
39
40
41
# File 'lib/ddr/index/csv_query_result.rb', line 35

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

#solr_csv_paramsObject



59
60
61
# File 'lib/ddr/index/csv_query_result.rb', line 59

def solr_csv_params
  params.merge(solr_csv_opts)
end

#solr_csv_rowsObject



55
56
57
# File 'lib/ddr/index/csv_query_result.rb', line 55

def solr_csv_rows
  query.rows || MAX_ROWS
end

#tableObject



23
24
25
# File 'lib/ddr/index/csv_query_result.rb', line 23

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