toasterlovin/csv_party

View on GitHub
TODO.md

Summary

Maintainability
Test Coverage
# TODO

## 1.0
- ~~Finish documenting DSL spec in DSL.md~~
- ~~Split tests out into separate files~~
- ~~Columns~~
  - ~~Names & headers (revised header name behavior)~~
  - ~~Raw parser (verify behavior)~~
  - ~~String parser (verify behavior)~~
  - ~~Integer parser (handle negative values)~~
  - ~~Decimal parser (handle negative values)~~
  - ~~Allow accounting negative notation for integer & decimal~~
  - ~~Boolean parser (whitelist negative values; return nil for everythign else)~~
  - ~~Date parser (implement)~~
  - ~~Time parser (implement)~~
  - ~~Think about what to do with invalid date/time values~~
  - ~~Update error messages to reflect additional parsers~~
  - ~~Custom parser blocks (verify behavior)~~
  - ~~Custom named parsers (verify behavior)~~
  - ~~Reserved column names (verify behavior)~~
  - ~~Parsing `nil` and `blank` values (verify behavior)~~
- ~~Importing~~
  - ~~Rows (verify that error is thrown on missing processor)~~
  - ~~Files (verify behavior + raise error if `import_rows!` is not called)~~
  - ~~Errors (`:ignore` option, raise if unspecified, don't capture parsing errors from CSV library)~~
  - ~~Dependencies (MissingDependency error should happen on import, not instantiation)~~
  - ~~All validations should happen at import time, not instantiation time~~
  - ~~Add row number as attribute on row struct~~
- ~~Flow Control~~
  - ~~Next row (implement new behavior)~~
  - ~~Skip row (implement new behavior)~~
  - ~~Abort row (implement new behavior)~~
  - ~~Abort import (rework API; return `false` on `importer.import!`)~~
- ~~CSV Improvements~~
  - ~~Accept file path string~~
  - ~~Accept `IO` object~~
  - ~~Accept CSV string~~
  - ~~Raise error if invalid CSV file path is assigned~~
  - ~~Raise error if invalid CSV object is assigned~~
  - ~~Provide access to `defined_columns`, `present_columns`, and `missing_columns` so missing columns can be reported to users~~
  - ~~Accept options for underlying `CSV` object~~
  - ~~Raise error on unexpected CSV options~~
  - ~~Raise error on unexpected options~~
  - ~~Improve API for assigning CSV files/path/content~~
  - ~~Test that different encodings work~~
- ~~Verify usage of Struct~~
- ~~Investigate using catch/throw where appropriate~~
- ~~Improve test organization~~
  - ~~Move associated importer classes and CSV files into same file as test.~~
- ~~Get to 100% test coverage~~
- ~~Add test helper file~~
- Refactor
  - ~~Extract Configuration class~~
  - ~~Extract Importer class~~
  - ~~Disable post-instantiation CSV assignment~~
  - ~~Extract DataPreparer class~~
  - ~~Switch to composition instead of inheritance~~
  - Use classes instead of structs
  - Add test for files with no header on first row
- Include alternate column headings for missing column header error message
- Allow flow control methods to work in methods defined on importer class
- Check argument types on all public methods
- Investigate improving error messages on NoMethodErrors inside of import/rows/errors/etc. blocks
- Verify that all public API methods are tested
- Add DSL method for skipping importing rows (for conditions where that is not desired)
- ~~Add license~~
- Documentation
  - Re-enable class documentation cop
  - Document classes
  - Revamp README.md
  - Add CHANGELOG.md
  - Flesh out advanced usage in Wiki
    - Testing
    - User specified column names
    - Reporting missing columns to user
    - Automatically determining file encoding
    - Low memory usage
    - Downloads of skipped/aborted/errored rows
  - Blog post + video showing best practices in a Rails app