Class: Reading::Parsing::Parser
Overview
Parses a string containing a row of a CSV reading log, into a hash mirroring the structure of the row. This hash is an intermediate form and not the final item data. It’s the raw material for Parsing::Transformer to generate the final item data.
Below is an example intermediate hash parsed from this row, which has a Rating column, then a Head column containing an author, title, series, and extra info:
3|📕Thomas More - Utopia – trans. Robert Adams – ed. George Logan – in Cambridge History of Political Thought
{
rating: { number: "1" },
head: [{
author: "Thomas More",
title: "Utopia",
series_names: ["Cambridge History of Political Thought"],
series_volumes: [nil],
extra_info: ["trans. Robert Adams", "ed. George Logan"],
format: :print,
}]
}
The hash’s top-level keys are column names. The nested keys come from regex capture group names in each column (for this example, see ::regexes in rating.rb and head.rb in parsing/rows/regular_columns).
All the rest is just details of how the parts of a column are joined:
-
The :head value is an array because Head.split_by_format? is true (because a Head column can potentially contain multiple items). That’s also where { format: :print } comes from.
-
The :series_names and :series_volumes values are arrays because these keys are in Head.flatten_into_arrays, which causes the column’s segments (separated by “ – ”) to be merged into one hash.
Instance Method Summary collapse
-
#parse_row_to_intermediate_hash(string) ⇒ Hash
Parses a row string into a hash that mirrors the structure of the row.
Instance Method Details
#parse_row_to_intermediate_hash(string) ⇒ Hash
Parses a row string into a hash that mirrors the structure of the row.
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/reading/parsing/parser.rb', line 52 def parse_row_to_intermediate_hash(string) columns = extract_columns(string) if Config.hash.fetch(:skip_compact_planned) && columns.has_key?(Rows::CompactPlanned::Head) return {} end columns.map { |column, column_string| parse_column(column, column_string) }.to_h end |