9 Commits

Author SHA1 Message Date
Dylan Knutson
9f73c0d364 ActiveRecord::AuxTable -> HasAuxTable 2025-07-14 17:32:58 +00:00
Dylan Knutson
fc6fd71e60 feat: Completely rewrite query extensions for simplicity and maintainability
- Researched how established Rails gems (Paranoia, Kaminari) handle AR extensions
- Eliminated Thread.current hacks, complex recursion prevention, and method aliasing
- Implemented clean prepend patterns with proper delegation to super()
- Automatic behavior maintained since users explicitly opt-in with aux_table
- All query methods work seamlessly: find, find_by, where, chained where
- Proper error handling for unknown columns
- All 47 tests pass including 19 query extension tests
- No Sorbet type errors
- Code is now readable, maintainable, and follows Rails conventions

Breaking changes: None - all existing functionality preserved
Performance: Improved due to simpler, more direct implementation
2025-07-13 06:03:03 +00:00
Dylan Knutson
f8b9b847e5 Extract query extensions into separate module and fix infinite recursion
- Extract setup_query_extensions and related methods to new QueryExtensions module
- Reduce main aux_table.rb file from 537 to 335 lines (202 lines removed)
- Create lib/active_record/aux_table/query_extensions.rb with RelationMethods
- Fix infinite recursion bug by using super() calls and disabling aux processing on joined relations
- All 47 tests pass and no Sorbet type errors
- Improve code organization and maintainability
- Complete task-19 with all acceptance criteria met

Closes: task-19
2025-07-13 05:02:20 +00:00
Dylan Knutson
cde0896e98 Fix query extensions and test failures
- Fix chained where clauses by extending ActiveRecord::Relation objects with auxiliary table support
- Fix nil value queries by using LEFT JOIN instead of INNER JOIN
- Fix non-existent column error handling by forcing query execution
- All 47 tests now pass, no regressions
- Sorbet typechecker passes with no errors
- Update backlog tasks to reflect completed work
2025-07-13 04:48:46 +00:00
Dylan Knutson
4e576d2a59 aux attribute 2025-07-13 04:13:39 +00:00
Dylan Knutson
e1c1e03e74 api without block syntax 2025-07-13 03:36:29 +00:00
Dylan Knutson
af97998393 integration tests 2025-07-13 03:22:23 +00:00
Dylan Knutson
a9d315d993 feat: implement auxiliary model class generator (Task 3)
- Add generate_aux_model_class method to dynamically create ActiveRecord models
- Generated models extend ActiveRecord::Base with proper table name configuration
- Add belongs_to association back to STI parent class with correct foreign key
- Add model_class attribute to Configuration class for storing generated model reference
- Integrate model generation into aux_table DSL method
- Add fallback simple class for test environments without full ActiveRecord
- Add comprehensive test suite covering model generation functionality
- Support proper constant creation and conflict detection
- All 33 tests passing with appropriate skipping for test environment

This completes Task 3: auxiliary model classes are now dynamically generated
when aux_table is called, providing the foundation for ActiveRecord associations.
2025-07-13 02:25:19 +00:00
Dylan Knutson
164f16b048 fix: use POSIX-compliant shell syntax in json-lint hook 2025-07-13 02:02:26 +00:00