Version 0.021 - 2024-05-02
- Use ->table_search_results->{...}{row} instead of {row_idx}
- Allow initializing TableReader 'fields' attribute with Field objects
(had only been allowing strings and hashrefs)
- Decoder::Mock now correctly handles empty tables (no rows)
Version 0.020 - 2024-04-30
- Rename on_validation_fail -> on_validation_error
The action codes are the same, but the callback has different arguments.
Old callbacks applied using the attribute name 'on_validation_fail' will
continue to work.
- New iterator attribute 'dataset_idx', for keeping track of which dataset
you're on.
- Unimplemented Iterator->seek now dies as per the documentation.
(no built-in iterator lacked support for seek, so unlikely to matter)
Version 0.015 - 2024-04-27
- Better support for fields sharing name, with Field->addr (refaddr) and
TableReader->field_by_addr
- Decoder iterators now have ->row attribute
- Spreadsheet decoder ->position includes sheet number and now uses
1-based row number (as originally intended)
- Results of find_table are stored in table_search_results for better
inspection and reporting on a failure. This allows detection messages
to be associated with a row, and various conflicts to be associated with
a column (without parsing message text).
- On a failed find_table, user can inspect the attempts in
table_search_results->{candidates} and select one to be ->{found}, and
then proceed to create the iterator.
- col_map is now a full attribute and can be specified in the constructor.
find_table starts with the user-supplied value and tries to fill in any
'undef' values in that array.
- New settings on_partial_match, on_ambiguous_columns, and modified
official values of on_unknown_columns. These provide better control
over what counts as an error and whether to continue the search.
Version 0.014 - 2024-03-25
- Fix compatibility with newest Spreadsheet::ParseXLSX
Version 0.013 - 2024-03-22
- Fix bug in unit tests causing failure when MRO::Compat not installed
Version 0.012 - 2024-03-07
- Field now has 'coerce' attribute which can be a coderef, or enable
Type::Tiny coercion.
- TableReader 'input' attribute can now be an arrayref, as a shorthand
for the 'Mock' decoder.
- Improved unit tests
Version 0.011 - 2019-06-27
- Allow per-field 'trim' value to be a regex or coderef
- Change dist version-munger to Dist::Zilla::Plugin::OurPkgVersion
- Exclude ::Decoder::HTML files from getting shipped with main dist
Version 0.010 - 2019-01-02
- Fix several bugs related to multi-line headers
- Also allow 'input' to be a Spreadsheet::ParseExcel::Workbook
- Auto-detection support for ::Decoder::HTML companion module
Version 0.008 - 2018-11-28
- 'input' attribute may now be a Spreadsheet::ParseExcel::Worksheet
- When specifying 'decoder' attribute as an arrayref or hashref,
the CLASS argument is now optional, allowing auto-detection while
still supplying extre optional attributes for the decoder.
- Wrokaround for Libre Office row-max bug
- New Decoder::XLSX attribute 'xls_formatter', useful for casting
local datetimes to a known time zone.
- Prevent loading Text::CSV_XS if its version is too old.
Version 0.007 - 2018-03-15
- Fix various bugs in detect_input_format relevant to CSV files
- Enhanced debug-level logging during the table search algorighm
Version 0.006 - 2018-03-08
- Auto-detect CSV Unicode format by looking for BOM, unless handle
already has an IO layer to specify encoding.
- Improved logging, and logging API. 'log' attribute is no longer public
on Decoder objects.
Version 0.005 - 2017-11-26
- Remove 'filters' feature since it adds overhead and not much value
- Fix bug when creating multiple parallel record iterators
- Sanitize data headers written in logging messages
Version 0.004 - 2017-11-26
- Re-add Text::CSV as a hard dependency since it's small and I need a recent
version for all the tests to pass.
Version 0.003 - 2017-11-25
- Remove hard dependencies on CSV and Excel parsers
- Use new "Mock" decoder for format-independent test cases
- Fix handling of $TableReader->log to match API description
- Fix bugs to be compatible back to 5.8.9
Version 0.002 - 2017-11-24
- Fixed 'filters' feature
- Iterators of decoders are now created on each call, rather than cached
- Many documentation improvements
Version 0.001 - 2017-11-24
- Initial public version