-
Notifications
You must be signed in to change notification settings - Fork 76
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: support calling save multiple times #249
base: master
Are you sure you want to change the base?
Conversation
38e8c41
to
d7bfcc2
Compare
FWIW trailing whitespace keeps getting trimmed automatically by my IDE because of the |
Whitespaces are not that bad in the diffs. But is there a way to let Travis check the failing test commit alone? Would be good to see the failing test there before merging the solution. I think cherry picking and force updating made it skip/forget about commit 9bfde5c |
It is pretty easy to see by running the test locally. There has also been an open issue about it for nearly a year. But sure, I'll push a revert commit (218c8cd) just so you can see it on CI. Error message appears as:
|
Thanks, this just makes it easier to review without having to run things locally. |
The part of this fix that I really don't like are these 2 lines: It does seem to work, but I suspect there is a cleaner, if not easier, way to do this. |
You could kind of unwrap var data = this._recordToData(store, type, snapshot);
data.rev = records[Object.keys(records)[0]][0].rev;
return this.get('db').rel.save(this.getRecordTypeName(type), data); But that still introduces double code and keeps the You could make a new version of |
Another way to do it is to use |
Hmmm, re-entering the save of ember-data itself feels really dangerous, and might even infinite loop? |
The |
218c8cd
to
241d9c7
Compare
This commit changes how ember-pouch implements `Adapter.createRecord`, which is invoked after calling `.save()` on a new record, so that it does not create multiple records if `.save()` is called more than once before the first operation has finished. If `.save()` is only invoked once before the record has finished persisting to the DB (i.e. the promise that it returns has resolved) then the behavior is unchanged. However, subsequent calls will wait for the previously returned promise to resolve and then, if changes have been made to the record, as indicated by Snapshot#changedAttributes, it will delegate the task to `updateRecord`. To avoid a problem caused by ember-data changing the ID associated with the internalModel/record when the record has finished persisting, the `Adapter.generateIdForRecord` method has been implemented so that the ID is available immediately. Previously ember-pouch had still been generating this id during `createRecord`, but ember-data was not being made aware of this until its returned promise resolved. Also, rather than rely on `adapter.db.rel.uuid()` to generate an RFC4122 v4 UUID (requiring initialization to have completed), this has been replaced by the equivalent `uuid` module from npm, and the ember-auto-import addon has been installed to make it easy to access this from within ember-pouch. Finally, the `engines` section of package.json has been updated to align with ember-auto-import's minimum version of 6.x BREAKING CHANGE: drop node 4.x support (and 6.x/7.x not tested by CI)
241d9c7
to
7c238ff
Compare
Any objections to merging this? It seems to work, and I'm not planning to make more changes unless requested. |
Thanks for all your work on this, @jacobq, I’m sorry it’s gone stale. I’m updating an old application and have run into some of these errors. For now I’ve been sticking with an old Ember Data but eventually I’ll face updating that and will be checking out your proposed solution, as my initial experiment produced a huge number of |
You're welcome & no worries! FWIW, I feel like my FOSS life has entirely gone stale -- been overwhelmed by other aspects of life for the past couple years. Good luck & thanks for picking this up again. I ended up using |
This is adapted from #249, I’m just pushing to see if it fixes the problems in the application I’m updating.
Cherry-picked from #246