Class: Ddr::Index::CSVQueryResult
- Inherits:
-
AbstractQueryResult
- Object
- AbstractQueryResult
- Ddr::Index::CSVQueryResult
- 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 =
";"
- DEFAULT_CSV_OPTIONS =
{ headers: :first_row, return_headers: false, write_headers: true, converters: [ # convert semicolons lambda { |f| f.gsub(/\\#{CSV_MV_SEPARATOR}/, CSV_MV_SEPARATOR) rescue f }, # convert escaped newlines lambda { |f| f.gsub(/\\r/, "\r").gsub(/\\n/, "\n") rescue f } ], }.freeze
Instance Attribute Summary collapse
-
#csv_opts ⇒ Object
readonly
Returns the value of attribute csv_opts.
Attributes inherited from AbstractQueryResult
Instance Method Summary collapse
- #[](index_or_header) ⇒ Object
- #data ⇒ Object
- #delete_empty_columns! ⇒ Object
- #each(&block) ⇒ Object
-
#initialize(query, csv_opts: {}) ⇒ CSVQueryResult
constructor
See Ruby docs on CSV::new for details on available keys and values for the optional `csv_options' Hash parameter.
- #query_field_headings ⇒ Object
- #solr_csv_header? ⇒ Boolean
- #solr_csv_opts ⇒ Object
- #solr_csv_params ⇒ Object
- #solr_csv_rows ⇒ Object
- #solr_data ⇒ Object
- #table ⇒ Object
Methods inherited from AbstractQueryResult
Constructor Details
#initialize(query, csv_opts: {}) ⇒ CSVQueryResult
See Ruby docs on CSV::new for details on available keys and values for the optional `csv_options' Hash parameter.
N.B. If you want to add a converter and retain the default converters, append DEFAULT_CSV_OPTIONS to your Array of converters.
33 34 35 36 |
# File 'lib/ddr/index/csv_query_result.rb', line 33 def initialize(query, csv_opts: {}) super(query) @csv_opts = DEFAULT_CSV_OPTIONS.merge(csv_opts) end |
Instance Attribute Details
#csv_opts ⇒ Object (readonly)
Returns the value of attribute csv_opts.
23 24 25 |
# File 'lib/ddr/index/csv_query_result.rb', line 23 def csv_opts @csv_opts end |
Instance Method Details
#[](index_or_header) ⇒ Object
46 47 48 |
# File 'lib/ddr/index/csv_query_result.rb', line 46 def [](index_or_header) table.by_col_or_row![index_or_header] end |
#data ⇒ Object
78 79 80 81 82 83 84 |
# File 'lib/ddr/index/csv_query_result.rb', line 78 def data if solr_csv_header? solr_data else [ query_field_headings.join(","), solr_data ].join("\n") end end |
#delete_empty_columns! ⇒ Object
38 39 40 |
# File 'lib/ddr/index/csv_query_result.rb', line 38 def delete_empty_columns! table.by_col!.delete_if { |c, vals| vals.all?(&:nil?) } end |
#each(&block) ⇒ Object
42 43 44 |
# File 'lib/ddr/index/csv_query_result.rb', line 42 def each(&block) table.by_row!.each(&block) end |
#query_field_headings ⇒ Object
62 63 64 |
# File 'lib/ddr/index/csv_query_result.rb', line 62 def query_field_headings query.fields.map { |f| f.respond_to?(:heading) ? f.heading : f.to_s } end |
#solr_csv_header? ⇒ Boolean
66 67 68 |
# File 'lib/ddr/index/csv_query_result.rb', line 66 def solr_csv_header? query.fields.empty? end |
#solr_csv_opts ⇒ Object
54 55 56 57 58 59 60 |
# File 'lib/ddr/index/csv_query_result.rb', line 54 def solr_csv_opts { "csv.mv.separator" => CSV_MV_SEPARATOR, "csv.header" => solr_csv_header?, "rows" => solr_csv_rows, "wt" => "csv", } end |
#solr_csv_params ⇒ Object
74 75 76 |
# File 'lib/ddr/index/csv_query_result.rb', line 74 def solr_csv_params params.merge(solr_csv_opts) end |
#solr_csv_rows ⇒ Object
70 71 72 |
# File 'lib/ddr/index/csv_query_result.rb', line 70 def solr_csv_rows query.rows || MAX_ROWS end |
#solr_data ⇒ Object
86 87 88 |
# File 'lib/ddr/index/csv_query_result.rb', line 86 def solr_data Connection.get("select", params: solr_csv_params) end |
#table ⇒ Object
50 51 52 |
# File 'lib/ddr/index/csv_query_result.rb', line 50 def table @table ||= CSV.parse(data, csv_opts) end |