diff options
author | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2019-03-20 13:21:29 -0300 |
---|---|---|
committer | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2019-03-20 13:21:29 -0300 |
commit | 7028b3761ebc71db18a230b65c31de96736607bb (patch) | |
tree | 45e56004125b3abd95b06bec8d77a8671f498cf8 /lib | |
parent | 69c328a3ef4bafe7c4446f63823e87e4f15ac8b6 (diff) | |
download | gitlab-ce-7028b3761ebc71db18a230b65c31de96736607bb.tar.gz |
Gracefully handles excluded fields from attributes during serialization
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab/json_cache.rb | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/gitlab/json_cache.rb b/lib/gitlab/json_cache.rb index 24daad638f4..e4bc437d787 100644 --- a/lib/gitlab/json_cache.rb +++ b/lib/gitlab/json_cache.rb @@ -80,8 +80,23 @@ module Gitlab # when the new_record? method incorrectly returns false. # # See https://gitlab.com/gitlab-org/gitlab-ee/issues/9903#note_145329964 - attributes = klass.attributes_builder.build_from_database(raw, {}) - klass.allocate.init_with("attributes" => attributes, "new_record" => new_record?(raw, klass)) + klass + .allocate + .init_with( + "attributes" => attributes_for(klass, raw), + "new_record" => new_record?(raw, klass) + ) + end + + def attributes_for(klass, raw) + # We have models that leave out some fields from the JSON export for + # security reasons, e.g. models that include the CacheMarkdownField. + # The ActiveRecord::AttributeSet we build from raw does know about + # these columns so we need manually set them. + missing_attributes = (klass.columns.map(&:name) - raw.keys) + missing_attributes.each { |column| raw[column] = nil } + + klass.attributes_builder.build_from_database(raw, {}) end def new_record?(raw, klass) |