TODO.md
# 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