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 |