fix: Remove ActiveRecord::Dirty to preserve nested document changes on save#12
Merged
fix: Remove ActiveRecord::Dirty to preserve nested document changes on save#12
Conversation
NB : in AR, the cast is done at assignment time. Lets try to do it.
TODO : fix move casting stuff from serialize and place them in cast obviously
And keep unchanged the serialize_value needed for queries (ie find_by_some_time)
f4ae61b to
3d71024
Compare
- Remove double casting in create_setters to avoid type inconsistencies - Fix Timestamp type precision by applying floor() during cast - Fix DateTimeWith3Decimal precision handling in both cast and serialize 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Collaborator
Author
|
Thanks to Claude, we get a green inplem according to CI. Let's check in Docto CI that this implem is not breaking smth. |
There was a problem hiding this comment.
Pull Request Overview
This PR removes ActiveRecord::Dirty usage to fix a bug where nested resource changes were being reset on save operations. The change replaces the ActiveRecord::Dirty dependency with a custom implementation to handle change tracking properly for nested resources.
- Removes
ActiveModel::Dirtyinclusion and replaces with customChangeablemodule - Modifies
changes_appliedmethod to prevent unwanted change resets - Adds test coverage for the nested resource change preservation bug
Reviewed Changes
Copilot reviewed 5 out of 6 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| lib/couchbase-orm/base.rb | Removes ActiveModel::Dirty inclusion, keeping only custom Changeable module |
| lib/couchbase-orm/changeable.rb | Removes call to super in changes_applied to prevent change resets |
| lib/couchbase-orm/types/timestamp.rb | Adds .floor calls to timestamp casting for consistency |
| spec/type_spec.rb | Adds cast method to DateTimeWith3Decimal test class |
| spec/type_nested_spec.rb | Adds test cases to verify nested resource changes are preserved after save |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
When modifying nested documents and calling
save(), changes were incorrectly reset, causing data loss. This happened becauseActiveRecord::Dirty'schanges_appliedcallback cleared attribute changes prematurely.Reproduction:
Solution
Remove dependency on
ActiveRecord::Dirtyand implement custom change tracking that properly handles nested documents.What changed:
ActiveRecord::Dirtyinclusion from Document base classsupercall inchanges_appliedto prevent premature change clearingchanged?,changes, etc.) through custom implementationBenefits:
Testing
Breaking Changes
ActiveRecord::Dirtyas a dependency.Impact Analysis:
changed?,changes,changed_attributes, etc.) remains functional through custom implementationActiveRecord::Dirty-specific internals (private methods, modules) may breakRecommendation: Review your codebase for any direct usage of
ActiveRecord::Dirtyinternals before upgrading.Checklist
Related