AM::MassAssingmentSecurity: improve performance #5431
Merged
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.
According to this article:
http://merbist.com/2012/02/23/quick-dive-into-ruby-orm-object-initialization/
Current implementation of mass assignment security takes a lot of processor time because spawning to many redundant objects in
MassAssignmentSecuritySanitizer#debug_protected_attribute_removal
We can get rid of this method.
Benchmark: https://gist.github.com/2036114
A little side effect of this patch attributes are processed one by one. Instead of:
We get:
The only one place where this could cause side effect is when someone wants to create it's own sanitizer(other than built-in Strict and Logger).
We can make a backward compatibility for this but decided that it doesn't make that much sense.