From 16e113553f568d0758ec5ed9a829034335625f8c Mon Sep 17 00:00:00 2001 From: Ryan Tomayko Date: Tue, 3 Dec 2013 11:42:35 -0800 Subject: [PATCH 1/2] Avoid writing blob field if no attributes change --- lib/serializable_attributes/schema.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/serializable_attributes/schema.rb b/lib/serializable_attributes/schema.rb index 1fee055..5acd941 100644 --- a/lib/serializable_attributes/schema.rb +++ b/lib/serializable_attributes/schema.rb @@ -130,7 +130,9 @@ def reload(options = nil) @model.before_save do |r| schema = r.class.send("#{data_field}_schema") - r.send("#{blob_field}=", schema.encode(r.send(data_field))) + if r.send(blob_field).nil? || !r.send(changed_ivar).empty? + r.send("#{blob_field}=", schema.encode(r.send(data_field))) + end end end From 405569b40f0809605af5448f70f0f680d576e725 Mon Sep 17 00:00:00 2001 From: Ryan Tomayko Date: Tue, 3 Dec 2013 12:00:44 -0800 Subject: [PATCH 2/2] Fix test by forcing a change Without changing an actual attribute, the blob column isn't rewritten so force a change to keep this test kosher. --- test/serialized_attributes_test.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/test/serialized_attributes_test.rb b/test/serialized_attributes_test.rb index f864862..18f6899 100644 --- a/test/serialized_attributes_test.rb +++ b/test/serialized_attributes_test.rb @@ -101,6 +101,7 @@ def @record.title=(v) test "ignores data with extra keys" do @record.raw_data = self.class.format.encode(self.class.raw_hash.merge(:foo => :bar)) assert_not_nil @record.title # no undefined foo= error + @record.title = "changed" # force a change / rewrite assert_equal false, @record.save # extra before_save cancels the operation assert_equal self.class.raw_hash.merge(:active => 1).stringify_keys.keys.sort, self.class.format.decode(@record.raw_data).keys.sort end