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