From aa32a48adb8fb06d2098215b08bfc0e9e4b182cd Mon Sep 17 00:00:00 2001 From: ErickFabian Date: Wed, 14 Apr 2021 12:14:06 -0500 Subject: [PATCH 1/4] Fix issue with nil properties not being set and passing hash with string keys issue --- lib/dolly/document_state.rb | 2 +- lib/dolly/property_manager.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/dolly/document_state.rb b/lib/dolly/document_state.rb index 3bb1ca2..f5ad5fc 100644 --- a/lib/dolly/document_state.rb +++ b/lib/dolly/document_state.rb @@ -17,7 +17,7 @@ def save! end def update_properties(properties) - properties.each(&update_attribute) + properties.deep_symbolize_keys.each(&update_attribute) end def update_properties!(properties) diff --git a/lib/dolly/property_manager.rb b/lib/dolly/property_manager.rb index ad04bbe..c9eb54f 100644 --- a/lib/dolly/property_manager.rb +++ b/lib/dolly/property_manager.rb @@ -20,11 +20,11 @@ def update_attribute def write_attribute key, value value = set_property_value(key, value) instance_variable_set(:"@#{key}", value) - update_doc(key, value) unless value.nil? + update_doc(key, value) end def valid_property?(name) - properties.include? name + properties.include?(name) end def update_doc(key, value) From 7f14080d2b7fd5b91c90c07ee075a3161fb225e8 Mon Sep 17 00:00:00 2001 From: ErickFabian Date: Wed, 14 Apr 2021 12:18:56 -0500 Subject: [PATCH 2/4] Remove non related issue --- lib/dolly/document_state.rb | 2 +- lib/dolly/property_manager.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/dolly/document_state.rb b/lib/dolly/document_state.rb index f5ad5fc..3bb1ca2 100644 --- a/lib/dolly/document_state.rb +++ b/lib/dolly/document_state.rb @@ -17,7 +17,7 @@ def save! end def update_properties(properties) - properties.deep_symbolize_keys.each(&update_attribute) + properties.each(&update_attribute) end def update_properties!(properties) diff --git a/lib/dolly/property_manager.rb b/lib/dolly/property_manager.rb index c9eb54f..df2b379 100644 --- a/lib/dolly/property_manager.rb +++ b/lib/dolly/property_manager.rb @@ -17,7 +17,7 @@ def update_attribute end end - def write_attribute key, value + def write_attribute(key, value) value = set_property_value(key, value) instance_variable_set(:"@#{key}", value) update_doc(key, value) From da259fb9ab093e082b63d45e7f4ade4bd18e7393 Mon Sep 17 00:00:00 2001 From: ErickFabian Date: Mon, 10 May 2021 13:37:39 -0500 Subject: [PATCH 3/4] Add spec for write_attributes with nil --- test/property_manager_test.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 test/property_manager_test.rb diff --git a/test/property_manager_test.rb b/test/property_manager_test.rb new file mode 100644 index 0000000..90300af --- /dev/null +++ b/test/property_manager_test.rb @@ -0,0 +1,14 @@ +require 'test_helper' + +class TestDoc < Dolly::Document + property :name, class_name: String +end + +class PropertyManagerTest < Test::Unit::TestCase + test 'write_attribute with nil value' do + doc = TestDoc.new(name: 'name') + assert_equal(doc.name, 'name') + doc.update_properties(name: nil) + assert_equal(doc.name, nil) + end +end From 5aadf265c1470c3e508afbded1fbe631d2fd1bdb Mon Sep 17 00:00:00 2001 From: ErickFabian Date: Tue, 11 May 2021 09:13:54 -0500 Subject: [PATCH 4/4] Make property manager test more robust --- test/property_manager_test.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/property_manager_test.rb b/test/property_manager_test.rb index 90300af..e71526f 100644 --- a/test/property_manager_test.rb +++ b/test/property_manager_test.rb @@ -2,13 +2,17 @@ class TestDoc < Dolly::Document property :name, class_name: String + property :email, class_name: String + property :last_name, class_name: String end class PropertyManagerTest < Test::Unit::TestCase test 'write_attribute with nil value' do - doc = TestDoc.new(name: 'name') + doc = TestDoc.new(name: 'name', last_name: nil, email: 'does not change') assert_equal(doc.name, 'name') doc.update_properties(name: nil) assert_equal(doc.name, nil) + assert_equal(doc.last_name, nil) + assert_equal(doc.email, 'does not change') end end