Commit Graph

61 Commits

Author SHA1 Message Date
Dylan Knutson
8f610b8fa7 allow redefinition of methods 2025-07-26 00:37:14 +00:00
Dylan Knutson
6df1fe8053 remove demo_functionality 2025-07-25 17:19:22 -07:00
Dylan Knutson
4249329fa3 tests for has_many 2025-07-24 05:22:55 +00:00
Dylan Knutson
ad8ae7945b tests for has_one & belongs_to custom foreign keys 2025-07-24 05:19:46 +00:00
Dylan Knutson
59b11c336f query by association values 2025-07-24 04:04:08 +00:00
Dylan Knutson
a4c9c597e3 .not chained queries 2025-07-23 23:08:46 +00:00
Dylan Knutson
fb7912e353 spec for habtm counter cache 2025-07-21 16:58:58 +00:00
Dylan Knutson
025cbd3f5c more tests for join counter caches 2025-07-21 16:45:50 +00:00
Dylan Knutson
e234b48e7f counter cache 2025-07-21 06:29:39 +00:00
Dylan Knutson
3a8d71e2f7 cache bundle install at devcontainer build step 2025-07-21 05:22:10 +00:00
Dylan Knutson
8854dddb4a counter cache support 2025-07-20 17:56:08 +00:00
Dylan Knutson
198ab946d7 refactor devcontainer for simpler ruby install 2025-07-20 17:53:09 +00:00
Dylan Knutson
6ba5a70bb5 *_attribute methods take String or Symbol 2025-07-19 05:13:14 +00:00
Dylan Knutson
42d3ce97d9 association reloading 2025-07-19 00:14:56 +00:00
Dylan Knutson
a526fb54f1 enums 2025-07-18 21:57:22 +00:00
Dylan Knutson
04f6f78730 set associations on aux records 2025-07-18 19:36:46 +00:00
Dylan Knutson
ea33ffbb11 changed, changed_attributes 2025-07-18 17:49:26 +00:00
Dylan Knutson
5cdede91ec #new without any parameters 2025-07-18 17:41:23 +00:00
Dylan Knutson
5f502b4f6f typing for migration 2025-07-18 17:27:52 +00:00
Dylan Knutson
26ad0e3ea3 allow reloading of models 2025-07-18 16:40:18 +00:00
Dylan Knutson
5cf9cfbc81 remove const_defined? check 2025-07-18 16:33:08 +00:00
Dylan Knutson
40fca92530 add sorbet-runtime 2025-07-18 06:18:11 +00:00
Dylan Knutson
8e1c193801 spec refactor 2025-07-18 05:51:24 +00:00
Dylan Knutson
ca9eae138a relax ancestor requirements 2025-07-18 05:31:42 +00:00
Dylan Knutson
3a80c2b8dd refactor more logic into AuxTableConfig 2025-07-18 05:27:38 +00:00
Dylan Knutson
d112d8b72d attributes 2025-07-17 22:03:47 +00:00
Dylan Knutson
d83d6833ad find_by through collection proxy 2025-07-17 21:52:59 +00:00
Dylan Knutson
d3d459da95 unscoped can take a block 2025-07-17 21:41:16 +00:00
Dylan Knutson
d6792cebeb loading through base class 2025-07-17 21:19:06 +00:00
Dylan Knutson
b5a4332a1d invoke initialize blocks 2025-07-17 20:59:39 +00:00
Dylan Knutson
296134af52 refactor methods 2025-07-17 20:54:45 +00:00
Dylan Knutson
502b9cb5fe inspect attributes 2025-07-17 18:27:57 +00:00
Dylan Knutson
f3990e2654 namespaced model support 2025-07-16 18:31:28 +00:00
Dylan Knutson
fe0f7b9bbe more typing 2025-07-16 18:23:35 +00:00
Dylan Knutson
331af0683e update gemspec with repo 2025-07-16 16:41:16 +00:00
Dylan Knutson
19d96dfebe update tapioca, more type annotations 2025-07-16 16:24:35 +00:00
Dylan Knutson
fda95fb33f more rspec 2025-07-15 07:22:38 +00:00
Dylan Knutson
239afcbadb fix specs, use relation hooks 2025-07-15 06:21:10 +00:00
Dylan Knutson
fd91328334 more wip before breaking everything 2025-07-15 04:11:54 +00:00
Dylan Knutson
5f358abae6 checkpoint before breaking things 2025-07-15 03:50:34 +00:00
Dylan Knutson
9f73c0d364 ActiveRecord::AuxTable -> HasAuxTable 2025-07-14 17:32:58 +00:00
Dylan Knutson
81ec3d2902 use migration helpers in spec 2025-07-14 17:13:58 +00:00
Dylan Knutson
c870eef9bc migration extension helpers 2025-07-14 17:08:22 +00:00
Dylan Knutson
4933e63f31 fix model saving 2025-07-14 07:36:50 +00:00
Dylan Knutson
30b017906f more ar hacking 2025-07-14 05:44:01 +00:00
Dylan Knutson
bb5c22b070 lefthook ignore vscode dir 2025-07-14 05:41:49 +00:00
Dylan Knutson
a09465ac54 Replace includes with eager_load for optimal single-query performance
- Replace all includes() with eager_load() in find, find_by, and where methods
- eager_load forces single LEFT OUTER JOIN queries instead of potential N+1 queries
- Update test expectations to validate single query performance
- All query methods now use optimized single queries:
  * Car.find(id) - 1 query with full JOIN
  * Car.find_by(fuel_type: 'hybrid') - 1 query with full JOIN
  * Car.where(fuel_type: 'hybrid') - 1 query with full JOIN
  * Chained where() queries - 1 query with full JOIN

Performance improvements:
- Eliminated N+1 queries for find and find_by methods
- Consistent single-query behavior across all query methods
- Proper association loading with eager_load vs includes
- All 58 tests passing with optimal performance
2025-07-13 06:23:07 +00:00
Dylan Knutson
4f41b66f85 Improve query performance with includes and add comprehensive performance tests
- Replace left_joins with includes in auto-join queries for better performance
- Remove complex after_initialize callback since includes handles association loading
- Add automatic includes to find method for consistent behavior
- Add comprehensive performance tests with query counting
- Fix Sorbet type checking by adding ActiveSupport::Notifications to todo.rbi

Performance improvements:
- where() queries now use single query with includes
- N+1 queries avoided for multiple record loading
- All query methods (find, find_by, where) now optimized
2025-07-13 06:17:00 +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